12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #version 450
-
- #extension GL_ARB_separate_shader_objects : enable
- #extension GL_ARB_shading_language_420pack : enable
-
- layout (binding = 1) uniform sampler2DMS samplerPosition;
- layout (binding = 2) uniform sampler2DMS samplerNormal;
- layout (binding = 3) uniform sampler2DMS samplerAlbedo;
-
- layout (location = 0) in vec3 inUV;
-
- layout (location = 0) out vec4 outFragColor;
-
- #define NUM_SAMPLES 8
-
- vec4 resolve(sampler2DMS tex, ivec2 uv)
- {
- vec4 result = vec4(0.0);
- int count = 0;
- for (int i = 0; i < NUM_SAMPLES; i++)
- {
- vec4 val = texelFetch(tex, uv, i);
- result += val;
- count++;
- }
- return result / float(NUM_SAMPLES);
- }
-
- void main()
- {
- ivec2 attDim = textureSize(samplerPosition);
- ivec2 UV = ivec2(inUV.st * attDim * 2.0);
-
- highp int index = 0;
- if (inUV.s > 0.5)
- {
- index = 1;
- UV.s -= attDim.x;
- }
- if (inUV.t > 0.5)
- {
- index = 2;
- UV.t -= attDim.y;
- }
-
- vec3 components[3];
- components[0] = resolve(samplerPosition, UV).rgb;
- components[1] = resolve(samplerNormal, UV).rgb;
- components[2] = resolve(samplerAlbedo, UV).rgb;
- // Uncomment to display specular component
- //components[2] = vec3(texture(samplerAlbedo, inUV.st).a);
-
- // Select component depending on UV
- outFragColor.rgb = components[index];
- }
|