Improve Rendering Performance
This commit is contained in:
parent
1303d0d05e
commit
76e268e9ed
@ -106,11 +106,13 @@ public class Engine {
|
|||||||
-0.5f, 0.5f, 0f,
|
-0.5f, 0.5f, 0f,
|
||||||
-0.5f, -0.5f, 0f,
|
-0.5f, -0.5f, 0f,
|
||||||
0.5f, -0.5f, 0f,
|
0.5f, -0.5f, 0f,
|
||||||
0.5f, -0.5f, 0f,
|
|
||||||
0.5f, 0.5f, 0f,
|
0.5f, 0.5f, 0f,
|
||||||
-0.5f, 0.5f, 0f
|
|
||||||
};
|
};
|
||||||
RawModel model = loader.loadToVAO(vertices);
|
int[] indices = {
|
||||||
|
0,1,3,
|
||||||
|
3,1,2
|
||||||
|
};
|
||||||
|
RawModel model = loader.loadToVAO(vertices, indices);
|
||||||
// Run the rendering loop until the user has attempted to close
|
// Run the rendering loop until the user has attempted to close
|
||||||
// the window or has pressed the ESCAPE key.
|
// the window or has pressed the ESCAPE key.
|
||||||
while ( !glfwWindowShouldClose(window) ) {
|
while ( !glfwWindowShouldClose(window) ) {
|
||||||
|
@ -8,6 +8,7 @@ import org.lwjgl.opengl.GL20;
|
|||||||
import org.lwjgl.opengl.GL30;
|
import org.lwjgl.opengl.GL30;
|
||||||
|
|
||||||
import java.nio.FloatBuffer;
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -16,11 +17,13 @@ public class Loader {
|
|||||||
private List<Integer> vaos = new ArrayList<>();
|
private List<Integer> vaos = new ArrayList<>();
|
||||||
private List<Integer> vbos = new ArrayList<>();
|
private List<Integer> vbos = new ArrayList<>();
|
||||||
|
|
||||||
public RawModel loadToVAO(float[] positions) {
|
public RawModel loadToVAO(float[] positions, int[] indices) {
|
||||||
int vaoID = createVAO();
|
int vaoID = createVAO();
|
||||||
|
bindIndicesBuffer(indices);
|
||||||
storeDataInAttributeList(0, positions);
|
storeDataInAttributeList(0, positions);
|
||||||
|
|
||||||
unbindVAO();
|
unbindVAO();
|
||||||
return new RawModel(vaoID, positions.length/3);
|
return new RawModel(vaoID, indices.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int createVAO() {
|
private int createVAO() {
|
||||||
@ -44,6 +47,22 @@ public class Loader {
|
|||||||
GL30.glBindVertexArray(0);
|
GL30.glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void bindIndicesBuffer(int[] indices) {
|
||||||
|
int vboID = GL15.glGenBuffers();
|
||||||
|
vbos.add(vboID);
|
||||||
|
GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboID);
|
||||||
|
IntBuffer buffer = storeInIntBuffer(indices);
|
||||||
|
GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indices, GL15.GL_STATIC_DRAW);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IntBuffer storeInIntBuffer(int[] data) {
|
||||||
|
IntBuffer intBuffer = BufferUtils.createIntBuffer(data.length);
|
||||||
|
intBuffer.put(data);
|
||||||
|
//Buffer is until know expected to be written to. Flip it, so it can be read
|
||||||
|
intBuffer.flip();
|
||||||
|
return intBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
private FloatBuffer storeInFloatBuffer(float[] data) {
|
private FloatBuffer storeInFloatBuffer(float[] data) {
|
||||||
FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(data.length);
|
FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(data.length);
|
||||||
floatBuffer.put(data);
|
floatBuffer.put(data);
|
||||||
@ -52,6 +71,7 @@ public class Loader {
|
|||||||
return floatBuffer;
|
return floatBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void cleanUp() {
|
public void cleanUp() {
|
||||||
for(int vao: vaos) {
|
for(int vao: vaos) {
|
||||||
GL30.glDeleteVertexArrays(vao);
|
GL30.glDeleteVertexArrays(vao);
|
||||||
|
@ -8,13 +8,14 @@ import org.lwjgl.opengl.GL30;
|
|||||||
public class Renderer {
|
public class Renderer {
|
||||||
|
|
||||||
public void prepare() {
|
public void prepare() {
|
||||||
|
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
|
||||||
GL11.glClearColor(1,0,0,1);
|
GL11.glClearColor(1,0,0,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(RawModel rawModel) {
|
public void render(RawModel rawModel) {
|
||||||
GL30.glBindVertexArray(rawModel.getVaoID());
|
GL30.glBindVertexArray(rawModel.getVaoID());
|
||||||
GL20.glEnableVertexAttribArray(0);
|
GL20.glEnableVertexAttribArray(0);
|
||||||
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, rawModel.getVertexCount());
|
GL11.glDrawElements(GL11.GL_TRIANGLES, rawModel.getVertexCount(), GL11.GL_UNSIGNED_INT, 0);
|
||||||
GL20.glDisableVertexAttribArray(0);
|
GL20.glDisableVertexAttribArray(0);
|
||||||
GL30.glBindVertexArray(0);
|
GL30.glBindVertexArray(0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user