ERROR :GL_INVALID_OPERATION : glUniform1iv: count > 1 for non-array Phaser 3.52

ERROR :GL_INVALID_OPERATION : glUniform1iv: count > 1 for non-array Phaser 3.52

Phaser 3.52,无法让着色器工作:https://codesandbox.io/s/outlinepipeline-forked-o1jgo

出现gl错误: [.WebGL-0x7fd99580aa00]GL 错误:GL_INVALID_OPERATION:glUniform1iv:非数组计数 > 1

有两种方法可以解决这个问题。 第一个是使用 sampler2D 数组,因为这是 MultiPipeline 将传入的内容(我相信也是 GLSL 错误的来源)

        uniform sampler2D uMainSampler[2]; // This I believe can go up to 16, but the texture we want to use is at uMainSampler[1]
        // ...

        void main(void) 
        {
          vec4 texture = texture2D(uMainSampler[1], outTexCoord);
          // ...

          
          float upAlpha = texture2D(uMainSampler[1], outTexCoord + vec2(0.0, onePixel.y)).a;
          float leftAlpha = texture2D(uMainSampler[1], outTexCoord + vec2(-onePixel.x, 0.0)).a;
          float downAlpha = texture2D(uMainSampler[1], outTexCoord + vec2(0.0, -onePixel.y)).a;
          float rightAlpha = texture2D(uMainSampler[1], outTexCoord + vec2(onePixel.x, 0.0)).a;

          // ...

          gl_FragColor = color;
        }

另一种(我认为更简单的)解决方案是让您的 OutlinePipelinePhaser.Renderer.WebGL.Pipelines.SinglePipeline 扩展而不是 MultiPipeline。

老实说,我不明白为什么当 TextureTintPipelines 最初是单个纹理管道时,Phaser 文档会在创建您自己的自定义管道时声明 MultiPipeline 是 TextureTintPipeline 的替代品。我承认,我仍在研究这些管道,所以我可能只是不明白一些非常简单的事情。