Just as the title says, if I make a p5 sketch with WEBGL
enabled and all that, and I make a shader and try to give it a uniform variable called uAmbientColor
, I am unable to use it correctly.
Regard this humble sketch:
https://editor.p5js.org/modusponens/sketches/q3uLSb2Vk
Inside it, you will find basic.frag
, which defines uniform vec3 uAmbient
. In sketch.js
, I set things up so that I use a simple test shader I wrote and draw a square on the screen. The square should be yellow because I have
theShader.setUniform("uAmbient", [1, 1, 0]);
in the sketch file and I have
gl_FragColor = vec4(uAmbient, 1.0)
in the fragment shader.
If you change the name of the variable to uAmbientColor
in basic.frag
and sketch.js
, the square looks black instead of yellow, and nothing you can do with the numbers passed into that function seems to make any difference.
I even went as far as to try turning uAmbientColor
into a float and adding two additional floats, so that in my shader I had
uniform float uAmbientColor; // r for red
uniform float uAmbientColog; // g for green
uniform float uAmbientColob; // b for blue
// ... //
gl_FragColor = vec4(uAmbientColor, uAmbientColog, uAmbientColob, 1.0);
in the fragment shader, and then I had
theShader.setUniform("uAmbientColor", 1);
theShader.setUniform("uAmbientColog", 1);
theShader.setUniform("uAmbientColob", 1);
in my sketch file. The result was a cyan square, which is consistent with the 1 I’m trying to pass into the R, G, and B channels only making it through to the G and B and being replaced with a 0 in R.
I’m baffled. What might be causing this?