engine/bin/data/shaders/display.rendertarget.frag.glsl
2020-08-12 00:00:00 -05:00

40 lines
1.4 KiB
GLSL

#version 450
#extension GL_EXT_samplerless_texture_functions : require
layout (binding = 1) uniform sampler samp;
layout (binding = 2) uniform texture2D albedoTexture;
layout (binding = 3) uniform texture2D positionTexture;
layout (binding = 4) uniform texture2D normalTexture;
struct Cursor {
vec2 position;
vec2 radius;
vec4 color;
};
layout (location = 0) in vec2 inUv;
layout (location = 1) in float inAlpha;
layout (location = 2) in Cursor inCursor;
layout (location = 0) out vec4 outAlbedoSpecular;
layout (location = 1) out vec4 outPosition;
layout (location = 2) out vec4 outNormal;
void main() {
outAlbedoSpecular = texture(sampler2D(albedoTexture, samp), inUv);
if ( inCursor.radius.x <= 0 && inCursor.radius.y <= 0 ) {
vec2 uv = gl_FragCoord.xy / textureSize(albedoTexture, 0);
// uv.x = 1-uv.x;
outAlbedoSpecular = texture(sampler2D(albedoTexture, samp), uv);
outPosition = texture(sampler2D(positionTexture, samp), uv);
outNormal = texture(sampler2D(normalTexture, samp), uv);
if ( outAlbedoSpecular.a < 0.01f ) outAlbedoSpecular = vec4(0,0,0,1);
return;
}
float dist = pow(inUv.x - inCursor.position.x, 2) / pow(inCursor.radius.x, 2) + pow(inUv.y - inCursor.position.y, 2) / pow(inCursor.radius.y, 2);
if ( dist <= 1 ) {
float attenuation = dist;
outAlbedoSpecular.rgb = mix( inCursor.color.rgb * inCursor.color.a, outAlbedoSpecular.rgb, attenuation );
}
}