首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用glsl的mipmapping的奇怪行为

使用glsl的mipmapping的奇怪行为
EN

Stack Overflow用户
提问于 2016-11-01 01:09:05
回答 1查看 492关注 0票数 1

我试着用mipmapping和vulkan。我知道我应该在每一层之间对每个图像使用vkCmdBlit,但在这样做之前,我只想知道如何在GLSL中更改该层。

这就是我所做的。首先,我加载并绘制一个纹理(使用第0层),没有问题。“呈现的图像”是我加载的纹理,所以它很好。

其次,我使用这个着色器(所以我想使用第二层(数字1)),但是“呈现的图像”没有改变:

代码语言:javascript
运行
复制
#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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-01 09:21:23

根据默认的取样器创建信息(https://github.com/qnope/Vulkan-Example/blob/master/Mipmap/VkTools/System/sampler.cpp#L28)判断,您总是将取样器的maxLod成员设置为零,因此lod总是夹在0.0到0.0之间(minLod/maxLod)。这符合你所描述的行为。

因此,尝试将您的取样器创建信息的maxLod成员设置为纹理中的mip映射的实际数量,并更改着色器中的lod级别可以很好地工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40352791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档