From c4fb7ff1d8df8bef68a0c4048f8d6bbfe4b7de40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Sat, 30 Jan 2021 14:53:31 +0100 Subject: [PATCH] Add support for material color The GL_DEPTH_TEST (in the Window.java) has been disabled (removed) because in the 2D graphics we don't need that, even more it was making alpha color-channel unusable. --- .../core/gl/object/material/Material.java | 24 +++++++++++++++++++ .../samplegame/core/gl/object/mesh/Mesh.java | 8 +++++++ .../core/gl/render/DefaultRenderer.java | 3 ++- .../core/gl/shader/constant/UniformName.java | 1 + .../samplegame/core/ui/Window.java | 1 - .../core/world/object/RenderableObject.java | 9 +++++++ .../samplegame/core/world/object/Sprite.java | 21 ---------------- .../samplegame/core/world/scene/Scene.java | 1 + .../game/logic/DefaultGameLogic.java | 10 ++------ app/src/main/resources/shaders/default.fs | 4 +++- 10 files changed, 50 insertions(+), 32 deletions(-) create mode 100755 app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/material/Material.java delete mode 100755 app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/Sprite.java diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/material/Material.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/material/Material.java new file mode 100755 index 00000000..7b361bec --- /dev/null +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/material/Material.java @@ -0,0 +1,24 @@ +package com.bartlomiejpluta.samplegame.core.gl.object.material; + +import lombok.Getter; +import org.joml.Vector4f; + +@Getter +public class Material { + private final Vector4f color = new Vector4f(); + + private Material(float r, float g, float b, float alpha) { + setColor(r, g, b, alpha); + } + + public void setColor(float r, float g, float b, float alpha) { + color.x = r; + color.y = g; + color.z = b; + color.w = alpha; + } + + public static Material colored(float r, float g, float b, float alpha) { + return new Material(r, g, b, alpha); + } +} diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/mesh/Mesh.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/mesh/Mesh.java index a6e5db45..6c1bbb50 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/mesh/Mesh.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/object/mesh/Mesh.java @@ -1,8 +1,12 @@ package com.bartlomiejpluta.samplegame.core.gl.object.mesh; +import com.bartlomiejpluta.samplegame.core.gl.object.material.Material; import com.bartlomiejpluta.samplegame.core.gl.render.Renderable; import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager; import com.bartlomiejpluta.samplegame.core.ui.Window; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.lwjgl.opengl.GL15; import org.lwjgl.system.MemoryStack; @@ -18,6 +22,10 @@ public class Mesh implements Renderable { private final List vboIds = new ArrayList<>(2); private final int elementsCount; + @Getter + @Setter + private Material material; + public Mesh(float[] vertices, int[] elements) { try(var stack = MemoryStack.stackPush()) { elementsCount = elements.length; diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/render/DefaultRenderer.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/render/DefaultRenderer.java index ed4724fd..a42181b7 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/render/DefaultRenderer.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/render/DefaultRenderer.java @@ -24,7 +24,8 @@ public class DefaultRenderer implements Renderer { .selectShader("default") .createUniform(UniformName.UNI_MODEL_MATRIX) .createUniform(UniformName.UNI_VIEW_MATRIX) - .createUniform(UniformName.UNI_PROJECTION_MATRIX); + .createUniform(UniformName.UNI_PROJECTION_MATRIX) + .createUniform(UniformName.UNI_OBJECT_COLOR); } @Override diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/shader/constant/UniformName.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/shader/constant/UniformName.java index e35777cc..311de4bf 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/shader/constant/UniformName.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/gl/shader/constant/UniformName.java @@ -4,4 +4,5 @@ public interface UniformName { String UNI_MODEL_MATRIX = "modelMatrix"; String UNI_VIEW_MATRIX = "viewMatrix"; String UNI_PROJECTION_MATRIX = "projectionMatrix"; + String UNI_OBJECT_COLOR = "objectColor"; } diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/ui/Window.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/ui/Window.java index 04038a5b..b2c46a03 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/ui/Window.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/ui/Window.java @@ -90,7 +90,6 @@ public class Window { // Set the clear color glClearColor(0.0f, 0.0f, 0.0f, 0.0f); - glEnable(GL_DEPTH_TEST); } public void update() { diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/RenderableObject.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/RenderableObject.java index cd17c954..0d433072 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/RenderableObject.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/RenderableObject.java @@ -1,5 +1,6 @@ package com.bartlomiejpluta.samplegame.core.world.object; +import com.bartlomiejpluta.samplegame.core.gl.object.material.Material; import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh; import com.bartlomiejpluta.samplegame.core.gl.render.Renderable; import com.bartlomiejpluta.samplegame.core.gl.shader.manager.ShaderManager; @@ -10,6 +11,14 @@ import lombok.RequiredArgsConstructor; public abstract class RenderableObject extends Object implements Renderable { private final Mesh mesh; + public void setMaterial(Material material) { + mesh.setMaterial(material); + } + + public Material getMaterial() { + return mesh.getMaterial(); + } + @Override public void render(Window window, ShaderManager shaderManager) { mesh.render(window, shaderManager); diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/Sprite.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/Sprite.java deleted file mode 100755 index b84b749e..00000000 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/object/Sprite.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.bartlomiejpluta.samplegame.core.world.object; - -import com.bartlomiejpluta.samplegame.core.gl.object.mesh.Mesh; - -public class Sprite extends RenderableObject { - private static final float[] VERTICES = new float[]{ - -0.5f, 0.5f, 0.0f, - -0.5f, -0.5f, 0.0f, - 0.5f, -0.5f, 0.0f, - 0.5f, 0.5f, 0.0f - }; - - private static final int[] ELEMENTS = new int[]{ - 0, 1, 2, - 2, 3, 0 - }; - - public Sprite() { - super(new Mesh(VERTICES, ELEMENTS)); - } -} diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/scene/Scene.java b/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/scene/Scene.java index 663248cf..88e7bbdf 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/scene/Scene.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/core/world/scene/Scene.java @@ -28,6 +28,7 @@ public class Scene implements Renderable { for(var object : objects) { shaderManager.setUniform(UniformName.UNI_MODEL_MATRIX, object.getModelMatrix()); + shaderManager.setUniform(UniformName.UNI_OBJECT_COLOR, object.getMaterial().getColor()); object.render(window, shaderManager); } } diff --git a/app/src/main/java/com/bartlomiejpluta/samplegame/game/logic/DefaultGameLogic.java b/app/src/main/java/com/bartlomiejpluta/samplegame/game/logic/DefaultGameLogic.java index 496713a2..54b540c9 100755 --- a/app/src/main/java/com/bartlomiejpluta/samplegame/game/logic/DefaultGameLogic.java +++ b/app/src/main/java/com/bartlomiejpluta/samplegame/game/logic/DefaultGameLogic.java @@ -1,14 +1,13 @@ package com.bartlomiejpluta.samplegame.game.logic; +import com.bartlomiejpluta.samplegame.core.gl.object.material.Material; import com.bartlomiejpluta.samplegame.core.gl.render.Renderer; import com.bartlomiejpluta.samplegame.core.logic.GameLogic; import com.bartlomiejpluta.samplegame.core.ui.Window; import com.bartlomiejpluta.samplegame.core.world.camera.Camera; -import com.bartlomiejpluta.samplegame.core.world.object.Sprite; import com.bartlomiejpluta.samplegame.core.world.scene.Scene; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.joml.Vector3f; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -20,17 +19,12 @@ public class DefaultGameLogic implements GameLogic { private final Camera camera = new Camera(); private final Scene scene = new Scene(camera); - Sprite sprite; - @Override public void init(Window window) { log.info("Initializing game logic"); renderer.init(); - sprite = new Sprite(); - sprite.setPosition(window.getWidth() / 2.0f, window.getHeight() / 2.0f); - sprite.setScale(100); - scene.add(sprite); + } @Override diff --git a/app/src/main/resources/shaders/default.fs b/app/src/main/resources/shaders/default.fs index fc27f053..988d710c 100755 --- a/app/src/main/resources/shaders/default.fs +++ b/app/src/main/resources/shaders/default.fs @@ -1,8 +1,10 @@ #version 330 +uniform vec4 objectColor; + out vec4 fragColor; void main() { - fragColor = vec4(0.0, 0.5, 0.5, 1.0); + fragColor = objectColor; } \ No newline at end of file