primitive4.cpp 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. // Copyright 2009-2021 Intel Corporation
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include "primitive.h"
  4. #include "curveNv.h"
  5. #include "curveNi.h"
  6. #include "curveNi_mb.h"
  7. #include "linei.h"
  8. #include "triangle.h"
  9. #include "trianglev.h"
  10. #include "trianglev_mb.h"
  11. #include "trianglei.h"
  12. #include "quadv.h"
  13. #include "quadi.h"
  14. #include "subdivpatch1.h"
  15. #include "object.h"
  16. #include "instance.h"
  17. #include "instance_array.h"
  18. #include "subgrid.h"
  19. namespace embree
  20. {
  21. /********************** Curve4v **************************/
  22. template<>
  23. const char* Curve4v::Type::name () const {
  24. return "curve4v";
  25. }
  26. template<>
  27. size_t Curve4v::Type::sizeActive(const char* This) const
  28. {
  29. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  30. return ((Line4i*)This)->size();
  31. else
  32. return ((Curve4v*)This)->N;
  33. }
  34. template<>
  35. size_t Curve4v::Type::sizeTotal(const char* This) const
  36. {
  37. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  38. return 4;
  39. else
  40. return ((Curve4v*)This)->N;
  41. }
  42. template<>
  43. size_t Curve4v::Type::getBytes(const char* This) const
  44. {
  45. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  46. return Line4i::bytes(sizeActive(This));
  47. else
  48. return Curve4v::bytes(sizeActive(This));
  49. }
  50. /********************** Curve4i **************************/
  51. template<>
  52. const char* Curve4i::Type::name () const {
  53. return "curve4i";
  54. }
  55. template<>
  56. size_t Curve4i::Type::sizeActive(const char* This) const
  57. {
  58. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  59. return ((Line4i*)This)->size();
  60. else
  61. return ((Curve4i*)This)->N;
  62. }
  63. template<>
  64. size_t Curve4i::Type::sizeTotal(const char* This) const
  65. {
  66. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  67. return 4;
  68. else
  69. return ((Curve4i*)This)->N;
  70. }
  71. template<>
  72. size_t Curve4i::Type::getBytes(const char* This) const
  73. {
  74. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  75. return Line4i::bytes(sizeActive(This));
  76. else
  77. return Curve4i::bytes(sizeActive(This));
  78. }
  79. /********************** Curve4iMB **************************/
  80. template<>
  81. const char* Curve4iMB::Type::name () const {
  82. return "curve4imb";
  83. }
  84. template<>
  85. size_t Curve4iMB::Type::sizeActive(const char* This) const
  86. {
  87. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  88. return ((Line4i*)This)->size();
  89. else
  90. return ((Curve4iMB*)This)->N;
  91. }
  92. template<>
  93. size_t Curve4iMB::Type::sizeTotal(const char* This) const
  94. {
  95. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  96. return 4;
  97. else
  98. return ((Curve4iMB*)This)->N;
  99. }
  100. template<>
  101. size_t Curve4iMB::Type::getBytes(const char* This) const
  102. {
  103. if ((*This & Geometry::GType::GTY_BASIS_MASK) == Geometry::GType::GTY_BASIS_LINEAR)
  104. return Line4i::bytes(sizeActive(This));
  105. else
  106. return Curve4iMB::bytes(sizeActive(This));
  107. }
  108. /********************** Line4i **************************/
  109. template<>
  110. const char* Line4i::Type::name () const {
  111. return "line4i";
  112. }
  113. template<>
  114. size_t Line4i::Type::sizeActive(const char* This) const {
  115. return ((Line4i*)This)->size();
  116. }
  117. template<>
  118. size_t Line4i::Type::sizeTotal(const char* This) const {
  119. return 4;
  120. }
  121. template<>
  122. size_t Line4i::Type::getBytes(const char* This) const {
  123. return sizeof(Line4i);
  124. }
  125. /********************** Triangle4 **************************/
  126. template<>
  127. const char* Triangle4::Type::name () const {
  128. return "triangle4";
  129. }
  130. template<>
  131. size_t Triangle4::Type::sizeActive(const char* This) const {
  132. return ((Triangle4*)This)->size();
  133. }
  134. template<>
  135. size_t Triangle4::Type::sizeTotal(const char* This) const {
  136. return 4;
  137. }
  138. template<>
  139. size_t Triangle4::Type::getBytes(const char* This) const {
  140. return sizeof(Triangle4);
  141. }
  142. /********************** Triangle4v **************************/
  143. template<>
  144. const char* Triangle4v::Type::name () const {
  145. return "triangle4v";
  146. }
  147. template<>
  148. size_t Triangle4v::Type::sizeActive(const char* This) const {
  149. return ((Triangle4v*)This)->size();
  150. }
  151. template<>
  152. size_t Triangle4v::Type::sizeTotal(const char* This) const {
  153. return 4;
  154. }
  155. template<>
  156. size_t Triangle4v::Type::getBytes(const char* This) const {
  157. return sizeof(Triangle4v);
  158. }
  159. /********************** Triangle4i **************************/
  160. template<>
  161. const char* Triangle4i::Type::name () const {
  162. return "triangle4i";
  163. }
  164. template<>
  165. size_t Triangle4i::Type::sizeActive(const char* This) const {
  166. return ((Triangle4i*)This)->size();
  167. }
  168. template<>
  169. size_t Triangle4i::Type::sizeTotal(const char* This) const {
  170. return 4;
  171. }
  172. template<>
  173. size_t Triangle4i::Type::getBytes(const char* This) const {
  174. return sizeof(Triangle4i);
  175. }
  176. /********************** Triangle4vMB **************************/
  177. template<>
  178. const char* Triangle4vMB::Type::name () const {
  179. return "triangle4vmb";
  180. }
  181. template<>
  182. size_t Triangle4vMB::Type::sizeActive(const char* This) const {
  183. return ((Triangle4vMB*)This)->size();
  184. }
  185. template<>
  186. size_t Triangle4vMB::Type::sizeTotal(const char* This) const {
  187. return 4;
  188. }
  189. template<>
  190. size_t Triangle4vMB::Type::getBytes(const char* This) const {
  191. return sizeof(Triangle4vMB);
  192. }
  193. /********************** Quad4v **************************/
  194. template<>
  195. const char* Quad4v::Type::name () const {
  196. return "quad4v";
  197. }
  198. template<>
  199. size_t Quad4v::Type::sizeActive(const char* This) const {
  200. return ((Quad4v*)This)->size();
  201. }
  202. template<>
  203. size_t Quad4v::Type::sizeTotal(const char* This) const {
  204. return 4;
  205. }
  206. template<>
  207. size_t Quad4v::Type::getBytes(const char* This) const {
  208. return sizeof(Quad4v);
  209. }
  210. /********************** Quad4i **************************/
  211. template<>
  212. const char* Quad4i::Type::name () const {
  213. return "quad4i";
  214. }
  215. template<>
  216. size_t Quad4i::Type::sizeActive(const char* This) const {
  217. return ((Quad4i*)This)->size();
  218. }
  219. template<>
  220. size_t Quad4i::Type::sizeTotal(const char* This) const {
  221. return 4;
  222. }
  223. template<>
  224. size_t Quad4i::Type::getBytes(const char* This) const {
  225. return sizeof(Quad4i);
  226. }
  227. /********************** SubdivPatch1 **************************/
  228. const char* SubdivPatch1::Type::name () const {
  229. return "subdivpatch1";
  230. }
  231. size_t SubdivPatch1::Type::sizeActive(const char* This) const {
  232. return 1;
  233. }
  234. size_t SubdivPatch1::Type::sizeTotal(const char* This) const {
  235. return 1;
  236. }
  237. size_t SubdivPatch1::Type::getBytes(const char* This) const {
  238. return sizeof(SubdivPatch1);
  239. }
  240. SubdivPatch1::Type SubdivPatch1::type;
  241. /********************** Virtual Object **************************/
  242. const char* Object::Type::name () const {
  243. return "object";
  244. }
  245. size_t Object::Type::sizeActive(const char* This) const {
  246. return 1;
  247. }
  248. size_t Object::Type::sizeTotal(const char* This) const {
  249. return 1;
  250. }
  251. size_t Object::Type::getBytes(const char* This) const {
  252. return sizeof(Object);
  253. }
  254. Object::Type Object::type;
  255. /********************** Instance **************************/
  256. const char* InstancePrimitive::Type::name () const {
  257. return "instance";
  258. }
  259. size_t InstancePrimitive::Type::sizeActive(const char* This) const {
  260. return 1;
  261. }
  262. size_t InstancePrimitive::Type::sizeTotal(const char* This) const {
  263. return 1;
  264. }
  265. size_t InstancePrimitive::Type::getBytes(const char* This) const {
  266. return sizeof(InstancePrimitive);
  267. }
  268. InstancePrimitive::Type InstancePrimitive::type;
  269. /********************** InstanceArray4 **************************/
  270. const char* InstanceArrayPrimitive::Type::name () const {
  271. return "instance_array";
  272. }
  273. size_t InstanceArrayPrimitive::Type::sizeActive(const char* This) const {
  274. return 1;
  275. }
  276. size_t InstanceArrayPrimitive::Type::sizeTotal(const char* This) const {
  277. return 1;
  278. }
  279. size_t InstanceArrayPrimitive::Type::getBytes(const char* This) const {
  280. return sizeof(InstanceArrayPrimitive);
  281. }
  282. InstanceArrayPrimitive::Type InstanceArrayPrimitive::type;
  283. /********************** SubGrid **************************/
  284. const char* SubGrid::Type::name () const {
  285. return "subgrid";
  286. }
  287. size_t SubGrid::Type::sizeActive(const char* This) const {
  288. return 1;
  289. }
  290. size_t SubGrid::Type::sizeTotal(const char* This) const {
  291. return 1;
  292. }
  293. size_t SubGrid::Type::getBytes(const char* This) const {
  294. return sizeof(SubGrid);
  295. }
  296. SubGrid::Type SubGrid::type;
  297. /********************** SubGridQBVH4 **************************/
  298. template<>
  299. const char* SubGridQBVH4::Type::name () const {
  300. return "SubGridQBVH4";
  301. }
  302. template<>
  303. size_t SubGridQBVH4::Type::sizeActive(const char* This) const {
  304. return 1;
  305. }
  306. template<>
  307. size_t SubGridQBVH4::Type::sizeTotal(const char* This) const {
  308. return 1;
  309. }
  310. template<>
  311. size_t SubGridQBVH4::Type::getBytes(const char* This) const {
  312. return sizeof(SubGridQBVH4);
  313. }
  314. }