Browse Source

Fixed environment-map rendering.

Also fixed some other small things.
Tankernn 8 years ago
parent
commit
f10ca4fa11

+ 2 - 8
src/main/java/eu/tankernn/gameEngine/MainLoop.java

@@ -74,10 +74,10 @@ public class MainLoop {
 		Loader loader = new Loader();
 
 		// Player
-		ModelData playrModelData = OBJFileLoader.loadOBJ(new InternalFile("Soptunna.obj"));
+		ModelData playrModelData = OBJFileLoader.loadOBJ(new InternalFile("dragon.obj"));
 		RawModel playerModel = loader.loadToVAO(playrModelData);
 		TexturedModel texturedMonkeyModel = new TexturedModel(playerModel,
-				new ModelTexture(loader.loadTexture("Soptunna.png")));
+				new ModelTexture(loader.loadTexture("white.png")));
 
 		ModelTexture texture = texturedMonkeyModel.getModelTexture();
 		texture.setReflectivity(3);
@@ -173,10 +173,6 @@ public class MainLoop {
 		// #### Gui rendering ####
 		List<GuiTexture> guis = new ArrayList<GuiTexture>();
 
-		GuiTexture debug = new GuiTexture(0, new Vector2f(1, 1), new Vector2f(1, 1));
-
-		guis.add(debug);
-
 		GuiRenderer guiRenderer = new GuiRenderer(loader);
 
 		ParticleTexture particleTexture = new ParticleTexture(loader.loadTexture("particles/cosmic.png"), 4, true);
@@ -238,8 +234,6 @@ public class MainLoop {
 			EnvironmentMapRenderer.renderEnvironmentMap(scene.getEnvironmentMap(), scene, player.getPosition(),
 					renderer);
 
-			debug = new GuiTexture(scene.getEnvironmentMap().textureId, new Vector2f(1, 1), new Vector2f(1, 1));
-
 			waterMaster.renderBuffers(renderer, scene);
 
 			multisampleFbo.bindFrameBuffer();

+ 11 - 0
src/main/java/eu/tankernn/gameEngine/loader/textures/TextureUtils.java

@@ -118,6 +118,15 @@ public class TextureUtils {
 		return new Texture(texture, width * height);
 	}
 
+	/**
+	 * Creates a depth buffer texture attachment.
+	 * 
+	 * @param width
+	 *            - the width of the texture.
+	 * @param height
+	 *            - the height of the texture.
+	 * @return The depth texture object.
+	 */
 	public static Texture createDepthTextureAttachment(int width, int height) {
 		int texture = GL11.glGenTextures();
 		GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
@@ -125,6 +134,8 @@ public class TextureUtils {
 				GL11.GL_FLOAT, (ByteBuffer) null);
 		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
 		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
+		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
+		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
 		GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, texture, 0);
 		return new Texture(texture, width * height);
 	}

+ 2 - 1
src/main/java/eu/tankernn/gameEngine/postProcessing/Fbo.java

@@ -49,7 +49,8 @@ public class Fbo {
 	 */
 	public void cleanUp() {
 		GL30.glDeleteFramebuffers(frameBuffer);
-		colourTexture.delete();
+		if (colourTexture != null)
+			colourTexture.delete();
 		if (depthTexture != null)
 			depthTexture.delete();
 		GL30.glDeleteRenderbuffers(depthBuffer);

+ 20 - 17
src/main/java/eu/tankernn/gameEngine/renderEngine/MasterRenderer.java

@@ -12,7 +12,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL13;
 import org.lwjgl.util.vector.Vector4f;
 
 import eu.tankernn.gameEngine.entities.Camera;
@@ -90,22 +89,17 @@ public class MasterRenderer {
 	 *            The clip plane.
 	 */
 	public void renderScene(Scene scene, Vector4f clipPlane) {
-		scene.getTerrainPack().prepareRenderTerrains(this);
-		for (Entity e : scene.getEntities()) {
-			processEntity(e);
-		}
-		for (Entity e : scene.getNormalEntities()) {
-			processNormalMappedEntity(e);
-		}
+		prepareScene(scene);
 		render(scene.getLights(), scene.getCamera(), clipPlane, scene.getEnvironmentMap());
 	}
 	
 	public void renderLowQualityScene(Scene scene, ICamera camera) {
-		prepare();
+		prepareScene(scene);
+		prepareBuffer();
 		entityRenderer.render(entities, shadowMapRenderer.getToShadowMapSpaceMatrix(), camera, NO_CLIP, scene.getLights(), scene.getEnvironmentMap());
-		normalMapRenderer.render(normalMapEntities, NO_CLIP, scene.getLights(), camera);
 		terrainRenderer.render(terrains, shadowMapRenderer.getToShadowMapSpaceMatrix(), camera, NO_CLIP, scene.getLights());
 		
+		
 	}
 
 	/**
@@ -119,16 +113,25 @@ public class MasterRenderer {
 	 *            The clip plane.
 	 */
 	public void render(List<Light> lights, ICamera camera, Vector4f clipPlane, Texture environmentMap) {
-		prepare();
+		prepareBuffer();
 
 		entityRenderer.render(entities, shadowMapRenderer.getToShadowMapSpaceMatrix(), camera, clipPlane, lights, environmentMap);
 		normalMapRenderer.render(normalMapEntities, clipPlane, lights, camera);
 		terrainRenderer.render(terrains, shadowMapRenderer.getToShadowMapSpaceMatrix(), camera, clipPlane, lights);
 		skyboxRenderer.render(camera, RED, GREEN, BLUE);
-
+	}
+	
+	private void prepareScene(Scene scene) {
 		entities.clear();
 		terrains.clear();
 		normalMapEntities.clear();
+		scene.getTerrainPack().prepareRenderTerrains(this);
+		for (Entity e : scene.getEntities()) {
+			processEntity(e);
+		}
+		for (Entity e : scene.getNormalEntities()) {
+			processNormalMappedEntity(e);
+		}
 	}
 
 	/**
@@ -190,7 +193,7 @@ public class MasterRenderer {
 	 * 
 	 * @return
 	 */
-	public int getShadowMapTexture() {
+	public Texture getShadowMapTexture() {
 		return shadowMapRenderer.getShadowMap();
 	}
 
@@ -207,13 +210,13 @@ public class MasterRenderer {
 	/**
 	 * Prepares the current buffer for rendering.
 	 */
-	public void prepare() {
+	public void prepareBuffer() {
 		GL11.glEnable(GL11.GL_DEPTH_TEST | GL11.GL_DEPTH_BUFFER_BIT);
 		GL11.glClearColor(RED, GREEN, BLUE, 1);
 		GL11.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the
 																	// framebuffer
-		GL13.glActiveTexture(GL13.GL_TEXTURE5);
-		GL11.glBindTexture(GL11.GL_TEXTURE_2D, getShadowMapTexture());
+		getShadowMapTexture().bindToUnit(5);
 	}
-
+	
+	
 }

+ 7 - 31
src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/ShadowFrameBuffer.java

@@ -1,13 +1,11 @@
 package eu.tankernn.gameEngine.renderEngine.shadows;
 
-import java.nio.ByteBuffer;
-
 import org.lwjgl.opengl.Display;
 import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL12;
-import org.lwjgl.opengl.GL14;
 import org.lwjgl.opengl.GL30;
-import org.lwjgl.opengl.GL32;
+
+import eu.tankernn.gameEngine.loader.textures.Texture;
+import eu.tankernn.gameEngine.loader.textures.TextureUtils;
 
 /**
  * The frame buffer for the shadow pass. This class sets up the depth texture
@@ -22,7 +20,7 @@ public class ShadowFrameBuffer {
 	private final int WIDTH;
 	private final int HEIGHT;
 	private int fbo;
-	private int shadowMap;
+	private Texture shadowMap;
 
 	/**
 	 * Initialises the frame buffer and shadow map of a certain size.
@@ -43,7 +41,7 @@ public class ShadowFrameBuffer {
 	 */
 	protected void cleanUp() {
 		GL30.glDeleteFramebuffers(fbo);
-		GL11.glDeleteTextures(shadowMap);
+		shadowMap.delete();
 	}
 
 	/**
@@ -65,7 +63,7 @@ public class ShadowFrameBuffer {
 	/**
 	 * @return The ID of the shadow map texture.
 	 */
-	protected int getShadowMap() {
+	protected Texture getShadowMap() {
 		return shadowMap;
 	}
 
@@ -74,7 +72,7 @@ public class ShadowFrameBuffer {
 	 */
 	private void initialiseFrameBuffer() {
 		fbo = createFrameBuffer();
-		shadowMap = createDepthBufferAttachment(WIDTH, HEIGHT);
+		shadowMap = TextureUtils.createDepthTextureAttachment(WIDTH, HEIGHT);
 		unbindFrameBuffer();
 	}
 
@@ -107,26 +105,4 @@ public class ShadowFrameBuffer {
 		GL11.glDrawBuffer(GL11.GL_NONE);
 		return frameBuffer;
 	}
-
-	/**
-	 * Creates a depth buffer texture attachment.
-	 * 
-	 * @param width
-	 *            - the width of the texture.
-	 * @param height
-	 *            - the height of the texture.
-	 * @return The ID of the depth texture.
-	 */
-	private static int createDepthBufferAttachment(int width, int height) {
-		int texture = GL11.glGenTextures();
-		GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
-		GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL14.GL_DEPTH_COMPONENT16, width, height, 0,
-				GL11.GL_DEPTH_COMPONENT, GL11.GL_FLOAT, (ByteBuffer) null);
-		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
-		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
-		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
-		GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);
-		GL32.glFramebufferTexture(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_ATTACHMENT, texture, 0);
-		return texture;
-	}
 }

+ 2 - 1
src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/ShadowMapMasterRenderer.java

@@ -12,6 +12,7 @@ import eu.tankernn.gameEngine.entities.Camera;
 import eu.tankernn.gameEngine.entities.Entity;
 import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.loader.models.TexturedModel;
+import eu.tankernn.gameEngine.loader.textures.Texture;
 
 /**
  * This class is in charge of using all of the classes in the shadows package to
@@ -103,7 +104,7 @@ public class ShadowMapMasterRenderer {
 	 *         same, even when the contents of the shadow map texture change
 	 *         each frame.
 	 */
-	public int getShadowMap() {
+	public Texture getShadowMap() {
 		return shadowFbo.getShadowMap();
 	}