VK_FILTER_NEAREST在采样期间不起作用

时间:2019-02-21 10:57:09

标签: c++ image vulkan

我在Vulkan中使用采样器时遇到了问题:如果为放大或缩小滤镜使用VK_FILTER_NEARESTVK_FILTER_LINEAR创建采样器都没关系,我的纹理将像我一样被采样用VK_FILTER_LINEAR创建了它;

这是我创建采样器的方法:

void                         Gui::Texture_2D::createVkSampler(const VkFilter & _magFilter,
                                                              const VkFilter & _minFilter,
                                                              const VkSamplerMipmapMode & _mipMapFilter,
                                                              const unsigned char & _maxAnisotropy) {
    VkSamplerCreateInfo samplerInfo = {};

    samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
    samplerInfo.magFilter = _magFilter; // VK_FILTER_NEAREST
    samplerInfo.minFilter = _minFilter; // VK_FILTER_NEAREST
    samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT;
    samplerInfo.anisotropyEnable = _maxAnisotropy == 0 ? VK_FALSE : VK_TRUE; // 0
    samplerInfo.maxAnisotropy = _maxAnisotropy; // 0
    samplerInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
    samplerInfo.unnormalizedCoordinates = VK_FALSE;
    samplerInfo.compareEnable = VK_FALSE;
    samplerInfo.compareOp = VK_COMPARE_OP_ALWAYS;
    samplerInfo.mipmapMode = _mipMapFilter; // VK_SAMPLER_MIPMAP_MODE_NEAREST
    samplerInfo.mipLodBias = 0.0f;
    samplerInfo.minLod = 0.0f;
    samplerInfo.maxLod = static_cast<float>(image.getMipLevels());

    if (vkCreateSampler(logicalDevice, &samplerInfo, nullptr, &sampler) != VK_SUCCESS)
        throw std::runtime_error("Texture sampler creation failed!");

}

...但是纹理的渲染就像我通过了VK_FILTER_LINEARVK_SAMPLER_MIPMAP_MODE_LINEAR一样,我真的不知道出了什么问题。

有人有想法吗?谢谢。

更多信息

这是图像纹理(一个简单的8x8 .png,每个4x4角都有不同的颜色):

Here

这是使用VK_FILTER_NEARESTVK_SAMPLER_MIPMAP_MODE_NEAREST的结果:

Here2

这是立方体的.obj文件,具有法线和纹理坐标:

# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib untitled.mtl
o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 1.000000 1.000000 1.000000
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 8/6/2 7/7/2 6/8/2
f 1/1/3 5/9/3 6/10/3 2/11/3
f 2/12/4 6/13/4 7/7/4 3/14/4
f 3/15/5 7/16/5 8/17/5 4/4/5
f 5/5/6 1/18/6 4/19/6 8/20/6

我期望有类似Minecraft的行为,但是我得到了应该用VK_FILTER_LINEAR获得的这种模糊风格。

谢谢。

更新

我在另一台PC上运行了该程序,并且纹理已正确采样,我想我的GPU出现错误/故障/问题,我将尝试更新驱动程序。

更新2

我更新了我的GPU驱动程序,现在使用的是最新的Vulkan SDK版本(1.1.101.0),仍然没有使用;采样器的RenderDoc分析报告没有问题,我使用的是正确的过滤器;删除/不使用mipmaps没有帮助;不是一个验证层错误。

我开始认为我的GPU仍然不能很好地支持Vulkan(Intel HD Graphics 620),所以我想我必须接受它并继续,至少知道它可以在其他PC上使用

0 个答案:

没有答案