Hi,

I have a shader (2) with:

----8<----
uniform vec2 foo[8];
----8<----

which I can't fully use in vanilla Gem: glGetActiveUniform (1) seems to return the name "foo[0]", and Gem uses glUniform2f(...) which only allows me to set the first 2 floats in the array (ie, the first element) with a message like "foo[0] 1.2 3.4" to [glsl_program].

Luckily a quick/hacky fix (using glUniform2fv with the m_size returned from glGet) I tried turned out to work very well, and could probably be extended to a full fix for all these array things:

----8<----

diff --git a/src/Manips/glsl_program.cpp b/src/Manips/glsl_program.cpp
index 52e80d1..4eabb8a 100644
--- a/src/Manips/glsl_program.cpp
+++ b/src/Manips/glsl_program.cpp
@@ -214,7 +214,7 @@ void glsl_program :: renderGL2()
glUniform1f( m_loc[i], static_cast<GLfloat>(m_param[i][0]) );
                break;
               case GL_FLOAT_VEC2:
- glUniform2f( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]) ); + glUniform2fv( m_loc[i], m_size[i], static_cast<GLfloat*>(&m_param[i][0]) );
                break;
               case GL_FLOAT_VEC3:
glUniform3f( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]),

----8<----

I still have to use the uniform name "foo[0]", but I can now set all the values I want (so far tested with 10 floats (5 vec2s), and all seems groovy. I see no reason why it shouldn't work for a single vec2, but I haven't tested that yet.

Thanks,


Claude

(1) http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniform.xml

(2)
WebGL:   https://gitorious.org/maximus/fractaloids
Haskell: http://archive.org/details/ClaudiusMaximus_-_Fractal_Juggling
Pd+Gem:  (coming soon)

_______________________________________________
GEM-dev mailing list
[email protected]
http://lists.puredata.info/listinfo/gem-dev

Reply via email to