#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; }