Phaser 3.52, impossible de faire fonctionner le shader: https://codesandbox.io/s/outlinepipeline-forked- o1jgo

Avoir une erreur gl: [.WebGL-0x7fd99580aa00] GL ERREUR: GL_INVALID_OPERATION: glUniform1iv: count> 1 pour non-tableau

0
Max S 22 févr. 2021 à 11:05

1 réponse

Meilleure réponse

Il y a deux façons de résoudre ce problème. La première consiste à utiliser un tableau de sampler2D puisque c'est ce que MultiPipeline va transmettre (et la source de cette erreur GLSL, je crois)

        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;
        }

Une solution alternative (et je pense, plus simple) serait de faire étendre votre OutlinePipeline à partir de Phaser.Renderer.WebGL.Pipelines.SinglePipeline au lieu de MultiPipeline.

Pour être honnête, je ne comprends pas pourquoi la documentation Phaser indique que MultiPipeline est le remplacement de TextureTintPipeline lors de la création de votre propre pipeline personnalisé lorsque TextureTintPipelines était à l'origine des pipelines de texture unique. J'admets que je suis toujours en train de contourner ces pipelines, il est donc possible que je ne comprenne pas quelque chose de très simple.

1
lawsumisu 7 mars 2021 à 16:56