#version 430 core layout(local_size_x = 16, local_size_y = 16) in; layout(binding = 0, rgba32f) uniform readonly image2D u_input; layout(binding = 1, rgba32f) uniform writeonly image2D u_output; // uniform int u_radius; // 已经不需要了,但保留定义以防外部报错 void main() { ivec2 p = ivec2(gl_GlobalInvocationID.xy); ivec2 size = imageSize(u_output); // 边界检查:如果像素超出范围,直接返回 if (p.x >= size.x || p.y >= size.y) return; // 【修改点】: // 1. 不再使用循环去遍历周围的像素 (dy, dx)。 // 2. 直接读取当前位置 (p) 的颜色。 vec3 original_color = imageLoad(u_input, p).rgb; // 直接写入输出图像,不做任何平均计算 imageStore(u_output, p, vec4(original_color, 1.0)); }