/src/ogre/OgreMain/include/OgreRenderOperation.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | ----------------------------------------------------------------------------- |
3 | | This source file is part of OGRE |
4 | | (Object-oriented Graphics Rendering Engine) |
5 | | For the latest info, see http://www.ogre3d.org/ |
6 | | |
7 | | Copyright (c) 2000-2014 Torus Knot Software Ltd |
8 | | |
9 | | Permission is hereby granted, free of charge, to any person obtaining a copy |
10 | | of this software and associated documentation files (the "Software"), to deal |
11 | | in the Software without restriction, including without limitation the rights |
12 | | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
13 | | copies of the Software, and to permit persons to whom the Software is |
14 | | furnished to do so, subject to the following conditions: |
15 | | |
16 | | The above copyright notice and this permission notice shall be included in |
17 | | all copies or substantial portions of the Software. |
18 | | |
19 | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
20 | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
21 | | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
22 | | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
23 | | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
24 | | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
25 | | THE SOFTWARE. |
26 | | ----------------------------------------------------------------------------- |
27 | | */ |
28 | | #ifndef _RenderOperation_H__ |
29 | | #define _RenderOperation_H__ |
30 | | |
31 | | #include "OgrePrerequisites.h" |
32 | | #include "OgreVertexIndexData.h" |
33 | | #include "OgreHeaderPrefix.h" |
34 | | |
35 | | namespace Ogre { |
36 | | |
37 | | |
38 | | /** \addtogroup Core |
39 | | * @{ |
40 | | */ |
41 | | /** \addtogroup RenderSystem |
42 | | * @{ |
43 | | */ |
44 | | /** 'New' rendering operation using vertex buffers. */ |
45 | | class _OgreExport RenderOperation { |
46 | | public: |
47 | | /// The rendering operation type to perform |
48 | | enum OperationType : uint8 { |
49 | | /// A list of points, 1 vertex per point |
50 | | OT_POINT_LIST = 1, |
51 | | /// A list of lines, 2 vertices per line |
52 | | OT_LINE_LIST = 2, |
53 | | /// A strip of connected lines, 1 vertex per line plus 1 start vertex |
54 | | OT_LINE_STRIP = 3, |
55 | | /// A list of triangles, 3 vertices per triangle |
56 | | OT_TRIANGLE_LIST = 4, |
57 | | /// A strip of triangles, 3 vertices for the first triangle, and 1 per triangle after that |
58 | | OT_TRIANGLE_STRIP = 5, |
59 | | /// A fan of triangles, 3 vertices for the first triangle, and 1 per triangle after that |
60 | | OT_TRIANGLE_FAN = 6, |
61 | | /// Patch control point operations, used with tessellation stages |
62 | | OT_PATCH_1_CONTROL_POINT = 7, |
63 | | OT_PATCH_2_CONTROL_POINT = 8, |
64 | | OT_PATCH_3_CONTROL_POINT = 9, |
65 | | OT_PATCH_4_CONTROL_POINT = 10, |
66 | | OT_PATCH_5_CONTROL_POINT = 11, |
67 | | OT_PATCH_6_CONTROL_POINT = 12, |
68 | | OT_PATCH_7_CONTROL_POINT = 13, |
69 | | OT_PATCH_8_CONTROL_POINT = 14, |
70 | | OT_PATCH_9_CONTROL_POINT = 15, |
71 | | OT_PATCH_10_CONTROL_POINT = 16, |
72 | | OT_PATCH_11_CONTROL_POINT = 17, |
73 | | OT_PATCH_12_CONTROL_POINT = 18, |
74 | | OT_PATCH_13_CONTROL_POINT = 19, |
75 | | OT_PATCH_14_CONTROL_POINT = 20, |
76 | | OT_PATCH_15_CONTROL_POINT = 21, |
77 | | OT_PATCH_16_CONTROL_POINT = 22, |
78 | | OT_PATCH_17_CONTROL_POINT = 23, |
79 | | OT_PATCH_18_CONTROL_POINT = 24, |
80 | | OT_PATCH_19_CONTROL_POINT = 25, |
81 | | OT_PATCH_20_CONTROL_POINT = 26, |
82 | | OT_PATCH_21_CONTROL_POINT = 27, |
83 | | OT_PATCH_22_CONTROL_POINT = 28, |
84 | | OT_PATCH_23_CONTROL_POINT = 29, |
85 | | OT_PATCH_24_CONTROL_POINT = 30, |
86 | | OT_PATCH_25_CONTROL_POINT = 31, |
87 | | OT_PATCH_26_CONTROL_POINT = 32, |
88 | | OT_PATCH_27_CONTROL_POINT = 33, |
89 | | OT_PATCH_28_CONTROL_POINT = 34, |
90 | | OT_PATCH_29_CONTROL_POINT = 35, |
91 | | OT_PATCH_30_CONTROL_POINT = 36, |
92 | | OT_PATCH_31_CONTROL_POINT = 37, |
93 | | OT_PATCH_32_CONTROL_POINT = 38, |
94 | | // max valid base OT_ = (1 << 6) - 1 |
95 | | /// Mark that the index buffer contains adjacency information |
96 | | OT_DETAIL_ADJACENCY_BIT = 1 << 6, |
97 | | /// like OT_POINT_LIST but with adjacency information for the geometry shader |
98 | | OT_LINE_LIST_ADJ = OT_LINE_LIST | OT_DETAIL_ADJACENCY_BIT, |
99 | | /// like OT_LINE_STRIP but with adjacency information for the geometry shader |
100 | | OT_LINE_STRIP_ADJ = OT_LINE_STRIP | OT_DETAIL_ADJACENCY_BIT, |
101 | | /// like OT_TRIANGLE_LIST but with adjacency information for the geometry shader |
102 | | OT_TRIANGLE_LIST_ADJ = OT_TRIANGLE_LIST | OT_DETAIL_ADJACENCY_BIT, |
103 | | /// like OT_TRIANGLE_STRIP but with adjacency information for the geometry shader |
104 | | OT_TRIANGLE_STRIP_ADJ = OT_TRIANGLE_STRIP | OT_DETAIL_ADJACENCY_BIT, |
105 | | }; |
106 | | |
107 | | /// Vertex source data |
108 | | VertexData *vertexData; |
109 | | |
110 | | /// Index data - only valid if useIndexes is true |
111 | | IndexData *indexData; |
112 | | /// Debug pointer back to renderable which created this |
113 | | const Renderable* srcRenderable; |
114 | | |
115 | | /// The number of instances for the render operation - this option is supported |
116 | | /// in only a part of the render systems. |
117 | | uint32 numberOfInstances; |
118 | | |
119 | | /// The type of operation to perform |
120 | | OperationType operationType; |
121 | | |
122 | | /** Specifies whether to use indexes to determine the vertices to use as input. If false, the vertices are |
123 | | simply read in sequence to define the primitives. If true, indexes are used instead to identify vertices |
124 | | anywhere in the buffer, and allowing vertices to be used more than once. |
125 | | If true, then the indexBuffer, indexStart and numIndexes properties must be valid. */ |
126 | | bool useIndexes; |
127 | | |
128 | | /** A flag to indicate that it is possible for this operation to use a global |
129 | | vertex instance buffer if available.*/ |
130 | | bool useGlobalInstancing; |
131 | | |
132 | | RenderOperation() |
133 | 0 | : vertexData(0), indexData(0), srcRenderable(0), numberOfInstances(1), |
134 | 0 | operationType(OT_TRIANGLE_LIST), useIndexes(true), |
135 | 0 | useGlobalInstancing(true) |
136 | 0 | { |
137 | 0 | } |
138 | | }; |
139 | | /** @} */ |
140 | | /** @} */ |
141 | | } |
142 | | |
143 | | #include "OgreHeaderSuffix.h" |
144 | | |
145 | | #endif |