#version 430 core #extension GL_ARB_bindless_texture : require in vec2 vTexCoord; in vec4 vColor; out vec4 fragColor; // Campaign V slice V2c (2026-07-27): was uvec2 uTextureHandle (a raw // ARB_bindless_texture handle); now a slot into the binding=9 handle table. // // Slice V6e renamed both onto members of the shared 96-byte push-constant block // (GpuPushConstants), which is the only home Vulkan has for a loose uniform: // there is no default uniform block, so `uniform uint uTextureIndex;` is not // merely unsupported, it is unspellable. Both values are per-pass — one texture, // one layer, for a whole mesh-particle sub-batch — which is exactly what the // block is for. uParamA carries the layer because it is consumed as a float // anyway; the CPU writes the same integral value it always did. uniform uint uTextureIndexA; uniform float uParamA; void main() { vec4 color = ACDREAM_SAMPLE_ARRAY(uTextureIndexA, vec3(vTexCoord, uParamA)) * vColor; if (color.a < 0.02) discard; fragColor = color; }