5#include "DataStructures.hpp"
9#include <RGL/Types.hpp>
10#include <RGL/Pipeline.hpp>
11#include <RGL/Span.hpp>
14#include "MaterialShared.hpp"
22 bool depthTestEnabled =
true;
23 bool depthWriteEnabled =
true;
24 RGL::DepthCompareFunction depthCompareFunction = RGL::DepthCompareFunction::Greater;
26 std::vector<RGL::PipelineLayoutDescriptor::LayoutBindingDesc> bindings;
27 uint32_t pushConstantSize = 0;
28 RGL::CullMode cullMode = RGL::CullMode::Back;
29 bool verbatimConfig =
false;
30 OpacityMode opacityMode = OpacityMode::Opaque;
38 RGLRenderPipelinePtr pipeline;
64 template<
typename T,
typename ... A>
69 template<
typename T,
typename ... A>
70 static inline Ref<T> GetWithKey(RavEngine::CacheBase::unique_key_t key, A&& ... args) {
83 auto GetMainRenderPipeline()
const{
84 return renderPipeline;
87 auto GetShadowRenderPipeline()
const{
88 return shadowRenderPipeline;
91 auto GetDepthPrepassPipeline()
const {
92 return depthPrepassPipeline;
95 MeshAttributes GetAttributes()
const {
96 return requiredAttributes;
100 RGLRenderPipelinePtr renderPipeline, shadowRenderPipeline, depthPrepassPipeline;
101 RGLPipelineLayoutPtr pipelineLayout;
102 OpacityMode opacityMode;
103 const MeshAttributes requiredAttributes;
107 bool IsTransparent()
const {
108 return opacityMode == OpacityMode::Transparent;
111 Material(
const std::string_view name,
const MaterialConfig& config);
112 Material(
const std::string_view vsh_name,
const std::string_view fsh_name,
const MaterialConfig& config);
114 friend class RenderEngine;
119 RGL::CullMode cullMode = RGL::CullMode::Back;
120 OpacityMode opacityMode = OpacityMode::Opaque;
132 std::vector<RGL::PipelineLayoutDescriptor::LayoutBindingDesc> bindings;
133 uint32_t pushConstantSize = 0;
156 .requiredAttributes = defaultMeshAttributes
159 .requiredAttributes = defaultMeshAttributes
185 constexpr static uint8_t maxBindingSlots = 12;
187 std::array<RGLBufferPtr, maxBindingSlots> bufferBindings;
188 std::array<Ref<Texture>, maxBindingSlots> textureBindings;
189 const uint32_t priority;
191 auto GetPriority()
const {
200 return {
nullptr, 0 };
203 const auto& GetBufferBindings()
const {
204 return bufferBindings;
207 const auto& GetTextureBindings()
const {
208 return textureBindings;
211 virtual ~MaterialInstance() {}
218 MaterialInstance(
const decltype(mat)& m,
const decltype(priority) p = 0) : mat(m), priority(p) {}
Definition Material.hpp:57
static void Compact()
Definition Material.hpp:78
static Ref< T > Get(A &&... args)
Definition Material.hpp:65
Definition Material.hpp:45
Material(const std::string_view name, const MaterialConfig &config)
Definition Material.cpp:30
virtual ~Material()
Definition Material.cpp:192
Definition RenderEngine.hpp:64
Definition concurrentqueue.h:747
Definition Animation.hpp:6
Definition Pipeline.hpp:226
Definition Pipeline.hpp:169
static Ref< T > GetWithKey(const key_t &str, unique_key_t unique_key, A ... extras)
Definition Manager.hpp:45
static void Compact()
Definition Manager.hpp:70
static Ref< T > Get(const key_t &str, A ... extras)
Definition Manager.hpp:33
Definition Material.hpp:136
Definition Material.hpp:19
Definition Material.hpp:184
virtual const RGL::untyped_span GetPushConstantData() const
Definition Material.hpp:199
Definition Material.hpp:118
Definition Material.hpp:163
Definition MaterialShared.hpp:9
Definition Material.hpp:131
Definition Material.hpp:37
Definition Material.hpp:146