diff --git a/shader/instanced.vert b/shader/instanced.vert deleted file mode 100644 index b910b52..0000000 --- a/shader/instanced.vert +++ /dev/null @@ -1,73 +0,0 @@ -#version 320 es -precision highp float; - -// 全局 UBO (binding = 0) - 每帧更新一次 -layout(std140, binding = 0) uniform GlobalUBO { - mat4 uViewProjection; - vec4 uCameraPosition; - float uTime; - float uDeltaTime; - vec2 uScreenSize; -}; - -// 材质 UBO (binding = 1) - 每批次更新 -layout(std140, binding = 1) uniform MaterialUBO { - vec4 uColor; - vec4 uTintColor; - float uOpacity; - float uPadding[3]; // std140 对齐填充 -}; - -// 顶点属性 (每个顶点) -layout(location = 0) in vec2 aPosition; -layout(location = 1) in vec2 aTexCoord; -layout(location = 2) in vec4 aColor; - -// 实例属性 (每个实例) - 使用 location 3-6 -layout(location = 3) in vec2 iPosition; // 实例位置 -layout(location = 4) in float iRotation; // 实例旋转 -layout(location = 5) in vec2 iScale; // 实例缩放 -layout(location = 6) in vec4 iColor; // 实例颜色 - -// 输出到片段着色器 -out vec2 vTexCoord; -out vec4 vColor; -out vec4 vTintColor; -out float vOpacity; - -/** - * @brief 从旋转角度构建2D变换矩阵 - * @param angle 旋转角度(弧度) - * @return 2x2旋转矩阵 - */ -mat2 rotate2D(float angle) { - float c = cos(angle); - float s = sin(angle); - return mat2(c, -s, s, c); -} - -/** - * @brief 顶点着色器入口 - * - * 计算顶点在裁剪空间中的位置, - * 应用实例的变换(位置、旋转、缩放), - * 并传递纹理坐标和颜色到片段着色器 - */ -void main() { - // 应用实例缩放和旋转 - vec2 localPos = rotate2D(iRotation) * (aPosition * iScale); - - // 应用实例位置偏移 - vec2 worldPos = localPos + iPosition; - - // 变换到裁剪空间 - gl_Position = uViewProjection * vec4(worldPos, 0.0, 1.0); - - vTexCoord = aTexCoord; - - // 混合顶点颜色、实例颜色和材质颜色 - vColor = aColor * iColor * uColor; - - vTintColor = uTintColor; - vOpacity = uOpacity; -} diff --git a/shader/sprite_instanced.frag b/shader/sprite_instanced.frag deleted file mode 100644 index aad250d..0000000 --- a/shader/sprite_instanced.frag +++ /dev/null @@ -1,35 +0,0 @@ -#version 320 es -precision highp float; - -// 从顶点着色器输入 -in vec2 vTexCoord; -in vec4 vColor; - -// 纹理采样器 -uniform sampler2D uTexture; - -// 输出颜色 -out vec4 fragColor; - -/** - * @brief 片段着色器入口(实例化版本) - * - * 采样纹理并与顶点颜色混合 - */ -void main() { - // 采样纹理 - vec4 texColor = texture(uTexture, vTexCoord); - - // 如果纹理采样结果是黑色或透明,使用白色作为默认值 - if (texColor.rgb == vec3(0.0) || texColor.a < 0.01) { - texColor = vec4(1.0, 1.0, 1.0, 1.0); - } - - // 混合:纹理 * 顶点颜色 - fragColor = texColor * vColor; - - // Alpha 测试:丢弃几乎透明的像素 - if (fragColor.a < 0.01) { - discard; - } -}