#ifdef DESC [program] type: graphics vertex: main fragment: main [binding] name: verts rate: vertex [attribute] name: position type: vec2 [attribute] name: uv type: vec2 [interpolator] name: uv type: vec2 [struct] name: Config [variable] name: iview type: mat4 [variable] name: iprojection type: mat4 [cbuffer] name: config_buffer type: Config stage: fragment [texture] name: picture stage: fragment dimension: 2 [target] name: colour type: vec4 #endif #ifdef VERTEX_SHADER void main() { interpolator.uv = uv; gl_Position = vec4(position, 1.0, 1.0); } #endif #ifdef FRAGMENT_SHADER void main() { float pi = 3.14159265358979323846; vec2 uv = interpolator.uv; vec4 ndc = vec4(uv * 2.0 - 1.0, -1.0, 1.0); vec4 dir = config_buffer.iprojection * ndc; dir.w = 0.0; dir = config_buffer.iview * dir; dir.xyz = normalize(dir.xyz); uv = vec2( 0.5f + 0.5f * atan(dir.z, dir.x) / pi, acos(dir.y) / pi ); colour = texture(picture, uv); } #endif