keid-render-basic-0.1.8.0: src/Render/Unlit/Line2d/Code.hs
module Render.Unlit.Line2d.Code
( vert
, frag
) where
import RIO
import Render.Code (Code, glsl)
import Render.DescSets.Set0.Code (set0binding0)
vert :: Code
vert = fromString
[glsl|
#version 450
${set0binding0}
layout(location = 0) in vec3 vPosition;
layout(location = 2) in vec4 iPositionA;
layout(location = 1) in vec4 iColorA;
layout(location = 4) in vec4 iPositionB;
layout(location = 3) in vec4 iColorB;
layout(location = 0) out vec4 fColor;
void main() {
vec2 xBasis = normalize(iPositionB.xy - iPositionA.xy);
vec2 yBasis = vec2(-xBasis.y, xBasis.x);
float width = mix(iPositionA.w, iPositionB.w, vPosition.z);
fColor = mix(iColorA, iColorB, vPosition.z);
vec2 offsetA = iPositionA.xy + width * (vPosition.x * xBasis + vPosition.y * yBasis);
vec2 offsetB = iPositionB.xy + width * (vPosition.x * xBasis + vPosition.y * yBasis);
vec2 point = mix(offsetA, offsetB, vPosition.z);
vec4 fPosition = vec4(point, 0, 1);
gl_Position
= scene.projection
* scene.view
* fPosition;
}
|]
frag :: Code
frag = fromString
[glsl|
#version 450
layout(location = 0) in vec4 fColor;
layout(location = 0) out vec4 oColor;
void main() {
oColor = fColor;
}
|]