sampler2Drect和sampler2d有什么区别?

问题描述 投票:0回答:1

正如 glsl 规范所说

gvec4 texture(  gsampler2D sampler,
    vec2 P,
    [float bias]);
gvec4 texture(  gsampler2DRect sampler,
    vec2 P);

我在 vulkan 中测试了这两个条件。我绑定相同的图像数据并给出相同的坐标。结果是一样的。 那么它们之间有什么区别呢。我可以构造sampler2D和sampler2DRect有不同结果的条件吗?

glsl vulkan
1个回答
0
投票

2D 纹理和矩形纹理之间最重要的区别是 2D 纹理实际上可以在 Vulkan 中工作,而矩形纹理不能

矩形纹理是 OpenGL 的一个古老遗迹,Vulkan 不使用它。对于 OpenGL,矩形纹理是一种特殊的纹理类型(与 2D 纹理不同),它只有一个 mipmap 并且其纹理坐标未标准化,但您仍然可以进行过滤。非标准化纹理坐标是矩形纹理的一个特殊特征。

在 Vulkan 和 SPIR-V 中,纹理坐标是否标准化是 sampler 的一部分,而不是纹理类型的一部分。因此,您可以通过在采样器中设置适当的参数并在 GLSL 着色器中使用

textureLod
(以及
sampler2D
作为采样器类型)来获得与矩形纹理相同的效果。您需要使用
textureLod
,因为
texture
依赖于隐式 LOD 计算,而 Vulkan 在非标准化坐标上不允许这样做。

© www.soinside.com 2019 - 2024. All rights reserved.