From c6181c96feb3e7c5e2f1c69d5e70c819ace1f8d7 Mon Sep 17 00:00:00 2001 From: Antoine Date: Tue, 18 May 2021 21:18:26 +0200 Subject: [PATCH] ObjectGl, ObjectGlColor, ObjectGlTex added --- shaders/ObjectGl/frag.glsl | 8 +++++ shaders/ObjectGl/vert.glsl | 8 +++++ shaders/ObjectGlColor/frag.glsl | 10 ++++++ shaders/{ => ObjectGlColor}/vert.glsl | 6 ++-- shaders/ObjectGlTex/frag.glsl | 10 ++++++ shaders/ObjectGlTex/vert.glsl | 12 +++++++ shaders/frag.glsl | 10 ------ src/engine/Primitive.java | 9 ++++++ src/engine/Scene.java | 2 +- src/engine/graphics/VertexArray.java | 45 ++------------------------- src/engine/{ => object}/ObjectGl.java | 18 ++++++----- src/engine/object/ObjectGlColor.java | 18 +++++++++++ src/engine/object/ObjectGlTex.java | 18 +++++++++++ 13 files changed, 110 insertions(+), 64 deletions(-) create mode 100644 shaders/ObjectGl/frag.glsl create mode 100644 shaders/ObjectGl/vert.glsl create mode 100644 shaders/ObjectGlColor/frag.glsl rename shaders/{ => ObjectGlColor}/vert.glsl (68%) create mode 100644 shaders/ObjectGlTex/frag.glsl create mode 100644 shaders/ObjectGlTex/vert.glsl delete mode 100644 shaders/frag.glsl rename src/engine/{ => object}/ObjectGl.java (69%) create mode 100644 src/engine/object/ObjectGlColor.java create mode 100644 src/engine/object/ObjectGlTex.java diff --git a/shaders/ObjectGl/frag.glsl b/shaders/ObjectGl/frag.glsl new file mode 100644 index 0000000..9713fc4 --- /dev/null +++ b/shaders/ObjectGl/frag.glsl @@ -0,0 +1,8 @@ +#version 330 core + +out vec4 FragColor; + +void main() +{ + FragColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); +} \ No newline at end of file diff --git a/shaders/ObjectGl/vert.glsl b/shaders/ObjectGl/vert.glsl new file mode 100644 index 0000000..2565d38 --- /dev/null +++ b/shaders/ObjectGl/vert.glsl @@ -0,0 +1,8 @@ +#version 330 core + +layout (location = 0) in vec3 aPos; + +void main() +{ + gl_Position = vec4(aPos, 1.0); +} \ No newline at end of file diff --git a/shaders/ObjectGlColor/frag.glsl b/shaders/ObjectGlColor/frag.glsl new file mode 100644 index 0000000..f8d3a94 --- /dev/null +++ b/shaders/ObjectGlColor/frag.glsl @@ -0,0 +1,10 @@ +#version 330 core + +in vec3 Color; + +out vec4 FragColor; + +void main() +{ + FragColor = vec4(Color, 1.0f); +} \ No newline at end of file diff --git a/shaders/vert.glsl b/shaders/ObjectGlColor/vert.glsl similarity index 68% rename from shaders/vert.glsl rename to shaders/ObjectGlColor/vert.glsl index 5a32523..caf6adb 100644 --- a/shaders/vert.glsl +++ b/shaders/ObjectGlColor/vert.glsl @@ -1,12 +1,12 @@ #version 330 core + layout (location = 0) in vec3 aPos; layout (location = 1) in vec3 aColor; -out vec4 position; -out vec4 Color; +out vec3 Color; void main() { gl_Position = vec4(aPos, 1.0); - Color = vec4(aColor, 1.0f); + Color = aColor; } \ No newline at end of file diff --git a/shaders/ObjectGlTex/frag.glsl b/shaders/ObjectGlTex/frag.glsl new file mode 100644 index 0000000..f8d3a94 --- /dev/null +++ b/shaders/ObjectGlTex/frag.glsl @@ -0,0 +1,10 @@ +#version 330 core + +in vec3 Color; + +out vec4 FragColor; + +void main() +{ + FragColor = vec4(Color, 1.0f); +} \ No newline at end of file diff --git a/shaders/ObjectGlTex/vert.glsl b/shaders/ObjectGlTex/vert.glsl new file mode 100644 index 0000000..caf6adb --- /dev/null +++ b/shaders/ObjectGlTex/vert.glsl @@ -0,0 +1,12 @@ +#version 330 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec3 aColor; + +out vec3 Color; + +void main() +{ + gl_Position = vec4(aPos, 1.0); + Color = aColor; +} \ No newline at end of file diff --git a/shaders/frag.glsl b/shaders/frag.glsl deleted file mode 100644 index 280912a..0000000 --- a/shaders/frag.glsl +++ /dev/null @@ -1,10 +0,0 @@ -#version 330 core -out vec4 FragColor; - -in vec4 position; -in vec4 Color; - -void main() -{ - FragColor = Color; -} \ No newline at end of file diff --git a/src/engine/Primitive.java b/src/engine/Primitive.java index e072155..9f7ec19 100644 --- a/src/engine/Primitive.java +++ b/src/engine/Primitive.java @@ -31,6 +31,15 @@ public class Primitive { }; } + public static float[] createRectangle(float x, float y, float z, float w, float h){ + return new float[] { + x , y , z, + x + h, y , z, + x + h, y + w, z, + x , y + w, z + }; + } + public static float[] triangle = new float[] { 0.0f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f, diff --git a/src/engine/Scene.java b/src/engine/Scene.java index ec03c4d..7e697a3 100644 --- a/src/engine/Scene.java +++ b/src/engine/Scene.java @@ -25,7 +25,7 @@ public class Scene { this.vertices = vertices; this.indices = indices; this.shader = new Shader(vertPath, fragPath); - this.vertexArray = new VertexArray(this.vertices, this.indices); + this.vertexArray = new VertexArray(this.vertices, this.indices, null, null); } public Scene(String vertPath, String fragPath, float[] vertices, byte[] indices, float[] color, float[] texture){ diff --git a/src/engine/graphics/VertexArray.java b/src/engine/graphics/VertexArray.java index f76c654..c37d437 100644 --- a/src/engine/graphics/VertexArray.java +++ b/src/engine/graphics/VertexArray.java @@ -1,7 +1,6 @@ package engine.graphics; import engine.utils.BufferUtils; -import org.lwjgl.opengl.GL15; import static org.lwjgl.opengl.GL11.*; import static org.lwjgl.opengl.GL15.*; @@ -12,46 +11,6 @@ public class VertexArray { private int VAO ,VBO, EBO, CBO, TBO; private int count; - public VertexArray(float[] vertices, byte[] indices){ - count = indices.length; - // VERTEX ARRAY OBJECT - VAO = glGenVertexArrays(); - glBindVertexArray(VAO); - - // VERTEX BUFFER OBJECT - createVertexBufferObject(vertices); - - EBO = glGenBuffers(); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - GL15.glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW); - - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - - } - - public VertexArray(float[] vertices, byte[] indices, float[] color) { - count = indices.length; - // VERTEX ARRAY OBJECT - VAO = glGenVertexArrays(); - glBindVertexArray(VAO); - - glEnableVertexAttribArray(0); - - // VERTEX BUFFER OBJECT - createVertexBufferObject(vertices); - // COLOR BUFFER OBJECT - createColorBufferObject(color); - - EBO = glGenBuffers(); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, BufferUtils.createByteBuffer(indices), GL_STATIC_DRAW); - - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - - } - public VertexArray(float[] vertices, byte[] indices, float[] color, float[] texture) { count = indices.length; // VERTEX ARRAY OBJECT @@ -63,9 +22,9 @@ public class VertexArray { // VERTEX BUFFER OBJECT createVertexBufferObject(vertices); // COLOR BUFFER OBJECT - createColorBufferObject(color); + if (color != null) createColorBufferObject(color); // TEXTURE BUFFER OBJECT - createTextureBufferObject(texture); + if (texture != null) createTextureBufferObject(texture); EBO = glGenBuffers(); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); diff --git a/src/engine/ObjectGl.java b/src/engine/object/ObjectGl.java similarity index 69% rename from src/engine/ObjectGl.java rename to src/engine/object/ObjectGl.java index fd148b5..fefa176 100644 --- a/src/engine/ObjectGl.java +++ b/src/engine/object/ObjectGl.java @@ -1,19 +1,24 @@ -package engine; +package engine.object; +import engine.Primitive; import engine.graphics.VertexArray; import engine.graphics.Shader; import engine.math.Matrix4f; import engine.math.Vector3f; +/** + * + */ public class ObjectGl { - private VertexArray vertexArray; - private Shader shader; - private Matrix4f transform; + protected VertexArray vertexArray; + protected Shader shader; + protected Matrix4f transform; - public ObjectGl(float x, float y, float h, float w){ - // TODO Create a rectangle + public ObjectGl(float x, float y, float z, float h, float w){ + this.vertexArray = new VertexArray(Primitive.createRectangle(x, y, z, h, w), Primitive.rectangle_indices, null, null); this.transform = Matrix4f.identity(); + this.shader = new Shader("shaders/ObjectGl/vert.glsl","shaders/ObjectGl/frag.glsl"); } public void resetTransform(){ @@ -46,5 +51,4 @@ public class ObjectGl { this.shader.disable(); } - } diff --git a/src/engine/object/ObjectGlColor.java b/src/engine/object/ObjectGlColor.java new file mode 100644 index 0000000..ee4042d --- /dev/null +++ b/src/engine/object/ObjectGlColor.java @@ -0,0 +1,18 @@ +package engine.object; + +import engine.graphics.Shader; + +public class ObjectGlColor extends ObjectGl{ + + public ObjectGlColor(float x, float y, float h, float w, float[] color) { + super(x, y, h, w); + this.shader = new Shader("shaders/ObjectGlColor/vert.glsl","shaders/ObjectGlColor/frag.glsl"); + } + + @Override + public void render() { + this.shader.enable(); + this.vertexArray.render(); + this.shader.disable(); + } +} diff --git a/src/engine/object/ObjectGlTex.java b/src/engine/object/ObjectGlTex.java new file mode 100644 index 0000000..0fea018 --- /dev/null +++ b/src/engine/object/ObjectGlTex.java @@ -0,0 +1,18 @@ +package engine.object; + +import engine.graphics.Shader; + +public class ObjectGlTex extends ObjectGl{ + + public ObjectGlTex(float x, float y, float h, float w, float[] texCoord) { + super(x, y, h, w); + this.shader = new Shader("shaders/ObjectGlTex/vert.glsl","shaders/ObjectGlTex/frag.glsl"); + } + + @Override + public void render() { + this.shader.enable(); + this.vertexArray.render(); + this.shader.disable(); + } +}