Chr*_*ris 11 opengl textures texture-mapping
说你有这样的事情:
glBindTexture(GL_TEXTURE_2D, my2dTex);
glBindTexture(GL_TEXTURE_1D, my1dTex);
glBegin...
Run Code Online (Sandbox Code Playgroud)
什么是正确的OpenGL行为?绘制1d纹理,2d或两者?对于每个活动纹理,实际上有多个纹理可以同时绑定到它(即1d,2d,3d立方体贴图等)?
Bah*_*bar 13
绑定的GL状态是每个目标一个纹理名称(即1D/2D/3D /立方体).所以在打电话时
glBindTexture(GL_TEXTURE_2D, my2dTex)
glBindTexture(GL_TEXTURE_1D, my1dTex)
Run Code Online (Sandbox Code Playgroud)
GL将记住这两个设置.
现在,一个GL将使用的答案取决于你是否有一个着色器.
如果着色器已打开,则GL将使用着色器所使用的任何内容.(基于sampler1d/sampler2d ......).
如果没有启用着色器,那么它首先取决于哪个glEnable调用.
glEnable(GL_TEXTURE_2D)
glEnable(GL_TEXTURE_1D)
Run Code Online (Sandbox Code Playgroud)
如果两者都启用,则规范中存在静态优先级规则(GL 1.5规范中的3.8.15纹理应用程序).
Cube > 3D > 2D > 1D
Run Code Online (Sandbox Code Playgroud)
因此,在您的情况下,如果启用了两个纹理目标,则将使用2D纹理目标.
作为旁注,请注意着色器如何不关心纹理目标是否已启用...
编辑添加:
而对于谁真的想要得到的坚韧不拔的细节的人,你总是有一个绑定为每个目标*每个单元的纹理.名称0(绑定状态的默认值)对应于一系列纹理对象,每个目标一个.glBindTexture(GL_TEXTURE_2D, 0)并glBindTexture(GL_TEXTURE_1D, 0)绑定纹理,但不是同一个...
这是历史记录,指定与GL 1.0的行为匹配,其中纹理对象尚不存在.不过,我不确定GL3.0对此有何弃用.
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |