PDA

View Full Version : glTexParameter: glActiveTexture vs glBindTexture



Narann
10-12-2016, 09:10 AM
Hi all! I was wondering if texture parameters where stored in texture unit (glActiveTexture) or "texture name"?

For example, If I have:



// gen texture
GLuint texture_id;
glGenTextures(1, &texture_id);

// change texture unit and bind
glActiveTexture(GL_TEXTURE0)
glBindTexture(GL_TEXTURE_2D, texture_id);

// set a parameter to the texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

// unbind
glBindTexture(GL_TEXTURE_2D, 0);

// change texture unit and bind the same texture
glActiveTexture(GL_TEXTURE1)
glBindTexture(GL_TEXTURE_2D, texture_id);

int param = -1;

glGetTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &param);

Is param will be GL_NEAREST?

The implicit question is: "Are texture parameters attached to texture unit or texture image?"

Thanks in advance!

GClements
10-12-2016, 10:49 AM
The implicit question is: "Are texture parameters attached to texture unit or texture image?"

They're stored in the texture itself (or in a sampler object if one is bound).

In OpenGL 4.5, you can use glTextureParameter() (note "Texture" rather than "Tex") to set the parameters of a specific texture referenced by name, which need not be bound to any texture unit.

Dark Photon
10-12-2016, 07:15 PM
In OpenGL 4.5, you can use glTextureParameter() (note "Texture" rather than "Tex") to set the parameters of a specific texture referenced by name, which need not be bound to any texture unit.

Related, if you're not using OpenGL 4.5 (or can't assume the GPU drivers have it) yet, you can still get at this through the EXT_direct_state_access or ARB_direct_state_access extensions. The EXT version has been out there since 2008, so there's a good chance your drivers may support it. For more details, see Direct State Access (https://www.opengl.org/wiki/Direct_State_Access) in the OpenGL wiki.

Narann
10-13-2016, 03:39 AM
Thanks for you answers!

I know there is glTextureParameter() (and didn't know about extensions, thanks for this!) but I'm limited to strict OpenGL 2.1 (something I should have said, sorry).

My question was: Regarding the previous code, is param will be GL_NEAREST?


They're stored in the texture itself (or in a sampler object if one is bound).

You mean texture referenced by name?

So param will be GL_NEAREST right?

EDIT:

This page (https://www.opengl.org/wiki/Texture) is pretty clear:

Things managed using glGen/glBind/glDelete are OpenGL Objects.

So textures are OpenGL Objects.

Texture unit are simply used to glBind textures in it and have no parameters.

This would mean, in my code, that param will be GL_NEAREST.

john_connor
10-13-2016, 05:16 AM
int param = -1;

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &param);


This would mean, in my code, that param will be GL_NEAREST.

i think you are mixing something up
param will be -1, because you are trying to set a texture parameter: the address of variable "param"
that should give you an GLerror, did you check that anywhere ?
https://www.opengl.org/wiki/OpenGL_Error

to get information about an GL object (like a texture), you call glGet...(), in this case:
https://www.opengl.org/sdk/docs/man4/html/glGetTexParameter.xhtml

to set texture parameters, you call:
https://www.opengl.org/sdk/docs/man4/html/glTexParameter.xhtml

Narann
10-13-2016, 08:22 AM
i think you are mixing something up
param will be -1, because you are trying to set a texture parameter

Sorry, sorry, I meant glGetTexParameter(). I fixed the code. This code is hand written and not tested, I'm just trying to understand texture parameters relations with texture unit.