Toast Engine
Toggle main menu visibility
Loading...
Searching...
No Matches
material_runtime.hpp
Go to the documentation of this file.
1
6
7
#pragma once
8
9
#include "
shader_cache.hpp
"
10
#include "
vulkan_sampler.hpp
"
11
12
#include <cstddef>
13
#include <memory>
14
#include <optional>
15
#include <
toast/assets/material.hpp
>
16
#include <
toast/assets/texture.hpp
>
17
#include <unordered_map>
18
#include <vector>
19
#include <vulkan/vulkan_raii.hpp>
20
21
namespace
renderer {
22
class
VulkanCore
;
23
24
class
MaterialRuntime {
25
public
:
26
MaterialRuntime(
const
VulkanCore
& core,
assets::Material
* material);
27
28
[[nodiscard]]
29
auto
material()
const
->
assets::Material
* {
30
return
m_material;
31
}
32
33
[[nodiscard]]
34
auto
reflection()
const
->
const
ShaderReflection
& {
35
return
m_merged;
36
}
37
38
[[nodiscard]]
39
auto
shaderEntries()
const
->
const
std::vector<std::shared_ptr<const ShaderCache::Entry>>& {
40
return
m_entries;
41
}
42
43
void
rebuild();
44
45
void
markValuesDirty() { m_values_dirty =
true
; }
46
47
struct
UboBlob
{
48
uint32_t set = 0;
49
uint32_t binding = 0;
50
std::vector<std::byte> bytes;
51
};
52
53
auto
uniformBlobs() ->
const
std::vector<UboBlob>&;
54
55
auto
pushBlob() ->
const
std::vector<std::byte>&;
56
57
[[nodiscard]]
58
auto
modelOffset() const -> std::optional<uint32_t> {
59
return
m_model_offset;
60
}
61
62
[[nodiscard]]
63
auto
jointOffsetOffset() const -> std::optional<uint32_t> {
64
return
m_joint_offset_offset;
65
}
66
67
[[nodiscard]]
68
auto
instanceBaseOffset() const -> std::optional<uint32_t> {
69
return
m_instance_base_offset;
70
}
71
72
struct
TextureSlot
{
73
uint32_t set = 0;
74
uint32_t binding = 0;
75
assets::Handle<assets::Texture>
texture;
76
vk::Sampler sampler;
77
std::string default_fallback;
78
bool
linear_data =
false
;
79
};
80
81
auto
textureSlots() ->
const
std::vector<TextureSlot>&;
82
83
private
:
84
void
bakeValues();
85
void
bakeTextures();
86
87
[[nodiscard]]
88
auto
groupTomlKey(
const
std::string& group)
const
-> std::string;
89
90
[[nodiscard]]
91
auto
resolveMemberValue(
const
ShaderBlockMember
& member)
const
->
const
assets::DataValue
*;
92
auto
samplerFor(
const
assets::DataValue
* params, std::string_view debug_name) -> vk::Sampler;
93
94
const
VulkanCore
* m_core =
nullptr
;
95
assets::Material
* m_material =
nullptr
;
96
97
assets::Handle<assets::Material>
m_material_ref;
98
99
ShaderReflection
m_merged;
100
std::vector<std::shared_ptr<const ShaderCache::Entry>> m_entries;
101
102
std::vector<UboBlob> m_ubo_blobs;
103
std::vector<std::byte> m_push_blob;
104
std::optional<uint32_t> m_model_offset;
105
std::optional<uint32_t> m_joint_offset_offset;
106
std::optional<uint32_t> m_instance_base_offset;
107
std::vector<TextureSlot> m_texture_slots;
108
bool
m_values_dirty =
true
;
109
bool
m_textures_dirty =
true
;
110
111
std::unordered_map<uint64_t, std::unique_ptr<VulkanSampler>> m_samplers;
112
};
113
114
}
assets::DataValue
Typed value for TOML files.
Definition
data_value.hpp:50
assets::Handle
Type-safe smart pointer for assets.
Definition
core_types.hpp:149
assets::Material
Shader-driven material asset.
Definition
material.hpp:49
renderer::VulkanCore
Definition
vulkan_core.hpp:48
material.hpp
Material asset backed by TOML data.
shader_cache.hpp
renderer::MaterialRuntime::TextureSlot
Definition
material_runtime.hpp:72
renderer::MaterialRuntime::UboBlob
Definition
material_runtime.hpp:47
renderer::ShaderBlockMember
Definition
shader_reflection.hpp:53
renderer::ShaderReflection
Definition
shader_reflection.hpp:87
texture.hpp
vulkan_sampler.hpp
engine
src
toast
renderer
material_runtime.hpp
Generated by
1.17.0