diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp index 459125bbd3208ffb40815e1e3fd4c9615ce21724..896f84d3f6cf854e364498643050d2c0db5085e4 100644 --- a/include/vkcv/ShaderProgram.hpp +++ b/include/vkcv/ShaderProgram.hpp @@ -22,7 +22,8 @@ namespace vkcv { TESS_EVAL, GEOMETRY, FRAGMENT, - COMPUTE + COMPUTE, + ALL }; struct Shader diff --git a/modules/material/CMakeLists.txt b/modules/material/CMakeLists.txt index 660f59b45a34766466fcf10d80cf7179a86e79db..c7b204dbf23d48bd1402412092bc43bfe3da2e0f 100644 --- a/modules/material/CMakeLists.txt +++ b/modules/material/CMakeLists.txt @@ -12,6 +12,8 @@ set(vkcv_material_include ${PROJECT_SOURCE_DIR}/include) set(vkcv_material_sources ${vkcv_material_include}/vkcv/material/Material.hpp ${vkcv_material_source}/vkcv/material/Material.cpp + ${vkcv_material_include}/vkcv/material/pbrMetallicRoughness.hpp + ${vkcv_material_source}/vkcv/material/pbrMetallicRoughness.cpp ) # adding source files to the module diff --git a/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp new file mode 100644 index 0000000000000000000000000000000000000000..db8c200a92e7fd723115104ee942278d4ae3ccc6 --- /dev/null +++ b/modules/material/include/vkcv/material/pbrMetallicRoughness.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include <vector> + +#include "Material.hpp" +#include "vkcv/Handles.hpp" +#include "vkcv/DescriptorConfig.hpp" + +namespace vkcv +{ + class pbrMaterial : Material + { + public: + pbrMaterial() = delete; + pbrMaterial(const ImageHandle &colorImg, + const SamplerHandle &colorSmp, + const ImageHandle &normalImg, + const SamplerHandle &normalSmp, + const ImageHandle &metRoughImg, + const SamplerHandle &metRoughSmp, + const DescriptorSetHandle &setHandle) noexcept; + + const ImageHandle m_ColorTexture; + const SamplerHandle m_ColorSampler; + + const ImageHandle m_NormalTexture; + const SamplerHandle m_NormalSampler; + + const ImageHandle m_MetRoughTexture; + const SamplerHandle m_MetRoughSampler; + + // ImageHandle m_OcclusionTexture; + // SamplerHandle m_EmissiveTexture; + + const DescriptorSetHandle m_DescriptorSetHandle; + + /* + * Returns the material's necessary descriptor bindings which serves as its descriptor layout + * The binding is in the following order: + * 0 - diffuse texture + * 1 - diffuse sampler + * 2 - normal texture + * 3 - normal sampler + * 4 - metallic roughness texture + * 5 - metallic roughness sampler + */ + static std::vector<DescriptorBinding> getDescriptorBindings() noexcept; + }; +} \ No newline at end of file diff --git a/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d644113af882e255e4b065668b1540b575c4f705 --- /dev/null +++ b/modules/material/src/vkcv/material/pbrMetallicRoughness.cpp @@ -0,0 +1,30 @@ +#include "vkcv/material/pbrMetallicRoughness.hpp" + +namespace vkcv +{ + 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 + { + return {{DescriptorType::IMAGE_SAMPLED, 1, ShaderStage::FRAGMENT}, + {DescriptorType::SAMPLER , 1, ShaderStage::FRAGMENT}, + {DescriptorType::IMAGE_SAMPLED, 1, ShaderStage::FRAGMENT}, + {DescriptorType::SAMPLER , 1, ShaderStage::FRAGMENT}, + {DescriptorType::IMAGE_SAMPLED, 1, ShaderStage::FRAGMENT}, + {DescriptorType::SAMPLER , 1, ShaderStage::FRAGMENT}}; + } +} \ No newline at end of file