Skip to content

Commit 3e777f2

Browse files
committed
Migrate all shaders to global uniforms
1 parent cd8d640 commit 3e777f2

File tree

12 files changed

+54
-72
lines changed

12 files changed

+54
-72
lines changed

src/api/java/io/karma/pda/api/client/render/shader/uniform/UniformBuffer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
public interface UniformBuffer {
1717
int getId();
1818

19-
int getBindingPoint();
19+
int getBufferId();
2020

2121
UniformCache getCache();
2222

src/foundation/java/io/karma/pda/foundation/client/render/ComponentRenderTypes.java

+17-15
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,13 @@
2828
@OnlyIn(Dist.CLIENT)
2929
public final class ComponentRenderTypes {
3030
// @formatter:off
31-
private static final ShaderProgram SPINNER_SHADER = ClientAPI.getShaderHandler().create(builder -> builder
32-
.shader(object -> object
33-
.type(ShaderType.VERTEX)
34-
.location(Constants.MODID, "shaders/spinner.vert.glsl")
35-
.defaultPreProcessor()
36-
)
37-
.shader(object -> object
38-
.type(ShaderType.FRAGMENT)
39-
.location(Constants.MODID, "shaders/spinner.frag.glsl")
40-
.defaultPreProcessor()
41-
)
42-
.defaultUniforms()
43-
.uniformTime()
44-
);
31+
private static ShaderProgram spinnerShader;
4532
public static final Function<DisplayMode, RenderType> SPINNER = Util.memoize(displayMode ->
4633
RenderType.create(String.format("pda_display_spinner__%s", displayMode),
4734
DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.TRIANGLES, 256, false, false,
4835
RenderType.CompositeState.builder()
4936
.setCullState(RenderStateShard.NO_CULL)
50-
.setShaderState(SPINNER_SHADER.asStateShard())
37+
.setShaderState(spinnerShader.asStateShard())
5138
.setOutputState(displayMode.getOutputState())
5239
.setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
5340
.setLayeringState(RenderStateShard.POLYGON_OFFSET_LAYERING)
@@ -60,5 +47,20 @@ private ComponentRenderTypes() {
6047

6148
@Internal
6249
public static void createShaders() {
50+
// @formatter:off
51+
spinnerShader = ClientAPI.getShaderHandler().create(builder -> builder
52+
.shader(object -> object
53+
.type(ShaderType.VERTEX)
54+
.location(Constants.MODID, "shaders/spinner.vert.glsl")
55+
.defaultPreProcessor()
56+
)
57+
.shader(object -> object
58+
.type(ShaderType.FRAGMENT)
59+
.location(Constants.MODID, "shaders/spinner.frag.glsl")
60+
.defaultPreProcessor()
61+
)
62+
.globalUniforms()
63+
);
64+
// @formatter:on
6365
}
6466
}

src/main/java/io/karma/pda/mod/client/render/graphics/GraphicsRenderTypes.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public static void createShaders() { // @formatter:off
7777
.location(Constants.MODID, "shaders/display_color.frag.glsl")
7878
.defaultPreProcessor()
7979
)
80-
.defaultUniforms()
80+
.globalUniforms()
8181
);
8282
colorTexShader = DefaultShaderHandler.INSTANCE.create(builder -> builder
8383
.shader(object -> object
@@ -91,7 +91,7 @@ public static void createShaders() { // @formatter:off
9191
.defaultPreProcessor()
9292
)
9393
.sampler("Sampler0")
94-
.defaultUniforms()
94+
.globalUniforms()
9595
);
9696
} // @formatter:on
9797

src/main/java/io/karma/pda/mod/client/render/shader/DefaultUniformBuffer.java

+19-18
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.karma.pda.api.client.render.shader.uniform.UniformBuffer;
1010
import io.karma.pda.api.client.render.shader.uniform.UniformCache;
1111
import io.karma.pda.api.dispose.Disposable;
12-
import io.karma.pda.api.util.HashUtils;
1312
import io.karma.pda.api.util.LogMarkers;
1413
import io.karma.pda.mod.PDAMod;
1514
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
@@ -30,18 +29,17 @@ public final class DefaultUniformBuffer implements UniformBuffer, Disposable {
3029
private final BiConsumer<ShaderProgram, UniformBuffer> bindCallback;
3130
private final BiConsumer<ShaderProgram, UniformBuffer> unbindCallback;
3231
private final int size;
33-
private final int bindingPoint;
3432
private final Object2IntOpenHashMap<String> fieldOffsets = new Object2IntOpenHashMap<>();
35-
private int id = -1;
33+
private final int id;
34+
private int bufferId = -1;
3635

3736
public DefaultUniformBuffer(final LinkedHashMap<String, Uniform> uniforms,
3837
final BiConsumer<ShaderProgram, UniformBuffer> bindCallback,
3938
final BiConsumer<ShaderProgram, UniformBuffer> unbindCallback,
40-
final int bindingPoint) {
39+
final int id) {
4140
this.bindCallback = bindCallback;
4241
this.unbindCallback = unbindCallback;
43-
this.bindingPoint = bindingPoint;
44-
42+
this.id = id;
4543
cache = new DefaultUniformCache(uniforms);
4644
size = cache.getAll().values().stream().mapToInt(u -> u.getType().getAlignedSize()).sum();
4745

@@ -61,26 +59,29 @@ public int getId() {
6159
}
6260

6361
@Override
64-
public int getBindingPoint() {
65-
return bindingPoint;
62+
public int getBufferId() {
63+
return bufferId;
6664
}
6765

6866
@Override
6967
public void setup(final String name, final ShaderProgram program) {
70-
if (id == -1) {
71-
id = GL15.glGenBuffers();
72-
GL15.glBindBuffer(GL33.GL_UNIFORM_BUFFER, id);
68+
if (bufferId == -1) {
69+
bufferId = GL15.glGenBuffers();
70+
GL15.glBindBuffer(GL33.GL_UNIFORM_BUFFER, bufferId);
7371
GL15.glBufferData(GL33.GL_UNIFORM_BUFFER, size, GL20.GL_STATIC_DRAW);
7472
GL15.glBindBuffer(GL33.GL_UNIFORM_BUFFER, 0);
75-
PDAMod.LOGGER.debug(LogMarkers.RENDERER, "Created new uniform buffer object {} with {} bytes", id, size);
73+
PDAMod.LOGGER.debug(LogMarkers.RENDERER,
74+
"Created new uniform buffer object {} with {} bytes",
75+
bufferId,
76+
size);
7677
}
7778
final var blockIndex = program.getUniformBlockIndex(name);
78-
GL31.glUniformBlockBinding(program.getId(), blockIndex, bindingPoint);
79+
GL31.glUniformBlockBinding(program.getId(), blockIndex, id);
7980
PDAMod.LOGGER.debug(LogMarkers.RENDERER,
8081
"Associated uniform block index {} with binding point {}",
8182
blockIndex,
82-
bindingPoint);
83-
GL30.glBindBufferBase(GL33.GL_UNIFORM_BUFFER, bindingPoint, id);
83+
id);
84+
GL30.glBindBufferBase(GL33.GL_UNIFORM_BUFFER, id, bufferId);
8485
}
8586

8687
@Override
@@ -111,16 +112,16 @@ public int getFieldOffset(final String name) {
111112

112113
@Override
113114
public void dispose() {
114-
GL15.glDeleteBuffers(id);
115+
GL15.glDeleteBuffers(bufferId);
115116
}
116117

117118
@Override
118119
public int hashCode() {
119-
return HashUtils.combine(bindingPoint, cache.hashCode());
120+
return cache.hashCode();
120121
}
121122

122123
@Override
123124
public String toString() {
124-
return String.format("DefaultUniformBuffer[id=%d,size=%d]", id, size);
125+
return String.format("DefaultUniformBuffer[id=%d,size=%d]", bufferId, size);
125126
}
126127
}

src/main/java/io/karma/pda/mod/client/render/shader/DefaultUniformBufferBuilder.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
public final class DefaultUniformBufferBuilder implements UniformBufferBuilder {
2424
private static final BiConsumer<ShaderProgram, UniformBuffer> IDENTITY_CALLBACK = (s, b) -> {
2525
};
26-
private static int nextBindingPoint;
26+
private static int nextGlobalIndex;
2727

2828
private final LinkedHashMap<String, Uniform> uniforms = new LinkedHashMap<>();
2929
private BiConsumer<ShaderProgram, UniformBuffer> bindCallback = IDENTITY_CALLBACK;
@@ -59,6 +59,6 @@ public UniformBufferBuilder onUnbind(final BiConsumer<ShaderProgram, UniformBuff
5959
}
6060

6161
public DefaultUniformBuffer build() {
62-
return new DefaultUniformBuffer(uniforms, bindCallback, unbindCallback, nextBindingPoint++);
62+
return new DefaultUniformBuffer(uniforms, bindCallback, unbindCallback, nextGlobalIndex++);
6363
}
6464
}

src/main/java/io/karma/pda/mod/client/render/shader/DefaultUniformCache.java

+1-19
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import io.karma.pda.api.util.HashUtils;
1212
import net.minecraftforge.api.distmarker.Dist;
1313
import net.minecraftforge.api.distmarker.OnlyIn;
14-
import org.jetbrains.annotations.ApiStatus.Internal;
1514
import org.lwjgl.opengl.GL15;
1615
import org.lwjgl.opengl.GL33;
1716

@@ -31,11 +30,6 @@ public final class DefaultUniformCache implements UniformCache {
3130
this.uniforms = uniforms;
3231
}
3332

34-
@Internal
35-
public void merge(final UniformCache cache) {
36-
uniforms.putAll(cache.getAll());
37-
}
38-
3933
@Override
4034
public Map<String, Uniform> getAll() {
4135
return uniforms;
@@ -51,20 +45,8 @@ public void applyAll(final ShaderProgram program) {
5145
@Override
5246
public void uploadAll(final UniformBuffer buffer) {
5347
final var uniforms = this.uniforms.values();
54-
// Find out if mapping the memory is worth it and return if we don't have any updates
55-
var needsRemap = false;
56-
for (final var uniform : uniforms) {
57-
if (!uniform.requiresUpdate()) {
58-
continue;
59-
}
60-
needsRemap = true;
61-
break;
62-
}
63-
if (!needsRemap) {
64-
return;
65-
}
6648
// Map UBO into memory so we can memcpy into it directly
67-
GL15.glBindBuffer(GL33.GL_UNIFORM_BUFFER, buffer.getId());
49+
GL15.glBindBuffer(GL33.GL_UNIFORM_BUFFER, buffer.getBufferId());
6850
final var address = GL15.nglMapBuffer(GL33.GL_UNIFORM_BUFFER, GL15.GL_WRITE_ONLY);
6951
for (final var uniform : uniforms) {
7052
uniform.upload(buffer, address);

src/main/resources/assets/pda/shaders/display_color.frag.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Copyright (C) 2024 Karma Krafts & associates
55
*/
66

7-
in vec4 vertexColor;
7+
#include "include/global_uniforms.glsl"
88

9-
uniform vec4 ColorModulator;
9+
in vec4 vertexColor;
1010

1111
out vec4 fragColor;
1212

src/main/resources/assets/pda/shaders/display_color.vert.glsl

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
* Copyright (C) 2024 Karma Krafts & associates
55
*/
66

7+
#include "include/global_uniforms.glsl"
8+
79
in vec3 Position;
810
in vec4 Color;
911

10-
uniform mat4 ModelViewMat;
11-
uniform mat4 ProjMat;
12-
1312
out vec4 vertexColor;
1413

1514
void main() {

src/main/resources/assets/pda/shaders/display_color_tex.frag.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Copyright (C) 2024 Karma Krafts & associates
55
*/
66

7-
uniform sampler2D Sampler0;
7+
#include "include/global_uniforms.glsl"
88

9-
uniform vec4 ColorModulator;
9+
uniform sampler2D Sampler0;
1010

1111
in vec4 vertexColor;
1212
in vec2 texCoord0;

src/main/resources/assets/pda/shaders/display_color_tex.vert.glsl

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
* Copyright (C) 2024 Karma Krafts & associates
55
*/
66

7+
#include "include/global_uniforms.glsl"
8+
79
in vec3 Position;
810
in vec4 Color;
911
in vec2 UV0;
1012

11-
uniform mat4 ModelViewMat;
12-
uniform mat4 ProjMat;
13-
1413
out vec4 vertexColor;
1514
out vec2 texCoord0;
1615

src/main/resources/assets/pda/shaders/spinner.frag.glsl

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
* Source: https://www.shadertoy.com/view/Mc3Xzf
66
*/
77

8+
#include "include/global_uniforms.glsl"
9+
810
in vec4 vertexColor;
911
in vec2 texCoord0;
1012

11-
uniform float Time;
12-
1313
out vec4 fragColor;
1414

1515
const float PI = 3.14159265359;

src/main/resources/assets/pda/shaders/spinner.vert.glsl

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@
44
* Copyright (C) 2024 Karma Krafts & associates
55
*/
66

7+
#include "include/global_uniforms.glsl"
8+
79
in vec3 Position;
810
in vec2 UV0;
911
in vec4 Color;
1012

11-
uniform mat4 ModelViewMat;
12-
uniform mat4 ProjMat;
13-
1413
out vec4 vertexColor;
1514
out vec2 texCoord0;
1615

0 commit comments

Comments
 (0)