chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
3 / 3
100.0%
Branches:
3 / 3
100.0%
Functions:
-
-%

material/node.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <cstdint>
5 #include <memory>
6 #include <string>
7 #include <string_view>
8 #include <vector>
9
10 namespace chrono::batch_render::material {
11
12 enum class MaterialInputType { Bool, Int, Float, Float2, Float3, Float4, Spectral };
13
14 struct MaterialInputInfo {
15 std::string_view cellType;
16 std::string_view slangType;
17 uint32_t bytes = 4;
18 };
19
20 inline constexpr MaterialInputInfo kMaterialInputs[] = {
21 {"uint", "bool", 4},
22 {"int", "int", 4},
23 {"float", "float", 4},
24 {"Float2", "float2", 8},
25 {"Float3", "float3", 12},
26 {"Float4", "float4", 16},
27 {"Float3", "SpectralValue", 16},
28 };
29
30 85 inline const MaterialInputInfo& InputInfo(MaterialInputType type) {
31
2/2
✓ Branch 1 taken 27 times.
✓ Branch 4 taken 3 times.
85 return kMaterialInputs[uint32_t(type)];
32 }
33
34
1/1
✓ Branch 8 taken 30 times.
232 struct MaterialNodeInput {
35 std::string name;
36 MaterialInputType type = MaterialInputType::Float;
37 };
38
39 enum class MaterialNodeRole { Material, Surface, Pattern };
40
41 struct MaterialNodeParameter {
42 enum class Source { Input, Context, Point };
43
44 Source source = Source::Input;
45 uint32_t input = 0;
46 };
47
48 struct MaterialNodeDefinition {
49 std::string name;
50 MaterialNodeRole role = MaterialNodeRole::Material;
51 uint32_t schema = 0;
52 std::string file;
53 std::string module;
54 std::string source;
55 std::vector<MaterialNodeInput> inputs;
56 MaterialInputType result = MaterialInputType::Float;
57 std::vector<MaterialNodeParameter> parameters;
58 bool detail = false;
59 uint32_t detailAlbedo = 0xFFFFFFFF;
60 };
61
62 void RegisterMaterialNode(MaterialNodeDefinition node);
63
64 std::shared_ptr<const MaterialNodeDefinition> FindMaterialNode(std::string_view name);
65
66 std::vector<std::shared_ptr<const MaterialNodeDefinition>> MaterialNodes();
67
68 uint64_t MaterialNodeVersion();
69
70 inline constexpr uint32_t kFirstPrimitiveLobe = 7;
71
72 struct ClosurePrimitive {
73 std::string name;
74 uint32_t kind = 0;
75 std::string file;
76 std::string module;
77 std::string source;
78 };
79
80 using ClosurePrimitiveList = std::vector<std::shared_ptr<const ClosurePrimitive>>;
81
82 ClosurePrimitiveList WithClosurePrimitive(ClosurePrimitiveList primitives,
83 ClosurePrimitive primitive);
84
85 void RegisterClosurePrimitive(ClosurePrimitive primitive);
86
87 ClosurePrimitiveList ClosurePrimitives();
88
89 }
90