Add ObjectLoading with sample rectangle.

This commit is contained in:
Sebastian Cabrera 2023-05-26 23:04:50 -04:00
parent b8b05ddb0e
commit a0083f5c21
4 changed files with 106 additions and 5 deletions

View file

@ -0,0 +1,54 @@
package com.okseby.core;
import com.okseby.core.entity.Model;
import com.okseby.core.utils.Utils;
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 ObjectLoader {
private List<Integer> vaos = new ArrayList<>();
private List<Integer> vbos = new ArrayList<>();
public Model loadModel(float[] vertices) {
int id = createVAO();
storeDataInAttributeList(0, 3, vertices);
unbind();
return new Model(id, vertices.length / 3);
}
private int createVAO() {
int id = GL30.glGenVertexArrays();
vaos.add(id);
GL30.glBindVertexArray(id);
return id;
}
private void storeDataInAttributeList(int attributeNumber, int vertexCount, float[] data) {
int vbo = GL15.glGenBuffers();
vbos.add(vbo);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbo);
FloatBuffer buffer = Utils.storeDataInFloatBuffer(data);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, buffer, GL15.GL_STATIC_DRAW);
GL20.glVertexAttribPointer(attributeNumber, vertexCount, GL11.GL_FLAT, false, 0, 0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
}
private void unbind() {
GL30.glBindVertexArray(0);
}
public void cleanup() {
for (int vao : vaos)
GL30.glDeleteVertexArrays(vao);
for (int vbo : vbos)
GL30.glDeleteBuffers(vbo);
}
}

View file

@ -0,0 +1,19 @@
package com.okseby.core.entity;
public class Model {
private int id;
private int vertexCount;
public Model(int id, int vertexCount) {
this.id = id;
this.vertexCount = vertexCount;
}
public int getId() {
return id;
}
public int getVertexCount() {
return vertexCount;
}
}

View file

@ -1,9 +1,7 @@
package com.okseby.core.test;
import com.okseby.core.ILogic;
import com.okseby.core.Launcher;
import com.okseby.core.RenderManager;
import com.okseby.core.WindowManager;
import com.okseby.core.*;
import com.okseby.core.entity.Model;
import org.lwjgl.glfw.GLFW;
import org.lwjgl.opengl.GL11;
@ -12,16 +10,31 @@ public class TestGame implements ILogic {
private float color = 0.0f;
private final RenderManager renderer;
private final ObjectLoader loader;
private final WindowManager window;
private Model model;
public TestGame() {
renderer = new RenderManager();
window = Launcher.getWindow();
loader = new ObjectLoader();
}
@Override
public void init() throws Exception {
renderer.init();
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
};
model = loader.loadModel(vertices);
}
@Override
@ -51,11 +64,12 @@ public class TestGame implements ILogic {
}
window.setClearColor(color, color, color, 0.0f);
renderer.clear();
renderer.render(model);
}
@Override
public void cleanup() {
renderer.cleanup();
loader.cleanup();
}
}

View file

@ -0,0 +1,14 @@
package com.okseby.core.utils;
import org.lwjgl.system.MemoryUtil;
import java.nio.FloatBuffer;
public class Utils {
public static FloatBuffer storeDataInFloatBuffer(float[] data) {
FloatBuffer buffer = MemoryUtil.memAllocFloat(data.length);
buffer.put(data).flip();
return buffer;
}
}