Merge pull request #3543 from ReinUsesLisp/gl-depth-range

gl_rasterizer: Use transformed viewport for depth ranges
This commit is contained in:
Fernando Sahmkow 2020-03-23 12:00:21 -04:00 committed by GitHub
commit 497f593525
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -933,13 +933,15 @@ void RasterizerOpenGL::SyncViewport() {
} }
flags[Dirty::Viewport0 + i] = false; flags[Dirty::Viewport0 + i] = false;
const Common::Rectangle<f32> rect{regs.viewport_transform[i].GetRect()}; const auto& src = regs.viewport_transform[i];
const Common::Rectangle<f32> rect{src.GetRect()};
glViewportIndexedf(static_cast<GLuint>(i), rect.left, rect.bottom, rect.GetWidth(), glViewportIndexedf(static_cast<GLuint>(i), rect.left, rect.bottom, rect.GetWidth(),
rect.GetHeight()); rect.GetHeight());
const auto& src = regs.viewports[i]; const GLdouble reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne;
glDepthRangeIndexed(static_cast<GLuint>(i), static_cast<GLdouble>(src.depth_range_near), const GLdouble near_depth = src.translate_z - src.scale_z * reduce_z;
static_cast<GLdouble>(src.depth_range_far)); const GLdouble far_depth = src.translate_z + src.scale_z;
glDepthRangeIndexed(static_cast<GLuint>(i), near_depth, far_depth);
} }
} }
} }