165 lines
2.0 KiB
Plaintext
165 lines
2.0 KiB
Plaintext
#version 460
|
|
|
|
layout ( packed, binding = 0 ) uniform events
|
|
{
|
|
|
|
vec2 mouse;
|
|
|
|
vec2 window;
|
|
|
|
};
|
|
|
|
layout ( packed, binding = 1 ) uniform orientation
|
|
{
|
|
|
|
vec2 quadPosition;
|
|
|
|
};
|
|
|
|
struct quad{
|
|
|
|
vec2 position;
|
|
|
|
vec2 size;
|
|
|
|
vec3 color;
|
|
|
|
float zIndex;
|
|
|
|
float opacity;
|
|
|
|
int textureIndex;
|
|
|
|
int features;
|
|
|
|
int elementIndex;
|
|
|
|
//int characters[];
|
|
|
|
};
|
|
|
|
|
|
layout( std430, binding = 2 ) readonly buffer meshes
|
|
{
|
|
|
|
quad meshArray[100];
|
|
|
|
};
|
|
|
|
|
|
layout(location = 0) in vec3 position;
|
|
|
|
layout(location = 1) in vec2 textureCoordinates;
|
|
|
|
layout(location = 2) in int meshIndex;
|
|
|
|
|
|
|
|
out vec2 vertex_textureCoordinates;
|
|
|
|
out float vertex_meshIndex;
|
|
|
|
|
|
out vec3 quad_color;
|
|
|
|
out vec2 quad_position;
|
|
|
|
out vec2 quad_size;
|
|
|
|
flat out int quad_textureIndex;
|
|
|
|
flat out int quad_useTexture;
|
|
|
|
flat out float quad_opacity;
|
|
|
|
|
|
int checkFeature( int features, int currentFeature ) {
|
|
|
|
if ( ( features & currentFeature ) > 0 ) {
|
|
|
|
return 1;
|
|
|
|
} else {
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void main() {
|
|
|
|
quad currentMesh = meshArray[ meshIndex ];
|
|
|
|
|
|
vec2 quadPosition = ( position.xy );
|
|
|
|
// vec2( -1.0, -1.0 ) -> vec2( 1.0, 1.0 )
|
|
|
|
|
|
quadPosition += vec2( 1.0 );
|
|
|
|
quadPosition /= 2.0;
|
|
|
|
// vec2( 0, 0 ) -> vec2( 1.0, 1.0 )
|
|
|
|
|
|
vec2 bias = vec2(0, 0); // ??????
|
|
|
|
|
|
|
|
quadPosition *= currentMesh.size;
|
|
|
|
quadPosition += currentMesh.position.xy;
|
|
|
|
quadPosition += bias;
|
|
|
|
quadPosition /= window;
|
|
|
|
|
|
|
|
|
|
quadPosition *= 2.0;
|
|
|
|
quadPosition -= vec2( 1.0 );
|
|
|
|
|
|
//quadPosition.y += .02;
|
|
|
|
quadPosition.y *= -1;
|
|
|
|
quad_color = currentMesh.color;
|
|
|
|
quad_size = currentMesh.size;
|
|
|
|
quad_position = currentMesh.position.xy;
|
|
|
|
quad_opacity = currentMesh.opacity;
|
|
|
|
|
|
|
|
|
|
|
|
gl_Position.xy = quadPosition;
|
|
|
|
|
|
|
|
const int useTexture = 1;
|
|
|
|
|
|
quad_useTexture = checkFeature( currentMesh.features, useTexture );
|
|
|
|
quad_textureIndex = currentMesh.textureIndex;
|
|
|
|
vertex_textureCoordinates = textureCoordinates;
|
|
|
|
vertex_meshIndex = float( meshIndex );
|
|
|
|
gl_Position.w = 1.0;
|
|
|
|
|
|
gl_Position.z = -currentMesh.zIndex / 10000;
|
|
|
|
}
|
|
|