iDevGames Forums
Changing Uniform Variables for a Single Shader - Printable Version

+- iDevGames Forums (http://www.idevgames.com/forums)
+-- Forum: Development Zone (/forum-3.html)
+--- Forum: Graphics & Audio Programming (/forum-9.html)
+--- Thread: Changing Uniform Variables for a Single Shader (/thread-7853.html)



Changing Uniform Variables for a Single Shader - reapz - Jul 13, 2010 05:23 PM

I'm currently trying to use a single shader to render a bunch of separate objects where each object has their own orientation in the world. I plan on moving to batching soon but some objects will still be separate.

From what I understand the glUseProgram call has quite a lot of OpenGL driver overhead so it would make sense to set a program and reuse it by changing variables for each object I render. The problem is when I do this they seem to all render to the same position on the screen.

What I am trying to do is the following:

glUseProgram(...)
glUniform(...)
glDrawArrays(...)
glUniform(...)
glDrawArrays(...)

The impression I get is that you can only set uniform variables once? From my research I have read that this should be working but please correct me if I'm wrong. I know atleast the shader and the draw code is correct, because when I add the glUseProgram line in between each glDrawArrays call it renders correctly.


RE: Changing Uniform Variables for a Single Shader - dazza - Jul 14, 2010 01:21 PM

You're correct, you should be able to set uniforms multiple times with draw calls. You're right to want to minimise calls to glUseProgram as it's expensive.


RE: Changing Uniform Variables for a Single Shader - reapz - Jul 14, 2010 04:35 PM

(Jul 14, 2010 01:21 PM)dazza Wrote:  You're correct, you should be able to set uniforms multiple times with draw calls. You're right to want to minimise calls to glUseProgram as it's expensive.

Yes I realise it is quite an expensive call which is why I'd like to only call it once but when I do it is like the transform matrixes don't get updated in between the drawing of entities... Even though the only thing that has changed is me calling glUseProgram once at the start of a group rather than in between.

I have no idea why this should be happening, I wonder is there anything I should be looking at? Because I was under the same impression, that I should be able to change the variables.


RE: Changing Uniform Variables for a Single Shader - dazza - Jul 15, 2010 01:29 AM

Hmm, given what you are doing should work it's probably something simple. Check that your uniform variable is correct and that you are indeed passing a different matrix for each model.

I have a feeling you'll kick yourself when you see the problem.