Explorar el Código

Unified Vao usage

Tankernn hace 8 años
padre
commit
36ca160208
Se han modificado 21 ficheros con 118 adiciones y 285 borrados
  1. 1 1
      src/main/java/eu/tankernn/gameEngine/MainLoop.java
  2. 5 3
      src/main/java/eu/tankernn/gameEngine/TankernnGame3D.java
  3. 7 25
      src/main/java/eu/tankernn/gameEngine/animation/animatedModel/AnimatedModel.java
  4. 2 14
      src/main/java/eu/tankernn/gameEngine/animation/loaders/AnimatedModelLoader.java
  5. 1 1
      src/main/java/eu/tankernn/gameEngine/animation/renderer/AnimatedModelRenderer.java
  6. 55 22
      src/main/java/eu/tankernn/gameEngine/loader/Loader.java
  7. 6 10
      src/main/java/eu/tankernn/gameEngine/loader/models/TexturedModel.java
  8. 6 0
      src/main/java/eu/tankernn/gameEngine/loader/textures/ModelTexture.java
  9. 2 2
      src/main/java/eu/tankernn/gameEngine/particles/ParticleRenderer.java
  10. 2 2
      src/main/java/eu/tankernn/gameEngine/postProcessing/PostProcessor.java
  11. 0 150
      src/main/java/eu/tankernn/gameEngine/renderEngine/RawModel.java
  12. 2 3
      src/main/java/eu/tankernn/gameEngine/renderEngine/Vao.java
  13. 5 5
      src/main/java/eu/tankernn/gameEngine/renderEngine/entities/EntityRenderer.java
  14. 2 2
      src/main/java/eu/tankernn/gameEngine/renderEngine/gui/GuiRenderer.java
  15. 7 8
      src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/ShadowMapEntityRenderer.java
  16. 0 23
      src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/CubeGenerator.java
  17. 6 5
      src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/Skybox.java
  18. 2 2
      src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/SkyboxRenderer.java
  19. 2 2
      src/main/java/eu/tankernn/gameEngine/renderEngine/water/WaterRenderer.java
  20. 3 3
      src/main/java/eu/tankernn/gameEngine/terrains/Terrain.java
  21. 2 2
      src/main/java/eu/tankernn/gameEngine/terrains/TerrainModelData.java

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/MainLoop.java

