我有一个纹理,其纹理包装需要根据视图进行更改。
我正在使用无绑定纹理,因此我将其驻留。
我知道如果句柄是驻留的,我不能调用 glTexParameter/glTextureParameter,但这也不起作用:
makeNonResident()
glTextureParameter(....) -> invalid_operation
makeResident()
我错过了什么?奇怪的是,我什至还没有渲染,这只是在创建纹理并使其驻留之后。
调用glGetTextureHandleARB
从纹理中检索句柄后,该纹理将变为不可变。不是不可变的存储,而是完全不可变的。
您无法更改其任何参数。再一次。没有撤消。
这样做的原因是手柄在内部存储纹理的所有参数。因此,更改这些参数不会影响句柄的复制,并且允许此类更改影响纹理引用的每个句柄会对性能和同步造成不必要的负担。
您真正想要的是使用glGetTextureSamplerHandleARB
从纹理/采样器对中获取新句柄。因此,您可以使用所需的任何采样参数创建采样器,然后为其和原始纹理获取新的句柄。采样器的参数将覆盖纹理中的参数,并且您将获得一个新的句柄,用于对纹理和采样器的参数进行编码。
现在,您不想继续为这些事情创建句柄。因此,您应该准确规划出所需的纹理/采样器对,并提前创建它们。