primitive4.cpp 8.5 KB

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