Program Listing for File VkScopedSampler.cpp

Return to documentation for file (Source\Azura\RenderSystem\Src\Vulkan\VkScopedSampler.cpp)

#include "Vulkan/VkScopedSampler.h"
#include "Vulkan/VkMacros.h"

namespace Azura {
namespace Vulkan {

VkScopedSampler::VkScopedSampler(VkDevice device, Log logger)
  : m_device(device),
    log_VulkanRenderSystem(std::move(logger)) {

  // TODO(vasumahesh1):[SAMPLER]: Generalize this!
  VkSamplerCreateInfo samplerInfo     = {};
  samplerInfo.sType                   = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
  samplerInfo.magFilter               = VK_FILTER_NEAREST;
  samplerInfo.minFilter               = VK_FILTER_NEAREST;
  samplerInfo.addressModeU            = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
  samplerInfo.addressModeV            = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
  samplerInfo.addressModeW            = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
  samplerInfo.anisotropyEnable        = VK_FALSE;
  samplerInfo.maxAnisotropy           = 1;
  samplerInfo.borderColor             = VK_BORDER_COLOR_INT_OPAQUE_BLACK;
  samplerInfo.unnormalizedCoordinates = VK_FALSE; // [0,1) addressing
  samplerInfo.compareEnable           = VK_FALSE;
  samplerInfo.compareOp               = VK_COMPARE_OP_ALWAYS;
  samplerInfo.mipmapMode              = VK_SAMPLER_MIPMAP_MODE_NEAREST;
  samplerInfo.mipLodBias              = 0.0f;
  samplerInfo.minLod                  = 0.0f;
  samplerInfo.maxLod                  = 0.0f; // Force use 0th Mip Map for Rendering.

  VERIFY_VK_OP(log_VulkanRenderSystem, vkCreateSampler(m_device, &samplerInfo, nullptr, &m_sampler),
    "Failed to create texture sampler");
}

VkSampler VkScopedSampler::Real() const {
  return m_sampler;
}

void VkScopedSampler::CleanUp() const {
  vkDestroySampler(m_device, m_sampler, nullptr);
}

} // namespace Vulkan
} // namespace Azura