package com.prupe.mcpatcher.ctm; import com.prupe.mcpatcher.BlendMethod; import com.prupe.mcpatcher.MCLogger; import com.prupe.mcpatcher.TexturePackAPI; import com.prupe.mcpatcher.TexturePackChangeHandler; import com.prupe.mcpatcher.ctm.RenderPass$1; import com.prupe.mcpatcher.ctm.RenderPass$2; import net.minecraft.src.Block; import net.minecraft.src.EntityLivingBase; import net.minecraft.src.EntityRenderer; import net.minecraft.src.IBlockAccess; import net.minecraft.src.RenderGlobal; import net.minecraft.src.ResourceLocation; import org.lwjgl.opengl.GL11; public class RenderPass { private static final MCLogger logger = MCLogger.getLogger("Better Glass"); private static final ResourceLocation RENDERPASS_PROPERTIES = TexturePackAPI.newMCPatcherResourceLocation("renderpass.properties"); private static final int[] baseRenderPass = new int[Block.blocksList.length]; private static final int[] extraRenderPass = new int[Block.blocksList.length]; private static BlendMethod blendMethod; private static boolean enableLightmap; private static int renderPass = -1; private static int maxRenderPass = 1; private static boolean ambientOcclusion; public static void start(int pass) { finish(); renderPass = pass; } public static void finish() { renderPass = -1; } public static boolean skipAllRenderPasses(boolean[] skipRenderPass) { return skipRenderPass[0] && skipRenderPass[1] && skipRenderPass[2] && skipRenderPass[3]; } public static int getBlockRenderPass(Block block) { return renderPass <= 2 ? baseRenderPass[block.blockID] : extraRenderPass[block.blockID]; } public static boolean canRenderInPass(Block block, int pass, boolean renderThis) { return baseRenderPass[block.blockID] < 2 && extraRenderPass[block.blockID] < 2 ? renderThis : pass == getBlockRenderPass(block); } public static boolean shouldSideBeRendered(Block block, IBlockAccess blockAccess, int i, int j, int k, int face) { return block.shouldSideBeRendered(blockAccess, i, j, k, face) ? true : extraRenderPass[blockAccess.getBlockId(i, j, k)] >= 0 && extraRenderPass[block.blockID] < 0; } public static boolean setAmbientOcclusion(boolean ambientOcclusion) { ambientOcclusion = ambientOcclusion; return ambientOcclusion; } public static float getAOBaseMultiplier(float multiplier) { return renderPass > 2 && !enableLightmap ? 1.0F : multiplier; } public static void doRenderPass(RenderGlobal renderer, EntityLivingBase camera, int pass, double partialTick) { if (pass <= maxRenderPass) { switch (pass) { case 2: GL11.glDisable(GL11.GL_CULL_FACE); renderer.sortAndRender(camera, pass, partialTick); GL11.glEnable(GL11.GL_CULL_FACE); break; case 3: GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glPolygonOffset(-2.0F, -2.0F); GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); GL11.glEnable(GL11.GL_CULL_FACE); if (ambientOcclusion) { GL11.glShadeModel(GL11.GL_SMOOTH); } blendMethod.applyBlending(); renderer.sortAndRender(camera, pass, partialTick); GL11.glPolygonOffset(0.0F, 0.0F); GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); GL11.glDisable(GL11.GL_BLEND); GL11.glShadeModel(GL11.GL_FLAT); } } } public static void enableDisableLightmap(EntityRenderer renderer, double partialTick, int pass) { if (!enableLightmap && pass == 3) { renderer.disableLightmap(partialTick); } else { renderer.enableLightmap(partialTick); } } static int access$000() { return renderPass; } static int access$102(int x0) { maxRenderPass = x0; return x0; } static int[] access$200() { return baseRenderPass; } static int[] access$300() { return extraRenderPass; } static int access$100() { return maxRenderPass; } static BlendMethod access$402(BlendMethod x0) { blendMethod = x0; return x0; } static boolean access$502(boolean x0) { enableLightmap = x0; return x0; } static ResourceLocation access$600() { return RENDERPASS_PROPERTIES; } static BlendMethod access$400() { return blendMethod; } static MCLogger access$700() { return logger; } static { RenderPassAPI.instance = new RenderPass$1(); TexturePackChangeHandler.register(new RenderPass$2("Better Glass", 4)); } }