From e318a5b4aab5a741f6932021707e8c704f8886f0 Mon Sep 17 00:00:00 2001 From: kearwood Date: Thu, 25 Aug 2022 00:00:55 -0700 Subject: [PATCH] Added KRSamplerManager::DEFAULT_CLAMPED_SAMPLER and DEFAULT_WRAPPING_SAMPLER Added KRSamplerManager::init --- kraken/KRContext.cpp | 1 + kraken/KRSampler.cpp | 1 + kraken/KRSamplerManager.cpp | 33 ++++++++++++++++++++++++++++++++- kraken/KRSamplerManager.h | 4 ++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/kraken/KRContext.cpp b/kraken/KRContext.cpp index d50f684..4d05d00 100755 --- a/kraken/KRContext.cpp +++ b/kraken/KRContext.cpp @@ -102,6 +102,7 @@ KRContext::KRContext(const KrInitializeInfo* initializeInfo) m_pBundleManager = std::make_unique(*this); m_pPipelineManager = std::make_unique(*this); m_pSamplerManager = std::make_unique(*this); + m_pSamplerManager->init(); m_pTextureManager = std::make_unique(*this); m_pMaterialManager = std::make_unique(*this, m_pTextureManager.get(), m_pPipelineManager.get()); m_pMeshManager = std::make_unique(*this); diff --git a/kraken/KRSampler.cpp b/kraken/KRSampler.cpp index 3bd69a9..ae1fa57 100644 --- a/kraken/KRSampler.cpp +++ b/kraken/KRSampler.cpp @@ -34,6 +34,7 @@ KRSampler::KRSampler(KRContext& context, const SamplerInfo& info) : KRContextObject(context) + , m_sampler(VK_NULL_HANDLE) { // TODO - Implement stub function } diff --git a/kraken/KRSamplerManager.cpp b/kraken/KRSamplerManager.cpp index 793b7a6..d285929 100644 --- a/kraken/KRSamplerManager.cpp +++ b/kraken/KRSamplerManager.cpp @@ -45,6 +45,8 @@ bool SamplerInfo::operator==(const SamplerInfo& rhs) const KRSamplerManager::KRSamplerManager(KRContext& context) : KRContextObject(context) + , DEFAULT_CLAMPED_SAMPLER(nullptr) + , DEFAULT_WRAPPING_SAMPLER(nullptr) { } @@ -61,6 +63,35 @@ void KRSamplerManager::destroy() m_samplers.clear(); } +void KRSamplerManager::init() +{ + SamplerInfo info{}; + info.createInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; + info.createInfo.magFilter = VK_FILTER_LINEAR; + info.createInfo.minFilter = VK_FILTER_LINEAR; + info.createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + info.createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + info.createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; + info.createInfo.anisotropyEnable = VK_TRUE; + info.createInfo.maxAnisotropy = 16; // TODO - This should be dynamic + info.createInfo.borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK; + info.createInfo.unnormalizedCoordinates = VK_FALSE; + info.createInfo.compareEnable = VK_FALSE; + info.createInfo.compareOp = VK_COMPARE_OP_ALWAYS; + info.createInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR; + info.createInfo.mipLodBias = 0.0f; + info.createInfo.minLod = 0.0f; + info.createInfo.maxLod = 0.0f; + + DEFAULT_CLAMPED_SAMPLER = getSampler(info); + + info.createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT; + info.createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT; + info.createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT; + + DEFAULT_WRAPPING_SAMPLER = getSampler(info); +} + KRSampler* KRSamplerManager::getSampler(const SamplerInfo& info) { SamplerMap::iterator itr = m_samplers.find(info); @@ -68,6 +99,6 @@ KRSampler* KRSamplerManager::getSampler(const SamplerInfo& info) return itr->second; } KRSampler* sampler = new KRSampler(getContext(), info); - m_samplers.emplace(info, sampler); + m_samplers[info] = sampler; return sampler; } diff --git a/kraken/KRSamplerManager.h b/kraken/KRSamplerManager.h index 862b9fb..7ba2eb9 100644 --- a/kraken/KRSamplerManager.h +++ b/kraken/KRSamplerManager.h @@ -63,9 +63,13 @@ class KRSamplerManager : public KRContextObject public: KRSamplerManager(KRContext& context); virtual ~KRSamplerManager(); + void init(); KRSampler* getSampler(const SamplerInfo& info); void destroy(); + + KRSampler* DEFAULT_CLAMPED_SAMPLER; + KRSampler* DEFAULT_WRAPPING_SAMPLER; private: typedef std::unordered_map SamplerMap; SamplerMap m_samplers;