Skip to content

Commit 3056d55

Browse files
committed
Fix GL errors due to disposed textures still being bound after rendering multiple projectors at once.
1 parent 9a8b278 commit 3056d55

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

src/main/java/li/cil/oc2/client/renderer/ModShaders.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public static ShaderInstance getProjectorsShader() {
3737
return projectorsShader;
3838
}
3939

40+
@SuppressWarnings("ConstantConditions") // Setting samples to null to clear them is fine.
4041
public static void configureProjectorsShader(
4142
final RenderTarget target,
4243
final Matrix4f inverseCameraMatrix,
@@ -51,10 +52,15 @@ public static void configureProjectorsShader(
5152
projectorsShader.setSampler("MainCameraDepth", target.getDepthTextureId());
5253
projectorsShader.safeGetUniform("InverseMainCamera").set(inverseCameraMatrix);
5354

54-
for (int i = 0; i < projectorCount; i++) {
55-
projectorsShader.setSampler(PROJECTOR_COLOR_NAMES[i], colors[i].getId());
56-
projectorsShader.setSampler(PROJECTOR_DEPTH_NAMES[i], depths[i].getDepthTextureId());
57-
projectorsShader.safeGetUniform(PROJECTOR_CAMERA_NAMES[i]).set(projectorCameraMatrices[i]);
55+
for (int i = 0; i < MAX_PROJECTORS; i++) {
56+
if (i < projectorCount) {
57+
projectorsShader.setSampler(PROJECTOR_COLOR_NAMES[i], colors[i].getId());
58+
projectorsShader.setSampler(PROJECTOR_DEPTH_NAMES[i], depths[i].getDepthTextureId());
59+
projectorsShader.safeGetUniform(PROJECTOR_CAMERA_NAMES[i]).set(projectorCameraMatrices[i]);
60+
} else {
61+
projectorsShader.setSampler(PROJECTOR_COLOR_NAMES[i], null);
62+
projectorsShader.setSampler(PROJECTOR_DEPTH_NAMES[i], null);
63+
}
5864
}
5965
}
6066

src/main/java/li/cil/oc2/client/renderer/ProjectorDepthRenderer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848

4949
import java.time.Duration;
5050
import java.util.ArrayList;
51+
import java.util.Arrays;
5152
import java.util.List;
5253
import java.util.concurrent.ExecutionException;
5354

@@ -181,6 +182,7 @@ public static void handleRenderLevelLast(final RenderLevelLastEvent event) {
181182
renderProjectorColors(minecraft, event.getPoseStack().last().pose(), event.getProjectionMatrix(), projectorCount);
182183
} finally {
183184
VISIBLE_PROJECTORS.clear();
185+
Arrays.fill(PROJECTOR_COLOR_TARGETS, null);
184186
}
185187
}
186188

0 commit comments

Comments
 (0)