mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	This is implemented by a two-subpass rendering scheme; the first subpass draws (and blends) onto a linear R16G16B16A16_SFLOAT buffer, while the second subpass performs linear->srgb conversion, writing onto the actual output buffer.
		
			
				
	
	
		
			21 lines
		
	
	
	
		
			440 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			21 lines
		
	
	
	
		
			440 B
		
	
	
	
		
			GLSL
		
	
	
	
	
	
#version 450
 | 
						|
 | 
						|
layout (input_attachment_index = 0, binding = 0) uniform subpassInput in_color;
 | 
						|
 | 
						|
layout(location = 0) in vec2 uv;
 | 
						|
layout(location = 0) out vec4 out_color;
 | 
						|
 | 
						|
float linear_to_srgb(float x) {
 | 
						|
	return max(min(x * 12.92, 0.04045), 1.055 * pow(x, 1. / 2.4) - 0.055);
 | 
						|
}
 | 
						|
 | 
						|
void main() {
 | 
						|
	vec4 val = subpassLoad(in_color).rgba;
 | 
						|
	out_color = vec4(
 | 
						|
		linear_to_srgb(val.r),
 | 
						|
		linear_to_srgb(val.g),
 | 
						|
		linear_to_srgb(val.b),
 | 
						|
		val.a
 | 
						|
	);
 | 
						|
}
 | 
						|
 |