Enable stacking shaders
This commit is contained in:
@@ -6,11 +6,9 @@ import org.joml.*;
|
||||
public interface ShaderManager extends Cleanable {
|
||||
ShaderManager createShader(String programName, String vertexShaderFilename, String fragmentShaderFilename);
|
||||
|
||||
ShaderManager selectShader(String programName);
|
||||
ShaderManager activateShader(String programName);
|
||||
|
||||
ShaderManager useSelectedShader();
|
||||
|
||||
ShaderManager detachCurrentShader();
|
||||
ShaderManager deactivateShader();
|
||||
|
||||
ShaderManager createUniform(String uniformName);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.bartlomiejpluta.base.api.camera.Camera;
|
||||
import com.bartlomiejpluta.base.api.screen.Screen;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.CounterName;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.RenderConstants;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.Shader;
|
||||
import com.bartlomiejpluta.base.engine.core.gl.shader.constant.UniformName;
|
||||
import com.bartlomiejpluta.base.internal.render.Renderable;
|
||||
import com.bartlomiejpluta.base.internal.render.ShaderManager;
|
||||
@@ -12,6 +13,8 @@ import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.lwjgl.opengl.GL15.*;
|
||||
|
||||
@Slf4j
|
||||
@@ -23,9 +26,15 @@ public class DefaultRenderer implements Renderer {
|
||||
@Override
|
||||
public void init() {
|
||||
log.info("Initializing renderer");
|
||||
|
||||
log.info("Registering shaders");
|
||||
for (var shader : Shader.values()) {
|
||||
shaderManager.createShader(shader.name, shader.vertex, shader.fragment);
|
||||
}
|
||||
|
||||
log.info("Registering uniforms");
|
||||
shaderManager
|
||||
.createShader("default", "/shaders/default.vs", "/shaders/default.fs")
|
||||
.selectShader("default")
|
||||
.activateShader(Shader.DEFAULT.name)
|
||||
.createUniform(UniformName.UNI_VIEW_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_MODEL_MATRIX)
|
||||
.createUniform(UniformName.UNI_PROJECTION_MATRIX)
|
||||
@@ -52,7 +61,7 @@ public class DefaultRenderer implements Renderer {
|
||||
clear();
|
||||
updateViewport(screen);
|
||||
|
||||
shaderManager.selectShader("default").useSelectedShader();
|
||||
shaderManager.activateShader(Shader.DEFAULT.name);
|
||||
shaderManager.resetCounters();
|
||||
|
||||
// Important note:
|
||||
@@ -62,7 +71,7 @@ public class DefaultRenderer implements Renderer {
|
||||
camera.render(screen, shaderManager);
|
||||
renderable.render(screen, camera, shaderManager);
|
||||
|
||||
shaderManager.detachCurrentShader();
|
||||
shaderManager.deactivateShader();
|
||||
|
||||
screen.restoreState();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.bartlomiejpluta.base.engine.core.gl.shader.constant;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public enum Shader {
|
||||
DEFAULT("default", "/shaders/default.vs", "/shaders/default.fs");
|
||||
|
||||
public final String name;
|
||||
public final String vertex;
|
||||
public final String fragment;
|
||||
}
|
||||
@@ -12,7 +12,9 @@ import org.joml.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@@ -25,6 +27,7 @@ public class DefaultShaderManager implements ShaderManager {
|
||||
private final ResourcesManager resourcesManager;
|
||||
private final Map<String, ShaderProgram> shaders = new HashMap<>();
|
||||
private final Map<String, AtomicInteger> counters = new HashMap<>();
|
||||
private final Deque<ShaderProgram> stack = new LinkedList<>();
|
||||
private ShaderProgram current;
|
||||
|
||||
@Override
|
||||
@@ -40,20 +43,19 @@ public class DefaultShaderManager implements ShaderManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShaderManager selectShader(String programName) {
|
||||
public ShaderManager activateShader(String programName) {
|
||||
current = shaders.get(programName);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShaderManager useSelectedShader() {
|
||||
stack.push(current);
|
||||
current.use();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ShaderManager detachCurrentShader() {
|
||||
public ShaderManager deactivateShader() {
|
||||
current.detach();
|
||||
stack.pop();
|
||||
current = stack.peek();
|
||||
current.use();
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user