diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-09-16 10:23:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-16 10:23:00 +0200 |
commit | 699c92099140f6017c66433805d2e9a592f91169 (patch) | |
tree | 8ff5b734c055dc47c4231d817863f9bd3dcde111 /src/video_core/renderer_opengl/gl_rasterizer.cpp | |
parent | Merge pull request #2842 from Subv/switchable_page_table (diff) | |
parent | SwRasterizer/Clipper: flip the sign convention to match PICA and OpenGL (diff) | |
download | yuzu-699c92099140f6017c66433805d2e9a592f91169.tar yuzu-699c92099140f6017c66433805d2e9a592f91169.tar.gz yuzu-699c92099140f6017c66433805d2e9a592f91169.tar.bz2 yuzu-699c92099140f6017c66433805d2e9a592f91169.tar.lz yuzu-699c92099140f6017c66433805d2e9a592f91169.tar.xz yuzu-699c92099140f6017c66433805d2e9a592f91169.tar.zst yuzu-699c92099140f6017c66433805d2e9a592f91169.zip |
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index aa95ef21d..7b0cd1b66 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -169,6 +169,8 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle); // Sync fixed function OpenGL state + SyncClipEnabled(); + SyncClipCoef(); SyncCullMode(); SyncBlendEnabled(); SyncBlendFuncs(); @@ -401,6 +403,18 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { SyncCullMode(); break; + // Clipping plane + case PICA_REG_INDEX(rasterizer.clip_enable): + SyncClipEnabled(); + break; + + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[0], 0x48): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[1], 0x49): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[2], 0x4a): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[3], 0x4b): + SyncClipCoef(); + break; + // Depth modifiers case PICA_REG_INDEX(rasterizer.viewport_depth_range): SyncDepthScale(); @@ -1280,6 +1294,20 @@ void RasterizerOpenGL::SetShader() { } } +void RasterizerOpenGL::SyncClipEnabled() { + state.clip_distance[1] = Pica::g_state.regs.rasterizer.clip_enable != 0; +} + +void RasterizerOpenGL::SyncClipCoef() { + const auto raw_clip_coef = Pica::g_state.regs.rasterizer.GetClipCoef(); + const GLvec4 new_clip_coef = {raw_clip_coef.x.ToFloat32(), raw_clip_coef.y.ToFloat32(), + raw_clip_coef.z.ToFloat32(), raw_clip_coef.w.ToFloat32()}; + if (new_clip_coef != uniform_block_data.data.clip_coef) { + uniform_block_data.data.clip_coef = new_clip_coef; + uniform_block_data.dirty = true; + } +} + void RasterizerOpenGL::SyncCullMode() { const auto& regs = Pica::g_state.regs; |