Skip to content

Commit

Permalink
[sampler] Add wrapper for VkSampler
Browse files Browse the repository at this point in the history
  • Loading branch information
IAmNotHanni committed May 12, 2023
1 parent e932a99 commit e0f5438
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
43 changes: 43 additions & 0 deletions include/inexor/vulkan-renderer/wrapper/sampler.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#pragma once

#include <volk.h>

#include <string>

namespace inexor::vulkan_renderer::wrapper {

// Forward declaration
class Device;

/// RAII wrapper class for VkSampler
class Sampler {
private:
const Device &m_device;
VkSampler m_sampler{VK_NULL_HANDLE};
std::string m_name;

public:
/// Default constructor
/// @param device The device wrapper
/// @param sampler_ci The sampler create info
/// @param name The internal debug name of the sampler
Sampler(const Device &device, const VkSamplerCreateInfo &sampler_ci, std::string name);

/// Overloaded constructor which creates a default sampler
/// @param device The device wrapper
/// @param name The internal debug name of the sampler
Sampler(const Device &device, std::string name);
~Sampler();

Sampler(const Sampler &) = delete;
Sampler(Sampler &&) noexcept;

Sampler &operator=(const Sampler &) = delete;
Sampler &operator=(Sampler &&) = delete;

[[nodiscard]] VkSampler sampler() const noexcept {
return m_sampler;
}
};

} // namespace inexor::vulkan_renderer::wrapper
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ set(INEXOR_SOURCE_FILES
vulkan-renderer/wrapper/image.cpp
vulkan-renderer/wrapper/instance.cpp
vulkan-renderer/wrapper/make_info.cpp
vulkan-renderer/wrapper/sampler.cpp
vulkan-renderer/wrapper/semaphore.cpp
vulkan-renderer/wrapper/shader.cpp
vulkan-renderer/wrapper/swapchain.cpp
Expand Down
41 changes: 41 additions & 0 deletions src/vulkan-renderer/wrapper/sampler.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#include "inexor/vulkan-renderer/wrapper/sampler.hpp"

#include "inexor/vulkan-renderer/wrapper/device.hpp"
#include "inexor/vulkan-renderer/wrapper/make_info.hpp"

#include <utility>

namespace inexor::vulkan_renderer::wrapper {

Sampler::Sampler(const Device &device, const VkSamplerCreateInfo &sampler_ci, std::string name)
: m_device(device), m_name(std::move(name)) {
m_device.create_sampler(sampler_ci, &m_sampler, m_name);
}

Sampler::Sampler(const Device &device, std::string name)
: Sampler(device,
// Default sampler settings
make_info<VkSamplerCreateInfo>({
.magFilter = VK_FILTER_LINEAR,
.minFilter = VK_FILTER_LINEAR,
.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR,
.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT,
.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT,
.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT,
.mipLodBias = 0.0f,
.anisotropyEnable = VK_FALSE,
.maxAnisotropy = 1.0f,
.compareEnable = VK_FALSE,
.compareOp = VK_COMPARE_OP_ALWAYS,
.minLod = 0.0f,
.maxLod = 0.0f,
.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK,
.unnormalizedCoordinates = VK_FALSE,
}),
std::move(name)) {}

Sampler::~Sampler() {
vkDestroySampler(m_device.device(), m_sampler, nullptr);
}

} // namespace inexor::vulkan_renderer::wrapper

0 comments on commit e0f5438

Please sign in to comment.