From 4ea7ec4b21fbb0e4662b47e636296138f59a9d00 Mon Sep 17 00:00:00 2001 From: EvilMuffinHa Date: Sun, 10 May 2020 12:56:21 -0400 Subject: [PATCH] adding textures (to texture branch, split due to errors) --- src/Test.java | 17 ++++----- src/org/hl/engine/graphics/Material.java | 6 +++- src/org/hl/engine/graphics/Mesh.java | 32 +++++++++++++++-- src/org/hl/engine/graphics/Renderer.java | 7 ++++ src/org/hl/engine/graphics/Vertex.java | 9 +++-- src/org/hl/engine/io/Display.java | 6 ++-- src/org/hl/engine/math/lalg/Vector2f.java | 33 ++++++++++++++++++ .../hl/engine/math/{ => lalg}/Vector3f.java | 2 +- src/resources/shaders/mainFragment.glsl | 7 ++-- src/resources/shaders/mainVertex.glsl | 9 +++-- src/resources/textures/testimg.png | Bin 0 -> 5785 bytes 11 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 src/org/hl/engine/math/lalg/Vector2f.java rename src/org/hl/engine/math/{ => lalg}/Vector3f.java (95%) create mode 100644 src/resources/textures/testimg.png diff --git a/src/Test.java b/src/Test.java index 1c153f3..5b2423e 100644 --- a/src/Test.java +++ b/src/Test.java @@ -1,10 +1,7 @@ -import org.hl.engine.graphics.Mesh; -import org.hl.engine.graphics.Renderer; -import org.hl.engine.graphics.Shader; -import org.hl.engine.graphics.Vertex; +import org.hl.engine.graphics.*; import org.hl.engine.io.Display; import org.hl.engine.io.Input; -import org.hl.engine.math.Vector3f; +import org.hl.engine.math.lalg.*; import org.lwjgl.glfw.GLFW; @@ -18,16 +15,16 @@ public class Test { public Shader shader; public Mesh mesh = new Mesh(new Vertex[] { - new Vertex(new Vector3f(-0.5F, 0.5F, 0.0F), new Vector3f(0, 0, 1.0F)), - new Vertex(new Vector3f(-0.5F, -0.5F, 0.0F), new Vector3f(0, 0, 1.0F)), - new Vertex(new Vector3f(0.5F, -0.5F, 0.0F), new Vector3f(1.0F, 0, 1.0F)), - new Vertex(new Vector3f(0.5F, 0.5F, 0.0F), new Vector3f(1.0F, 0, 1.0F) ), + new Vertex(new Vector3f(-0.5F, 0.5F, 0.0F), new Vector3f(0, 0, 1.0F), new Vector2f(0, 0)), + new Vertex(new Vector3f(-0.5F, -0.5F, 0.0F), new Vector3f(0, 0, 1.0F), new Vector2f(0, 1)), + new Vertex(new Vector3f(0.5F, -0.5F, 0.0F), new Vector3f(1.0F, 0, 1.0F), new Vector2f(1, 1)), + new Vertex(new Vector3f(0.5F, 0.5F, 0.0F), new Vector3f(1.0F, 0, 1.0F), new Vector2f(1, 0)), }, new int[] { 0, 1, 2, 0, 2, 3 - }); + }, new Material("/resources/textures/testimg.png")); public void run() { init(); diff --git a/src/org/hl/engine/graphics/Material.java b/src/org/hl/engine/graphics/Material.java index becaef4..52321c5 100644 --- a/src/org/hl/engine/graphics/Material.java +++ b/src/org/hl/engine/graphics/Material.java @@ -10,6 +10,8 @@ public class Material { private Texture texture; + private String path; + private BufferedImage image; private int width, height; @@ -17,10 +19,12 @@ public class Material { public Material(String path) { - this.image = TextureLoader.loadImage(path); //The path is inside the jar file + this.path = path; } public void create() { + + this.image = TextureLoader.loadImage(path); //The path is inside the jar file this.width = this.image.getWidth(); this.height = this.image.getHeight(); this.textureID = TextureLoader.loadTexture(image); diff --git a/src/org/hl/engine/graphics/Mesh.java b/src/org/hl/engine/graphics/Mesh.java index b6d6194..99e4e49 100644 --- a/src/org/hl/engine/graphics/Mesh.java +++ b/src/org/hl/engine/graphics/Mesh.java @@ -12,12 +12,14 @@ import java.nio.IntBuffer; public class Mesh { private Vertex[] vertices; private int[] indices; - private int vertexArrayObject, positionBufferObject, indicesBufferObject, colorBufferObject; + private int vertexArrayObject, positionBufferObject, indicesBufferObject, colorBufferObject, textureBufferObject; + private Material material; // A group of vertices combined based on the indexes - public Mesh(Vertex[] vertices, int[] indices) { + public Mesh(Vertex[] vertices, int[] indices, Material material) { this.vertices = vertices; this.indices = indices; + this.material = material; } // Destroy the mesh @@ -25,8 +27,12 @@ public class Mesh { GL15.glDeleteBuffers(positionBufferObject); GL15.glDeleteBuffers(indicesBufferObject); GL15.glDeleteBuffers(colorBufferObject); + GL30.glDeleteBuffers(textureBufferObject); GL30.glDeleteVertexArrays(vertexArrayObject); + + material.destroy(); + } // getters for the mesh @@ -55,8 +61,18 @@ public class Mesh { return colorBufferObject; } + public int getTextureBufferObject() { + return textureBufferObject; + } + + public Material getMaterial() { + return material; + } + public void create() { + material.create(); + // Creates the mesh by formatting the vertices and indices and inputting them to OpenGL vertexArrayObject = GL30.glGenVertexArrays(); GL30.glBindVertexArray(vertexArrayObject); @@ -88,6 +104,18 @@ public class Mesh { colorBufferObject = storeData(colorBuffer, 1, 3); + // Putting the texture into the buffer so renderer and shader can read it + + FloatBuffer textureBuffer = MemoryUtil.memAllocFloat(vertices.length * 2); + float[] textureData = new float[vertices.length * 2]; + for (int i = 0; i < vertices.length; i ++ ) { + textureData[i * 2] = vertices[i].getTextureCoords().getX(); + textureData[i * 2 + 1] = vertices[i].getTextureCoords().getY(); + } + textureBuffer.put(textureData).flip(); + + textureBufferObject = storeData(textureBuffer, 2, 2); + IntBuffer indicesBuffer = MemoryUtil.memAllocInt(indices.length); indicesBuffer.put(indices).flip(); diff --git a/src/org/hl/engine/graphics/Renderer.java b/src/org/hl/engine/graphics/Renderer.java index 17f7c53..e85fca5 100644 --- a/src/org/hl/engine/graphics/Renderer.java +++ b/src/org/hl/engine/graphics/Renderer.java @@ -1,6 +1,7 @@ package org.hl.engine.graphics; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL13; import org.lwjgl.opengl.GL15; import org.lwjgl.opengl.GL30; @@ -19,8 +20,13 @@ public class Renderer { GL30.glBindVertexArray(mesh.getVertexArrayObject()); GL30.glEnableVertexAttribArray(0); GL30.glEnableVertexAttribArray(1); + GL30.glEnableVertexAttribArray(2); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, mesh.getIndicesBufferObject()); + GL13.glActiveTexture(GL13.GL_TEXTURE0); + + GL13.glBindTexture(GL11.GL_TEXTURE_2D, mesh.getMaterial().getTextureID()); + shader.bind(); GL11.glDrawElements(GL11.GL_TRIANGLES, mesh.getIndices().length, GL11.GL_UNSIGNED_INT, 0); @@ -28,6 +34,7 @@ public class Renderer { shader.unbind(); GL30.glDisableVertexAttribArray(0); GL30.glDisableVertexAttribArray(1); + GL30.glDisableVertexAttribArray(2); GL30.glBindVertexArray(0); } diff --git a/src/org/hl/engine/graphics/Vertex.java b/src/org/hl/engine/graphics/Vertex.java index 5e2df5b..4a2d4ce 100644 --- a/src/org/hl/engine/graphics/Vertex.java +++ b/src/org/hl/engine/graphics/Vertex.java @@ -1,6 +1,6 @@ package org.hl.engine.graphics; -import org.hl.engine.math.Vector3f; +import org.hl.engine.math.lalg.*; public class Vertex { @@ -8,8 +8,9 @@ public class Vertex { private Vector3f position; private Vector3f color; + private Vector2f textureCoords; - public Vertex (Vector3f position, Vector3f color) { + public Vertex (Vector3f position, Vector3f color, Vector2f texture) { this.position = position; this.color = color; } @@ -21,4 +22,8 @@ public class Vertex { public Vector3f getColor() { return color; } + + public Vector2f getTextureCoords() { + return textureCoords; + } } diff --git a/src/org/hl/engine/io/Display.java b/src/org/hl/engine/io/Display.java index 0c0c5ec..d9126f7 100644 --- a/src/org/hl/engine/io/Display.java +++ b/src/org/hl/engine/io/Display.java @@ -1,5 +1,5 @@ package org.hl.engine.io; -import org.hl.engine.math.Vector3f; +import org.hl.engine.math.lalg.Vector3f; import org.lwjgl.glfw.GLFWVidMode; import org.lwjgl.glfw.GLFWWindowSizeCallback; import org.lwjgl.opengl.GL; @@ -102,8 +102,8 @@ public class Display { System.exit(1); } - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL11.GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); diff --git a/src/org/hl/engine/math/lalg/Vector2f.java b/src/org/hl/engine/math/lalg/Vector2f.java new file mode 100644 index 0000000..e1e990c --- /dev/null +++ b/src/org/hl/engine/math/lalg/Vector2f.java @@ -0,0 +1,33 @@ +package org.hl.engine.math.lalg; + +public class Vector2f { + private float x; + private float y; + + // Just a vector if you know what I mean + public Vector2f (float x, float y) { + this.x = x; + this.y = y; + } + + public void setVector(float x, float y) { + this.x = x; + this.y = y; + } + + public float getX() { + return x; + } + + public void setX(float x) { + this.x = x; + } + + public float getY() { + return y; + } + + public void setY(float y) { + this.y = y; + } +} diff --git a/src/org/hl/engine/math/Vector3f.java b/src/org/hl/engine/math/lalg/Vector3f.java similarity index 95% rename from src/org/hl/engine/math/Vector3f.java rename to src/org/hl/engine/math/lalg/Vector3f.java index fa1da5e..b2a87f0 100644 --- a/src/org/hl/engine/math/Vector3f.java +++ b/src/org/hl/engine/math/lalg/Vector3f.java @@ -1,4 +1,4 @@ -package org.hl.engine.math; +package org.hl.engine.math.lalg; public class Vector3f { private float x; diff --git a/src/resources/shaders/mainFragment.glsl b/src/resources/shaders/mainFragment.glsl index 85d4098..4be6a4c 100644 --- a/src/resources/shaders/mainFragment.glsl +++ b/src/resources/shaders/mainFragment.glsl @@ -1,9 +1,12 @@ -#version 330 core +#version 460 core in vec3 passColor; +in vec2 passTextureCoord; out vec4 outColor; +uniform sampler2D tex; + void main() { - outColor = vec4(passColor, 1.0); + outColor = texture(tex, passTextureCoord); } diff --git a/src/resources/shaders/mainVertex.glsl b/src/resources/shaders/mainVertex.glsl index 9ae1698..013665a 100644 --- a/src/resources/shaders/mainVertex.glsl +++ b/src/resources/shaders/mainVertex.glsl @@ -1,11 +1,14 @@ -#version 330 core +#version 460 core -layout(location = 0) in vec3 position; -layout(location = 1) in vec3 color; +in vec3 position; +in vec3 color; +in vec2 textureCoord; out vec3 passColor; +out vec2 passTextureCoord; void main() { gl_Position = vec4(position, 1.0); passColor = color; + passTextureCoord = textureCoord; } \ No newline at end of file diff --git a/src/resources/textures/testimg.png b/src/resources/textures/testimg.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe963ef4dd2c0a504e694b733c8f1f274fe07cb GIT binary patch literal 5785 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 N6T@o;6?%5z{|D3YR%`$O literal 0 HcmV?d00001