javaglsllwjgl

Variable size array GLSL


I am working on creating shaders for an OpenGL/Java engine that I am building. I have searched for a while, but I cannot find a way to have an array of variable size. I know that I can create a statically sized one like:

uniform vec3 variable[4];

But how would I go about creating an array of size X based on what I load to the shader from the CPU, if this is even possible.

Thanks in advance!


Solution

  • GLSL does not allow varying array sizes. It does however, as of OpenGL 4, support Shader Storage Buffer Objects which can be varying sizes.

    More information on SSBOs: https://www.opengl.org/wiki/Shader_Storage_Buffer_Object

    Thinking about it now, a hack way of doing it as well could be to encode your data into a texture and then pass that into the shader. For example, each of the 4 rgba components could be 1 byte of the data you wanted to pass. For data larger than a byte, you would break it out into bytes.