mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	gl_shader_util: Fix precision bug with alpha testing.
- Alpha testing is not done with float32 precision, this makes the HW renderer match the SW renderer.
This commit is contained in:
		
							parent
							
								
									e3f4233cef
								
							
						
					
					
						commit
						82f3e6dc69
					
				
					 2 changed files with 9 additions and 9 deletions
				
			
		|  | @ -195,7 +195,7 @@ void RasterizerOpenGL::RegenerateShaders() { | |||
| 
 | ||||
|     // Sync alpha reference
 | ||||
|     if (current_shader->uniform_alphatest_ref != -1) | ||||
|         glUniform1f(current_shader->uniform_alphatest_ref, regs.output_merger.alpha_test.ref / 255.0f); | ||||
|         glUniform1i(current_shader->uniform_alphatest_ref, regs.output_merger.alpha_test.ref); | ||||
| 
 | ||||
|     // Sync combiner buffer color
 | ||||
|     if (current_shader->uniform_tev_combiner_buffer_color != -1) { | ||||
|  | @ -655,7 +655,7 @@ void RasterizerOpenGL::SyncBlendColor() { | |||
| void RasterizerOpenGL::SyncAlphaTest() { | ||||
|     const auto& regs = Pica::g_state.regs; | ||||
|     if (current_shader->uniform_alphatest_ref != -1) | ||||
|         glUniform1f(current_shader->uniform_alphatest_ref, regs.output_merger.alpha_test.ref / 255.0f); | ||||
|         glUniform1i(current_shader->uniform_alphatest_ref, regs.output_merger.alpha_test.ref); | ||||
| } | ||||
| 
 | ||||
| void RasterizerOpenGL::SyncLogicOp() { | ||||
|  |  | |||
|  | @ -336,22 +336,22 @@ void AppendAlphaTestCondition(std::string& shader, Pica::Regs::CompareFunc func) | |||
|             shader += "false"; | ||||
|             break; | ||||
|         case CompareFunc::Equal: | ||||
|             shader += "g_last_tex_env_out.a != alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) != alphatest_ref"; | ||||
|             break; | ||||
|         case CompareFunc::NotEqual: | ||||
|             shader += "g_last_tex_env_out.a == alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) == alphatest_ref"; | ||||
|             break; | ||||
|         case CompareFunc::LessThan: | ||||
|             shader += "g_last_tex_env_out.a >= alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) >= alphatest_ref"; | ||||
|             break; | ||||
|         case CompareFunc::LessThanOrEqual: | ||||
|             shader += "g_last_tex_env_out.a > alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) > alphatest_ref"; | ||||
|             break; | ||||
|         case CompareFunc::GreaterThan: | ||||
|             shader += "g_last_tex_env_out.a <= alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) <= alphatest_ref"; | ||||
|             break; | ||||
|         case CompareFunc::GreaterThanOrEqual: | ||||
|             shader += "g_last_tex_env_out.a < alphatest_ref"; | ||||
|             shader += "int(g_last_tex_env_out.a * 255.0f) < alphatest_ref"; | ||||
|             break; | ||||
|         default: | ||||
|             shader += "false"; | ||||
|  | @ -370,7 +370,7 @@ std::string GenerateFragmentShader(const ShaderCacheKey& config) { | |||
| in vec4 o[NUM_VTX_ATTR]; | ||||
| out vec4 color; | ||||
| 
 | ||||
| uniform float alphatest_ref; | ||||
| uniform int alphatest_ref; | ||||
| uniform vec4 const_color[NUM_TEV_STAGES]; | ||||
| uniform sampler2D tex[3]; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue