mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	SwRasterizer: Calculate fresnel for fragment lighting.
This commit is contained in:
		
							parent
							
								
									46b8c8e1da
								
							
						
					
					
						commit
						10b0bea060
					
				
					 1 changed files with 25 additions and 1 deletions
				
			
		|  | @ -310,7 +310,31 @@ std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors(const Math::Qu | ||||||
| 
 | 
 | ||||||
|         Math::Vec3<float> specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); |         Math::Vec3<float> specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); | ||||||
| 
 | 
 | ||||||
|         // TODO(Subv): Fresnel
 |         if (lighting.config1.disable_lut_fr == 0 && | ||||||
|  |             LightingRegs::IsLightingSamplerSupported( | ||||||
|  |                 lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { | ||||||
|  | 
 | ||||||
|  |             // Lookup fresnel LUT value
 | ||||||
|  |             float index = GetLutIndex(num, lighting.lut_input.fr.Value(), lighting.abs_lut_input.disable_fr == 0); | ||||||
|  | 
 | ||||||
|  |             float scale = lighting.lut_scale.GetScale(lighting.lut_scale.fr); | ||||||
|  | 
 | ||||||
|  |             float lut_value = scale * LookupLightingLut(static_cast<size_t>(LightingRegs::LightingSampler::Fresnel), index); | ||||||
|  | 
 | ||||||
|  |             // Enabled for difffuse lighting alpha component
 | ||||||
|  |             if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || | ||||||
|  |                 lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | ||||||
|  |                 diffuse_sum.a() *= lut_value; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             // Enabled for the specular lighting alpha component
 | ||||||
|  |             if (lighting.config0.fresnel_selector == | ||||||
|  |                 LightingRegs::LightingFresnelSelector::SecondaryAlpha || | ||||||
|  |                 lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | ||||||
|  |                 specular_sum.a() *= lut_value; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
|         auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); |         auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); | ||||||
|         diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); |         diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue