1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
const std::string aBufferGenFragShader =
"#version 130 \n"
"in mat4 projMat;\n"
"uniform sampler2D texture;\n"
"uniform float haveTexture;\n"
"uniform vec3 resolution;\n"
"void main() {"
" vec2 position = ( gl_FragCoord.xy / resolution.xy );\n"
" vec4 pixel = (haveTexture==1) ? gl_Color * texture2D(texture, gl_TexCoord[0].xy) : gl_Color;\n"
" float z = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;\n"
" float dz = ((gl_DepthRange.near - gl_DepthRange.far) * (z - gl_DepthRange.far)) / (gl_DepthRange.near - gl_DepthRange.far);"
" float weight = pixel.a * max(pow(10, -2), 3 * pow(10, 3) * pow (1 - dz, 3));"
" gl_FragColor = vec4(pixel.rgb * weight, pixel.a);"
"}";
const std::string aBufferGenFragShader2 =
"#version 130 \n"
"in mat4 projMat;\n"
"uniform sampler2D texture;\n"
"uniform float haveTexture;\n"
"uniform vec3 resolution;\n"
"void main() {"
" vec4 pixel = (haveTexture==1) ? gl_Color * texture2D(texture, gl_TexCoord[0].xy) : gl_Color;\n"
" float z = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;\n"
" float dz = ((gl_DepthRange.near - gl_DepthRange.far) * (z - gl_DepthRange.far)) / (gl_DepthRange.near - gl_DepthRange.far);"
" float weight = pixel.a * max(pow(10, -2), 3 * pow(10, 3) * pow (1 - dz, 3));"
" gl_FragColor.a = pixel.a * weight;"
"}";
const std::string frameBufferGenFragShader =
"#version 130 \n"
"uniform sampler2D rt0;\n"
"uniform sampler2D rt1;\n"
"uniform vec3 resolution;\n"
"void main() {\n"
" vec2 position = ( gl_FragCoord.xy / resolution.xy );\n"
" vec4 accum = texture2D(rt0, position);"
" float reveal = accum.a;"
" accum.a = texture2D(rt1, position).a;"
" gl_FragColor = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), reveal);"
"}\n"; |