Beispiel #1
0
 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);
 }