各向异性设备特性

如果现在读者编译运行程序,就会看到下面的校验层信息:

image

这是因为各向异性过滤实际上是一个非必需的设备特性。我们需要在创建逻辑设备时检查这一设备特性是否被设备支持才能使用它:

VkPhysicalDeviceFeatures deviceFeatures = {};
deviceFeatures.samplerAnisotropy = VK_TRUE;

尽管,现在大部分现代图形硬件都已经支持了这一特性,但我们最好还是以防万一对设备是否支持这一特性进行检测:

bool isDeviceSuitable(VkPhysicalDevice device) {
        ...

    VkPhysicalDeviceFeatures supportedFeatures;
    vkGetPhysicalDeviceFeatures(device, &supportedFeatures);

    return indices.isComplete() && extensionsSupported && swapChainAdequate && supportedFeatures.samplerAnisotropy;
}

我们通过调用vkGetPhysicalDeviceFeatures函数获取物理设备支持的特性信息,然后验证是否包含各向异性过滤特性。

如果不想使用各向异性过滤,可以按照下面这样设置:

samplerInfo.anisotropyEnable = VK_FALSE;
samplerInfo.maxAnisotropy = 1;

在下一章节,我们会在着色器中使用采样器访问纹理数据将纹理图像绘制到一个矩形上。

本章节代码:

C++:

https://vulkan-tutorial.com/code/24_sampler.cpp

Vertex Shader:

https://vulkan-tutorial.com/code/21_shader_ubo.vert

Fragment Shader:

https://vulkan-tutorial.com/code/21_shader_ubo.frag