public static void useProgram(int program) { if (activeProgram == program) { return; } else if (isShadowPass) { activeProgram = ProgramNone; glUseProgramObjectARB(programs[ProgramNone]); return; } activeProgram = program; glUseProgramObjectARB(programs[program]); if (programs[program] == 0) { activeProgram = ProgramNone; return; } else if (program == ProgramTextured) { setProgramUniform1i("texture", 0); } else if (program == ProgramTexturedLit || program == ProgramHand || program == ProgramWeather) { setProgramUniform1i("texture", 0); setProgramUniform1i("lightmap", 1); } else if (program == ProgramTerrain || program == ProgramWater) { setProgramUniform1i("texture", 0); setProgramUniform1i("lightmap", 1); setProgramUniform1i("normals", 2); setProgramUniform1i("specular", 3); } else if (program == ProgramComposite || program == ProgramFinal) { setProgramUniform1i("gcolor", 0); setProgramUniform1i("gdepth", 1); setProgramUniform1i("gnormal", 2); setProgramUniform1i("composite", 3); setProgramUniform1i("gaux1", 4); setProgramUniform1i("gaux2", 5); setProgramUniform1i("gaux3", 6); setProgramUniform1i("shadow", 7); setProgramUniformMatrix4ARB("gbufferPreviousProjection", false, previousProjection); setProgramUniformMatrix4ARB("gbufferProjection", false, projection); setProgramUniformMatrix4ARB("gbufferProjectionInverse", false, projectionInverse); setProgramUniformMatrix4ARB("gbufferPreviousModelView", false, previousModelView); if (shadowPassInterval > 0) { setProgramUniformMatrix4ARB("shadowProjection", false, shadowProjection); setProgramUniformMatrix4ARB("shadowProjectionInverse", false, shadowProjectionInverse); setProgramUniformMatrix4ARB("shadowModelView", false, shadowModelView); setProgramUniformMatrix4ARB("shadowModelViewInverse", false, shadowModelViewInverse); } } ItemStack stack = mc.thePlayer.inventory.getCurrentItem(); setProgramUniform1i("heldItemId", (stack == null ? -1 : stack.itemID)); setProgramUniform1i( "heldBlockLightValue", (stack == null || stack.itemID >= 256 ? 0 : Block.lightValue[stack.itemID])); setProgramUniform1i("fogMode", (fogEnabled ? glGetInteger(GL_FOG_MODE) : 0)); setProgramUniform1i("worldTime", (int) (mc.theWorld.getWorldTime() % 24000L)); setProgramUniform1f("aspectRatio", (float) renderWidth / (float) renderHeight); setProgramUniform1f("viewWidth", (float) renderWidth); setProgramUniform1f("viewHeight", (float) renderHeight); setProgramUniform1f("near", 0.05F); setProgramUniform1f("far", 256 >> mc.gameSettings.renderDistance); setProgramUniform3f("sunPosition", sunPosition[0], sunPosition[1], sunPosition[2]); setProgramUniform3f("moonPosition", moonPosition[0], moonPosition[1], moonPosition[2]); setProgramUniform3f( "previousCameraPosition", (float) previousCameraPosition[0], (float) previousCameraPosition[1], (float) previousCameraPosition[2]); setProgramUniform3f( "cameraPosition", (float) cameraPosition[0], (float) cameraPosition[1], (float) cameraPosition[2]); setProgramUniformMatrix4ARB("gbufferModelView", false, modelView); setProgramUniformMatrix4ARB("gbufferModelViewInverse", false, modelViewInverse); }