Nebula
Loading...
Searching...
No Matches
material.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
11//------------------------------------------------------------------------------
12#include "ids/id.h"
13#include "ids/idallocator.h"
17#include "coregraphics/buffer.h"
18#include "materialvariant.h"
19
21{
22struct Entry;
23};
24
25namespace Materials
26{
27
28struct ShaderConfigBatchConstant;
29struct ShaderConfigBatchTexture;
30
32ID_32_24_8_NAMED_TYPE(MaterialInstanceId, instance, materialId, materialGeneration, material); // 32 bits instance, 24 bits material, 8 bits type
33
35
36
40void DestroyMaterial(const MaterialId id);
41
43void MaterialSetTexture(const MaterialId mat, const ShaderConfigBatchTexture* bind, const Resources::ResourceId tex);
45void MaterialSetTexture(const MaterialId mat, uint name, const Resources::ResourceId tex);
47void MaterialSetTextureBindless(const MaterialId mat, uint name, const uint handle, const uint offset, const Resources::ResourceId tex);
49void MaterialSetConstants(const MaterialId mat, const void* data, const uint size);
51void MaterialSetConstant(const MaterialId mat, const void* data, const uint size, const uint offset);
52
54void MaterialSetBufferBinding(const MaterialId id, IndexT index);
57
59void MaterialAddLODTexture(const MaterialId mat, const Resources::ResourceId tex);
61void MaterialSetLowestLod(const MaterialId mat, float lod);
62
64void MaterialApply(const MaterialId id, const CoreGraphics::CmdBufferId buf, IndexT index);
65
71uint64_t MaterialGetSortCode(const MaterialId mat);
72
73#ifdef WITH_NEBULA_EDITOR
75ubyte* MaterialGetConstants(const MaterialId mat);
77const Resources::ResourceId MaterialGetTexture(const MaterialId mat, const IndexT i);
79void MaterialInvalidate(const MaterialId mat);
80#endif
81
95
101
102enum
103{
114#ifdef WITH_NEBULA_EDITOR
115 , Material_TextureValues
116#endif
118
119
120typedef Ids::IdAllocator<
121 float,
123 Util::FixedArray<CoreGraphics::ResourceTableId>, // surface level resource table, mapped batch -> table
124 CoreGraphics::BufferId, // Material buffer
125 Util::FixedArray<Util::FixedArray<CoreGraphics::ResourceTableId>>, // instance level resource table, mapped batch -> table
126 Util::FixedArray<Util::Tuple<IndexT, SizeT>>, // instance level instance buffer, mapped batch -> memory + size
129 IndexT, // global material buffer binding (based on ShaderConfig::PrototypeHash)
130 const MaterialTemplates::Entry* // template
131#ifdef WITH_NEBULA_EDITOR
133#endif
136
140void DestroyMaterialInstance(const MaterialInstanceId materialInstance);
141
145void MaterialInstanceApply(const MaterialInstanceId id, const CoreGraphics::CmdBufferId buf, IndexT index, IndexT bufferIndex);
146
147
150
155typedef Ids::IdAllocator<
156 uint
159
160} // namespace Materials
IndexT Code
binary code for a ModelNodeType
Definition batchgroup.h:36
An ID allocator associates an id with a slice in an N number of arrays.
Definition idallocator.h:40
Nebula's dynamic array class.
Definition array.h:60
Implements a fixed size one-dimensional array.
Definition fixedarray.h:20
#define ID_32_24_8_NAMED_TYPE(x, id32_name, id24_name, id8_name, combined_name)
Definition id.h:46
Acceleration structures are used to enable ray tracing on the GPU by dividing the scene into a BVH.
Definition accelerationstructure.h:24
uint ConstantBufferOffset
Definition config.h:19
Materials represent a set of settings and a correlated shader configuration, which tells the engine w...
Definition material.h:21
Material special version of variant.
Definition material.cc:11
const Materials::BatchIndex MaterialGetBatchIndex(const MaterialId mat, const CoreGraphics::BatchGroup::Code code)
Get batch index from code.
Definition material.cc:313
void DestroyMaterial(const MaterialId id)
Destroy material.
Definition material.cc:159
void DestroyMaterialInstance(const MaterialInstanceId materialInstance)
Destroy material instance.
Definition material.cc:385
void MaterialApply(const MaterialId id, const CoreGraphics::CmdBufferId buf, IndexT index)
Apply material.
Definition material.cc:361
MaterialId CreateMaterial(const MaterialTemplates::Entry *entry)
Create material.
Definition material.cc:21
void MaterialSetConstant(const MaterialId mat, const void *data, const uint size, const uint offset)
Set a material constant.
Definition material.cc:243
void MaterialInstanceApply(const MaterialInstanceId id, const CoreGraphics::CmdBufferId buf, IndexT index, IndexT bufferIndex)
Apply material instance.
Definition material.cc:408
Ids::IdAllocator< uint > MaterialInstanceAllocator
Definition material.h:157
MaterialInstanceMembers
Definition material.h:152
@ MaterialInstance_Offsets
Definition material.h:153
IndexT MaterialGetBufferBinding(const MaterialId id)
Get material GPU buffer binding.
Definition material.cc:263
uint64_t MaterialGetSortCode(const MaterialId mat)
Get sort code.
Definition material.cc:322
void MaterialSetTextureBindless(const MaterialId mat, uint name, const uint handle, const uint offset, const Resources::ResourceId tex)
Set bindless texture.
Definition material.cc:214
const MaterialTemplates::Entry * MaterialGetTemplate(const MaterialId mat)
Get material shader config.
Definition material.cc:304
void MaterialAddLODTexture(const MaterialId mat, const Resources::ResourceId tex)
Add texture to LOD update.
Definition material.cc:272
SizeT MaterialInstanceBufferSize(const MaterialInstanceId mat, const BatchIndex batch)
Get material instance buffer size for batch.
Definition material.cc:426
MaterialAllocator materialAllocator
Definition material.cc:13
void MaterialSetBufferBinding(const MaterialId id, IndexT index)
Set material GPU buffer binding.
Definition material.cc:254
MaterialInstanceAllocator materialInstanceAllocator
Definition material.cc:14
void MaterialSetLowestLod(const MaterialId mat, float lod)
Update LOD for material.
Definition material.cc:285
@ Material_InstanceTables
Definition material.h:108
@ Material_Textures
Definition material.h:110
@ Material_MinLOD
Definition material.h:104
@ Material_Buffer
Definition material.h:107
@ Material_BufferOffset
Definition material.h:112
@ Material_Constants
Definition material.h:111
@ Material_LODTextures
Definition material.h:105
@ Material_Template
Definition material.h:113
@ Material_Table
Definition material.h:106
@ Material_InstanceBuffers
Definition material.h:109
IndexT BatchIndex
Definition material.h:34
CoreGraphics::ConstantBufferOffset MaterialInstanceAllocate(const MaterialInstanceId mat, const BatchIndex batch)
Allocate instance constants, call per frame when instance constants are needed.
Definition material.cc:394
Ids::IdAllocator< float, Util::Array< Resources::ResourceId >, Util::FixedArray< CoreGraphics::ResourceTableId >, CoreGraphics::BufferId, Util::FixedArray< Util::FixedArray< CoreGraphics::ResourceTableId > >, Util::FixedArray< Util::Tuple< IndexT, SizeT > >, Util::FixedArray< Util::Array< MaterialTexture > >, Util::FixedArray< Util::Array< MaterialConstant > >, IndexT, const MaterialTemplates::Entry * > MaterialAllocator
Definition material.h:134
void MaterialSetTexture(const MaterialId mat, const ShaderConfigBatchTexture *bind, const Resources::ResourceId tex)
Set texture.
Definition material.cc:168
material
Definition material.h:32
MaterialInstanceId CreateMaterialInstance(const MaterialId material)
Create material instance.
Definition material.cc:370
void MaterialSetConstants(const MaterialId mat, const void *data, const uint size)
Set all material constants.
Definition material.cc:232
#define RESOURCE_ID_TYPE(type)
Definition resourceid.h:41
Definition buffer.h:23
Definition commandbuffer.h:148
texture type
Definition texture.h:25
Definition materialtemplatetypes.h:64
Definition material.h:83
IndexT binding
Definition material.h:87
MaterialVariant defaultValue
Definition material.h:84
CoreGraphics::BufferId buffer
Definition material.h:88
MaterialConstant()
Definition material.h:90
bool instanceConstant
Definition material.h:86
IndexT bufferIndex
Definition material.h:85
Definition material.h:31
Definition material.h:32
Definition material.h:97
CoreGraphics::TextureId defaultValue
Definition material.h:98
IndexT slot
Definition material.h:99
Definition materialvariant.h:15
Definition shaderconfig.h:40
unsigned char ubyte
Definition types.h:34
int SizeT
Definition types.h:49
unsigned int uint
Definition types.h:31
int IndexT
Definition types.h:48