uniform mat4 mvp; uniform sampler2D tex; uniform vec3 ambient; vec3 srgb_to_linear(vec3 color) { bvec3 near_zero = lessThan(color, vec3(0.04045)); vec3 gamma = pow((color+0.055)/1.055, vec3(2.4)); return mix(color/12.92, gamma, near_zero); } vec4 srgb_to_linear(vec4 color) { return vec4(srgb_to_linear(color.rgb), color.a); } #pragma MSP stage(vertex) layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; void main() { passthrough; gl_Position = mvp*position; } #pragma MSP stage(fragment) layout(location=0) out vec4 frag_color; void main() { frag_color = srgb_to_linear(texture(tex, texcoord)); } /* Expected output: vertex layout(location=0) uniform mat4 mvp; layout(location=0) in vec4 position; layout(location=1) in vec2 texcoord; layout(location=0) out vec2 _vs_out_texcoord; void main() { _vs_out_texcoord = texcoord; gl_Position = mvp*position; } */ /* Expected output: fragment layout(location=4) uniform sampler2D tex; layout(location=0) out vec4 frag_color; layout(location=0) in vec2 _vs_out_texcoord; void main() { vec4 color = texture(tex, _vs_out_texcoord); vec3 color_1 = color.rgb; frag_color = vec4(mix(color_1/12.92, pow((color_1+0.055)/1.055, vec3(2.4)), lessThan(color_1, vec3(0.04045))), color.a); } */