41 lines
		
	
	
		
			818 B
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			818 B
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#[compute]
							 | 
						||
| 
								 | 
							
								#version 450
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout( local_size_x = 16, local_size_y = 16, local_size_z = 1 ) in;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout( rgba16f, set = 0, binding = 0) 
							 | 
						||
| 
								 | 
							
								uniform image2D color_image;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								layout(push_constant, std430)
							 | 
						||
| 
								 | 
							
								uniform Params 
							 | 
						||
| 
								 | 
							
								{	
							 | 
						||
| 
								 | 
							
									float amount;
							 | 
						||
| 
								 | 
							
								  float radius;
							 | 
						||
| 
								 | 
							
								  float power;
							 | 
						||
| 
								 | 
							
								  float offset;
							 | 
						||
| 
								 | 
							
								  vec2 raster_size;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} params;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void main() 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									ivec2 uv   = ivec2( gl_GlobalInvocationID.xy );
							 | 
						||
| 
								 | 
							
									ivec2 size = ivec2( params.raster_size );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if ( uv.x >= size.x || uv.y >= size.y ) 
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
										return;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									vec4 color = imageLoad( color_image, uv );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  float d = length( uv - size/2 ) / length( size/2 * params.radius ); 
							 | 
						||
| 
								 | 
							
								  d = pow( d, params.power );
							 | 
						||
| 
								 | 
							
								  float amount = clamp( 1.0 - d + params.offset, 0.0, 1.0 );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									color.rgb = mix( color.rgb, vec3( 0.01, 0.01, 0.02 ), ( 1.0 - amount ) * params.amount );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									imageStore( color_image, uv, color );
							 | 
						||
| 
								 | 
							
								}
							 |