gpt4 book ai didi

opengl - 在 OpenGL 中同时绑定(bind) 1D 和 2D 纹理时,正确的行为是什么?

转载 作者:行者123 更新时间:2023-12-04 02:03:51 25 4
gpt4 key购买 nike

假设你有这样的事情:

glBindTexture(GL_TEXTURE_2D, my2dTex);
glBindTexture(GL_TEXTURE_1D, my1dTex);
glBegin...

什么是正确的 OpenGL 行为?要绘制 1d 纹理、2d 还是两者兼而有之?对于每个事件纹理,实际上是否有多个纹理可以同时绑定(bind)到它(即 1d、2d、3d 立方体贴图等)?

最佳答案

绑定(bind)的 GL 状态是每个目标的一个纹理名称(即 1D/2D/3D/立方体)。所以打电话的时候

glBindTexture(GL_TEXTURE_2D, my2dTex)
glBindTexture(GL_TEXTURE_1D, my1dTex)

GL 会记住这两个设置。

现在,使用哪个 GL 的答案取决于您是否打开了着色器。

如果着色器打开,GL 将使用着色器要求使用的任何内容。 (基于 sampler1d/sampler2d ...)。

如果没有开启着色器,那么它首先取决于调用了哪个 glEnable。
glEnable(GL_TEXTURE_2D)
glEnable(GL_TEXTURE_1D)

如果两者都启用,则规范中有一个静态优先级规则(GL 1.5 规范中的 3.8.15 纹理应用程序)。
Cube > 3D > 2D > 1D

因此,在您的情况下,如果您的两个纹理目标都启用,则将使用 2D 目标。

作为旁注,请注意着色器如何不关心纹理目标是否已启用......

编辑添加:

对于那些真正想要了解细节的人来说,你总是为每个目标*每个单元都有一个纹理绑定(bind)。名称 0(绑定(bind)状态的默认值)对应于一系列纹理对象,每个目标一个。 glBindTexture(GL_TEXTURE_2D, 0)glBindTexture(GL_TEXTURE_1D, 0)两者都绑定(bind)纹理,但不是同一个......

这是历史性的,指定为匹配 GL 1.0 的行为,其中纹理对象尚不存在。不过,我不确定 GL3.0 中的弃用对此做了什么。

关于opengl - 在 OpenGL 中同时绑定(bind) 1D 和 2D 纹理时,正确的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2784937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com