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