RE: glUniform and multiple textures

"Malcolm Bechard" <[email protected]> Sun, 14 Sep 2008 11:25:24 -0800
Newsgroups gmane.games.devel.opengl
Organization Fat City Network Services, San Diego, California
Message-ID <[email protected]>
It expects the texture unit the texture was bound to, so you were right in
the first case.

Not sure what the issue is.

-----Original Message-----
Stephan Rose
Sent: Sunday, September 14, 2008 2:45 PM
To: Multiple recipients of list OPENGL-GAMEDEV-L

Can someone explain what precisely glUniform expects as a value when
using it to assign textures?

I have a shader that makes use of two textures. One is a cubemap used as
a heightmap and the other is a color map (2D Texture) to look up values
based on the height in the cubemap.

The heightmap is in texture unit 0, the colormap is in texture unit 1.

I've spent the whole morning trying to get this to work and it just
wouldn't which was really strange as in a previous test application I
got it to work just fine. Just when I took all the spaghetti code and
made a real engine out of it, things stopped working. Go figure...

Now in my old code, I had this:

glUniform1i(glGetUniformLocation(programId, "heightMap"), 0);
glUniform1i(glGetUniformLocation(programId, "colorMap"), 1);

And I used the same in my new code and it didn't work. It worked fine in
my old code....

So then I figure, let me look at the texture ID numbers that OpenGL is
giving my two textures, they turn out to be 1 and 2.

So I change the code to this:

glUniform1i(glGetUniformLocation(programId, "heightMap"), 1);
glUniform1i(glGetUniformLocation(programId, "colorMap"), 2);

It works...flawlessly.

And just for reference, in my shader the variables are defined as:

uniform samplerCube heightMap;
uniform sampler2D colorMap;

So what does glUniform expect here? The Texture unit or the texture ID?

And if it does expect the texture ID, why did it work in my old code
with a Texture ID of 0? And if it expects the texture unit, why is it
working in my new code with 1 and 2 even though the textures are in 0
and 1?

I don't like it when something works and I don't understand why it
works. That's just begging for an invitation to come back to haunt me
later and the OpenGL documentation for glUniform is very vague on this
as is trying to find any information about this on Google.

If someone could clear this up for me I would really appreciate it.

Thanks,

Stephan


----- 
FAQ and OpenGL Resources at:
  http://www.geocities.com/SiliconValley/Hills/9956/OpenGL

-- 
Author: Stephan Rose
  INET: [email protected]

Fat City Hosting, San Diego, California -- http://www.fatcity.com
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [email protected] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB OPENGL-GAMEDEV-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing)

----- 
FAQ and OpenGL Resources at:
  http://www.geocities.com/SiliconValley/Hills/9956/OpenGL

-- 
Author: Malcolm Bechard
  INET: [email protected]

Fat City Hosting, San Diego, California -- http://www.fatcity.com
---------------------------------------------------------------------
To REMOVE yourself from this mailing list, send an E-Mail message
to: [email protected] (note EXACT spelling of 'ListGuru') and in
the message BODY, include a line containing: UNSUB OPENGL-GAMEDEV-L
(or the name of mailing list you want to be removed from).  You may
also send the HELP command for other information (like subscribing).