mirror of
https://github.com/GTNewHorizons/Angelica.git
synced 2026-11-08 12:35:01 +00:00
Fix black patches covering the world (#2325)
This commit is contained in:
1 parent
85bde5827f
commit
5da38c9180
2 files changed
+34
-28
No files matched your search
@@ -34,7 +34,8 @@ public final class BatchDrawDefaults {
|
||||
}
|
||||
|
||||
public void apply() {
|
||||
if (passFramebuffer >= 0 && TesrBatchRenderer.deferredPipeline() == null) {
|
||||
final boolean pack = TesrBatchRenderer.deferredPipeline() != null;
|
||||
if (passFramebuffer >= 0 && !pack) {
|
||||
final int framebuffer = GLSMFramebuffer.getDrawFramebuffer();
|
||||
if (framebuffer != passFramebuffer) {
|
||||
callerFramebuffer = framebuffer;
|
||||
@@ -42,7 +43,7 @@ public final class BatchDrawDefaults {
|
||||
}
|
||||
}
|
||||
final int program = GLSMPrograms.getActiveProgram();
|
||||
if (program != 0 && !Program.isManagedBind(program) && !DepthColorStorage.isOwnedProgram(program)) {
|
||||
if (program != 0 && !Program.isManagedBind(program) && !(pack && DepthColorStorage.isOwnedProgram(program))) {
|
||||
callerProgram = program;
|
||||
GLSMPrograms.glUseProgram(0);
|
||||
}
|
||||
|
||||
@@ -226,32 +226,8 @@ class TesrLayerStateTest {
|
||||
GLSMMatrices.setTextureMatrix(0, new Matrix4f());
|
||||
});
|
||||
}),
|
||||
Arguments.of("foreign program and framebuffer", (Supplier<BatchScenario>) () -> {
|
||||
final int program = GlTestSupport.program(GlTestSupport.TRIVIAL_VS, GlTestSupport.TRIVIAL_FS);
|
||||
final int framebuffer = GLSMFramebuffer.glGenFramebuffers();
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
|
||||
BatchDrawDefaults.capturePassFramebuffer();
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, framebuffer);
|
||||
GLSMPrograms.glUseProgram(program);
|
||||
return new BatchScenario(
|
||||
() -> {
|
||||
assertEquals(0, GLSMPrograms.getActiveProgram(), "program during batch draw");
|
||||
assertEquals(0, GLSMFramebuffer.getDrawFramebuffer(), "framebuffer during batch draw");
|
||||
assertEquals(0, GL11.glGetInteger(GL30.GL_DRAW_FRAMEBUFFER_BINDING), "driver draw framebuffer during batch draw");
|
||||
},
|
||||
() -> {
|
||||
assertEquals(program, GLSMPrograms.getActiveProgram(), "caller program restored");
|
||||
assertEquals(framebuffer, GLSMFramebuffer.getDrawFramebuffer(), "caller framebuffer restored");
|
||||
assertEquals(program, GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM), "driver caller program restored");
|
||||
assertEquals(framebuffer, GL11.glGetInteger(GL30.GL_DRAW_FRAMEBUFFER_BINDING), "driver caller framebuffer restored");
|
||||
},
|
||||
() -> {
|
||||
GLSMPrograms.glUseProgram(0);
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
|
||||
GLSMFramebuffer.glDeleteFramebuffers(framebuffer);
|
||||
GLSMPrograms.glDeleteProgram(program);
|
||||
});
|
||||
}),
|
||||
Arguments.of("foreign program and framebuffer", (Supplier<BatchScenario>) () -> foreignProgram(false)),
|
||||
Arguments.of("angelica-owned program and framebuffer", (Supplier<BatchScenario>) () -> foreignProgram(true)),
|
||||
Arguments.of("filter from before an item renderer's blur window", (Supplier<BatchScenario>) () -> {
|
||||
final int texture = GLSMTextures.glGenTextures();
|
||||
GLSMTextures.glActiveTexture(GL13.GL_TEXTURE0);
|
||||
@@ -281,6 +257,35 @@ class TesrLayerStateTest {
|
||||
}));
|
||||
}
|
||||
|
||||
private static BatchScenario foreignProgram(boolean owned) {
|
||||
final int program = GlTestSupport.program(GlTestSupport.TRIVIAL_VS, GlTestSupport.TRIVIAL_FS);
|
||||
if (owned) DepthColorStorage.registerOwnedProgram(program);
|
||||
final int framebuffer = GLSMFramebuffer.glGenFramebuffers();
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
|
||||
BatchDrawDefaults.capturePassFramebuffer();
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, framebuffer);
|
||||
GLSMPrograms.glUseProgram(program);
|
||||
return new BatchScenario(
|
||||
() -> {
|
||||
assertEquals(0, GLSMPrograms.getActiveProgram(), "program during batch draw");
|
||||
assertEquals(0, GLSMFramebuffer.getDrawFramebuffer(), "framebuffer during batch draw");
|
||||
assertEquals(0, GL11.glGetInteger(GL30.GL_DRAW_FRAMEBUFFER_BINDING), "driver draw framebuffer during batch draw");
|
||||
},
|
||||
() -> {
|
||||
assertEquals(program, GLSMPrograms.getActiveProgram(), "caller program restored");
|
||||
assertEquals(framebuffer, GLSMFramebuffer.getDrawFramebuffer(), "caller framebuffer restored");
|
||||
assertEquals(program, GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM), "driver caller program restored");
|
||||
assertEquals(framebuffer, GL11.glGetInteger(GL30.GL_DRAW_FRAMEBUFFER_BINDING), "driver caller framebuffer restored");
|
||||
},
|
||||
() -> {
|
||||
GLSMPrograms.glUseProgram(0);
|
||||
DepthColorStorage.unregisterOwnedProgram(program);
|
||||
GLSMFramebuffer.glBindFramebuffer(GL30.GL_FRAMEBUFFER, 0);
|
||||
GLSMFramebuffer.glDeleteFramebuffers(framebuffer);
|
||||
GLSMPrograms.glDeleteProgram(program);
|
||||
});
|
||||
}
|
||||
|
||||
@ParameterizedTest(name = "{0}")
|
||||
@MethodSource("batchDrawCases")
|
||||
void batchDrawDoesNotInheritTheInterruptedRenderersState(String name, Supplier<BatchScenario> setup) {
|
||||
|
||||
Reference in new issue
Block a user