Files
XCEngine/参考/Fermion/Boson/Resources/Shaders/Quad.glsl

101 lines
4.0 KiB
GLSL

// Basic Texture Shader
#type vertex
#version 450 core
layout(location = 0) in vec3 a_Position;
layout(location = 1) in vec4 a_Color;
layout(location = 2) in vec2 a_TexCoord;
layout(location = 3) in float a_TexIndex;
layout(location = 4) in float a_TilingFactor;
layout(location = 5) in int a_ObjectID;
// Camera uniform buffer (binding = 0)
layout(std140, binding = 0) uniform CameraData
{
mat4 u_ViewProjection;
mat4 u_View;
mat4 u_Projection;
vec3 u_CameraPosition;
};
out vec4 v_Color;
out vec2 v_TexCoord;
out float v_TilingFactor;
flat out float v_TexIndex;
flat out int v_ObjectID;
void main()
{
v_Color = a_Color;
v_TexCoord = a_TexCoord;
v_TilingFactor = a_TilingFactor;
v_TexIndex = a_TexIndex;
v_ObjectID = a_ObjectID;
gl_Position = u_ViewProjection * vec4(a_Position, 1.0);
}
#type fragment
#version 450 core
layout(location = 0) out vec4 o_Color;
layout(location = 1) out int o_ObjectID;
in vec4 v_Color;
in vec2 v_TexCoord;
in float v_TilingFactor;
flat in float v_TexIndex;
flat in int v_ObjectID;
uniform sampler2D u_Textures[32];
void main()
{
vec4 texColor = v_Color;
switch (int(v_TexIndex))
{
case 0: texColor *= texture(u_Textures[ 0], v_TexCoord * v_TilingFactor); break;
case 1: texColor *= texture(u_Textures[ 1], v_TexCoord * v_TilingFactor); break;
case 2: texColor *= texture(u_Textures[ 2], v_TexCoord * v_TilingFactor); break;
case 3: texColor *= texture(u_Textures[ 3], v_TexCoord * v_TilingFactor); break;
case 4: texColor *= texture(u_Textures[ 4], v_TexCoord * v_TilingFactor); break;
case 5: texColor *= texture(u_Textures[ 5], v_TexCoord * v_TilingFactor); break;
case 6: texColor *= texture(u_Textures[ 6], v_TexCoord * v_TilingFactor); break;
case 7: texColor *= texture(u_Textures[ 7], v_TexCoord * v_TilingFactor); break;
case 8: texColor *= texture(u_Textures[ 8], v_TexCoord * v_TilingFactor); break;
case 9: texColor *= texture(u_Textures[ 9], v_TexCoord * v_TilingFactor); break;
case 10: texColor *= texture(u_Textures[10], v_TexCoord * v_TilingFactor); break;
case 11: texColor *= texture(u_Textures[11], v_TexCoord * v_TilingFactor); break;
case 12: texColor *= texture(u_Textures[12], v_TexCoord * v_TilingFactor); break;
case 13: texColor *= texture(u_Textures[13], v_TexCoord * v_TilingFactor); break;
case 14: texColor *= texture(u_Textures[14], v_TexCoord * v_TilingFactor); break;
case 15: texColor *= texture(u_Textures[15], v_TexCoord * v_TilingFactor); break;
case 16: texColor *= texture(u_Textures[16], v_TexCoord * v_TilingFactor); break;
case 17: texColor *= texture(u_Textures[17], v_TexCoord * v_TilingFactor); break;
case 18: texColor *= texture(u_Textures[18], v_TexCoord * v_TilingFactor); break;
case 19: texColor *= texture(u_Textures[19], v_TexCoord * v_TilingFactor); break;
case 20: texColor *= texture(u_Textures[20], v_TexCoord * v_TilingFactor); break;
case 21: texColor *= texture(u_Textures[21], v_TexCoord * v_TilingFactor); break;
case 22: texColor *= texture(u_Textures[22], v_TexCoord * v_TilingFactor); break;
case 23: texColor *= texture(u_Textures[23], v_TexCoord * v_TilingFactor); break;
case 24: texColor *= texture(u_Textures[24], v_TexCoord * v_TilingFactor); break;
case 25: texColor *= texture(u_Textures[25], v_TexCoord * v_TilingFactor); break;
case 26: texColor *= texture(u_Textures[26], v_TexCoord * v_TilingFactor); break;
case 27: texColor *= texture(u_Textures[27], v_TexCoord * v_TilingFactor); break;
case 28: texColor *= texture(u_Textures[28], v_TexCoord * v_TilingFactor); break;
case 29: texColor *= texture(u_Textures[29], v_TexCoord * v_TilingFactor); break;
case 30: texColor *= texture(u_Textures[30], v_TexCoord * v_TilingFactor); break;
case 31: texColor *= texture(u_Textures[31], v_TexCoord * v_TilingFactor); break;
default: break;
}
if (texColor.a == 0.0)
discard;
o_Color = texColor;
o_ObjectID = v_ObjectID;
}