EnvironmentMapRenderer.java 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package eu.tankernn.gameEngine.environmentMap;
  2. import org.lwjgl.opengl.Display;
  3. import org.lwjgl.opengl.GL11;
  4. import org.lwjgl.opengl.GL13;
  5. import org.lwjgl.opengl.GL14;
  6. import org.lwjgl.opengl.GL30;
  7. import org.lwjgl.util.vector.Vector3f;
  8. import eu.tankernn.gameEngine.loader.textures.Texture;
  9. import eu.tankernn.gameEngine.renderEngine.MasterRenderer;
  10. import eu.tankernn.gameEngine.renderEngine.Scene;
  11. public class EnvironmentMapRenderer {
  12. public static void renderEnvironmentMap(Texture cubeMap, Scene scene, Vector3f center, MasterRenderer renderer) {
  13. CubeMapCamera camera = new CubeMapCamera(center);
  14. int fbo = GL30.glGenFramebuffers();
  15. GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, fbo);
  16. GL11.glDrawBuffer(GL30.GL_COLOR_ATTACHMENT0);
  17. int depthBuffer = GL30.glGenRenderbuffers();
  18. GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, depthBuffer);
  19. GL30.glRenderbufferStorage(GL30.GL_RENDERBUFFER, GL14.GL_DEPTH_COMPONENT24, cubeMap.getWidth(), cubeMap.getHeight());
  20. GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, GL30.GL_RENDERBUFFER, depthBuffer);
  21. GL11.glViewport(0, 0, cubeMap.getWidth(), cubeMap.getHeight());
  22. for (int i = 0; i < 6; i++) {
  23. GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubeMap.textureId, 0);
  24. camera.switchToFace(i);
  25. renderer.renderLowQualityScene(scene, camera);
  26. }
  27. GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
  28. GL11.glViewport(0, 0, Display.getWidth(), Display.getHeight());
  29. }
  30. }