Vulkan Cookbook 第五章 3 创建组合图像采样器

创建组合图像采样器

译者注:示例代码点击此处

从应用程序(API)的角度来看,采样器和采样图像始终是单独的对象。但是在着色器中,他们可以组合成一个对象。在某些平台上,使用着色器内的组合图像采样器采样可能比使用单独的采样器和采样图像更优化。

怎么做...

1.创建一个采样器对象,并将其句柄存储在名为sampler的VkSampler类型变量中(请参阅创建采样器内容)。
2.创建采样图像。将创建的图像句柄存储在名为sampled_image的VkImage类型变量中。为采样图像创建适当的视图,并将其句柄存储在名为sampled_image_view的VkImageView类型变量中(请参阅创建采样图像内容)。

这个怎么运作...

在我们的应用程序中创建组合图像采样器的方式与普通采样器和采样图像相同。它们在着色器中的使用方式不同。

提示:组合图像采样器可以绑定到VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER类型的描述符。

以下代码使用创建采样器创建采样图像的内容来创建必要的对象:

if( !CreateSampler( logical_device, mag_filter, min_filter, mipmap_mode, u_address_mode, v_address_mode, w_address_mode, lod_bias, anisotropy_enable, max_anisotropy, compare_enable, compare_operator, min_lod, max_lod, border_color, unnormalized_coords, sampler ) ) {
  return false;
}

bool linear_filtering = (mag_filter == VK_FILTER_LINEAR) || (min_filter == VK_FILTER_LINEAR) || (mipmap_mode == VK_SAMPLER_MIPMAP_MODE_LINEAR);
    if( !CreateSampledImage( physical_device, logical_device, type, format, size, num_mipmaps, num_layers, usage, cubemap, view_type, aspect, linear_filtering, sampled_image, memory_object, sampled_image_view ) ) {
  return false;
}
return true;

不同之处在于着色器内不。 

提示:要创建表示GLSL着色器内的组合图像采样器变量,我们需要使用适当的关键字(可能具有前缀)与适当的纹理维度。

不要混淆采样器和组合图像采样器-两者都在着色器中使用sampler关键字,但组合图像采样器还具有指定的维度,如下所示:

layout (set=m, binding=n) uniform sampler2D <variable name>;

译者注:采样器是sampler而这里的组合图像采样器为sampler2D多了个2D维度。

我们尽量使用组合图像采样器,因为使用它的应用程序在某些平台上可能具有更好的性能。因此,如果没有特别的理由使用单独的采样器和采样图像,我们应该尝试将它们组合为单个对象。 

猜你喜欢

转载自blog.csdn.net/qq_19473837/article/details/85225288
今日推荐