Add ObjectLoading with sample rectangle.
This commit is contained in:
parent
b8b05ddb0e
commit
a0083f5c21
4 changed files with 106 additions and 5 deletions
54
src/main/java/com/okseby/core/ObjectLoader.java
Normal file
54
src/main/java/com/okseby/core/ObjectLoader.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
19
src/main/java/com/okseby/core/entity/Model.java
Normal file
19
src/main/java/com/okseby/core/entity/Model.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,9 +1,7 @@
|
||||||
package com.okseby.core.test;
|
package com.okseby.core.test;
|
||||||
|
|
||||||
import com.okseby.core.ILogic;
|
import com.okseby.core.*;
|
||||||
import com.okseby.core.Launcher;
|
import com.okseby.core.entity.Model;
|
||||||
import com.okseby.core.RenderManager;
|
|
||||||
import com.okseby.core.WindowManager;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
import org.lwjgl.opengl.GL11;
|
import org.lwjgl.opengl.GL11;
|
||||||
|
|
||||||
|
@ -12,16 +10,31 @@ public class TestGame implements ILogic {
|
||||||
private float color = 0.0f;
|
private float color = 0.0f;
|
||||||
|
|
||||||
private final RenderManager renderer;
|
private final RenderManager renderer;
|
||||||
|
private final ObjectLoader loader;
|
||||||
private final WindowManager window;
|
private final WindowManager window;
|
||||||
|
|
||||||
|
private Model model;
|
||||||
|
|
||||||
public TestGame() {
|
public TestGame() {
|
||||||
renderer = new RenderManager();
|
renderer = new RenderManager();
|
||||||
window = Launcher.getWindow();
|
window = Launcher.getWindow();
|
||||||
|
loader = new ObjectLoader();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() throws Exception {
|
public void init() throws Exception {
|
||||||
renderer.init();
|
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
|
@Override
|
||||||
|
@ -51,11 +64,12 @@ public class TestGame implements ILogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
window.setClearColor(color, color, color, 0.0f);
|
window.setClearColor(color, color, color, 0.0f);
|
||||||
renderer.clear();
|
renderer.render(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void cleanup() {
|
public void cleanup() {
|
||||||
renderer.cleanup();
|
renderer.cleanup();
|
||||||
|
loader.cleanup();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
src/main/java/com/okseby/core/utils/Utils.java
Normal file
14
src/main/java/com/okseby/core/utils/Utils.java
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue