From aa620c14af0a9bc2bf7784ed096298fc3c8899c3 Mon Sep 17 00:00:00 2001 From: FernandoS27 Date: Mon, 8 Oct 2018 23:34:11 -0400 Subject: Implemented Alpha Testing --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp') diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 3daccf82f..e2a422052 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -323,6 +323,8 @@ void RasterizerOpenGL::SetupShaders(GLenum primitive_mode) { current_texture_bindpoint = SetupTextures(static_cast(stage), shader, primitive_mode, current_texture_bindpoint); + SetupAlphaTesting(shader); + // When VertexA is enabled, we have dual vertex shaders if (program == Maxwell::ShaderProgram::VertexA) { // VertexB was combined with VertexA, so we skip the VertexB iteration @@ -880,6 +882,15 @@ u32 RasterizerOpenGL::SetupTextures(Maxwell::ShaderStage stage, Shader& shader, return current_unit + static_cast(entries.size()); } +void RasterizerOpenGL::SetupAlphaTesting(Shader& shader) { + const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; + + glProgramUniform1i(shader->GetProgramHandle(), shader->GetAlphaTestingEnableLocation(), + regs.alpha_test_enabled); + glProgramUniform1f(shader->GetProgramHandle(), shader->GetAlphaTestingRefLocation(), + regs.alpha_test_ref); +} + void RasterizerOpenGL::SyncViewport() { const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; const MathUtil::Rectangle viewport_rect{regs.viewport_transform[0].GetRect()}; -- cgit v1.2.3