• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <3d/ecs/components/graphics_state_component.h>
17 #include <core/property/property.h>
18 
19 #include "ComponentTools/base_manager.h"
20 #include "ComponentTools/base_manager.inl"
21 
22 #define IMPLEMENT_MANAGER
23 #include <core/property_tools/property_macros.h>
24 
25 CORE_BEGIN_NAMESPACE()
26 DECLARE_PROPERTY_TYPE(RENDER_NS::StencilOp);
27 ENUM_TYPE_METADATA(RENDER_NS::StencilOp, ENUM_VALUE(CORE_STENCIL_OP_KEEP, "Keep"),
28     ENUM_VALUE(CORE_STENCIL_OP_ZERO, "Zero"), ENUM_VALUE(CORE_STENCIL_OP_REPLACE, "Replace"),
29     ENUM_VALUE(CORE_STENCIL_OP_INVERT, "Invert"),
30     ENUM_VALUE(CORE_STENCIL_OP_INCREMENT_AND_CLAMP, "Increment And Clamp"),
31     ENUM_VALUE(CORE_STENCIL_OP_DECREMENT_AND_CLAMP, "Decrement And Clamp"),
32     ENUM_VALUE(CORE_STENCIL_OP_INCREMENT_AND_WRAP, "Increment And Wrap"),
33     ENUM_VALUE(CORE_STENCIL_OP_DECREMENT_AND_WRAP, "Decrement And Wrap"))
34 
35 DECLARE_PROPERTY_TYPE(RENDER_NS::CompareOp);
36 ENUM_TYPE_METADATA(RENDER_NS::CompareOp, ENUM_VALUE(CORE_COMPARE_OP_NEVER, "Never"),
37     ENUM_VALUE(CORE_COMPARE_OP_ALWAYS, "Always"), ENUM_VALUE(CORE_COMPARE_OP_EQUAL, "Equal"),
38     ENUM_VALUE(CORE_COMPARE_OP_NOT_EQUAL, "Not Equal"), ENUM_VALUE(CORE_COMPARE_OP_LESS, "Less"),
39     ENUM_VALUE(CORE_COMPARE_OP_LESS_OR_EQUAL, "Less Or Equal"), ENUM_VALUE(CORE_COMPARE_OP_GREATER, "Greater"),
40     ENUM_VALUE(CORE_COMPARE_OP_GREATER_OR_EQUAL, "Greater Or Equal"))
41 
42 DECLARE_PROPERTY_TYPE(RENDER_NS::PolygonMode);
43 ENUM_TYPE_METADATA(RENDER_NS::PolygonMode, ENUM_VALUE(CORE_POLYGON_MODE_FILL, "Fill"),
44     ENUM_VALUE(CORE_POLYGON_MODE_LINE, "Line"), ENUM_VALUE(CORE_POLYGON_MODE_POINT, "Point"))
45 
46 DECLARE_PROPERTY_TYPE(RENDER_NS::CullModeFlagBits);
47 ENUM_TYPE_METADATA(RENDER_NS::CullModeFlagBits, ENUM_VALUE(CORE_CULL_MODE_FRONT_BIT, "Front"),
48     ENUM_VALUE(CORE_CULL_MODE_BACK_BIT, "Back"))
49 
50 DECLARE_PROPERTY_TYPE(RENDER_NS::FrontFace);
51 ENUM_TYPE_METADATA(RENDER_NS::FrontFace, ENUM_VALUE(CORE_FRONT_FACE_COUNTER_CLOCKWISE, "Counter Clockwise"),
52     ENUM_VALUE(CORE_FRONT_FACE_CLOCKWISE, "Clockwise"))
53 
54 DECLARE_PROPERTY_TYPE(RENDER_NS::LogicOp);
55 ENUM_TYPE_METADATA(RENDER_NS::LogicOp, ENUM_VALUE(CORE_LOGIC_OP_NO_OP, "No op"),
56     ENUM_VALUE(CORE_LOGIC_OP_CLEAR, "Clear"), ENUM_VALUE(CORE_LOGIC_OP_COPY, "Copy"),
57     ENUM_VALUE(CORE_LOGIC_OP_EQUIVALENT, "Equivalent"), ENUM_VALUE(CORE_LOGIC_OP_INVERT, "Invert"),
58     ENUM_VALUE(CORE_LOGIC_OP_SET, "Set"), ENUM_VALUE(CORE_LOGIC_OP_COPY_INVERTED, "Copy Inverted"),
59     ENUM_VALUE(CORE_LOGIC_OP_AND, "AND"), ENUM_VALUE(CORE_LOGIC_OP_OR, "OR"), ENUM_VALUE(CORE_LOGIC_OP_XOR, "XOR"),
60     ENUM_VALUE(CORE_LOGIC_OP_NOR, "NOR"), ENUM_VALUE(CORE_LOGIC_OP_NAND, "NAND"),
61     ENUM_VALUE(CORE_LOGIC_OP_AND_REVERSE, "AND Reverse"), ENUM_VALUE(CORE_LOGIC_OP_AND_INVERTED, "AND Inverted"),
62     ENUM_VALUE(CORE_LOGIC_OP_OR_REVERSE, "OR Reverse"), ENUM_VALUE(CORE_LOGIC_OP_OR_INVERTED, "OR Inverted"))
63 
64 DECLARE_PROPERTY_TYPE(RENDER_NS::PrimitiveTopology);
65 ENUM_TYPE_METADATA(RENDER_NS::PrimitiveTopology, ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_POINT_LIST, "Point List"),
66     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_LINE_LIST, "Line List"),
67     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_LINE_STRIP, "Line Strip"),
68     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, "Triangle List"),
69     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP, "Triangle Strip"),
70     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN, " Triangle Fan"),
71     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, "Line Strip with Adjacency"),
72     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY, "Line Strip with Adjacency"),
73     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, "Triangle List with Adjacency"),
74     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY, "Triangle Strip with Adjacency"),
75     ENUM_VALUE(CORE_PRIMITIVE_TOPOLOGY_PATCH_LIST, "Patch List"))
76 
77 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::StencilOpState);
78 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::StencilOpState, MEMBER_PROPERTY(failOp, "Fail Operation", 0),
79     MEMBER_PROPERTY(passOp, "Pass Operation", 0), MEMBER_PROPERTY(depthFailOp, "Depth Fail Operation", 0),
80     MEMBER_PROPERTY(compareOp, "Compare Operation", 0), MEMBER_PROPERTY(compareMask, "Compare Mask", 0),
81     MEMBER_PROPERTY(writeMask, "Write Mask", 0), MEMBER_PROPERTY(reference, "Reference", 0))
82 
83 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::RasterizationState);
84 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::RasterizationState,
85     MEMBER_PROPERTY(enableDepthClamp, "Enable Depth Clamp", 0),
86     MEMBER_PROPERTY(enableDepthBias, "Enable Depth Bias", 0),
87     MEMBER_PROPERTY(enableRasterizerDiscard, "Enable Rasterizer Discard", 0),
88     MEMBER_PROPERTY(polygonMode, "Polygon Mode", 0),
89     BITFIELD_MEMBER_PROPERTY(cullModeFlags, "Cull Mode Flags", PropertyFlags::IS_BITFIELD, RENDER_NS::CullModeFlagBits),
90     MEMBER_PROPERTY(frontFace, "Front Face", 0),
91     MEMBER_PROPERTY(depthBiasConstantFactor, "Depth Bias Constant Factor", 0),
92     MEMBER_PROPERTY(depthBiasClamp, "Depth Bias Clamp", 0),
93     MEMBER_PROPERTY(depthBiasSlopeFactor, "Depth Bias Slope Factor", 0), MEMBER_PROPERTY(lineWidth, "Line Width", 0))
94 
95 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::DepthStencilState);
96 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::DepthStencilState, MEMBER_PROPERTY(enableDepthTest, "Depth Test", 0),
97     MEMBER_PROPERTY(enableDepthWrite, "Depth Write", 0), MEMBER_PROPERTY(enableDepthBoundsTest, "Depth Bounds Test", 0),
98     MEMBER_PROPERTY(enableStencilTest, "Stencil Test", 0), MEMBER_PROPERTY(minDepthBounds, "Min Depth Bounds", 0),
99     MEMBER_PROPERTY(maxDepthBounds, "Max Depth Bounds", 0), MEMBER_PROPERTY(depthCompareOp, "Depth CompareOp", 0),
100     MEMBER_PROPERTY(frontStencilOpState, "Front StencilOp State", 0),
101     MEMBER_PROPERTY(backStencilOpState, "Back StencilOp State", 0))
102 
103 DECLARE_PROPERTY_TYPE(RENDER_NS::ColorComponentFlagBits);
104 ENUM_TYPE_METADATA(RENDER_NS::ColorComponentFlagBits, ENUM_VALUE(CORE_COLOR_COMPONENT_R_BIT, "Red"),
105     ENUM_VALUE(CORE_COLOR_COMPONENT_G_BIT, "Green"), ENUM_VALUE(CORE_COLOR_COMPONENT_B_BIT, "Blue"),
106     ENUM_VALUE(CORE_COLOR_COMPONENT_A_BIT, "Alpha"))
107 
108 DECLARE_PROPERTY_TYPE(RENDER_NS::BlendFactor);
109 ENUM_TYPE_METADATA(RENDER_NS::BlendFactor, ENUM_VALUE(CORE_BLEND_FACTOR_ZERO, "Zero"),
110     ENUM_VALUE(CORE_BLEND_FACTOR_ONE, "One"), ENUM_VALUE(CORE_BLEND_FACTOR_SRC_COLOR, "Source Color"),
111     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_SRC_COLOR, "One Minus Source Color"),
112     ENUM_VALUE(CORE_BLEND_FACTOR_DST_COLOR, "Destination Color"),
113     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_DST_COLOR, "One Minus Destination Color"),
114     ENUM_VALUE(CORE_BLEND_FACTOR_SRC_ALPHA, "Source Alpha"),
115     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, "One Minus Source Alpha"),
116     ENUM_VALUE(CORE_BLEND_FACTOR_DST_ALPHA, "Destination Alpha"),
117     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, "One Minus Destination Alpha"),
118     ENUM_VALUE(CORE_BLEND_FACTOR_CONSTANT_COLOR, "Constant Color"),
119     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR, "One Minus Constant Color"),
120     ENUM_VALUE(CORE_BLEND_FACTOR_CONSTANT_ALPHA, "Constant Alpha"),
121     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, "One Minus Constant Alpha"),
122     ENUM_VALUE(CORE_BLEND_FACTOR_SRC_ALPHA_SATURATE, "Source Alpha Saturate"),
123     ENUM_VALUE(CORE_BLEND_FACTOR_SRC1_COLOR, "Source One Color"),
124     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR, "One Minus Source One Color"),
125     ENUM_VALUE(CORE_BLEND_FACTOR_SRC1_ALPHA, "Source One Alpha"),
126     ENUM_VALUE(CORE_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA, "One Minus Source One Alpha"))
127 
128 DECLARE_PROPERTY_TYPE(RENDER_NS::BlendOp);
129 ENUM_TYPE_METADATA(RENDER_NS::BlendOp, ENUM_VALUE(CORE_BLEND_OP_ADD, "Add"),
130     ENUM_VALUE(CORE_BLEND_OP_SUBTRACT, "Subtract"), ENUM_VALUE(CORE_BLEND_OP_REVERSE_SUBTRACT, "Reverse Subtract"),
131     ENUM_VALUE(CORE_BLEND_OP_MIN, "Min"), ENUM_VALUE(CORE_BLEND_OP_MAX, "Max"))
132 
133 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::ColorBlendState::Attachment);
134 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::ColorBlendState::Attachment,
135     MEMBER_PROPERTY(enableBlend, "Enable Blend", 0),
136     BITFIELD_MEMBER_PROPERTY(
137         colorWriteMask, "Color Write Mask", PropertyFlags::IS_BITFIELD, RENDER_NS::ColorComponentFlagBits),
138     MEMBER_PROPERTY(srcColorBlendFactor, "Source Color Blend Factor", 0),
139     MEMBER_PROPERTY(dstColorBlendFactor, "Destination Color Blend Factor", 0),
140     MEMBER_PROPERTY(colorBlendOp, "Color Blend Operation", 0),
141     MEMBER_PROPERTY(srcAlphaBlendFactor, "Source Alpha Blend Factor", 0),
142     MEMBER_PROPERTY(dstAlphaBlendFactor, "Destination Alpha Blend Factor", 0),
143     MEMBER_PROPERTY(alphaBlendOp, "Alpha Blend Operation", 0))
144 
145 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::ColorBlendState);
146 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::ColorBlendState,
147     MEMBER_PROPERTY(enableLogicOp, "Enable Logic Operation", 0), MEMBER_PROPERTY(logicOp, "Logic Operatio", 0),
148     MEMBER_PROPERTY(colorBlendConstants, "Color Blend Constants (R, G, B, A)", 0),
149     MEMBER_PROPERTY(colorAttachmentCount, "Color Attachment Count", 0),
150     MEMBER_PROPERTY(colorAttachments, "Color Attachments", 0))
151 
152 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState::InputAssembly);
153 DATA_TYPE_METADATA(RENDER_NS::GraphicsState::InputAssembly,
154     MEMBER_PROPERTY(enablePrimitiveRestart, "Enable Primitive Restart", 0),
155     MEMBER_PROPERTY(primitiveTopology, "Primitive Topology", 0))
156 
157 DECLARE_PROPERTY_TYPE(RENDER_NS::GraphicsState);
158 DATA_TYPE_METADATA(RENDER_NS::GraphicsState, MEMBER_PROPERTY(inputAssembly, "", 0),
159     MEMBER_PROPERTY(rasterizationState, "", 0), MEMBER_PROPERTY(depthStencilState, "", 0),
160     MEMBER_PROPERTY(colorBlendState, "", 0))
161 
162 DECLARE_PROPERTY_TYPE(CORE3D_NS::GraphicsStateComponent);
163 DATA_TYPE_METADATA(
164     CORE3D_NS::GraphicsStateComponent, MEMBER_PROPERTY(graphicsState, "", 0), MEMBER_PROPERTY(renderSlot, "", 0))
165 
166 CORE_END_NAMESPACE()
167 
168 CORE3D_BEGIN_NAMESPACE()
169 class GraphicsStateComponentManager final
170     : public CORE_NS::BaseManager<GraphicsStateComponent, IGraphicsStateComponentManager> {
171 public:
GraphicsStateComponentManager(CORE_NS::IEcs & ecs)172     explicit GraphicsStateComponentManager(CORE_NS::IEcs& ecs)
173         : CORE_NS::BaseManager<GraphicsStateComponent, IGraphicsStateComponentManager>(
174               ecs, CORE_NS::GetName<IGraphicsStateComponentManager>(), 0U)
175     {}
176 
177     ~GraphicsStateComponentManager() = default;
178 
PropertyCount() const179     size_t PropertyCount() const override
180     {
181         return BASE_NS::countof(CORE_NS::PropertyType::DataType<GraphicsStateComponent>::properties);
182     }
183 
MetaData(size_t index) const184     const CORE_NS::Property* MetaData(size_t index) const override
185     {
186         if (index < BASE_NS::countof(CORE_NS::PropertyType::DataType<GraphicsStateComponent>::properties)) {
187             return &CORE_NS::PropertyType::DataType<GraphicsStateComponent>::properties[index];
188         }
189         return nullptr;
190     }
191 
MetaData() const192     BASE_NS::array_view<const CORE_NS::Property> MetaData() const override
193     {
194         return CORE_NS::PropertyType::DataType<GraphicsStateComponent>::MetaDataFromType();
195     }
196 };
197 
IGraphicsStateComponentManagerInstance(CORE_NS::IEcs & ecs)198 CORE_NS::IComponentManager* IGraphicsStateComponentManagerInstance(CORE_NS::IEcs& ecs)
199 {
200     return new GraphicsStateComponentManager(ecs);
201 }
202 
IGraphicsStateComponentManagerDestroy(CORE_NS::IComponentManager * instance)203 void IGraphicsStateComponentManagerDestroy(CORE_NS::IComponentManager* instance)
204 {
205     delete static_cast<GraphicsStateComponentManager*>(instance);
206 }
207 CORE3D_END_NAMESPACE()
208