【发布时间】:2016-11-01 17:21:23
【问题描述】:
我正在尝试将 mipmapping 与 vulkan 一起使用。我确实知道我应该在每个图像的每个层之间使用 vkCmdBlit,但在此之前,我只想知道如何更改 GLSL 中的层。
这就是我所做的。 首先我加载并绘制一个纹理(使用第 0 层),没有问题。 “渲染图像”是我加载的纹理,所以很好。
其次,我使用这个着色器(所以我想使用第二层(编号 1))但“渲染图像”没有改变:
#version 450
layout(set = 0, binding = 0) uniform sampler2D tex;
in vec2 texCoords;
layout(location = 0) out vec4 outColor;
void main() {
outColor = textureLod(tex, texCoords, 1);
}
根据我的说法,渲染的图像应该改变,但根本不是,它总是相同的图像,即使我增加“1”(层数)。
第三次更改 glsl 代码中的任何内容,我将图层编号更改为 ImageSubresourceRange 以创建 imageView,并且“渲染图像”发生了更改,所以对我来说这似乎很正常,当我使用 vkCmdBlit 时,我必须看到较低分辨率的原始图像。
真正的问题是,当我尝试在 GLSL 中使用 mipmapping(通过 mipmapping)时,它根本不会影响渲染的图像,但在 C++ 中它会影响(这似乎很公平)。
这是(全部)我的源代码 https://github.com/qnope/Vulkan-Example/tree/master/Mipmap
【问题讨论】:
-
"按照我的说法,渲染的图像应该改变,但根本不是,它总是相同的图像,即使我增加了“1”(层数) .” 为什么?您正在从纹理中获取。为什么你从哪里获取对你写的东西有任何影响?您是否通常希望传递给函数调用的参数会影响函数返回值存储在哪个变量或内存位置?
-
由于我还没有使用vkCmdBlit,所以我读取的内存内容应该是未定义的^^