module Render.Debug.Code
( vert
, frag
) where
import RIO
import Render.Code (Code, glsl)
import Render.DescSets.Set0.Code (set0binding0, set0binding1, set0binding2, set0binding3, set0binding5color)
vert :: Code
vert = fromString
[glsl|
#version 450
${set0binding0}
// vertexPos
layout(location = 0) in vec3 vPosition;
// vertexAttrs
layout(location = 1) in vec2 vTexCoord;
// textureParams
layout(location = 2) in vec4 iTextureScaleOffset;
layout(location = 3) in vec4 iTextureGamma;
layout(location = 4) in ivec2 iTextureIds;
// transformMat
layout(location = 5) in mat4 iModel;
layout(location = 0) out vec2 fTexCoord;
layout(location = 1) flat out vec4 fTextureGamma;
layout(location = 2) flat out ivec2 fTextureIds;
void main() {
vec4 fPosition = iModel * vec4(vPosition, 1.0);
gl_Position
= scene.projection
* scene.view
* fPosition;
fTexCoord = vTexCoord * iTextureScaleOffset.st + iTextureScaleOffset.pq;
fTextureGamma = iTextureGamma;
fTextureIds = iTextureIds;
}
|]
frag :: Code
frag = fromString
[glsl|
#version 450
#extension GL_EXT_nonuniform_qualifier : enable
${set0binding1}
${set0binding2}
${set0binding3}
${set0binding5color}
layout(location = 0) in vec2 fTexCoord;
layout(location = 1) flat in vec4 fTextureGamma;
layout(location = 2) flat in ivec2 fTextureIds;
layout(location = 0) out vec4 oColor;
layout(constant_id=0) const uint mode = 0;
layout(constant_id=1) const uint shadow_mask = 0;
void main() {
vec4 texel = vec4(0);
switch(mode) {
case 0:
texel = vec4(fTexCoord, 0, 1);
break;
case 1:
if ((fTextureIds.t < 0) || (fTextureIds.s < 0)) break;
texel = texture(
sampler2D(
textures[nonuniformEXT(fTextureIds.t)],
samplers[nonuniformEXT(fTextureIds.s)]
),
fTexCoord
);
break;
case 2:
float d0 = 1.0;
if ((shadow_mask & 1) == 1)
d0 = texture(
shadowmaps,
vec3(fTexCoord, 0.0)
).x;
float d1 = 1.0;
if ((shadow_mask & 2) == 2)
d1 = texture(
shadowmaps,
vec3(fTexCoord, 1.0)
).x;
float d2 = 1.0;
if ((shadow_mask & 4) == 4)
d2 = texture(
shadowmaps,
vec3(fTexCoord, 2.0)
).x;
texel = vec4(1-d0, 1-d1, 1-d2, 1.0);
break;
default:
break;
}
vec3 color = pow(texel.rgb, fTextureGamma.rgb);
float combinedAlpha = texel.a * fTextureGamma.a;
// XXX: premultiply alpha due to additive blending
oColor = vec4(color * combinedAlpha, combinedAlpha);
}
|]