Package com.prupe.mcpatcher.hd

Source Code of com.prupe.mcpatcher.hd.AAHelper

package com.prupe.mcpatcher.hd;

import com.prupe.mcpatcher.Config;
import com.prupe.mcpatcher.MCLogger;
import java.awt.image.BufferedImage;
import java.lang.reflect.Field;
import net.minecraft.src.Resource;
import net.minecraft.src.ResourceLocation;
import net.minecraft.src.SimpleResource;
import net.minecraft.src.TextureAtlasSprite;
import org.lwjgl.opengl.PixelFormat;

//Spout Start
import org.spoutcraft.client.config.Configuration;
//Spout End

public class AAHelper {
  private static final MCLogger logger = MCLogger.getLogger("Mipmap");
  private static final int debugColor = Config.getBoolean("Extended HD", "debugBorder", false) ? -16776961 : 0;
  private static final int aaSamples = Config.getInt("Extended HD", "antiAliasing", 1);
  private static Field addressField;

  public static PixelFormat setupPixelFormat(PixelFormat pixelFormat) {
    if (Configuration.getAASampling() > 1) {
      logger.config("setting AA samples to %d", new Object[] {Integer.valueOf(Configuration.getAASampling())});
      return pixelFormat.withSamples(Configuration.getAASampling());
    } else {
      return pixelFormat;
    }
  }

  public static BufferedImage addBorder(TextureAtlasSprite stitched, Resource resource, BufferedImage input) {
    if (input != null && resource instanceof SimpleResource && addressField != null) {
      ResourceLocation name;

      try {
        name = (ResourceLocation)addressField.get(resource);
      } catch (IllegalAccessException var14) {
        var14.printStackTrace();
        addressField = null;
        return input;
      }

      input = MipmapHelper.fixTransparency(name, input);

      if (!(stitched instanceof BorderedTexture)) {
        return input;
      } else {
        int width = input.getWidth();
        int height = input.getHeight();
        int numFrames = height / width;
        height = width;
        int border = getBorderWidth(width);
        ((BorderedTexture)stitched).setBorderWidth(border);

        if (border <= 0) {
          return input;
        } else {
          int newWidth = width + 2 * border;
          int newHeight = width + 2 * border;
          BufferedImage output = new BufferedImage(newWidth, numFrames * newHeight, 2);

          for (int frame = 0; frame < numFrames; ++frame) {
            int sy = frame * height;
            int dy = frame * newHeight;
            copyRegion(input, 0, sy, output, 0, dy, border, border, true, true);
            copyRegion(input, 0, sy, output, border, dy, width, border, false, true);
            copyRegion(input, width - border, sy, output, width + border, dy, border, border, true, true);
            copyRegion(input, 0, sy, output, 0, dy + border, border, width, true, false);
            copyRegion(input, 0, sy, output, border, dy + border, width, height, false, false);
            copyRegion(input, width - border, sy, output, width + border, dy + border, border, width, true, false);
            copyRegion(input, 0, sy + height - border, output, 0, dy + height + border, border, border, true, true);
            copyRegion(input, 0, sy + height - border, output, border, dy + height + border, width, border, false, true);
            copyRegion(input, width - border, sy + height - border, output, width + border, dy + height + border, border, border, true, true);
            addDebugOutline(output, dy, width, height, border);
          }

          return output;
        }
      }
    } else {
      return input;
    }
  }

  static boolean useAAForTexture(String texture) {
    return (Configuration.getAASampling() > 1 || MipmapHelper.anisoLevel > 1) && MipmapHelper.useMipmapsForTexture(texture);
  }

  private static int getBorderWidth(int size) {
    int border;

    if (Configuration.getAASampling() <= 1 && MipmapHelper.anisoLevel <= 1) {
      border = 0;
    } else if (MipmapHelper.mipmapEnabled && MipmapHelper.maxMipmapLevel > 0) {
      border = 1 << Math.max(Math.min(MipmapHelper.maxMipmapLevel, 4), 0);
    } else {
      border = 2;
    }

    return Math.min(border, size);
  }

  private static void copyRegion(BufferedImage input, int sx, int sy, BufferedImage output, int dx, int dy, int w, int h, boolean flipX, boolean flipY) {
    int[] rgb = new int[w * h];
    input.getRGB(sx, sy, w, h, rgb, 0, w);

    if (!flipX && !flipY) {
      output.setRGB(dx, dy, w, h, rgb, 0, w);
    } else {
      int[] rgbFlipped = new int[w * h];

      for (int i = 0; i < w; ++i) {
        for (int j = 0; j < h; ++j) {
          rgbFlipped[w * j + i] = rgb[w * (flipY ? h - 1 - j : j) + (flipX ? w - 1 - i : i)];
        }
      }

      output.setRGB(dx, dy, w, h, rgbFlipped, 0, w);
    }
  }

  private static void addDebugOutline(BufferedImage output, int dy, int width, int height, int border) {
    if (debugColor != 0) {
      int i;

      for (i = 0; i < width; ++i) {
        output.setRGB(i + border, dy + border, debugColor);
        output.setRGB(i + border, dy + height + border, debugColor);
      }

      for (i = 0; i < height; ++i) {
        output.setRGB(border, dy + i + border, debugColor);
        output.setRGB(height + border, dy + i + border, debugColor);
      }
    }
  }

  static {
    Field[] arr$ = SimpleResource.class.getDeclaredFields();
    int len$ = arr$.length;

    for (int i$ = 0; i$ < len$; ++i$) {
      Field f = arr$[i$];

      if (ResourceLocation.class.isAssignableFrom(f.getType())) {
        f.setAccessible(true);
        addressField = f;
        break;
      }
    }
  }
}
TOP

Related Classes of com.prupe.mcpatcher.hd.AAHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.