Cogs.Core
VariantDefinition.h
1#pragma once
2
3#include "Base.h"
4
5#include <string>
6#include <vector>
7
8#include "EffectDefinition.h"
9
10namespace Cogs::Core
11{
12 enum class ShaderVariantType
13 {
14 None = 0,
15 Bool,
16 Int,
17 Enum,
18 Format, // Cogs rendering format
19 String
20 };
21 enum class ShaderVarientFlags
22 {
23 None = 0,
24 DepthOnly = 1 << 0,
25 NoShading = 1 << 1,
26 ReverseDepth = 1 << 2,
27 };
28 ENABLE_ENUM_FLAGS(ShaderVarientFlags);
29
31 {
32 size_t index;
33 std::string key;
34 std::string value;
35 };
36
38 {
39 std::string variant;
40 std::string value;
41 };
42
44 {
45 std::string name;
46 ShaderVariantType type = ShaderVariantType::None;
47 std::string value;
48 std::vector<ShaderVariantEnum> values;
49 std::vector<ShaderVariantRequirement> triggers;
50 std::vector<ShaderVariantRequirement> requirements;
51 int defaultValue = 0;
52 std::string defaultString;
53 ShaderVarientFlags flags = ShaderVarientFlags::None;
54 size_t index = 0;
55 ShaderInterfaceDefinition vertexInterface;
56 ShaderInterfaceDefinition geometryInterface;
57 ShaderInterfaceDefinition surfaceInterface;
58 bool valueOnly = false;
59 bool isShared = false;
60 };
61
63 {
64 size_t index;
65 size_t value;
66 };
67
68 using ShaderVariants = std::vector<ShaderVariantDefinition>;
69 using ShaderVariantSelectors = std::vector<ShaderVariantSelector>;
70}
Contains the Engine, Renderer, resource managers and other systems needed to run Cogs....