Преглед изворни кода

renderer_opengl: Fix edge-case where alpha testing might cull presentation

ReinUsesLisp пре 6 година
родитељ
комит
ef7f6eb67d

+ 5 - 0
src/video_core/renderer_opengl/gl_state_tracker.h

@@ -190,6 +190,11 @@ public:
         flags[OpenGL::Dirty::ClipControl] = true;
     }
 
+    void NotifyAlphaTest() {
+        auto& flags = system.GPU().Maxwell3D().dirty.flags;
+        flags[OpenGL::Dirty::AlphaTest] = true;
+    }
+
 private:
     Core::System& system;
 

+ 2 - 0
src/video_core/renderer_opengl/renderer_opengl.cpp

@@ -591,6 +591,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
     state_tracker.NotifyFramebufferSRGB();
     state_tracker.NotifyLogicOp();
     state_tracker.NotifyClipControl();
+    state_tracker.NotifyAlphaTest();
 
     program_manager.UseVertexShader(vertex_program.handle);
     program_manager.UseGeometryShader(0);
@@ -608,6 +609,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
     glDisable(GL_STENCIL_TEST);
     glDisable(GL_POLYGON_OFFSET_FILL);
     glDisable(GL_RASTERIZER_DISCARD);
+    glDisable(GL_ALPHA_TEST);
     glDisablei(GL_BLEND, 0);
     glDisablei(GL_SCISSOR_TEST, 0);
     glCullFace(GL_BACK);