GraphicsDefs.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. //
  2. // Urho3D Engine
  3. // Copyright (c) 2008-2011 Lasse Öörni
  4. //
  5. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6. // of this software and associated documentation files (the "Software"), to deal
  7. // in the Software without restriction, including without limitation the rights
  8. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. // copies of the Software, and to permit persons to whom the Software is
  10. // furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in
  13. // all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21. // THE SOFTWARE.
  22. //
  23. #pragma once
  24. #include "HashBase.h"
  25. #include "StringHash.h"
  26. /// Primitive type.
  27. enum PrimitiveType
  28. {
  29. TRIANGLE_LIST = 0,
  30. LINE_LIST
  31. };
  32. /// Geometry type.
  33. enum GeometryType
  34. {
  35. GEOM_STATIC = 0,
  36. GEOM_SKINNED,
  37. GEOM_INSTANCED,
  38. GEOM_BILLBOARD,
  39. MAX_GEOMETRYTYPES
  40. };
  41. /// Blending mode.
  42. enum BlendMode
  43. {
  44. BLEND_REPLACE = 0,
  45. BLEND_ADD,
  46. BLEND_MULTIPLY,
  47. BLEND_ALPHA,
  48. BLEND_ADDALPHA,
  49. BLEND_PREMULALPHA,
  50. BLEND_INVDESTALPHA,
  51. MAX_BLENDMODES
  52. };
  53. /// Depth or stencil compare mode.
  54. enum CompareMode
  55. {
  56. CMP_ALWAYS = 0,
  57. CMP_EQUAL,
  58. CMP_NOTEQUAL,
  59. CMP_LESS,
  60. CMP_LESSEQUAL,
  61. CMP_GREATER,
  62. CMP_GREATEREQUAL,
  63. MAX_COMPAREMODES
  64. };
  65. /// Culling mode.
  66. enum CullMode
  67. {
  68. CULL_NONE = 0,
  69. CULL_CCW,
  70. CULL_CW,
  71. MAX_CULLMODES
  72. };
  73. /// Fill mode.
  74. enum FillMode
  75. {
  76. FILL_SOLID = 0,
  77. FILL_WIREFRAME
  78. };
  79. /// Stencil operation.
  80. enum StencilOp
  81. {
  82. OP_KEEP = 0,
  83. OP_ZERO,
  84. OP_REF,
  85. OP_INCR,
  86. OP_DECR
  87. };
  88. /// Buffer lock mode.
  89. enum LockMode
  90. {
  91. LOCK_NORMAL,
  92. LOCK_DISCARD,
  93. LOCK_NOOVERWRITE,
  94. LOCK_READONLY
  95. };
  96. /// Vertex elements.
  97. enum VertexElement
  98. {
  99. ELEMENT_POSITION = 0,
  100. ELEMENT_NORMAL,
  101. ELEMENT_COLOR,
  102. ELEMENT_TEXCOORD1,
  103. ELEMENT_TEXCOORD2,
  104. ELEMENT_CUBETEXCOORD1,
  105. ELEMENT_CUBETEXCOORD2,
  106. ELEMENT_TANGENT,
  107. ELEMENT_BLENDWEIGHTS,
  108. ELEMENT_BLENDINDICES,
  109. ELEMENT_INSTANCEMATRIX1,
  110. ELEMENT_INSTANCEMATRIX2,
  111. ELEMENT_INSTANCEMATRIX3,
  112. MAX_VERTEX_ELEMENTS
  113. };
  114. /// Texture filtering mode.
  115. enum TextureFilterMode
  116. {
  117. FILTER_NEAREST = 0,
  118. FILTER_BILINEAR,
  119. FILTER_TRILINEAR,
  120. FILTER_ANISOTROPIC,
  121. FILTER_DEFAULT,
  122. MAX_FILTERMODES
  123. };
  124. /// Texture addressing mode.
  125. enum TextureAddressMode
  126. {
  127. ADDRESS_WRAP = 0,
  128. ADDRESS_MIRROR,
  129. ADDRESS_CLAMP,
  130. ADDRESS_BORDER,
  131. MAX_ADDRESSMODES
  132. };
  133. /// Texture coordinates.
  134. enum TextureCoordinate
  135. {
  136. COORD_U = 0,
  137. COORD_V,
  138. COORD_W,
  139. MAX_COORDS
  140. };
  141. /// Texture usage types.
  142. enum TextureUsage
  143. {
  144. TEXTURE_STATIC = 0,
  145. TEXTURE_DYNAMIC,
  146. TEXTURE_RENDERTARGET,
  147. TEXTURE_DEPTHSTENCIL
  148. };
  149. /// Rendering passes.
  150. enum PassType
  151. {
  152. PASS_BASE,
  153. PASS_LITBASE,
  154. PASS_LIGHT,
  155. PASS_PREALPHA,
  156. PASS_POSTALPHA,
  157. PASS_SHADOW,
  158. PASS_GBUFFER,
  159. PASS_MATERIAL,
  160. MAX_PASSES
  161. };
  162. /// Cube map faces.
  163. enum CubeMapFace
  164. {
  165. FACE_POSITIVE_X = 0,
  166. FACE_NEGATIVE_X,
  167. FACE_POSITIVE_Y,
  168. FACE_NEGATIVE_Y,
  169. FACE_POSITIVE_Z,
  170. FACE_NEGATIVE_Z,
  171. MAX_CUBEMAP_FACES
  172. };
  173. /// Shader types.
  174. enum ShaderType
  175. {
  176. VS = 0,
  177. PS,
  178. };
  179. // Inbuilt shader parameters
  180. extern StringHash VSP_CAMERAPOS;
  181. extern StringHash VSP_CAMERAROT;
  182. extern StringHash VSP_DEPTHMODE;
  183. extern StringHash VSP_FRUSTUMSIZE;
  184. extern StringHash VSP_GBUFFEROFFSETS;
  185. extern StringHash VSP_LIGHTDIR;
  186. extern StringHash VSP_LIGHTPOS;
  187. extern StringHash VSP_LIGHTVECROT;
  188. extern StringHash VSP_MODEL;
  189. extern StringHash VSP_SHADOWPROJ;
  190. extern StringHash VSP_SPOTPROJ;
  191. extern StringHash VSP_VIEWPROJ;
  192. extern StringHash VSP_UOFFSET;
  193. extern StringHash VSP_VOFFSET;
  194. extern StringHash VSP_VIEWRIGHTVECTOR;
  195. extern StringHash VSP_VIEWUPVECTOR;
  196. extern StringHash VSP_ZONE;
  197. extern StringHash VSP_SKINMATRICES;
  198. extern StringHash VSP_VERTEXLIGHTS;
  199. extern StringHash PSP_AMBIENTSTARTCOLOR;
  200. extern StringHash PSP_AMBIENTENDCOLOR;
  201. extern StringHash PSP_DEPTHRECONSTRUCT;
  202. extern StringHash PSP_FOGCOLOR;
  203. extern StringHash PSP_FOGPARAMS;
  204. extern StringHash PSP_LIGHTCOLOR;
  205. extern StringHash PSP_LIGHTDIR;
  206. extern StringHash PSP_LIGHTPOS;
  207. extern StringHash PSP_MATDIFFCOLOR;
  208. extern StringHash PSP_MATEMISSIVECOLOR;
  209. extern StringHash PSP_MATSPECPROPERTIES;
  210. extern StringHash PSP_SAMPLEOFFSETS;
  211. extern StringHash PSP_SHADOWCUBEADJUST;
  212. extern StringHash PSP_SHADOWDEPTHFADE;
  213. extern StringHash PSP_SHADOWINTENSITY;
  214. extern StringHash PSP_SHADOWSPLITS;
  215. extern StringHash PSP_SHADOWPROJ;
  216. /// Texture units.
  217. enum TextureUnit
  218. {
  219. TU_DIFFUSE = 0,
  220. TU_DEPTHBUFFER = 0,
  221. TU_NORMAL = 1,
  222. TU_NORMALBUFFER = 1,
  223. TU_EMISSIVE = 2,
  224. TU_SPECULAR = 3,
  225. TU_DETAIL = 4,
  226. TU_ENVIRONMENT = 5,
  227. MAX_MATERIAL_TEXTURE_UNITS = 6,
  228. TU_SHADOWMAP = 6,
  229. TU_LIGHTBUFFER = 6,
  230. TU_LIGHTRAMP = 7,
  231. TU_LIGHTSHAPE = 8,
  232. TU_FACESELECT = 9,
  233. TU_INDIRECTION = 10,
  234. MAX_TEXTURE_UNITS = 16
  235. };
  236. static const int QUALITY_LOW = 0;
  237. static const int QUALITY_MEDIUM = 1;
  238. static const int QUALITY_HIGH = 2;
  239. static const int QUALITY_MAX = 15;
  240. static const int SHADOWQUALITY_LOW_16BIT = 0;
  241. static const int SHADOWQUALITY_LOW_24BIT = 1;
  242. static const int SHADOWQUALITY_HIGH_16BIT = 2;
  243. static const int SHADOWQUALITY_HIGH_24BIT = 3;
  244. static const unsigned CLEAR_COLOR = 0x1;
  245. static const unsigned CLEAR_DEPTH = 0x2;
  246. static const unsigned CLEAR_STENCIL = 0x4;
  247. static const unsigned MASK_NONE = 0x0;
  248. static const unsigned MASK_POSITION = 0x1;
  249. static const unsigned MASK_NORMAL = 0x2;
  250. static const unsigned MASK_COLOR = 0x4;
  251. static const unsigned MASK_TEXCOORD1 = 0x8;
  252. static const unsigned MASK_TEXCOORD2 = 0x10;
  253. static const unsigned MASK_CUBETEXCOORD1 = 0x20;
  254. static const unsigned MASK_CUBETEXCOORD2 = 0x40;
  255. static const unsigned MASK_TANGENT = 0x80;
  256. static const unsigned MASK_BLENDWEIGHTS = 0x100;
  257. static const unsigned MASK_BLENDINDICES = 0x200;
  258. static const unsigned MASK_INSTANCEMATRIX1 = 0x400;
  259. static const unsigned MASK_INSTANCEMATRIX2 = 0x800;
  260. static const unsigned MASK_INSTANCEMATRIX3 = 0x1000;
  261. static const unsigned MASK_DEFAULT = 0xffffffff;
  262. static const unsigned NO_ELEMENT = 0xffffffff;
  263. static const float ANIMATION_LOD_BASESCALE = 2.5f;
  264. static const int MAX_RENDERTARGETS = 4;
  265. static const int MAX_VERTEX_STREAMS = 4;
  266. static const int MAX_SKIN_MATRICES = 64;
  267. static const int MAX_CONSTANT_REGISTERS = 256;