GameTech/URP 渲染实战
源码 / shaders/Ch29/BatcherBreaker.glsl
shaders/Ch29/BatcherBreaker.glsl
// 案例 29.1 的反例:能编译、能显示,但 SRP Batcher 不兼容。(GLSL 版,对应 Ch29/BatcherBreaker.shader)
// 原因:_BaseColor 声明在 CBUFFER 之外,变成了“全局 uniform”,每个材质都要单独 SetPass 上传。
// (WebGL 没有 SRP Batcher 和 CBUFFER,GLSL 版里两种写法没有区别,只为和 HLSL 对照)
Shader "Cookbook/Ch29/BatcherBreaker"
{
    SubShader
    {
        Tags { "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline" "Queue"="Geometry" }
        Pass
        {
            Tags { "LightMode"="UniversalForward" }
            GLSLPROGRAM
            uniform vec4 _BaseColor;     // ✗ 不在 UnityPerMaterial 里

            #ifdef VERTEX
            void main() { gl_Position = TransformObjectToHClip(positionOS.xyz); }
            #endif
            #ifdef FRAGMENT
            void main() { fragColor = _BaseColor; }
            #endif
            ENDGLSL
        }
    }
}