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