OpenGL 纹理单元 纹理目标 理解 glActiveTexture glBindTexture

来源:互联网 发布:淘宝15天退换货图片 编辑:程序博客网 时间:2024/06/06 00:21
转载自:
http://blog.csdn.net/zhuyingqingfen/article/details/19968341

可以这样简单的理解为:显卡中有N个纹理单元(具体数目依赖你的显卡能力),每个纹理单元(GL_TEXTURE0、GL_TEXTURE1等)都有GL_TEXTURE_1D、GL_TEXTURE_2D等,如下代码:

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. struct TextureUnit  
  2. {  
  3.     GLuint targetTexture1D;  
  4.     GLuint targetTexture2D;  
  5.     GLuint targetTexture3D;  
  6.     GLuint targetTextureCube;  
  7.     ...  
  8. };  
  9.    
  10. TextureUnit textureUnits[GL_MAX_TEXTURE_IMAGE_UNITS]  
  11. GLuint currentTextureUnit = 0;  

默认情况下当前活跃的纹理单元为0.

 

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void glActiveTexture(GLenum textureUnit)  
  2. {  
  3.     currentTextureUnit = textureUnit  - GL_TEXTURE0 ;  
  4. }  


glActiveTextue 并不是激活纹理单元,而是选择当前活跃的纹理单元。


[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void glBindTexture(GLenum textureTarget, GLuint textureObject)  
  2. {  
  3.     TextureUnit *texUnit = &textureUnits[currentTextureUnit];  
  4.     switch(textureTarget)  
  5.     {  
  6.     case GL_TEXTURE_1D: texUnit->targetTexture1D = textureObject; break;  
  7.     case GL_TEXTURE_2D: texUnit->targetTexture2D = textureObject; break;  
  8.     case GL_TEXTURE_3D: texUnit->targetTexture3D = textureObject; break;  
  9.     case GL_TEXTURE_CUBEMAP: texUnit->targetTextureCube = textureObject; break;  
  10.     }  
  11. }  

从示例代码中可以看到:当绑定纹理目标时,所作用的是当前活跃的纹理单元。

可以这样简单的理解为:显卡中有N个纹理单元(具体数目依赖你的显卡能力),每个纹理单元(GL_TEXTURE0、GL_TEXTURE1等)都有GL_TEXTURE_1D、GL_TEXTURE_2D等,如下代码:

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. struct TextureUnit  
  2. {  
  3.     GLuint targetTexture1D;  
  4.     GLuint targetTexture2D;  
  5.     GLuint targetTexture3D;  
  6.     GLuint targetTextureCube;  
  7.     ...  
  8. };  
  9.    
  10. TextureUnit textureUnits[GL_MAX_TEXTURE_IMAGE_UNITS]  
  11. GLuint currentTextureUnit = 0;  

默认情况下当前活跃的纹理单元为0.

 

[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void glActiveTexture(GLenum textureUnit)  
  2. {  
  3.     currentTextureUnit = textureUnit  - GL_TEXTURE0 ;  
  4. }  


glActiveTextue 并不是激活纹理单元,而是选择当前活跃的纹理单元。


[cpp] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. void glBindTexture(GLenum textureTarget, GLuint textureObject)  
  2. {  
  3.     TextureUnit *texUnit = &textureUnits[currentTextureUnit];  
  4.     switch(textureTarget)  
  5.     {  
  6.     case GL_TEXTURE_1D: texUnit->targetTexture1D = textureObject; break;  
  7.     case GL_TEXTURE_2D: texUnit->targetTexture2D = textureObject; break;  
  8.     case GL_TEXTURE_3D: texUnit->targetTexture3D = textureObject; break;  
  9.     case GL_TEXTURE_CUBEMAP: texUnit->targetTextureCube = textureObject; break;  
  10.     }  
  11. }  

从示例代码中可以看到:当绑定纹理目标时,所作用的是当前活跃的纹理单元。
0 0