Wondering if it's possible to pass a large array into a WebGL shader, like this:
// array here
uniform vec4[huge] mydynamicarray;
void main() {
// iterate through the array here to perform processing on it,
// then write value to gl_Position
gl_Position = ...;
}
Then it would be populated like this:
gl.uniform4fv(myarrayloc, myarray)
I have seen many examples of how to pass in values like this, such as:
gl.uniform4fv(offsetLoc, [1, 0, 0, 0])
But I have not seen if it's possible to pass in a very large, dynamically sized array.
The reason to do this would be you could process 2 arrays:
Most WebGL implementations have a limit of 1024 or less uniform vectors
In other words huge
can't be greater than 1024 vec4s or whatever the limit of your particular GPU is. Also note that based on uniform packing rules specified in the spec that also means the largest float uniform array is also 1024 or whatever the limit of your particular GPU is.
You can declare arrays
uniform vec4 foo[3];
And set their values with
gl.uniform4fv(fooLoc, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]);
Textures are how you pass in large amounts of random access data into WebGL. This answer might be relevant.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With