MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ create_sampler()

vk::Sampler MayaFlux::Portal::Graphics::SamplerForge::create_sampler ( const SamplerConfig config)
private

Definition at line 151 of file SamplerForge.cpp.

152{
153 auto device = m_backend->get_context().get_device();
154 auto physical_device = m_backend->get_context().get_physical_device();
155
156 vk::SamplerCreateInfo sampler_info {};
157 sampler_info.magFilter = to_vk_filter(config.mag_filter);
158 sampler_info.minFilter = to_vk_filter(config.min_filter);
159
160 sampler_info.addressModeU = to_vk_address_mode(config.address_mode_u);
161 sampler_info.addressModeV = to_vk_address_mode(config.address_mode_v);
162 sampler_info.addressModeW = to_vk_address_mode(config.address_mode_w);
163
164 if (config.max_anisotropy > 1.0F) {
165 auto properties = physical_device.getProperties();
166 sampler_info.anisotropyEnable = VK_TRUE;
167 sampler_info.maxAnisotropy = std::min(
168 config.max_anisotropy,
169 properties.limits.maxSamplerAnisotropy);
170 } else {
171 sampler_info.anisotropyEnable = VK_FALSE;
172 sampler_info.maxAnisotropy = 1.0F;
173 }
174
175 sampler_info.borderColor = vk::BorderColor::eIntOpaqueBlack;
176
177 sampler_info.unnormalizedCoordinates = VK_FALSE;
178
179 sampler_info.compareEnable = VK_FALSE;
180 sampler_info.compareOp = vk::CompareOp::eAlways;
181
182 if (config.enable_mipmaps) {
183 sampler_info.mipmapMode = (config.min_filter == FilterMode::LINEAR)
184 ? vk::SamplerMipmapMode::eLinear
185 : vk::SamplerMipmapMode::eNearest;
186 sampler_info.minLod = 0.0F;
187 sampler_info.maxLod = VK_LOD_CLAMP_NONE;
188 sampler_info.mipLodBias = 0.0F;
189 } else {
190 sampler_info.mipmapMode = vk::SamplerMipmapMode::eNearest;
191 sampler_info.minLod = 0.0F;
192 sampler_info.maxLod = 0.0F;
193 sampler_info.mipLodBias = 0.0F;
194 }
195
196 try {
197 vk::Sampler sampler = device.createSampler(sampler_info);
199 "Created sampler: mag={}, min={}, aniso={}",
200 vk::to_string(sampler_info.magFilter),
201 vk::to_string(sampler_info.minFilter),
202 sampler_info.maxAnisotropy);
203 return sampler;
204 } catch (const vk::SystemError& e) {
206 "Failed to create sampler: {}", e.what());
207 return nullptr;
208 }
209}
#define MF_ERROR(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
static vk::Filter to_vk_filter(FilterMode mode)
static vk::SamplerAddressMode to_vk_address_mode(AddressMode mode)
std::shared_ptr< Core::VulkanBackend > m_backend
@ ImageProcessing
Image processing tasks (filters, transformations)
@ Portal
High-level user-facing API layer.
@ LINEAR
Bilinear filtering (smooth)

References MayaFlux::Portal::Graphics::SamplerConfig::address_mode_u, MayaFlux::Portal::Graphics::SamplerConfig::address_mode_v, MayaFlux::Portal::Graphics::SamplerConfig::address_mode_w, MayaFlux::Portal::Graphics::SamplerConfig::enable_mipmaps, MayaFlux::Journal::ImageProcessing, MayaFlux::Portal::Graphics::LINEAR, m_backend, MayaFlux::Portal::Graphics::SamplerConfig::mag_filter, MayaFlux::Portal::Graphics::SamplerConfig::max_anisotropy, MF_DEBUG, MF_ERROR, MayaFlux::Portal::Graphics::SamplerConfig::min_filter, MayaFlux::Journal::Portal, to_vk_address_mode(), and to_vk_filter().

Referenced by get_or_create().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: