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.
This commit is contained in:
2021-01-30 14:53:31 +01:00
parent bd5ad778c9
commit c4fb7ff1d8
10 changed files with 50 additions and 32 deletions

View File

@@ -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);
}
}

View File

@@ -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<Integer> 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;

View File

@@ -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

View File

@@ -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";
}

View File

@@ -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() {

View File

@@ -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);

View File

@@ -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));
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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;
}