65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#[compute]
							 | 
						||
| 
								 | 
							
								#version 450
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout(rgba16f, set = 0, binding = 0) 
							 | 
						||
| 
								 | 
							
								uniform restrict image2D currentImage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout( push_constant, std430 ) 
							 | 
						||
| 
								 | 
							
								uniform Params  
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  float clamping;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} parameters;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								float ensureValidFloat( float value )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  if ( isnan( value ) || isinf( value ) )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    return 0.0;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								vec4 ensureValidVec4( vec4 value )
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  value.r = ensureValidFloat( value.r );
							 | 
						||
| 
								 | 
							
								  value.g = ensureValidFloat( value.g );
							 | 
						||
| 
								 | 
							
								  value.b = ensureValidFloat( value.b );
							 | 
						||
| 
								 | 
							
								  value.a = ensureValidFloat( value.a );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void main() 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ivec2 currentPosition = ivec2( gl_GlobalInvocationID.xy );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									vec4 currentPixel = imageLoad( currentImage, currentPosition );  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  currentPixel.r = ensureValidFloat( currentPixel.r );
							 | 
						||
| 
								 | 
							
								  currentPixel.g = ensureValidFloat( currentPixel.g );
							 | 
						||
| 
								 | 
							
								  currentPixel.b = ensureValidFloat( currentPixel.b );
							 | 
						||
| 
								 | 
							
								  currentPixel.a = ensureValidFloat( currentPixel.a );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if ( parameters.clamping > 0.001 )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    currentPixel.r = clamp( currentPixel.r, 0.0, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.g = clamp( currentPixel.g, 0.0, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.b = clamp( currentPixel.b, 0.0, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.a = clamp( currentPixel.a, 0.0, parameters.clamping );
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  else if ( parameters.clamping < -0.001 )
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								    currentPixel.r = clamp( currentPixel.r, -parameters.clamping, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.g = clamp( currentPixel.g, -parameters.clamping, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.b = clamp( currentPixel.b, -parameters.clamping, parameters.clamping );
							 | 
						||
| 
								 | 
							
								    currentPixel.a = clamp( currentPixel.a, -parameters.clamping, parameters.clamping );
							 | 
						||
| 
								 | 
							
								  }  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									imageStore( currentImage, currentPosition, currentPixel );
							 | 
						||
| 
								 | 
							
								}
							 |