mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 02:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#define SHADOWS @shadows_enabled
 | 
						|
 | 
						|
#if SHADOWS
 | 
						|
    @foreach shadow_texture_unit_index @shadow_texture_unit_list
 | 
						|
        uniform mat4 shadowSpaceMatrix@shadow_texture_unit_index;
 | 
						|
        varying vec4 shadowSpaceCoords@shadow_texture_unit_index;
 | 
						|
 | 
						|
#if @perspectiveShadowMaps
 | 
						|
        uniform mat4 validRegionMatrix@shadow_texture_unit_index;
 | 
						|
        varying vec4 shadowRegionCoords@shadow_texture_unit_index;
 | 
						|
#endif
 | 
						|
    @endforeach
 | 
						|
 | 
						|
    // Enabling this may reduce peter panning. Probably unnecessary.
 | 
						|
    const bool onlyNormalOffsetUV = false;
 | 
						|
#endif // SHADOWS
 | 
						|
 | 
						|
void setupShadowCoords(vec4 viewPos, vec3 viewNormal)
 | 
						|
{
 | 
						|
#if SHADOWS
 | 
						|
    vec4 shadowOffset;
 | 
						|
    @foreach shadow_texture_unit_index @shadow_texture_unit_list
 | 
						|
#if @perspectiveShadowMaps
 | 
						|
        shadowRegionCoords@shadow_texture_unit_index = validRegionMatrix@shadow_texture_unit_index * viewPos;
 | 
						|
#endif
 | 
						|
 | 
						|
#if @disableNormalOffsetShadows
 | 
						|
        shadowSpaceCoords@shadow_texture_unit_index = shadowSpaceMatrix@shadow_texture_unit_index * viewPos;
 | 
						|
#else
 | 
						|
        shadowOffset = vec4(viewNormal * @shadowNormalOffset, 0.0);
 | 
						|
 | 
						|
        if (onlyNormalOffsetUV)
 | 
						|
        {
 | 
						|
            vec4 lightSpaceXY = viewPos + shadowOffset;
 | 
						|
            lightSpaceXY = shadowSpaceMatrix@shadow_texture_unit_index * lightSpaceXY;
 | 
						|
 | 
						|
            shadowSpaceCoords@shadow_texture_unit_index.xy = lightSpaceXY.xy;
 | 
						|
        }
 | 
						|
        else
 | 
						|
        {
 | 
						|
            vec4 offsetViewPosition = viewPos + shadowOffset;
 | 
						|
            shadowSpaceCoords@shadow_texture_unit_index = shadowSpaceMatrix@shadow_texture_unit_index * offsetViewPosition;
 | 
						|
        }
 | 
						|
#endif
 | 
						|
    @endforeach
 | 
						|
#endif // SHADOWS
 | 
						|
}
 |