13 mMaterialSettings(matSettings),
15 mParameterLayout(matSettings.parameterLayout)
24 return mMaterialSettings;
29 mGpuHandle->Initialize(
this);
36 mGpuHandle->Shutdown();
43 if (!mParameterLayout)
48 for (
const auto& e : *mParameterLayout)
49 totalSize = std::max(totalSize, e.offset + e.size);
51 result.
buffer.resize(totalSize);
52 result.
layout = *mParameterLayout;
54 for (
const auto& entry : *mParameterLayout)
56 uint8_t* dst = result.
buffer.data() + entry.offset;
61 std::memcpy(dst, &mFloatParameters[entry.name], 4);
65 std::memcpy(dst, &mVec2Parameters[entry.name], 8);
69 std::memcpy(dst, &mVec3Parameters[entry.name], 12);
70 std::memset(dst + 12, 0, 4);
74 std::memcpy(dst, &mVec4Parameters[entry.name], 16);
89 return mGpuHandle.get();
94 mFloatParameters[name] = value;
99 mVec2Parameters[name] = value;
104 mVec3Parameters[name] = value;
109 mVec4Parameters[name] = value;
114 mTextures.push_back(textureName);
Interface for backend-specific material GPU resources.
Defines an abstract interface for rendering backends.
virtual IMaterialRenderResources * ProvideMaterialRenderResources() const =0
Provides access to material-related GPU resources.
void ReleaseRenderResources()
Releases any GPU resources associated with this material.
void InitializeRenderResources()
Initializes backend-specific GPU resources associated with this material.
void SetVec3(const std::string &name, glm::vec3 value)
Sets a vec3 parameter for the material.
void SetVec2(const std::string &name, glm::vec2 value)
Sets a vec3 parameter for the material.
void SetVec4(const std::string &name, glm::vec4 value)
Sets a vec4 parameter for the material.
std::vector< std::string > GetTextures() const
Returns the list of texture names used by this material.
Material(IRenderer *renderer, MaterialSettings matSettings)
Constructs a new Material instance.
PackedMaterialData PackMaterialParameters()
Packs the current float/vector parameters into a binary buffer and layout metadata.
const MaterialSettings GetMaterialSettings() const
Returns the material's static settings (domain, blend mode, shading model, etc.).
void AddTexture(const std::string &textureName)
Adds a texture name to the material's list of used textures.
void SetFloat(const std::string &name, float value)
Sets a float parameter for the material.
IMaterialRenderResources * GetMaterialRenderResources() const
Returns the backend-specific GPU handle of the material.
Settings required to define a material instance.
Contains the raw buffer data and layout metadata of packed material parameters.
std::vector< uint8_t > buffer
std::vector< MaterialParameterLayoutEntry > layout