We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello All,
I am just starting with shaders in Processing, but have a little knowledge of them from Three.js and WebGL. I've scoured online but can't find an answer, and some of the GLSL language is pretty impregnable.
I want to pass an array of floats to the shaders (eventually two arrays, one for x values one for y values relating to a set of points) so I can calculate which point is closest for a given pixel in the fragment shader. I'm assuming that's something you can do in the fragment shader?!?!?!
I am passing the array of 10 floats using shader.set("px", xArray); and that seems fine, but I am not sure how to assign this as a varying in the vertex shader, I get this error which I guess is to do with assigning arrays:
java.lang.RuntimeException: Cannot compile vertex shader: ERROR: 0:26: '=' disallowed on array types
Here is the code for the vertex shader:
#define PROCESSING_LIGHT_SHADER
uniform mat4 modelview;
uniform mat4 transform;
uniform mat3 normalMatrix;
attribute vec4 vertex;
attribute vec3 normal;
uniform float mx;
varying float mxx;
uniform float px[10];
varying float pxx[10];
void main() {
mxx = mx;
pxx = px;
// Vertex in clip coordinates
gl_Position = transform * vertex;
}
So any advice on how to handle arrays (I wouldn't have thought it necessary to start putting values into textures for this) would be appreciated!
Thanks,
David
Answers
The processing code would help people to get the example running a bit quicker.
I don't know if you removed any comments above but is line 0:26
pxx = px;
?If so maybe try to copy the values over in a loop.
w h y d i d i n o t t h i n k o f t h a t !
thanks so much clankill3r, that seems to have worked.
Why are you using varying anyway? Aren't the uniforms also available to the fragment shader?
Good tip. As I said I don't have much experience with shaders! Thanks.