package com.xcompwiz.lookingglass.client.render; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.Tessellator; import org.lwjgl.opengl.EXTFramebufferObject; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class RenderUtils { @SideOnly(Side.CLIENT) public final static void renderWorldToTexture(float renderTime, int framebuffer, int width, int height) { if (framebuffer == 0) return; Minecraft mc = Minecraft.getMinecraft(); if (mc.skipRenderWorld) return; EntityRenderer entityRenderer = mc.entityRenderer; //Backup current render settings int heightBackup = mc.displayHeight; int widthBackup = mc.displayWidth; int thirdPersonBackup = mc.gameSettings.thirdPersonView; boolean hideGuiBackup = mc.gameSettings.hideGUI; int particleBackup = mc.gameSettings.particleSetting; boolean anaglyphBackup = mc.gameSettings.anaglyph; int renderDistanceBackup = mc.gameSettings.renderDistanceChunks; float FOVbackup = mc.gameSettings.fovSetting; //Render world try { //Set all of the render setting to work on the proxy world mc.displayHeight = height; mc.displayWidth = width; //TODO: params (FOV, Particle setting, renderDistance) mc.gameSettings.thirdPersonView = 0; mc.gameSettings.hideGUI = true; //mc.gameSettings.particleSetting = ; mc.gameSettings.anaglyph = false; //mc.gameSettings.renderDistanceChunks = ; //mc.gameSettings.fovSetting = ; //Set gl options GL11.glViewport(0, 0, mc.displayWidth, mc.displayHeight); GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, framebuffer); GL11.glClearColor(1.0f, 0.0f, 0.0f, 0.5f); GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); int i1 = mc.gameSettings.limitFramerate; if (mc.isFramerateLimitBelowMax()) { entityRenderer.renderWorld(renderTime, (1000000000 / i1)); } else { entityRenderer.renderWorld(renderTime, 0L); } } catch (Exception e) { try { //Clean up the tessellator, just in case. Tessellator.instance.draw(); } catch (Exception e2) { //It might throw an exception, but that just means we didn't need to clean it up (this time) } throw new RuntimeException("Error while rendering proxy world", e); } finally { GL11.glEnable(GL11.GL_TEXTURE_2D); EXTFramebufferObject.glBindFramebufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, 0); GL11.glViewport(0, 0, widthBackup, heightBackup); GL11.glLoadIdentity(); mc.gameSettings.thirdPersonView = thirdPersonBackup; mc.gameSettings.hideGUI = hideGuiBackup; mc.gameSettings.particleSetting = particleBackup; mc.gameSettings.anaglyph = anaglyphBackup; mc.gameSettings.renderDistanceChunks = renderDistanceBackup; mc.gameSettings.fovSetting = FOVbackup; mc.displayHeight = heightBackup; mc.displayWidth = widthBackup; } } }