gpt4 book ai didi

没有纹理绑定(bind)的 OpenGL 采样

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

当像这样在 GLSL 中对纹理进行采样时:

vec4 color = texture(mySampler, myCoords);

如果没有纹理绑定(bind)到 mySampler,颜色似乎总是 (0, 0, 0, 1)。

这是标准行为吗?或者它可能在某些实现中未定义?我在规范中找不到任何东西。

最佳答案

真的没有“未绑定(bind)”这样的东西——你只是绑定(bind)到被称为纹理 0 的初始纹理对象。根据 OpenGL wiki (http://www.opengl.org/wiki/OpenGL_Objects),

You are strongly encouraged to think of texture 0 as a non-existent texture.

最终,您将在着色器中获得的值取决于当时纹理对象 0 中发生的情况。除了一个 forum post 我真的找不到任何东西这实际上说明了这应该是什么:
The texture 0 represents an actual texture object, the default texture.
All textures start out as 1x1 white textures.

我当然不相信在所有 GPU 驱动程序中都保持一致,您的可能会将其初始化为全零,或者它可能被认为是不完整的纹理,在这种情况下,OpenGL 规范(至少 2.0 及更高版本)说:
If a fragment shader uses a sampler whose associated texture object is not
complete, the texture image unit will return (R, G, B, A) = (0, 0, 0, 1).

......所以真正最明智的做法似乎是“不要那样做”。如果要运行采样器,请确保您有一个有效的(非零 id)纹理绑定(bind)。

关于没有纹理绑定(bind)的 OpenGL 采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21020058/

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