ddnet/data/shader/vulkan/quad.vert

84 lines
2.1 KiB
GLSL
Raw Normal View History

2022-03-20 17:04:00 +00:00
#version 450
#extension GL_ARB_separate_shader_objects : enable
layout (location = 0) in vec4 inVertex;
layout (location = 1) in vec4 inColor;
#ifdef TW_QUAD_TEXTURED
layout (location = 2) in vec2 inVertexTexCoord;
#endif
#ifdef TW_QUAD_TEXTURED
#define UBOSetIndex 1
#else
#define UBOSetIndex 0
#endif
struct SQuadUniformEl {
vec4 gVertColor;
vec2 gOffset;
float gRotation;
};
#ifndef TW_PUSH_CONST
#define TW_MAX_QUADS 256
layout (std140, set = UBOSetIndex, binding = 1) uniform SOffBO {
uniform SQuadUniformEl gUniEls[TW_MAX_QUADS];
} gQuadBO;
#else
#define gQuadBO gPosBO
#define TmpQuadIndex 0
#endif
layout(push_constant) uniform SPosBO {
layout(offset = 0) uniform mat4x2 gPos;
#ifdef TW_PUSH_CONST
layout(offset = 32) uniform SQuadUniformEl gUniEls[1];
layout(offset = 64) uniform int gQuadOffset;
#else
layout(offset = 32) uniform int gQuadOffset;
#endif
} gPosBO;
layout (location = 0) noperspective out vec4 QuadColor;
#ifndef TW_PUSH_CONST
layout (location = 1) flat out int QuadIndex;
#endif
#ifdef TW_QUAD_TEXTURED
#ifndef TW_PUSH_CONST
layout (location = 2) noperspective out vec2 TexCoord;
#else
layout (location = 1) noperspective out vec2 TexCoord;
#endif
#endif
void main()
{
vec2 FinalPos = vec2(inVertex.xy);
#ifndef TW_PUSH_CONST
int TmpQuadIndex = int(gl_VertexIndex / 4) - gPosBO.gQuadOffset;
#endif
if(gQuadBO.gUniEls[TmpQuadIndex].gRotation != 0.0)
{
float X = FinalPos.x - inVertex.z;
float Y = FinalPos.y - inVertex.w;
FinalPos.x = X * cos(gQuadBO.gUniEls[TmpQuadIndex].gRotation) - Y * sin(gQuadBO.gUniEls[TmpQuadIndex].gRotation) + inVertex.z;
FinalPos.y = X * sin(gQuadBO.gUniEls[TmpQuadIndex].gRotation) + Y * cos(gQuadBO.gUniEls[TmpQuadIndex].gRotation) + inVertex.w;
}
FinalPos.x = FinalPos.x / 1024.0 + gQuadBO.gUniEls[TmpQuadIndex].gOffset.x;
FinalPos.y = FinalPos.y / 1024.0 + gQuadBO.gUniEls[TmpQuadIndex].gOffset.y;
gl_Position = vec4(gPosBO.gPos * vec4(FinalPos, 0.0, 1.0), 0.0, 1.0);
QuadColor = inColor;
#ifndef TW_PUSH_CONST
QuadIndex = TmpQuadIndex;
#endif
#ifdef TW_QUAD_TEXTURED
TexCoord = inVertexTexCoord;
#endif
}