Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
MaterialData.h
Go to the documentation of this file.
1#pragma once
2#include <glm/vec3.hpp>
3#include <glm/vec4.hpp>
4#include <cstdint>
5
6#include "MaterialTypes.h"
7
8namespace Engine::Core
9{
23 struct MaterialData {
24 // Core pipeline/shader selection
26
27 // Texture indices (0xFFFFFFFF = not present/ unused)
28 uint32_t baseColorTextureIndex = 0xFFFFFFFF;
29 uint32_t normalTextureIndex = 0xFFFFFFFF;
30 uint32_t roughnessMetallicTextureIndex = 0xFFFFFFFF;
31 uint32_t emissiveTextureIndex = 0xFFFFFFFF;
32 uint32_t lightmapTextureIndex = 0xFFFFFFFF;
33
34 // Material factors
35 glm::vec4 baseColorFactor = glm::vec4(1.0f);
36 glm::vec3 emissiveFactor = glm::vec3(0.0f);
37 float roughnessFactor = 1.0f;
38 float metallicFactor = 0.0f;
39 float normalScale = 1.0f;
40
41 // Shader configuration (used by PBR/Lighting shaders)
42 float shScale = 1.0f;
43 float ambientTerm = 0.0f;
44 uint32_t debugMode = 0;
45 uint32_t toneMapping = 1; // 0=None, 1=Reinhard, 2=ACES
46
47 // Feature flags
48 bool normalMapBC5 = false; // Normal map uses BC5 (2-channel RG) encoding
49 float alphaCutoff = 1.0f; // < 1.0f enables alpha mask (default: opaque)
50
51 // Default constructor
52 MaterialData() = default;
53
54 // Convenience constructors for common material types
56
57 MaterialData(Rendering::PipelineNames pipe, uint32_t baseColorTexIdx, const glm::vec4& baseColorFac)
58 : pipeline(pipe),
59 baseColorTextureIndex(baseColorTexIdx),
60 baseColorFactor(baseColorFac) {}
61
62 // Feature tests
63 [[nodiscard]] bool hasBaseColorTexture() const { return baseColorTextureIndex != 0xFFFFFFFF; }
64 [[nodiscard]] bool hasNormalTexture() const { return normalTextureIndex != 0xFFFFFFFF; }
65 [[nodiscard]] bool hasMetallicRoughnessTexture() const { return roughnessMetallicTextureIndex != 0xFFFFFFFF; }
66 [[nodiscard]] bool hasEmissiveTexture() const { return emissiveTextureIndex != 0xFFFFFFFF; }
67 [[nodiscard]] bool hasLightmapTexture() const { return lightmapTextureIndex != 0xFFFFFFFF; }
68 [[nodiscard]] bool isAlphaMasked() const { return alphaCutoff < 1.0f; }
69
70 // Setters for fluent interface
71 MaterialData& withBaseColorTexture(uint32_t idx) { baseColorTextureIndex = idx; return *this; }
72 MaterialData& withNormalTexture(uint32_t idx) { normalTextureIndex = idx; return *this; }
74 MaterialData& withEmissiveTexture(uint32_t idx) { emissiveTextureIndex = idx; return *this; }
75 MaterialData& withLightmapTexture(uint32_t idx) { lightmapTextureIndex = idx; return *this; }
76 MaterialData& withBaseColorFactor(const glm::vec4& fac) { baseColorFactor = fac; return *this; }
77 MaterialData& withEmissiveFactor(const glm::vec3& fac) { emissiveFactor = fac; return *this; }
78 MaterialData& withRoughness(float r) { roughnessFactor = r; return *this; }
79 MaterialData& withMetallic(float m) { metallicFactor = m; return *this; }
80 MaterialData& withNormalScale(float s) { normalScale = s; return *this; }
81 MaterialData& withShScale(float s) { shScale = s; return *this; }
82 MaterialData& withAmbientTerm(float a) { ambientTerm = a; return *this; }
83 MaterialData& withDebugMode(uint32_t d) { debugMode = d; return *this; }
84 MaterialData& withToneMapping(uint32_t t) { toneMapping = t; return *this; }
85 MaterialData& withAlphaCutoff(float cutoff) { alphaCutoff = cutoff; return *this; }
86 MaterialData& withNormalMapBC5(bool bc5) { normalMapBC5 = bc5; return *this; }
87 };
88
89} // namespace Engine::Core
90
91// Backwards compatibility aliases
Engine::Core::MaterialData DiffuseFlatColorMaterialData
Engine::Core::MaterialData L2ShaderMaterialData
Engine::Core::MaterialData StaticLightmapMaterialData
Engine::Core::MaterialData MovableDiffuseShaderMaterialData
Engine::Core::MaterialData DynamicTexturesMaterialData
Engine::Core::MaterialData MaterialData
Engine::Core::MaterialData DiffuseShaderMaterialData
Engine::Core::MaterialData L1ShaderMaterialData
Engine::Core::MaterialData NormalMaterialData
Engine::Core::MaterialData L0ShaderMaterialData
Core audio subsystem owning the miniaudio engine and managing playback.
Definition AudioConfig.h:9
Unified material data structure containing all possible material properties.
MaterialData & withBaseColorTexture(uint32_t idx)
MaterialData & withDebugMode(uint32_t d)
MaterialData & withBaseColorFactor(const glm::vec4 &fac)
MaterialData & withAmbientTerm(float a)
Rendering::PipelineNames pipeline
bool hasLightmapTexture() const
MaterialData & withEmissiveFactor(const glm::vec3 &fac)
bool hasBaseColorTexture() const
MaterialData & withMetallicRoughnessTexture(uint32_t idx)
MaterialData & withNormalScale(float s)
MaterialData & withEmissiveTexture(uint32_t idx)
MaterialData & withNormalTexture(uint32_t idx)
MaterialData & withLightmapTexture(uint32_t idx)
bool hasEmissiveTexture() const
MaterialData & withToneMapping(uint32_t t)
MaterialData & withRoughness(float r)
bool hasMetallicRoughnessTexture() const
MaterialData & withShScale(float s)
MaterialData & withAlphaCutoff(float cutoff)
MaterialData(Rendering::PipelineNames pipe)
MaterialData & withMetallic(float m)
MaterialData(Rendering::PipelineNames pipe, uint32_t baseColorTexIdx, const glm::vec4 &baseColorFac)
MaterialData & withNormalMapBC5(bool bc5)