1 #ifndef DALI_GEOMETRY_H
2 #define DALI_GEOMETRY_H
5 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <cstddef> // std::size_t
23 #include <cstdint> // uint16_t
26 #include <dali/public-api/object/handle.h> // Dali::Handle
27 #include <dali/public-api/object/property-index-ranges.h> // DEFAULT_DERIVED_HANDLE_PROPERTY_START_INDEX
28 #include <dali/public-api/rendering/vertex-buffer.h> // Dali::VertexBuffer
33 * @addtogroup dali_core_rendering_effects
37 namespace Internal DALI_INTERNAL
43 * @brief Geometry is handle to an object that can be used to define a geometric elements.
47 class DALI_CORE_API Geometry : public BaseHandle
52 * @brief Enumeration for the description of the type of geometry, used to determine how the coordinates will be used.
57 POINTS, ///< Individual points @SINCE_1_1.45
58 LINES, ///< Individual lines (made of 2 points each) @SINCE_1_1.45
59 LINE_LOOP, ///< A strip of lines (made of 1 point each) which also joins the first and last point @SINCE_1_1.45
60 LINE_STRIP, ///< A strip of lines (made of 1 point each) @SINCE_1_1.45
61 TRIANGLES, ///< Individual triangles (made of 3 points each) @SINCE_1_1.45
62 TRIANGLE_FAN, ///< A fan of triangles around a centre point (after the first triangle, following triangles need only 1 point) @SINCE_1_1.45
63 TRIANGLE_STRIP ///< A strip of triangles (after the first triangle, following triangles need only 1 point) @SINCE_1_1.45
68 * @brief Creates a new Geometry object.
71 * @return A handle to a newly allocated Geometry object
73 static Geometry New();
76 * @brief Default constructor, creates an empty handle.
90 * @brief Copy constructor, creates a new handle to the same object.
93 * @param[in] handle Handle to an object
95 Geometry( const Geometry& handle );
98 * @brief Downcasts to a geometry.
99 * If not, the returned handle is left uninitialized.
102 * @param[in] handle Handle to an object
103 * @return Geometry handle or an uninitialized handle
105 static Geometry DownCast( BaseHandle handle );
108 * @brief Assignment operator, changes this handle to point at the same object.
111 * @param[in] handle Handle to an object
112 * @return Reference to the assigned object
114 Geometry& operator=( const Geometry& handle );
117 * @brief Move constructor.
120 * @param[in] rhs A reference to the moved handle
122 Geometry( Geometry&& rhs );
125 * @brief Move assignment operator.
128 * @param[in] rhs A reference to the moved handle
129 * @return A reference to this handle
131 Geometry& operator=( Geometry&& rhs );
134 * @brief Adds a VertexBuffer to be used as source of geometry vertices.
137 * @param[in] vertexBuffer VertexBuffer to be used as source of geometry vertices
138 * @return Index of the newly added buffer, can be used with RemoveVertexBuffer to remove
139 * this buffer if no longer required
141 std::size_t AddVertexBuffer( VertexBuffer& vertexBuffer );
144 * @brief Retrieves the number of vertex buffers that have been added to this geometry.
147 * @return Number of vertex buffers that have been added to this geometry
149 std::size_t GetNumberOfVertexBuffers() const;
152 * @brief Removes a vertex buffer.
153 * The index must be between 0 and GetNumberOfVertexBuffers().
156 * @param[in] index Index to the vertex buffer to remove
158 void RemoveVertexBuffer( std::size_t index );
161 * @brief Sets a the index data to be used as a source of indices for the geometry
162 * Setting this buffer will cause the geometry to be rendered using indices.
163 * To unset call SetIndexBuffer with a null pointer or count 0.
166 * @param[in] indices Array of indices
167 * @param[in] count Number of indices in the array
169 void SetIndexBuffer( const uint16_t* indices, size_t count );
172 * @brief Sets the type of primitives this geometry contains.
175 * @param[in] geometryType Type of primitives this geometry contains
177 void SetType( Type geometryType );
180 * @brief Gets the type of primitives this geometry contains.
181 * Calling this function sets the property GEOMETRY_TYPE.
184 * @return Type of primitives this geometry contains
186 Type GetType() const;
191 * @brief The constructor.
192 * @note Not intended for application developers.
194 * @param[in] pointer A pointer to a newly allocated Geometry
196 explicit DALI_INTERNAL Geometry( Internal::Geometry* pointer );
204 #endif // DALI_GEOMETRY_H