2018-04-10 18:46:39 +02:00
|
|
|
#version 450
|
|
|
|
|
2018-04-10 20:44:55 +02:00
|
|
|
#define CP_COUNT 1025
|
|
|
|
|
2018-04-10 18:46:39 +02:00
|
|
|
layout(binding = 0) uniform sampler s_sampler;
|
|
|
|
layout(binding = 1) uniform texture2D t_texture;
|
|
|
|
|
2018-04-10 20:44:55 +02:00
|
|
|
layout(binding = 2)
|
|
|
|
uniform u_gamma_ramp_t {
|
|
|
|
layout(offset = 0) vec4 in_factor;
|
|
|
|
layout(offset = 16) vec4 in_offset;
|
|
|
|
layout(offset = 32) vec4 cp_values[CP_COUNT + 1];
|
|
|
|
} u_gamma_ramp;
|
|
|
|
|
2018-04-10 18:46:39 +02:00
|
|
|
layout(location = 0) in vec2 i_texcoord;
|
|
|
|
layout(location = 0) out vec4 o_color;
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
o_color = texture(sampler2D(t_texture, s_sampler), i_texcoord);
|
2018-04-10 20:44:55 +02:00
|
|
|
|
2018-04-11 20:55:03 +02:00
|
|
|
// vec3 cp_lookup = o_color.rgb;
|
|
|
|
// cp_lookup *= u_gamma_ramp.in_factor.rgb;
|
|
|
|
// cp_lookup += u_gamma_ramp.in_offset.rgb;
|
|
|
|
//
|
|
|
|
// cp_lookup = clamp(
|
|
|
|
// cp_lookup * float(CP_COUNT - 1),
|
|
|
|
// 0.0f, float(CP_COUNT - 1));
|
|
|
|
//
|
|
|
|
// vec3 cp_fpart = fract(cp_lookup);
|
|
|
|
// ivec3 cp_index = ivec3(cp_lookup);
|
|
|
|
//
|
|
|
|
// for (int i = 0; i < 3; i++) {
|
|
|
|
// int cp_entry = cp_index[i];
|
|
|
|
//
|
|
|
|
// float lo = u_gamma_ramp.cp_values[cp_entry + 0][i];
|
|
|
|
// float hi = u_gamma_ramp.cp_values[cp_entry + 1][i];
|
|
|
|
//
|
|
|
|
// if (cp_entry == CP_COUNT - 1)
|
|
|
|
// hi = lo;
|
|
|
|
//
|
|
|
|
// o_color[i] = mix(lo, hi, cp_fpart[i]);
|
|
|
|
// }
|
2018-04-10 18:46:39 +02:00
|
|
|
}
|