diff --git a/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp index ded6f0bc72fbf64c4eee9ca59e6d576c8047d9db..35fb50169c8d4af326747d1d00de4a15645666f6 100644 --- a/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp +++ b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp @@ -11,7 +11,6 @@ namespace vkcv::material { - class Core; class PBRMaterial : Material { public: @@ -50,7 +49,14 @@ namespace vkcv::material */ static std::vector<DescriptorBinding> getDescriptorBindings() noexcept; - void create(vkcv::Core core); + static PBRMaterial create( + vkcv::Core* core, + ImageHandle &colorImg, + SamplerHandle &colorSmp, + ImageHandle &normalImg, + SamplerHandle &normalSmp, + ImageHandle &metRoughImg, + SamplerHandle &metRoughSmp); }; } \ No newline at end of file diff --git a/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp index 6d219cd6bfcd8bb6e895e02bcf1604555be4a66b..05481b5275f6a6c8e86e1923d01c7999cc004617 100644 --- a/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp +++ b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp @@ -3,21 +3,23 @@ namespace vkcv::material { - PBRMaterial::PBRMaterial(const ImageHandle &colorImg, - const SamplerHandle &colorSmp, - const ImageHandle &normalImg, - const SamplerHandle &normalSmp, - const ImageHandle &metRoughImg, - const SamplerHandle &metRoughSmp, - const DescriptorSetHandle &setHandle) noexcept : - m_ColorTexture(colorImg), - m_ColorSampler(colorSmp), - m_NormalTexture(normalImg), - m_NormalSampler(normalSmp), - m_MetRoughTexture(metRoughImg), - m_MetRoughSampler(metRoughSmp), - m_DescriptorSetHandle(setHandle) - {} + PBRMaterial::PBRMaterial( + const ImageHandle &colorImg, + const SamplerHandle &colorSmp, + const ImageHandle &normalImg, + const SamplerHandle &normalSmp, + const ImageHandle &metRoughImg, + const SamplerHandle &metRoughSmp, + const DescriptorSetHandle &setHandle) noexcept : + m_ColorTexture(colorImg), + m_ColorSampler(colorSmp), + m_NormalTexture(normalImg), + m_NormalSampler(normalSmp), + m_MetRoughTexture(metRoughImg), + m_MetRoughSampler(metRoughSmp), + m_DescriptorSetHandle(setHandle) + { + } std::vector<DescriptorBinding> PBRMaterial::getDescriptorBindings() noexcept { @@ -28,61 +30,65 @@ namespace vkcv::material {DescriptorType::IMAGE_SAMPLED, 1, ShaderStage::FRAGMENT}, {DescriptorType::SAMPLER , 1, ShaderStage::FRAGMENT}}; } - void PBRMaterial::create(vkcv::Core core) - { + PBRMaterial PBRMaterial::create( + vkcv::Core* core, + ImageHandle& colorImg, + SamplerHandle& colorSmp, + ImageHandle& normalImg, + SamplerHandle& normalSmp, + ImageHandle& metRoughImg, + SamplerHandle& metRoughSmp) + { //Test if Images and samplers valid, if not use default - if (m_ColorTexture) { + if (colorImg) { //TODO } - if (m_NormalTexture) { + if (normalImg) { //TODO } - if (m_MetRoughTexture) { + if (metRoughImg) { //TODO } - if (m_ColorSampler) { - /* - m_ColorSampler = core.createSampler( + if (colorSmp) { + colorSmp = core->createSampler( vkcv::SamplerFilterType::LINEAR, vkcv::SamplerFilterType::LINEAR, vkcv::SamplerMipmapMode::LINEAR, vkcv::SamplerAddressMode::REPEAT - );//only non const member - */ + ); } - if (m_NormalSampler) { - /* - m_NormalSampler = core.createSampler( + if (normalSmp) { + normalSmp = core->createSampler( vkcv::SamplerFilterType::LINEAR, vkcv::SamplerFilterType::LINEAR, vkcv::SamplerMipmapMode::LINEAR, vkcv::SamplerAddressMode::REPEAT - ); //only non const member - */ + ); } - if (m_MetRoughSampler) { - /* - m_MetRoughSampler = core.createSampler( + if (metRoughSmp) { + metRoughSmp = core->createSampler( vkcv::SamplerFilterType::LINEAR, vkcv::SamplerFilterType::LINEAR, vkcv::SamplerMipmapMode::LINEAR, vkcv::SamplerAddressMode::REPEAT - ); //only non const member - */ + ); } - + + //create descriptorset - vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(getDescriptorBindings()); + vkcv::DescriptorSetHandle descriptorSetHandle = core->createDescriptorSet(getDescriptorBindings()); //writes vkcv::DescriptorWrites setWrites; setWrites.sampledImageWrites = { - vkcv::SampledImageDescriptorWrite(0, m_ColorTexture), - vkcv::SampledImageDescriptorWrite(2, m_NormalTexture), - vkcv::SampledImageDescriptorWrite(4, m_MetRoughTexture) }; + vkcv::SampledImageDescriptorWrite(0, colorImg), + vkcv::SampledImageDescriptorWrite(2, normalImg), + vkcv::SampledImageDescriptorWrite(4, metRoughImg) }; setWrites.samplerWrites = { - vkcv::SamplerDescriptorWrite(1, m_ColorSampler), - vkcv::SamplerDescriptorWrite(3, m_NormalSampler), - vkcv::SamplerDescriptorWrite(5, m_MetRoughSampler) }; - core.writeResourceDescription(descriptorSet, 0, setWrites); + vkcv::SamplerDescriptorWrite(1, colorSmp), + vkcv::SamplerDescriptorWrite(3, normalSmp), + vkcv::SamplerDescriptorWrite(5, metRoughSmp) }; + core->writeResourceDescription(descriptorSetHandle, 0, setWrites); + + return PBRMaterial(colorImg, colorSmp, normalImg, normalSmp, metRoughImg, metRoughSmp, descriptorSetHandle); } } \ No newline at end of file