public static void endRender() { if (isShadowPass) { return; } glPushMatrix(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); // composite glDisable(GL_BLEND); useProgram(ProgramComposite); glDrawBuffers(dfbDrawBuffers); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(0)); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(1)); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(2)); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(3)); if (colorAttachments >= 5) { glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(4)); if (colorAttachments >= 6) { glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(5)); if (colorAttachments >= 7) { glActiveTexture(GL_TEXTURE6); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(6)); } } } if (shadowPassInterval > 0) { glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D, sfbDepthTexture); } glActiveTexture(GL_TEXTURE0); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 1.0f, 0.0f); glEnd(); // final glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); useProgram(ProgramFinal); glClearColor(clearColor[0], clearColor[1], clearColor[2], 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(0)); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(1)); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(2)); glActiveTexture(GL_TEXTURE3); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(3)); if (colorAttachments >= 5) { glActiveTexture(GL_TEXTURE4); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(4)); if (colorAttachments >= 6) { glActiveTexture(GL_TEXTURE5); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(5)); if (colorAttachments >= 7) { glActiveTexture(GL_TEXTURE6); glBindTexture(GL_TEXTURE_2D, dfbTextures.get(6)); } } } if (shadowPassInterval > 0) { glActiveTexture(GL_TEXTURE7); glBindTexture(GL_TEXTURE_2D, sfbDepthTexture); } glActiveTexture(GL_TEXTURE0); glColor4f(1.0f, 1.0f, 1.0f, 1.0f); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 0.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 1.0f, 0.0f); glEnd(); glEnable(GL_BLEND); glPopMatrix(); useProgram(ProgramNone); }
public static void setCamera(float f) { EntityLiving viewEntity = mc.renderViewEntity; double x = viewEntity.lastTickPosX + (viewEntity.posX - viewEntity.lastTickPosX) * f; double y = viewEntity.lastTickPosY + (viewEntity.posY - viewEntity.lastTickPosY) * f; double z = viewEntity.lastTickPosZ + (viewEntity.posZ - viewEntity.lastTickPosZ) * f; if (isShadowPass) { glViewport(0, 0, shadowMapWidth, shadowMapHeight); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (shadowMapIsOrtho) { glOrtho( -shadowMapHalfPlane, shadowMapHalfPlane, -shadowMapHalfPlane, shadowMapHalfPlane, 0.05f, 256.0f); } else { // just backwards compatibility. it's only used when SHADOWFOV is set in the shaders. gluPerspective( shadowMapFOV, (float) shadowMapWidth / (float) shadowMapHeight, 0.05f, 256.0f); } glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0f, 0.0f, -100.0f); glRotatef(90.0f, 1.0f, 0.0f, 0.0f); float angle = -mc.theWorld.getCelestialAngle(f) * 360.0f; if (angle < -90.0 && angle > -270.0) { // night time glRotatef(angle + 180.0f, 0.0f, 0.0f, 1.0f); } else { // day time glRotatef(angle, 0.0f, 0.0f, 1.0f); } if (shadowMapIsOrtho) { // reduces jitter glTranslatef((float) x % 5.0f, (float) y % 5.0f, (float) z % 5.0f); } shadowProjection = BufferUtils.createFloatBuffer(16); glGetFloat(GL_PROJECTION_MATRIX, shadowProjection); shadowProjectionInverse = invertMat4x(shadowProjection); shadowModelView = BufferUtils.createFloatBuffer(16); glGetFloat(GL_MODELVIEW_MATRIX, shadowModelView); shadowModelViewInverse = invertMat4x(shadowModelView); return; } previousProjection = projection; projection = BufferUtils.createFloatBuffer(16); glGetFloat(GL_PROJECTION_MATRIX, projection); projectionInverse = invertMat4x(projection); previousModelView = modelView; modelView = BufferUtils.createFloatBuffer(16); glGetFloat(GL_MODELVIEW_MATRIX, modelView); modelViewInverse = invertMat4x(modelView); previousCameraPosition[0] = cameraPosition[0]; previousCameraPosition[1] = cameraPosition[1]; previousCameraPosition[2] = cameraPosition[2]; cameraPosition[0] = x; cameraPosition[1] = y; cameraPosition[2] = z; }