|
|
|
@ -460,7 +460,6 @@ void RasterizerOpenGL::Clear() { |
|
|
|
// TODO: Signal state tracker about these changes
|
|
|
|
state_tracker.NotifyBlend0(); |
|
|
|
// TODO(Rodrigo): Find out if these changes affect clearing
|
|
|
|
glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); |
|
|
|
glDisablei(GL_BLEND, 0); |
|
|
|
|
|
|
|
UNIMPLEMENTED_IF(regs.clear_flags.viewport); |
|
|
|
@ -927,7 +926,23 @@ void RasterizerOpenGL::SyncViewport() { |
|
|
|
auto& flags = gpu.dirty.flags; |
|
|
|
const auto& regs = gpu.regs; |
|
|
|
|
|
|
|
if (flags[Dirty::Viewports]) { |
|
|
|
const bool dirty_viewport = flags[Dirty::Viewports]; |
|
|
|
if (dirty_viewport || flags[Dirty::ClipControl]) { |
|
|
|
flags[Dirty::ClipControl] = false; |
|
|
|
|
|
|
|
bool flip_y = false; |
|
|
|
if (regs.viewport_transform[0].scale_y < 0.0) { |
|
|
|
flip_y = !flip_y; |
|
|
|
} |
|
|
|
if (regs.screen_y_control.y_negate != 0) { |
|
|
|
flip_y = !flip_y; |
|
|
|
} |
|
|
|
glClipControl(flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT, |
|
|
|
regs.depth_mode == Maxwell::DepthMode::ZeroToOne ? GL_ZERO_TO_ONE |
|
|
|
: GL_NEGATIVE_ONE_TO_ONE); |
|
|
|
} |
|
|
|
|
|
|
|
if (dirty_viewport) { |
|
|
|
flags[Dirty::Viewports] = false; |
|
|
|
|
|
|
|
const bool force = flags[Dirty::ViewportTransform]; |
|
|
|
@ -948,17 +963,6 @@ void RasterizerOpenGL::SyncViewport() { |
|
|
|
static_cast<GLdouble>(src.depth_range_far)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
bool flip_y = false; |
|
|
|
if (regs.viewport_transform[0].scale_y < 0.0) { |
|
|
|
flip_y = !flip_y; |
|
|
|
} |
|
|
|
if (regs.screen_y_control.y_negate != 0) { |
|
|
|
flip_y = !flip_y; |
|
|
|
} |
|
|
|
glClipControl(flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT, |
|
|
|
regs.depth_mode == Maxwell::DepthMode::ZeroToOne ? GL_ZERO_TO_ONE |
|
|
|
: GL_NEGATIVE_ONE_TO_ONE); |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerOpenGL::SyncDepthClamp() { |
|
|
|
|