diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java index 3456982a..a57d07cf 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/core/gl/object/mesh/Mesh.java @@ -20,6 +20,16 @@ import static org.lwjgl.opengl.GL20.*; import static org.lwjgl.opengl.GL30.*; public class Mesh implements Renderable, Disposable { + // default.vs: layout(location=0) in vec2 position; + // ^ ^ + private static final int POSITION_VECTOR_LAYOUT_INDEX = 0; + private static final int POSITION_VECTOR_LENGTH = 2; + + // default.vs: layout(location=1) in vec2 texCoord; + // ^ ^ + private static final int TEX_COORDS_VECTOR_LAYOUT_INDEX = 1; + private static final int TEX_COORDS_VECTOR_LENGTH = 2; + private final int vaoId; private final List vboIds = new ArrayList<>(2); private final int elementsCount; @@ -43,14 +53,14 @@ public class Mesh implements Renderable, Disposable { vboIds.add(vboId); glBindBuffer(GL_ARRAY_BUFFER, vboId); glBufferData(GL_ARRAY_BUFFER, stack.mallocFloat(vertices.length).put(vertices).flip(), GL_STATIC_DRAW); - glVertexAttribPointer(0, 2, GL_FLOAT, false, 0, 0); + glVertexAttribPointer(POSITION_VECTOR_LAYOUT_INDEX, POSITION_VECTOR_LENGTH, GL_FLOAT, false, 0, 0); // Texture Coordinates VBO vboId = glGenBuffers(); vboIds.add(vboId); glBindBuffer(GL_ARRAY_BUFFER, vboId); glBufferData(GL_ARRAY_BUFFER, stack.mallocFloat(texCoords.length).put(texCoords).flip(), GL_STATIC_DRAW); - glVertexAttribPointer(1, 2, GL_FLOAT, false, 0, 0); + glVertexAttribPointer(TEX_COORDS_VECTOR_LAYOUT_INDEX, TEX_COORDS_VECTOR_LENGTH, GL_FLOAT, false, 0, 0); // Elements VBO vboId = glGenBuffers(); @@ -122,16 +132,53 @@ public class Mesh implements Renderable, Disposable { } public static Mesh quad(float width, float height, float originX, float originY) { - var vertices = new float[] { - -originX, -originY, - -originX, height - originY, - width - originX, height - originY, - width - originX, - originY + // 1 ----------- 2 + // | | + // | | + // | | + // | | + // | | + // 0 ----------- 3 + var vertices = new float[]{ + -originX, -originY, // 0 - bottom left + -originX, height - originY, // 1 - top left + width - originX, height - originY, // 2 - top right + width - originX, -originY // 3 - bottom right }; - var texCoords = new float[] { 0, 0, 0, 1, 1, 1, 1, 0 }; + // Texture: Quad: + // (0,1) ---- (1,1) 1 ----------- 2 + // | | | | + // | | => | TEKSTURA | + // | | | | + // (0,0) ---- (1,0) 0 ----------- 3 + var texCoords = new float[]{ + 0, 0, // 0 - bottom left + 0, 1, // 1 - top left + 1, 1, // 2 - top right + 1, 0 // 3 - bottom right + }; - var elements = new int[] { 0, 1, 2, 2, 3, 0 }; + + var elements = new int[]{ + // First triangle: indices 0-1-2 + // 1 ----------- 2 + // |XXXXXXXXXXX╱ | + // |XXXXXXXX╱ | + // |XXXXX╱ | + // |XX╱ | + // 0 ----------- 3 + 0, 1, 2, + + // Second triangle: indices 2-3-0 + // 1 ----------- 2 + // | ╱X| + // | ╱XXXX| + // | ╱XXXXXXX| + // | ╱XXXXXXXXXX| + // 0 ----------- 3 + 2, 3, 0 + }; return new Mesh(vertices, texCoords, elements); }