@@ -92,7 +92,7 @@ public class MainLoop {
 		InternalFile[] dayTextures = InternalFile.fromFilenames("skybox", TEXTURE_FILES, "png"),
 				nightTextures = InternalFile.fromFilenames("skybox", NIGHT_TEXTURE_FILES, "png");
 
-		Skybox skybox = new Skybox(Texture.newCubeMap(dayTextures, 200), Texture.newCubeMap(nightTextures, 200), 200);
+		Skybox skybox = new Skybox(loader, Texture.newCubeMap(dayTextures, 200), Texture.newCubeMap(nightTextures, 200), 200);
 
 		MasterRenderer renderer = new MasterRenderer(loader, camera, skybox);
 		ParticleMaster particleMaster = new ParticleMaster(loader, camera.getProjectionMatrix());

+ 5 - 3
src/main/java/eu/tankernn/gameEngine/TankernnGame3D.java

@@ -15,6 +15,7 @@ import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.entities.Player;
 import eu.tankernn.gameEngine.environmentMap.EnvironmentMapRenderer;
 import eu.tankernn.gameEngine.loader.Loader;
+import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.particles.ParticleMaster;
 import eu.tankernn.gameEngine.postProcessing.PostProcessor;
 import eu.tankernn.gameEngine.renderEngine.Fbo;
@@ -48,11 +49,10 @@ public class TankernnGame3D extends TankernnGame {
 	private Fbo outputFbo = new Fbo(Display.getWidth(), Display.getHeight(), Fbo.DEPTH_TEXTURE),
 			outputFbo2 = new Fbo(Display.getWidth(), Display.getHeight(), Fbo.DEPTH_TEXTURE);
 	
-	public TankernnGame3D(String name, Skybox skybox, String dudvMap, String normalMap, Light sun) {
+	public TankernnGame3D(String name, String[] dayTextures, String[] nightTextures, String dudvMap, String normalMap, Light sun) {
 		super(name);
 		entities = new ArrayList<Entity3D>();
 		lights = new ArrayList<Light>();
-		this.sky = skybox;
 		this.sun = sun;
 		lights.add(sun);
 		try {
@@ -61,8 +61,10 @@ public class TankernnGame3D extends TankernnGame {
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
+		this.sky = new Skybox(loader, Texture.newCubeMap(InternalFile.fromFilenames("skybox", dayTextures, "png"), 200),
+				Texture.newCubeMap(InternalFile.fromFilenames("skybox", nightTextures, "png"), 200), 400);
 		camera = new Camera();
-		renderer = new MasterRenderer(loader, camera, skybox);
+		renderer = new MasterRenderer(loader, camera, sky);
 		try {
 			waterMaster = new WaterMaster(loader, loader.loadTexture(dudvMap), loader.loadTexture(normalMap), camera);
 		} catch (FileNotFoundException e) {

+ 7 - 25
src/main/java/eu/tankernn/gameEngine/animation/animatedModel/AnimatedModel.java

@@ -4,7 +4,8 @@ import org.lwjgl.util.vector.Matrix4f;
 
 import eu.tankernn.gameEngine.animation.animation.Animation;
 import eu.tankernn.gameEngine.animation.animation.Animator;
-import eu.tankernn.gameEngine.loader.textures.Texture;
+import eu.tankernn.gameEngine.loader.models.TexturedModel;
+import eu.tankernn.gameEngine.loader.textures.ModelTexture;
 import eu.tankernn.gameEngine.renderEngine.Vao;
 
 /**
@@ -19,11 +20,7 @@ import eu.tankernn.gameEngine.renderEngine.Vao;
  * @author Karl
  *
  */
-public class AnimatedModel {
-
-	// skin
-	private final Vao model;
-	private final Texture texture;
+public class AnimatedModel extends TexturedModel {
 
 	// skeleton
 	private final Joint rootJoint;
@@ -53,29 +50,14 @@ public class AnimatedModel {
 	 *            this entity.
 	 * 
 	 */
-	public AnimatedModel(Vao model, Texture texture, Joint rootJoint, int jointCount) {
-		this.model = model;
-		this.texture = texture;
+	public AnimatedModel(Vao model, ModelTexture texture, Joint rootJoint, int jointCount) {
+		super(model, texture);
 		this.rootJoint = rootJoint;
 		this.jointCount = jointCount;
 		this.animator = new Animator(this);
 		rootJoint.calcInverseBindTransform(new Matrix4f());
 	}
 
-	/**
-	 * @return The VAO containing all the mesh data for this entity.
-	 */
-	public Vao getModel() {
-		return model;
-	}
-
-	/**
-	 * @return The diffuse texture for this entity.
-	 */
-	public Texture getTexture() {
-		return texture;
-	}
-
 	/**
 	 * @return The root joint of the joint hierarchy. This joint has no parent,
 	 *         and every other joint in the skeleton is a descendant of this
@@ -90,8 +72,8 @@ public class AnimatedModel {
 	 * (VAO) and texture.
 	 */
 	public void delete() {
-		model.delete();
-		texture.delete();
+		getModel().delete();
+		getTexture().delete();
 	}
 
 	/**

+ 2 - 14
src/main/java/eu/tankernn/gameEngine/animation/loaders/AnimatedModelLoader.java

@@ -7,6 +7,7 @@ import eu.tankernn.gameEngine.loader.colladaLoader.ColladaLoader;
 import eu.tankernn.gameEngine.loader.colladaLoader.JointData;
 import eu.tankernn.gameEngine.loader.colladaLoader.JointsData;
 import eu.tankernn.gameEngine.loader.colladaLoader.MeshData;
+import eu.tankernn.gameEngine.loader.textures.ModelTexture;
 import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.InternalFile;
@@ -24,27 +25,14 @@ public class AnimatedModelLoader {
 	 *            - the file containing the data for the entity.
 	 * @return The animated entity (no animation applied though)
 	 */
-	public static AnimatedModel loadEntity(InternalFile modelFile, InternalFile textureFile) {
+	public static AnimatedModel loadEntity(InternalFile modelFile, ModelTexture texture) {
 		AnimatedModelData entityData = ColladaLoader.loadColladaModel(modelFile, MAX_WEIGHTS);
 		Vao model = createVao(entityData.getMeshData());
-		Texture texture = loadTexture(textureFile);
 		JointsData skeletonData = entityData.getJointsData();
 		Joint headJoint = createJoints(skeletonData.headJoint);
 		return new AnimatedModel(model, texture, headJoint, skeletonData.jointCount);
 	}
 
-	/**
-	 * Loads up the diffuse texture for the model.
-	 * 
-	 * @param textureFile
-	 *            - the texture file.
-	 * @return The diffuse texture.
-	 */
-	private static Texture loadTexture(InternalFile textureFile) {
-		Texture diffuseTexture = Texture.newTexture(textureFile).anisotropic().create();
-		return diffuseTexture;
-	}
-
 	/**
 	 * Constructs the joint-hierarchy skeleton from the data extracted from the
 	 * collada file.

+ 1 - 1
src/main/java/eu/tankernn/gameEngine/animation/renderer/AnimatedModelRenderer.java

@@ -43,7 +43,7 @@ public class AnimatedModelRenderer {
 	 */
 	public void render(AnimatedModel entity, ICamera camera, Vector3f lightDir) {
 		prepare(camera, lightDir);
-		entity.getTexture().bindToUnit(0);
+		entity.getTexture().getTexture().bindToUnit(0);
 		entity.getModel().bind(0, 1, 2, 3, 4);
 		shader.jointTransforms.loadMatrixArray(entity.getJointTransforms());
 		GL11.glDrawElements(GL11.GL_TRIANGLES, entity.getModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);

+ 55 - 22
src/main/java/eu/tankernn/gameEngine/loader/Loader.java

@@ -27,7 +27,7 @@ import eu.tankernn.gameEngine.loader.obj.ModelData;
 import eu.tankernn.gameEngine.loader.obj.ObjLoader;
 import eu.tankernn.gameEngine.loader.textures.ModelTexture;
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.InternalFile;
 
 /**
@@ -39,21 +39,33 @@ import eu.tankernn.gameEngine.util.InternalFile;
 public class Loader {
 	private List<Integer> vaos = new ArrayList<Integer>();
 	private List<Integer> vbos = new ArrayList<Integer>();
-	private List<RawModel> rawModels = new ArrayList<RawModel>();
+	private List<Vao> rawModels = new ArrayList<Vao>();
 	private List<Texture> textures = new ArrayList<Texture>();
 	private Map<Integer, TexturedModel> models = new HashMap<Integer, TexturedModel>();
-
-	public RawModel loadToVAO(float[] vertices, float[] textureCoords, float[] normals, int[] indices) {
-		RawModel model = RawModel.create();
-		model.storeData(indices, vertices.length / 3, vertices, textureCoords, normals);
+	private List<AABB> boundingBoxes = new ArrayList<>();
+
+	public Vao loadToVAO(float[] vertices, float[] textureCoords, float[] normals, int[] indices) {
+		Vao model = Vao.create();
+		model.bind();
+		model.createIndexBuffer(indices);
+		model.createAttribute(0, vertices, 3);
+		model.createAttribute(1, textureCoords, 2);
+		model.createAttribute(2, normals, 3);
+		model.unbind();
 		rawModels.add(model);
 		return model;
 	}
 
-	public RawModel loadToVAO(float[] vertices, float[] textureCoords, float[] normals, float[] tangents,
+	public Vao loadToVAO(float[] vertices, float[] textureCoords, float[] normals, float[] tangents,
 			int[] indices) {
-		RawModel model = RawModel.create();
-		model.storeData(indices, vertices.length / 3, vertices, textureCoords, normals, tangents);
+		Vao model = Vao.create();
+		model.bind();
+		model.createIndexBuffer(indices);
+		model.createAttribute(0, vertices, 3);
+		model.createAttribute(1, textureCoords, 2);
+		model.createAttribute(2, normals, 3);
+		model.createAttribute(3, tangents, 3);
+		model.unbind();
 		rawModels.add(model);
 		return model;
 	}
@@ -95,15 +107,16 @@ public class Loader {
 		return vaoID;
 	}
 
-	public RawModel loadToVAO(float[] positions, int dimensions) {
-		int vaoID = createVAO();
-		this.storeDataInAttributeList(0, dimensions, positions);
-		unbindVAO();
-		return new RawModel(vaoID, positions.length / 2);
+	public Vao loadToVAO(float[] positions, int dimensions) {
+		Vao vao = Vao.create();
+		vao.bind();
+		vao.createAttribute(0, positions, dimensions);
+		vao.unbind();
+		return vao;
 	}
 
-	public RawModel loadToVAO(ModelData data) {
-		return (RawModel) loadToVAO(data.getVertices(), data.getTextureCoords(), data.getNormals(), data.getTangents(),
+	public Vao loadToVAO(ModelData data) {
+		return (Vao) loadToVAO(data.getVertices(), data.getTextureCoords(), data.getNormals(), data.getTangents(),
 				data.getIndices());
 	}
 
@@ -141,6 +154,25 @@ public class Loader {
 		textures.add(cubeMap);
 		return cubeMap;
 	}
+	
+	private static final int[] CUBE_INDICES = { 0, 1, 3, 1, 2, 3, 1, 5, 2, 2, 5, 6, 4, 7, 5, 5, 7, 6, 0,
+			3, 4, 4, 3, 7, 7, 3, 6, 6, 3, 2, 4, 5, 0, 0, 5, 1 };
+
+	public Vao generateCube(float size) {
+		Vao vao = Vao.create();
+		vao.bind();
+		vao.createIndexBuffer(CUBE_INDICES);
+		vao.createAttribute(0, getCubeVertexPositions(size), 3);
+		vao.unbind();
+		rawModels.add(vao);
+		return vao;
+	}
+
+	private static float[] getCubeVertexPositions(float size) {
+		return new float[] { -size, size, size, size, size, size, size, -size, size, -size, -size,
+				size, -size, size, -size, size, size, -size, size, -size, -size, -size, -size,
+				-size };
+	}
 
 	public void cleanUp() {
 		for (int vao : vaos)
@@ -149,7 +181,7 @@ public class Loader {
 			GL15.glDeleteBuffers(vbo);
 		for (Texture tex : textures)
 			tex.delete();
-		for (RawModel model : rawModels)
+		for (Vao model : rawModels)
 			model.delete();
 	}
 
@@ -181,13 +213,14 @@ public class Loader {
 		return buffer;
 	}
 
-	public RawModel loadOBJ(InternalFile objFile) {
+	public Vao loadOBJ(InternalFile objFile) {
 		ModelData data = ObjLoader.loadOBJ(objFile);
-		return this.loadToVAO(data).withBoundingBox(data);
+		boundingBoxes.add(new AABB(data));
+		return this.loadToVAO(data);
 	}
 
 	public void readModelSpecification(InternalFile file) throws IOException {
-		Map<InternalFile, RawModel> cachedRawModels = new HashMap<InternalFile, RawModel>();
+		Map<InternalFile, Vao> cachedRawModels = new HashMap<InternalFile, Vao>();
 		Map<InternalFile, Texture> cachedTextures = new HashMap<InternalFile, Texture>();
 		JSONObject spec;
 
@@ -197,7 +230,7 @@ public class Loader {
 			spec = jsonArr.getJSONObject(j);
 
 			int id;
-			RawModel model;
+			Vao model;
 			ModelTexture modelTexture;
 
 			id = spec.getInt("id");
@@ -288,6 +321,6 @@ public class Loader {
 	}
 
 	public AABB getBoundingBox(int id) {
-		return getModel(id).getBoundingBox();
+		return boundingBoxes.get(id);
 	}
 }

+ 6 - 10
src/main/java/eu/tankernn/gameEngine/loader/models/TexturedModel.java

@@ -1,20 +1,20 @@
 package eu.tankernn.gameEngine.loader.models;
 
 import eu.tankernn.gameEngine.loader.textures.ModelTexture;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 
 public class TexturedModel {
-	private RawModel rawModel;
+	private Vao rawModel;
 	private ModelTexture texture;
 	
 	private int textureIndex = 0;
 	
-	public TexturedModel(RawModel rawModel, ModelTexture texture) {
+	public TexturedModel(Vao rawModel, ModelTexture texture) {
 		this.rawModel = rawModel;
 		this.texture = texture;
 	}
 	
-	public TexturedModel(RawModel rawModel, ModelTexture texture, int textureIndex) {
+	public TexturedModel(Vao rawModel, ModelTexture texture, int textureIndex) {
 		this(rawModel, texture);
 		this.textureIndex = textureIndex;
 	}
@@ -29,15 +29,11 @@ public class TexturedModel {
 		return (float) row / (float) texture.getNumberOfRows();
 	}
 
-	public RawModel getRawModel() {
+	public Vao getModel() {
 		return rawModel;
 	}
 
-	public ModelTexture getModelTexture() {
+	public ModelTexture getTexture() {
 		return texture;
 	}
-	
-	public AABB getBoundingBox() {
-		return rawModel.getBoundingBox();
-	}
 }

+ 6 - 0
src/main/java/eu/tankernn/gameEngine/loader/textures/ModelTexture.java

@@ -98,4 +98,10 @@ public class ModelTexture {
 		this.refractivity = refractivity;
 		return this;
 	}
+	
+	public void delete() {
+		colorTexture.delete();
+		normalMap.delete();
+		specularMap.delete();
+	}
 }

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/particles/ParticleRenderer.java

@@ -14,7 +14,7 @@ import org.lwjgl.util.vector.Vector3f;
 
 import eu.tankernn.gameEngine.entities.Camera;
 import eu.tankernn.gameEngine.loader.Loader;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 
 public class ParticleRenderer {
 	
@@ -24,7 +24,7 @@ public class ParticleRenderer {
 	
 	private static final FloatBuffer buffer = BufferUtils.createFloatBuffer(MAX_INSTANCES * INSTANCE_DATA_LENGTH);
 	
-	private RawModel quad;
+	private Vao quad;
 	private ParticleShader shader;
 	
 	private Loader loader;

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

@@ -12,14 +12,14 @@ import eu.tankernn.gameEngine.postProcessing.bloom.BrightFilter;
 import eu.tankernn.gameEngine.postProcessing.bloom.CombineFilter;
 import eu.tankernn.gameEngine.postProcessing.gaussianBlur.HorizontalBlur;
 import eu.tankernn.gameEngine.postProcessing.gaussianBlur.VerticalBlur;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 
 public class PostProcessor {
 
 	private final int blurFactor = 0;
 
 	private final float[] POSITIONS = { -1, 1, -1, -1, 1, 1, 1, -1 };
-	private RawModel quad;
+	private Vao quad;
 	private List<PostProcessingEffect<?>> effects = new ArrayList<PostProcessingEffect<?>>();
 	private CombineFilter combineFilter;
 	

+ 0 - 150
src/main/java/eu/tankernn/gameEngine/renderEngine/RawModel.java

@@ -1,150 +0,0 @@
-package eu.tankernn.gameEngine.renderEngine;
-
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL15;
-import org.lwjgl.opengl.GL20;
-import org.lwjgl.opengl.GL30;
-
-import eu.tankernn.gameEngine.loader.models.AABB;
-import eu.tankernn.gameEngine.loader.obj.ModelData;
-
-public class RawModel {
-	
-	private static final int BYTES_PER_FLOAT = 4;
-	
-	public final int id;
-	private Vbo dataVbo;
-	private Vbo indexVbo;
-	private int indexCount;
-	private AABB boundingBox;
-
-	public static RawModel create() {
-		int id = GL30.glGenVertexArrays();
-		return new RawModel(id);
-	}
-
-	private RawModel(int id) {
-		this.id = id;
-	}
-	
-	public RawModel(int id, int indexCount) {
-		this(id);
-		this.indexCount = indexCount;
-	}
-	
-	public int getIndexCount(){
-		return indexCount;
-	}
-
-	public void bind() {
-		GL30.glBindVertexArray(id);
-	}
-	
-	public void bind(int... attributes){
-		bind();
-		for (int i : attributes) {
-			GL20.glEnableVertexAttribArray(i);
-		}
-	}
-
-	public void unbind() {
-		GL30.glBindVertexArray(0);
-	}
-	
-	public void unbind(int... attributes){
-		for (int i : attributes) {
-			GL20.glDisableVertexAttribArray(i);
-		}
-		unbind();
-	}
-	
-	public RawModel storeData(int[] indices, int vertexCount, float[]... data){
-		bind();
-		storeData(vertexCount, data);
-		createIndexBuffer(indices);
-		unbind();
-		return this;
-	}
-	
-	public RawModel withBoundingBox(ModelData data) {
-		this.boundingBox = new AABB(data);
-		return this;
-	}
-	
-	public void delete() {
-		GL30.glDeleteVertexArrays(id);
-		dataVbo.delete();
-		indexVbo.delete();
-	}
-
-	private void createIndexBuffer(int[] indices){
-		this.indexVbo = Vbo.create(GL15.GL_ELEMENT_ARRAY_BUFFER);
-		indexVbo.bind();
-		indexVbo.storeData(indices);
-		this.indexCount = indices.length;
-	}
-	
-	private void storeData(int vertexCount, float[]... data) {
-		float[] interleavedData = interleaveFloatData(vertexCount, data);
-		int[] lengths = getAttributeLengths(data, vertexCount);
-		storeInterleavedData(interleavedData, lengths);
-	}
-	
-	private int[] getAttributeLengths(float[][] data, int vertexCount){
-		int[] lengths = new int[data.length];
-		for (int i = 0; i < data.length; i++) {
-			lengths[i] = data[i].length / vertexCount;
-		}
-		return lengths;
-	}
-
-	private void storeInterleavedData(float[] data, int... lengths) {
-		dataVbo = Vbo.create(GL15.GL_ARRAY_BUFFER);
-		dataVbo.bind();
-		dataVbo.storeData(data);
-		int bytesPerVertex = calculateBytesPerVertex(lengths);
-		linkVboDataToAttributes(lengths, bytesPerVertex);
-		dataVbo.unbind();
-	}
-	
-	private void linkVboDataToAttributes(int[] lengths, int bytesPerVertex){
-		int total = 0;
-		for (int i = 0; i < lengths.length; i++) {
-			GL20.glVertexAttribPointer(i, lengths[i], GL11.GL_FLOAT, false, bytesPerVertex, BYTES_PER_FLOAT * total);
-			total += lengths[i];
-		}
-	}
-	
-	private int calculateBytesPerVertex(int[] lengths){
-		int total = 0;
-		for (int i = 0; i < lengths.length; i++) {
-			total += lengths[i];
-		}
-		return BYTES_PER_FLOAT * total;
-	}
-
-	private float[] interleaveFloatData(int count, float[]... data) {
-		int totalSize = 0;
-		int[] lengths = new int[data.length];
-		for (int i = 0; i < data.length; i++) {
-			int elementLength = data[i].length / count;
-			lengths[i] = elementLength;
-			totalSize += data[i].length;
-		}
-		float[] interleavedBuffer = new float[totalSize];
-		int pointer = 0;
-		for (int i = 0; i < count; i++) {
-			for (int j = 0; j < data.length; j++) {
-				int elementLength = lengths[j];
-				for (int k = 0; k < elementLength; k++) {
-					interleavedBuffer[pointer++] = data[j][i * elementLength + k];
-				}
-			}
-		}
-		return interleavedBuffer;
-	}
-	
-	public AABB getBoundingBox() {
-		return this.boundingBox.copy();
-	}
-}

+ 2 - 3
src/main/java/eu/tankernn/gameEngine/renderEngine/Vao.java

@@ -10,7 +10,7 @@ import org.lwjgl.opengl.GL30;
 
 public class Vao {
 	
-	private static final int BYTES_PER_FLOAT = 4;
+	protected static final int BYTES_PER_FLOAT = 4;
 	private static final int BYTES_PER_INT = 4;
 	public final int id;
 	private List<Vbo> dataVbos = new ArrayList<Vbo>();
@@ -22,7 +22,7 @@ public class Vao {
 		return new Vao(id);
 	}
 
-	private Vao(int id) {
+	protected Vao(int id) {
 		this.id = id;
 	}
 	
@@ -84,5 +84,4 @@ public class Vao {
 	private void unbind() {
 		GL30.glBindVertexArray(0);
 	}
-
 }

+ 5 - 5
src/main/java/eu/tankernn/gameEngine/renderEngine/entities/EntityRenderer.java

@@ -75,7 +75,7 @@ public class EntityRenderer<S extends EntityShader> {
 			List<Entity3D> batch = entities.get(model);
 			for (Entity3D entity : batch) {
 				prepareInstance(entity, model);
-				GL11.glDrawElements(GL11.GL_TRIANGLES, model.getRawModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
+				GL11.glDrawElements(GL11.GL_TRIANGLES, model.getModel().getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
 			}
 			unbindTexturedModel(model);
 		}
@@ -87,8 +87,8 @@ public class EntityRenderer<S extends EntityShader> {
 	}
 
 	private void prepareTexturedModel(TexturedModel model, Texture environmentMap) {
-		model.getRawModel().bind(0, 1, 2, 3);
-		ModelTexture texture = model.getModelTexture();
+		model.getModel().bind(0, 1, 2, 3);
+		ModelTexture texture = model.getTexture();
 		shader.numberOfRows.loadFloat(texture.getNumberOfRows());
 		if (texture.hasTransparency())
 			MasterRenderer.disableCulling();
@@ -96,7 +96,7 @@ public class EntityRenderer<S extends EntityShader> {
 		shader.shineDamper.loadFloat(texture.getShineDamper());
 		shader.reflectivity.loadFloat(texture.getReflectivity());
 		shader.refractivity.loadFloat(texture.getRefractivity());
-		model.getModelTexture().getTexture().bindToUnit(0);
+		model.getTexture().getTexture().bindToUnit(0);
 		shader.usesSpecularMap.loadBoolean(texture.hasSpecularMap());
 		if (texture.hasSpecularMap()) {
 			texture.getSpecularMap().bindToUnit(2);
@@ -113,7 +113,7 @@ public class EntityRenderer<S extends EntityShader> {
 
 	private void unbindTexturedModel(TexturedModel model) {
 		MasterRenderer.enableCulling();
-		model.getRawModel().unbind(0, 1, 2, 3);
+		model.getModel().unbind(0, 1, 2, 3);
 	}
 
 	protected void prepareInstance(Entity3D entity, TexturedModel model) {

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/renderEngine/gui/GuiRenderer.java

@@ -6,12 +6,12 @@ import org.lwjgl.opengl.GL11;
 import org.lwjgl.util.vector.Matrix4f;
 
 import eu.tankernn.gameEngine.loader.Loader;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.Maths;
 
 public class GuiRenderer {
 	
-	private final RawModel quad;
+	private final Vao quad;
 	private GuiShader shader;
 	
 	public GuiRenderer(Loader loader) {

+ 7 - 8
src/main/java/eu/tankernn/gameEngine/renderEngine/shadows/ShadowMapEntityRenderer.java

@@ -12,7 +12,7 @@ import org.lwjgl.util.vector.Vector3f;
 import eu.tankernn.gameEngine.entities.Entity3D;
 import eu.tankernn.gameEngine.loader.models.TexturedModel;
 import eu.tankernn.gameEngine.renderEngine.MasterRenderer;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.Maths;
 
 public class ShadowMapEntityRenderer {
@@ -42,22 +42,21 @@ public class ShadowMapEntityRenderer {
 	 */
 	protected void render(Map<TexturedModel, List<Entity3D>> entities) {
 		for (TexturedModel model : entities.keySet()) {
-			RawModel rawModel = model.getRawModel();
+			Vao rawModel = model.getModel();
 			bindModel(rawModel);
-			model.getModelTexture().getTexture().bindToUnit(0);
-			if (model.getModelTexture().hasTransparency()) {
+			model.getTexture().getTexture().bindToUnit(0);
+			if (model.getTexture().hasTransparency()) {
 				MasterRenderer.disableCulling();
 			}
 			for (Entity3D entity : entities.get(model)) {
 				prepareInstance(entity);
 				GL11.glDrawElements(GL11.GL_TRIANGLES, rawModel.getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
 			}
-			if (model.getModelTexture().hasTransparency()) {
+			if (model.getTexture().hasTransparency()) {
 				MasterRenderer.enableCulling();
 			}
 		}
 		GL20.glDisableVertexAttribArray(0);
-		GL20.glDisableVertexAttribArray(1);
 		GL30.glBindVertexArray(0);
 	}
 
@@ -69,8 +68,8 @@ public class ShadowMapEntityRenderer {
 	 * @param rawModel
 	 *            - the model to be bound.
 	 */
-	private void bindModel(RawModel rawModel) {
-		rawModel.bind(0, 1);
+	private void bindModel(Vao rawModel) {
+		rawModel.bind(0);
 	}
 
 	/**

+ 0 - 23
src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/CubeGenerator.java

@@ -1,23 +0,0 @@
-package eu.tankernn.gameEngine.renderEngine.skybox;
-
-import eu.tankernn.gameEngine.renderEngine.RawModel;
-
-public class CubeGenerator {
-
-	private static final int VERTEX_COUNT = 8;
-	private static final int[] INDICES = { 0, 1, 3, 1, 2, 3, 1, 5, 2, 2, 5, 6, 4, 7, 5, 5, 7, 6, 0,
-			3, 4, 4, 3, 7, 7, 3, 6, 6, 3, 2, 4, 5, 0, 0, 5, 1 };
-
-	public static RawModel generateCube(float size) {
-		RawModel vao = RawModel.create();
-		vao.storeData(INDICES, VERTEX_COUNT, getVertexPositions(size));
-		return vao;
-	}
-
-	private static float[] getVertexPositions(float size) {
-		return new float[] { -size, size, size, size, size, size, size, -size, size, -size, -size,
-				size, -size, size, -size, size, size, -size, size, -size, -size, -size, -size,
-				-size };
-	}
-
-}

+ 6 - 5
src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/Skybox.java

@@ -1,20 +1,21 @@
 package eu.tankernn.gameEngine.renderEngine.skybox;
 
+import eu.tankernn.gameEngine.loader.Loader;
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 
 public class Skybox {
 
-	private RawModel cube;
+	private Vao cube;
 	private Texture dayTexture, nightTexture;
 
-	public Skybox(Texture dayTexture, Texture nightTexture, float size) {
-		cube = CubeGenerator.generateCube(size);
+	public Skybox(Loader loader, Texture dayTexture, Texture nightTexture, float size) {
+		cube = loader.generateCube(size);
 		this.dayTexture = dayTexture;
 		this.nightTexture = nightTexture;
 	}
 
-	public RawModel getCubeVao() {
+	public Vao getCubeVao() {
 		return cube;
 	}
 

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/renderEngine/skybox/SkyboxRenderer.java

@@ -8,7 +8,7 @@ import org.lwjgl.util.vector.Matrix4f;
 import eu.tankernn.gameEngine.loader.Loader;
 import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.renderEngine.DisplayManager;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.ICamera;
 
 public class SkyboxRenderer {
@@ -34,7 +34,7 @@ public class SkyboxRenderer {
 		skybox.getCubeVao().bind();
 		GL20.glEnableVertexAttribArray(0);
 		bindTextures();
-		RawModel model = skybox.getCubeVao();
+		Vao model = skybox.getCubeVao();
 		model.bind(0);
 		GL11.glDrawElements(GL11.GL_TRIANGLES, model.getIndexCount(), GL11.GL_UNSIGNED_INT, 0);
 		model.unbind(0);

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/renderEngine/water/WaterRenderer.java

@@ -13,7 +13,7 @@ import eu.tankernn.gameEngine.entities.Light;
 import eu.tankernn.gameEngine.loader.Loader;
 import eu.tankernn.gameEngine.loader.textures.Texture;
 import eu.tankernn.gameEngine.renderEngine.DisplayManager;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.settings.Settings;
 import eu.tankernn.gameEngine.util.Maths;
 
@@ -24,7 +24,7 @@ public class WaterRenderer {
 	private static final float SHINE_DAMPER = 20.0f;
 	private static final float REFLECTIVITY = 0.5f;
 	
-	private RawModel quad;
+	private Vao quad;
 	private WaterShader shader;
 	private WaterFrameBuffers buffers;
 	

+ 3 - 3
src/main/java/eu/tankernn/gameEngine/terrains/Terrain.java

@@ -9,7 +9,7 @@ import org.lwjgl.util.vector.Vector3f;
 import eu.tankernn.gameEngine.loader.Loader;
 import eu.tankernn.gameEngine.loader.textures.TerrainTexturePack;
 import eu.tankernn.gameEngine.loader.textures.Texture;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.InternalFile;
 import eu.tankernn.gameEngine.util.Maths;
 
@@ -17,7 +17,7 @@ public class Terrain {
 
 	private float x, z;
 	private int gridX, gridZ;
-	private RawModel model;
+	private Vao model;
 	private TerrainTexturePack texturePack;
 	private Texture blendMap;
 
@@ -72,7 +72,7 @@ public class Terrain {
 		return TERRAIN_SIZE;
 	}
 
-	public RawModel getModel() {
+	public Vao getModel() {
 		return model;
 	}
 

+ 2 - 2
src/main/java/eu/tankernn/gameEngine/terrains/TerrainModelData.java

@@ -10,7 +10,7 @@ import javax.imageio.ImageIO;
 import org.lwjgl.util.vector.Vector3f;
 
 import eu.tankernn.gameEngine.loader.Loader;
-import eu.tankernn.gameEngine.renderEngine.RawModel;
+import eu.tankernn.gameEngine.renderEngine.Vao;
 import eu.tankernn.gameEngine.util.InternalFile;
 
 public class TerrainModelData {
@@ -156,7 +156,7 @@ public class TerrainModelData {
 		return generator.generateHeight(x, z);
 	}
 
-	public RawModel getModel(Loader loader) {
+	public Vao getModel(Loader loader) {
 		return loader.loadToVAO(vertices, textureCoords, normals, indices);
 	}