35 lines
782 B
GLSL
35 lines
782 B
GLSL
#version 320 es
|
|
|
|
// 全局 UBO
|
|
layout(std140, binding = 0) uniform GlobalUBO {
|
|
mat4 viewProjection;
|
|
vec2 screenSize;
|
|
float time;
|
|
} uGlobal;
|
|
|
|
// 实例 UBO
|
|
layout(std140, binding = 2) uniform InstanceUBO {
|
|
mat4 transforms[256];
|
|
} uInstances;
|
|
|
|
// 顶点属性
|
|
layout(location = 0) in vec2 aPosition;
|
|
layout(location = 1) in vec2 aTexCoord;
|
|
layout(location = 2) in vec4 aColor;
|
|
|
|
// 输出到片段着色器
|
|
out vec2 vTexCoord;
|
|
out vec4 vColor;
|
|
|
|
void main() {
|
|
// 获取实例变换矩阵
|
|
mat4 instanceTransform = uInstances.transforms[gl_InstanceID];
|
|
|
|
// 计算最终位置
|
|
gl_Position = uGlobal.viewProjection * instanceTransform * vec4(aPosition, 0.0, 1.0);
|
|
|
|
// 传递纹理坐标和颜色
|
|
vTexCoord = aTexCoord;
|
|
vColor = aColor;
|
|
}
|