FernandoS27 7 лет назад
Родитель
Сommit
be97fc884d
1 измененных файлов с 9 добавлено и 4 удалено
  1. 9 4
      src/video_core/renderer_opengl/gl_rasterizer.cpp

+ 9 - 4
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -976,11 +976,16 @@ void RasterizerOpenGL::SyncAlphaTest() {
 void RasterizerOpenGL::SyncScissorTest() {
     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs;
 
-    // TODO(Rodrigo): Alpha testing is a legacy OpenGL feature, but it can be
-    // implemented with a test+discard in fragment shaders.
+    state.scissor.enabled = (regs.scissor_test.enable != 0);
+    // TODO(Blinkhawk): Figure if the hardware supports scissor testing per viewport and how it's
+    // implemented.
     if (regs.scissor_test.enable != 0) {
-        LOG_CRITICAL(Render_OpenGL, "Scissor testing is not implemented");
-        UNREACHABLE();
+        const u32 width = regs.scissor_test.max_x - regs.scissor_test.min_x;
+        const u32 height = regs.scissor_test.max_y - regs.scissor_test.min_y;
+        state.scissor.x = regs.scissor_test.min_x;
+        state.scissor.y = regs.scissor_test.min_y;
+        state.scissor.width = width;
+        state.scissor.height = height;
     }
 }