Render white rectangle
This commit is contained in:
parent
d989edee91
commit
1303d0d05e
@ -1,5 +1,6 @@
|
|||||||
package core.engine;
|
package core.engine;
|
||||||
|
|
||||||
|
import core.engine.model.RawModel;
|
||||||
import org.lwjgl.Version;
|
import org.lwjgl.Version;
|
||||||
import org.lwjgl.glfw.GLFWErrorCallback;
|
import org.lwjgl.glfw.GLFWErrorCallback;
|
||||||
import org.lwjgl.glfw.GLFWVidMode;
|
import org.lwjgl.glfw.GLFWVidMode;
|
||||||
@ -19,6 +20,8 @@ import static org.lwjgl.system.MemoryUtil.NULL;
|
|||||||
public class Engine {
|
public class Engine {
|
||||||
|
|
||||||
private long window;
|
private long window;
|
||||||
|
private final Loader loader = new Loader();
|
||||||
|
private final Renderer renderer = new Renderer();
|
||||||
|
|
||||||
public Engine() {
|
public Engine() {
|
||||||
|
|
||||||
@ -99,18 +102,29 @@ public class Engine {
|
|||||||
|
|
||||||
// Set the clear color
|
// Set the clear color
|
||||||
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
|
glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
|
||||||
|
float[] vertices = {
|
||||||
|
-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);
|
||||||
// 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) ) {
|
||||||
|
renderer.prepare();
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer
|
||||||
|
renderer.render(model);
|
||||||
glfwSwapBuffers(window); // swap the color buffers
|
glfwSwapBuffers(window); // swap the color buffers
|
||||||
|
|
||||||
// Poll for window events. The key callback above will only be
|
// Poll for window events. The key callback above will only be
|
||||||
// invoked during this call.
|
// invoked during this call.
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loader.cleanUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
64
client/src/main/java/core/engine/Loader.java
Normal file
64
client/src/main/java/core/engine/Loader.java
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package core.engine;
|
||||||
|
|
||||||
|
import core.engine.model.RawModel;
|
||||||
|
import org.lwjgl.BufferUtils;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.opengl.GL15;
|
||||||
|
import org.lwjgl.opengl.GL20;
|
||||||
|
import org.lwjgl.opengl.GL30;
|
||||||
|
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Loader {
|
||||||
|
|
||||||
|
private List<Integer> vaos = new ArrayList<>();
|
||||||
|
private List<Integer> vbos = new ArrayList<>();
|
||||||
|
|
||||||
|
public RawModel loadToVAO(float[] positions) {
|
||||||
|
int vaoID = createVAO();
|
||||||
|
storeDataInAttributeList(0, positions);
|
||||||
|
unbindVAO();
|
||||||
|
return new RawModel(vaoID, positions.length/3);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int createVAO() {
|
||||||
|
int vao = GL30.glGenVertexArrays();
|
||||||
|
vaos.add(vao);
|
||||||
|
GL30.glBindVertexArray(vao);
|
||||||
|
return vao;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void storeDataInAttributeList(int attributeNumber, float[] data) {
|
||||||
|
int vboID = GL15.glGenBuffers();
|
||||||
|
vbos.add(vboID);
|
||||||
|
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID);
|
||||||
|
FloatBuffer floatBuffer = storeInFloatBuffer(data);
|
||||||
|
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, floatBuffer, GL15.GL_STATIC_DRAW);
|
||||||
|
GL20.glVertexAttribPointer(attributeNumber, 3, GL11.GL_FLOAT, false, 0,0);
|
||||||
|
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unbindVAO() {
|
||||||
|
GL30.glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private FloatBuffer storeInFloatBuffer(float[] data) {
|
||||||
|
FloatBuffer floatBuffer = BufferUtils.createFloatBuffer(data.length);
|
||||||
|
floatBuffer.put(data);
|
||||||
|
//Buffer is until know expected to be written to. Flip it, so it can be read
|
||||||
|
floatBuffer.flip();
|
||||||
|
return floatBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void cleanUp() {
|
||||||
|
for(int vao: vaos) {
|
||||||
|
GL30.glDeleteVertexArrays(vao);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int vbo: vbos) {
|
||||||
|
GL15.glDeleteBuffers(vbo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
21
client/src/main/java/core/engine/Renderer.java
Normal file
21
client/src/main/java/core/engine/Renderer.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package core.engine;
|
||||||
|
|
||||||
|
import core.engine.model.RawModel;
|
||||||
|
import org.lwjgl.opengl.GL11;
|
||||||
|
import org.lwjgl.opengl.GL20;
|
||||||
|
import org.lwjgl.opengl.GL30;
|
||||||
|
|
||||||
|
public class Renderer {
|
||||||
|
|
||||||
|
public void prepare() {
|
||||||
|
GL11.glClearColor(1,0,0,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void render(RawModel rawModel) {
|
||||||
|
GL30.glBindVertexArray(rawModel.getVaoID());
|
||||||
|
GL20.glEnableVertexAttribArray(0);
|
||||||
|
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, rawModel.getVertexCount());
|
||||||
|
GL20.glDisableVertexAttribArray(0);
|
||||||
|
GL30.glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
}
|
20
client/src/main/java/core/engine/model/RawModel.java
Normal file
20
client/src/main/java/core/engine/model/RawModel.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package core.engine.model;
|
||||||
|
|
||||||
|
public class RawModel {
|
||||||
|
|
||||||
|
private final int vaoID;
|
||||||
|
private final int vertexCount;
|
||||||
|
|
||||||
|
public RawModel(int vaoID, int vertexCount) {
|
||||||
|
this.vaoID = vaoID;
|
||||||
|
this.vertexCount = vertexCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVaoID() {
|
||||||
|
return vaoID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVertexCount() {
|
||||||
|
return vertexCount;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user