pixo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1454) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +74 -0
  3. data/Gemfile +6 -0
  4. data/Gemfile.lock +23 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +43 -0
  7. data/Rakefile +8 -0
  8. data/bin/console +14 -0
  9. data/bin/setup +8 -0
  10. data/ext/CMakeLists.txt +35 -0
  11. data/ext/libpixgem/extconf.rb +29 -0
  12. data/ext/libpixgem/include/opengl.h +4 -0
  13. data/ext/libpixgem/src/application.cpp +135 -0
  14. data/ext/libpixgem/src/application.hpp +28 -0
  15. data/ext/libpixgem/src/camera.cpp +28 -0
  16. data/ext/libpixgem/src/camera.hpp +22 -0
  17. data/ext/libpixgem/src/fade_candy.cpp +32 -0
  18. data/ext/libpixgem/src/fade_candy.hpp +22 -0
  19. data/ext/libpixgem/src/gem.cpp +58 -0
  20. data/ext/libpixgem/src/holder.cpp +9 -0
  21. data/ext/libpixgem/src/holder.hpp +8 -0
  22. data/ext/libpixgem/src/pattern.cpp +57 -0
  23. data/ext/libpixgem/src/pattern.hpp +25 -0
  24. data/ext/pixo/CMakeLists.txt +57 -0
  25. data/ext/pixo/README.md +3 -0
  26. data/ext/pixo/ext/glew/CMakeLists.txt +118 -0
  27. data/ext/pixo/ext/glew/LICENSE.txt +73 -0
  28. data/ext/pixo/ext/glew/Makefile +347 -0
  29. data/ext/pixo/ext/glew/README.md +192 -0
  30. data/ext/pixo/ext/glew/auto/Makefile +357 -0
  31. data/ext/pixo/ext/glew/auto/bin/filter_gl_ext.sh +523 -0
  32. data/ext/pixo/ext/glew/auto/bin/filter_gles_ext.sh +19 -0
  33. data/ext/pixo/ext/glew/auto/bin/filter_spec.py +38 -0
  34. data/ext/pixo/ext/glew/auto/bin/make.pl +223 -0
  35. data/ext/pixo/ext/glew/auto/bin/make_def_fun.pl +35 -0
  36. data/ext/pixo/ext/glew/auto/bin/make_def_var.pl +31 -0
  37. data/ext/pixo/ext/glew/auto/bin/make_enable_index.pl +45 -0
  38. data/ext/pixo/ext/glew/auto/bin/make_header.pl +71 -0
  39. data/ext/pixo/ext/glew/auto/bin/make_html.pl +55 -0
  40. data/ext/pixo/ext/glew/auto/bin/make_index.pl +38 -0
  41. data/ext/pixo/ext/glew/auto/bin/make_info.pl +59 -0
  42. data/ext/pixo/ext/glew/auto/bin/make_info_list.pl +47 -0
  43. data/ext/pixo/ext/glew/auto/bin/make_init.pl +59 -0
  44. data/ext/pixo/ext/glew/auto/bin/make_initd.pl +43 -0
  45. data/ext/pixo/ext/glew/auto/bin/make_list.pl +73 -0
  46. data/ext/pixo/ext/glew/auto/bin/make_list2.pl +44 -0
  47. data/ext/pixo/ext/glew/auto/bin/make_str.pl +53 -0
  48. data/ext/pixo/ext/glew/auto/bin/make_struct_fun.pl +36 -0
  49. data/ext/pixo/ext/glew/auto/bin/make_struct_var.pl +31 -0
  50. data/ext/pixo/ext/glew/auto/bin/parse_spec.pl +393 -0
  51. data/ext/pixo/ext/glew/auto/bin/parse_xml.py +131 -0
  52. data/ext/pixo/ext/glew/auto/bin/update_ext.sh +25 -0
  53. data/ext/pixo/ext/glew/auto/blacklist +14 -0
  54. data/ext/pixo/ext/glew/auto/core/gl/GLX_AMD_gpu_association +23 -0
  55. data/ext/pixo/ext/glew/auto/core/gl/GLX_ARB_get_proc_address +5 -0
  56. data/ext/pixo/ext/glew/auto/core/gl/GLX_ATI_pixel_format_float +5 -0
  57. data/ext/pixo/ext/glew/auto/core/gl/GLX_ATI_render_texture +42 -0
  58. data/ext/pixo/ext/glew/auto/core/gl/GLX_EXT_create_context_es2_profile +5 -0
  59. data/ext/pixo/ext/glew/auto/core/gl/GLX_EXT_create_context_es_profile +5 -0
  60. data/ext/pixo/ext/glew/auto/core/gl/GLX_EXT_fbconfig_packed_float +6 -0
  61. data/ext/pixo/ext/glew/auto/core/gl/GLX_EXT_framebuffer_sRGB +5 -0
  62. data/ext/pixo/ext/glew/auto/core/gl/GLX_MESA_swap_control +6 -0
  63. data/ext/pixo/ext/glew/auto/core/gl/GLX_NV_float_buffer +5 -0
  64. data/ext/pixo/ext/glew/auto/core/gl/GLX_NV_vertex_array_range +6 -0
  65. data/ext/pixo/ext/glew/auto/core/gl/GLX_SGIS_shared_multisample +6 -0
  66. data/ext/pixo/ext/glew/auto/core/gl/GLX_SGIX_hyperpipe +26 -0
  67. data/ext/pixo/ext/glew/auto/core/gl/GLX_SGIX_swap_barrier +6 -0
  68. data/ext/pixo/ext/glew/auto/core/gl/GLX_SGIX_swap_group +5 -0
  69. data/ext/pixo/ext/glew/auto/core/gl/GLX_SGI_video_sync +6 -0
  70. data/ext/pixo/ext/glew/auto/core/gl/GLX_SUN_video_resize +8 -0
  71. data/ext/pixo/ext/glew/auto/core/gl/GLX_VERSION_1_2 +5 -0
  72. data/ext/pixo/ext/glew/auto/core/gl/GLX_VERSION_1_3 +83 -0
  73. data/ext/pixo/ext/glew/auto/core/gl/GLX_VERSION_1_4 +7 -0
  74. data/ext/pixo/ext/glew/auto/core/gl/GL_APPLE_float_pixels +18 -0
  75. data/ext/pixo/ext/glew/auto/core/gl/GL_APPLE_pixel_buffer +5 -0
  76. data/ext/pixo/ext/glew/auto/core/gl/GL_APPLE_texture_range +13 -0
  77. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_draw_instanced +4 -0
  78. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_imaging +113 -0
  79. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_instanced_arrays +8 -0
  80. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_internalformat_query2 +104 -0
  81. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_matrix_palette +19 -0
  82. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_multitexture +73 -0
  83. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_robustness +31 -0
  84. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_separate_shader_objects +73 -0
  85. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_vertex_attrib_64bit +14 -0
  86. data/ext/pixo/ext/glew/auto/core/gl/GL_ARB_vertex_blend +56 -0
  87. data/ext/pixo/ext/glew/auto/core/gl/GL_ATIX_point_sprites +10 -0
  88. data/ext/pixo/ext/glew/auto/core/gl/GL_ATIX_texture_env_combine3 +7 -0
  89. data/ext/pixo/ext/glew/auto/core/gl/GL_ATIX_texture_env_route +7 -0
  90. data/ext/pixo/ext/glew/auto/core/gl/GL_ATIX_vertex_shader_output_point_size +5 -0
  91. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_envmap_bumpmap +16 -0
  92. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_map_object_buffer +6 -0
  93. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_pn_triangles +15 -0
  94. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_separate_stencil +10 -0
  95. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_shader_texture_lod +4 -0
  96. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_texture_compression_3dc +5 -0
  97. data/ext/pixo/ext/glew/auto/core/gl/GL_ATI_vertex_streams +59 -0
  98. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_Cg_shader +6 -0
  99. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_bindable_uniform +13 -0
  100. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_debug_marker +7 -0
  101. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_depth_bounds_test +7 -0
  102. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_draw_instanced +6 -0
  103. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_draw_range_elements +7 -0
  104. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_fog_coord +17 -0
  105. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_framebuffer_sRGB +6 -0
  106. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_geometry_shader4 +27 -0
  107. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_gpu_program_parameters +6 -0
  108. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_gpu_shader4 +64 -0
  109. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_packed_float +7 -0
  110. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_pixel_buffer_object +8 -0
  111. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_secondary_color +28 -0
  112. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_array +13 -0
  113. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_buffer_object +10 -0
  114. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_compression_latc +8 -0
  115. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_compression_rgtc +8 -0
  116. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_cube_map +16 -0
  117. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_edge_clamp +5 -0
  118. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_integer +57 -0
  119. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_rectangle +8 -0
  120. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_texture_shared_exponent +7 -0
  121. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_timer_query +7 -0
  122. data/ext/pixo/ext/glew/auto/core/gl/GL_EXT_vertex_shader +157 -0
  123. data/ext/pixo/ext/glew/auto/core/gl/GL_KTX_buffer_region +13 -0
  124. data/ext/pixo/ext/glew/auto/core/gl/GL_NVX_gpu_memory_info +9 -0
  125. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_depth_buffer_float +11 -0
  126. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_depth_range_unclamped +9 -0
  127. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_fragment_program2 +9 -0
  128. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_fragment_program4 +4 -0
  129. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_fragment_program_option +4 -0
  130. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_framebuffer_multisample_coverage +9 -0
  131. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_geometry_program4 +8 -0
  132. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_geometry_shader4 +4 -0
  133. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_gpu_program4 +24 -0
  134. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_gpu_program5 +10 -0
  135. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_parameter_buffer_object +12 -0
  136. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_present_video +16 -0
  137. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_tessellation_program5 +9 -0
  138. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_transform_feedback +40 -0
  139. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_vdpau_interop +19 -0
  140. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_vertex_program2_option +6 -0
  141. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_vertex_program3 +5 -0
  142. data/ext/pixo/ext/glew/auto/core/gl/GL_NV_vertex_program4 +5 -0
  143. data/ext/pixo/ext/glew/auto/core/gl/GL_SGIX_shadow +8 -0
  144. data/ext/pixo/ext/glew/auto/core/gl/GL_SUN_read_video_pixels +5 -0
  145. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_1_2 +50 -0
  146. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_1_2_1 +4 -0
  147. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_1_3 +147 -0
  148. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_1_4 +90 -0
  149. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_1_5 +75 -0
  150. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_2_0 +181 -0
  151. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_2_1 +33 -0
  152. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_3_0 +164 -0
  153. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_3_1 +42 -0
  154. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_3_2 +29 -0
  155. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_3_3 +7 -0
  156. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_0 +21 -0
  157. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_1 +3 -0
  158. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_2 +13 -0
  159. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_3 +6 -0
  160. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_4 +8 -0
  161. data/ext/pixo/ext/glew/auto/core/gl/GL_VERSION_4_5 +9 -0
  162. data/ext/pixo/ext/glew/auto/core/gl/GL_WIN_swap_hint +5 -0
  163. data/ext/pixo/ext/glew/auto/core/gl/WGL_ARB_create_context +13 -0
  164. data/ext/pixo/ext/glew/auto/core/gl/WGL_ATI_render_texture_rectangle +5 -0
  165. data/ext/pixo/ext/glew/auto/core/gl/WGL_EXT_create_context_es2_profile +5 -0
  166. data/ext/pixo/ext/glew/auto/core/gl/WGL_EXT_create_context_es_profile +5 -0
  167. data/ext/pixo/ext/glew/auto/core/gl/WGL_EXT_framebuffer_sRGB +5 -0
  168. data/ext/pixo/ext/glew/auto/core/gl/WGL_EXT_pixel_format_packed_float +5 -0
  169. data/ext/pixo/ext/glew/auto/core/gl/WGL_NV_gpu_affinity +13 -0
  170. data/ext/pixo/ext/glew/auto/core/gl/WGL_NV_vertex_array_range +6 -0
  171. data/ext/pixo/ext/glew/auto/custom.txt +7 -0
  172. data/ext/pixo/ext/glew/auto/doc/advanced.html +130 -0
  173. data/ext/pixo/ext/glew/auto/doc/basic.html +180 -0
  174. data/ext/pixo/ext/glew/auto/doc/build.html +49 -0
  175. data/ext/pixo/ext/glew/auto/doc/credits.html +2 -0
  176. data/ext/pixo/ext/glew/auto/doc/index.html +111 -0
  177. data/ext/pixo/ext/glew/auto/doc/install.html +126 -0
  178. data/ext/pixo/ext/glew/auto/doc/log.html +1073 -0
  179. data/ext/pixo/ext/glew/auto/src/eglew_head.h +88 -0
  180. data/ext/pixo/ext/glew/auto/src/eglew_mid.h +4 -0
  181. data/ext/pixo/ext/glew/auto/src/eglew_tail.h +15 -0
  182. data/ext/pixo/ext/glew/auto/src/footer.html +4 -0
  183. data/ext/pixo/ext/glew/auto/src/glew.rc +135 -0
  184. data/ext/pixo/ext/glew/auto/src/glew_head.c +285 -0
  185. data/ext/pixo/ext/glew/auto/src/glew_head.h +1129 -0
  186. data/ext/pixo/ext/glew/auto/src/glew_init_egl.c +45 -0
  187. data/ext/pixo/ext/glew/auto/src/glew_init_gl.c +206 -0
  188. data/ext/pixo/ext/glew/auto/src/glew_init_glx.c +53 -0
  189. data/ext/pixo/ext/glew/auto/src/glew_init_tail.c +67 -0
  190. data/ext/pixo/ext/glew/auto/src/glew_init_wgl.c +41 -0
  191. data/ext/pixo/ext/glew/auto/src/glew_license.h +32 -0
  192. data/ext/pixo/ext/glew/auto/src/glew_str_egl.c +17 -0
  193. data/ext/pixo/ext/glew/auto/src/glew_str_glx.c +17 -0
  194. data/ext/pixo/ext/glew/auto/src/glew_str_head.c +9 -0
  195. data/ext/pixo/ext/glew/auto/src/glew_str_tail.c +7 -0
  196. data/ext/pixo/ext/glew/auto/src/glew_str_wgl.c +17 -0
  197. data/ext/pixo/ext/glew/auto/src/glew_tail.h +67 -0
  198. data/ext/pixo/ext/glew/auto/src/glewinfo.rc +123 -0
  199. data/ext/pixo/ext/glew/auto/src/glewinfo_egl.c +6 -0
  200. data/ext/pixo/ext/glew/auto/src/glewinfo_gl.c +7 -0
  201. data/ext/pixo/ext/glew/auto/src/glewinfo_glx.c +6 -0
  202. data/ext/pixo/ext/glew/auto/src/glewinfo_head.c +89 -0
  203. data/ext/pixo/ext/glew/auto/src/glewinfo_tail.c +598 -0
  204. data/ext/pixo/ext/glew/auto/src/glewinfo_wgl.c +8 -0
  205. data/ext/pixo/ext/glew/auto/src/glxew_head.h +106 -0
  206. data/ext/pixo/ext/glew/auto/src/glxew_mid.h +4 -0
  207. data/ext/pixo/ext/glew/auto/src/glxew_tail.h +20 -0
  208. data/ext/pixo/ext/glew/auto/src/header.html +98 -0
  209. data/ext/pixo/ext/glew/auto/src/khronos_license.h +23 -0
  210. data/ext/pixo/ext/glew/auto/src/mesa_license.h +24 -0
  211. data/ext/pixo/ext/glew/auto/src/visualinfo.rc +123 -0
  212. data/ext/pixo/ext/glew/auto/src/wglew_head.h +36 -0
  213. data/ext/pixo/ext/glew/auto/src/wglew_mid.h +4 -0
  214. data/ext/pixo/ext/glew/auto/src/wglew_tail.h +22 -0
  215. data/ext/pixo/ext/glew/build/cmake/CMakeLists.txt +215 -0
  216. data/ext/pixo/ext/glew/build/cmake/CopyImportedTargetProperties.cmake +88 -0
  217. data/ext/pixo/ext/glew/build/cmake/glew-config.cmake +60 -0
  218. data/ext/pixo/ext/glew/build/cmake/testbuild/CMakeLists.txt +25 -0
  219. data/ext/pixo/ext/glew/build/cmake/testbuild/main.c +23 -0
  220. data/ext/pixo/ext/glew/build/glew.rc +135 -0
  221. data/ext/pixo/ext/glew/build/glewinfo.rc +123 -0
  222. data/ext/pixo/ext/glew/build/vc10/common.props +29 -0
  223. data/ext/pixo/ext/glew/build/vc10/glew.sln +56 -0
  224. data/ext/pixo/ext/glew/build/vc10/glew_shared.vcxproj +254 -0
  225. data/ext/pixo/ext/glew/build/vc10/glew_static.vcxproj +228 -0
  226. data/ext/pixo/ext/glew/build/vc10/glewinfo.vcxproj +252 -0
  227. data/ext/pixo/ext/glew/build/vc10/visualinfo.vcxproj +251 -0
  228. data/ext/pixo/ext/glew/build/vc12/common.props +29 -0
  229. data/ext/pixo/ext/glew/build/vc12/glew.sln +56 -0
  230. data/ext/pixo/ext/glew/build/vc12/glew_shared.vcxproj +258 -0
  231. data/ext/pixo/ext/glew/build/vc12/glew_static.vcxproj +232 -0
  232. data/ext/pixo/ext/glew/build/vc12/glewinfo.vcxproj +259 -0
  233. data/ext/pixo/ext/glew/build/vc12/visualinfo.vcxproj +258 -0
  234. data/ext/pixo/ext/glew/build/vc6/Makefile +21 -0
  235. data/ext/pixo/ext/glew/build/vc6/glew.dsw +71 -0
  236. data/ext/pixo/ext/glew/build/vc6/glew_shared.dsp +122 -0
  237. data/ext/pixo/ext/glew/build/vc6/glew_static.dsp +112 -0
  238. data/ext/pixo/ext/glew/build/vc6/glewinfo.dsp +103 -0
  239. data/ext/pixo/ext/glew/build/vc6/visualinfo.dsp +103 -0
  240. data/ext/pixo/ext/glew/build/visualinfo.rc +123 -0
  241. data/ext/pixo/ext/glew/cmake-testbuild.sh +71 -0
  242. data/ext/pixo/ext/glew/config/Makefile.cygming +21 -0
  243. data/ext/pixo/ext/glew/config/Makefile.cygwin +19 -0
  244. data/ext/pixo/ext/glew/config/Makefile.darwin +25 -0
  245. data/ext/pixo/ext/glew/config/Makefile.darwin-ppc +24 -0
  246. data/ext/pixo/ext/glew/config/Makefile.darwin-universal +27 -0
  247. data/ext/pixo/ext/glew/config/Makefile.darwin-x86_64 +24 -0
  248. data/ext/pixo/ext/glew/config/Makefile.fedora-mingw32 +12 -0
  249. data/ext/pixo/ext/glew/config/Makefile.freebsd +17 -0
  250. data/ext/pixo/ext/glew/config/Makefile.gnu +17 -0
  251. data/ext/pixo/ext/glew/config/Makefile.haiku +20 -0
  252. data/ext/pixo/ext/glew/config/Makefile.irix +17 -0
  253. data/ext/pixo/ext/glew/config/Makefile.kfreebsd +17 -0
  254. data/ext/pixo/ext/glew/config/Makefile.linux +34 -0
  255. data/ext/pixo/ext/glew/config/Makefile.linux-clang +34 -0
  256. data/ext/pixo/ext/glew/config/Makefile.linux-clang-egl +4 -0
  257. data/ext/pixo/ext/glew/config/Makefile.linux-egl +4 -0
  258. data/ext/pixo/ext/glew/config/Makefile.linux-mingw-w64 +22 -0
  259. data/ext/pixo/ext/glew/config/Makefile.linux-mingw32 +22 -0
  260. data/ext/pixo/ext/glew/config/Makefile.linux-mingw64 +22 -0
  261. data/ext/pixo/ext/glew/config/Makefile.linux-osmesa +4 -0
  262. data/ext/pixo/ext/glew/config/Makefile.mingw +17 -0
  263. data/ext/pixo/ext/glew/config/Makefile.mingw-win32 +5 -0
  264. data/ext/pixo/ext/glew/config/Makefile.msys +19 -0
  265. data/ext/pixo/ext/glew/config/Makefile.msys-win32 +5 -0
  266. data/ext/pixo/ext/glew/config/Makefile.msys-win64 +5 -0
  267. data/ext/pixo/ext/glew/config/Makefile.nacl-32 +31 -0
  268. data/ext/pixo/ext/glew/config/Makefile.nacl-64 +31 -0
  269. data/ext/pixo/ext/glew/config/Makefile.netbsd +17 -0
  270. data/ext/pixo/ext/glew/config/Makefile.openbsd +17 -0
  271. data/ext/pixo/ext/glew/config/Makefile.solaris +14 -0
  272. data/ext/pixo/ext/glew/config/Makefile.solaris-gcc +15 -0
  273. data/ext/pixo/ext/glew/config/config.guess +1456 -0
  274. data/ext/pixo/ext/glew/config/version +7 -0
  275. data/ext/pixo/ext/glew/doc/advanced.html +232 -0
  276. data/ext/pixo/ext/glew/doc/basic.html +282 -0
  277. data/ext/pixo/ext/glew/doc/build.html +151 -0
  278. data/ext/pixo/ext/glew/doc/credits.html +104 -0
  279. data/ext/pixo/ext/glew/doc/github.png +0 -0
  280. data/ext/pixo/ext/glew/doc/glew.css +187 -0
  281. data/ext/pixo/ext/glew/doc/glew.html +724 -0
  282. data/ext/pixo/ext/glew/doc/glew.png +0 -0
  283. data/ext/pixo/ext/glew/doc/glew.txt +29 -0
  284. data/ext/pixo/ext/glew/doc/glxew.html +185 -0
  285. data/ext/pixo/ext/glew/doc/gpl.txt +340 -0
  286. data/ext/pixo/ext/glew/doc/index.html +213 -0
  287. data/ext/pixo/ext/glew/doc/install.html +228 -0
  288. data/ext/pixo/ext/glew/doc/khronos.txt +20 -0
  289. data/ext/pixo/ext/glew/doc/log.html +1175 -0
  290. data/ext/pixo/ext/glew/doc/mesa.txt +21 -0
  291. data/ext/pixo/ext/glew/doc/new.png +0 -0
  292. data/ext/pixo/ext/glew/doc/ogl_sm.jpg +0 -0
  293. data/ext/pixo/ext/glew/doc/travis.png +0 -0
  294. data/ext/pixo/ext/glew/doc/wglew.html +168 -0
  295. data/ext/pixo/ext/glew/glew.pc.in +11 -0
  296. data/ext/pixo/ext/glew/include/GL/eglew.h +2261 -0
  297. data/ext/pixo/ext/glew/include/GL/glew.h +20113 -0
  298. data/ext/pixo/ext/glew/include/GL/glxew.h +1769 -0
  299. data/ext/pixo/ext/glew/include/GL/wglew.h +1427 -0
  300. data/ext/pixo/ext/glew/maintain.sh +142 -0
  301. data/ext/pixo/ext/glew/src/glew.c +23960 -0
  302. data/ext/pixo/ext/glew/src/glewinfo.c +13912 -0
  303. data/ext/pixo/ext/glew/src/visualinfo.c +1297 -0
  304. data/ext/pixo/ext/glfw/CMake/MacOSXBundleInfo.plist.in +38 -0
  305. data/ext/pixo/ext/glfw/CMake/amd64-mingw32msvc.cmake +13 -0
  306. data/ext/pixo/ext/glfw/CMake/i586-mingw32msvc.cmake +13 -0
  307. data/ext/pixo/ext/glfw/CMake/i686-pc-mingw32.cmake +13 -0
  308. data/ext/pixo/ext/glfw/CMake/i686-w64-mingw32.cmake +13 -0
  309. data/ext/pixo/ext/glfw/CMake/modules/FindMir.cmake +18 -0
  310. data/ext/pixo/ext/glfw/CMake/modules/FindVulkan.cmake +34 -0
  311. data/ext/pixo/ext/glfw/CMake/modules/FindWaylandProtocols.cmake +26 -0
  312. data/ext/pixo/ext/glfw/CMake/modules/FindXKBCommon.cmake +34 -0
  313. data/ext/pixo/ext/glfw/CMake/x86_64-w64-mingw32.cmake +13 -0
  314. data/ext/pixo/ext/glfw/CMakeLists.txt +419 -0
  315. data/ext/pixo/ext/glfw/COPYING.txt +22 -0
  316. data/ext/pixo/ext/glfw/README.md +274 -0
  317. data/ext/pixo/ext/glfw/cmake_uninstall.cmake.in +29 -0
  318. data/ext/pixo/ext/glfw/deps/KHR/khrplatform.h +282 -0
  319. data/ext/pixo/ext/glfw/deps/getopt.c +230 -0
  320. data/ext/pixo/ext/glfw/deps/getopt.h +57 -0
  321. data/ext/pixo/ext/glfw/deps/glad/glad.h +3520 -0
  322. data/ext/pixo/ext/glfw/deps/glad.c +1555 -0
  323. data/ext/pixo/ext/glfw/deps/linmath.h +574 -0
  324. data/ext/pixo/ext/glfw/deps/mingw/_mingw_dxhelper.h +117 -0
  325. data/ext/pixo/ext/glfw/deps/mingw/dinput.h +2467 -0
  326. data/ext/pixo/ext/glfw/deps/mingw/xinput.h +239 -0
  327. data/ext/pixo/ext/glfw/deps/tinycthread.c +594 -0
  328. data/ext/pixo/ext/glfw/deps/tinycthread.h +441 -0
  329. data/ext/pixo/ext/glfw/deps/vulkan/vk_platform.h +120 -0
  330. data/ext/pixo/ext/glfw/deps/vulkan/vulkan.h +3835 -0
  331. data/ext/pixo/ext/glfw/docs/CMakeLists.txt +32 -0
  332. data/ext/pixo/ext/glfw/docs/Doxyfile.in +1859 -0
  333. data/ext/pixo/ext/glfw/docs/DoxygenLayout.xml +188 -0
  334. data/ext/pixo/ext/glfw/docs/build.dox +347 -0
  335. data/ext/pixo/ext/glfw/docs/compat.dox +224 -0
  336. data/ext/pixo/ext/glfw/docs/compile.dox +284 -0
  337. data/ext/pixo/ext/glfw/docs/context.dox +345 -0
  338. data/ext/pixo/ext/glfw/docs/extra.css +1 -0
  339. data/ext/pixo/ext/glfw/docs/extra.less +370 -0
  340. data/ext/pixo/ext/glfw/docs/footer.html +7 -0
  341. data/ext/pixo/ext/glfw/docs/header.html +34 -0
  342. data/ext/pixo/ext/glfw/docs/input.dox +665 -0
  343. data/ext/pixo/ext/glfw/docs/internal.dox +116 -0
  344. data/ext/pixo/ext/glfw/docs/intro.dox +372 -0
  345. data/ext/pixo/ext/glfw/docs/main.dox +47 -0
  346. data/ext/pixo/ext/glfw/docs/monitor.dox +216 -0
  347. data/ext/pixo/ext/glfw/docs/moving.dox +506 -0
  348. data/ext/pixo/ext/glfw/docs/news.dox +376 -0
  349. data/ext/pixo/ext/glfw/docs/quick.dox +364 -0
  350. data/ext/pixo/ext/glfw/docs/spaces.svg +872 -0
  351. data/ext/pixo/ext/glfw/docs/vulkan.dox +211 -0
  352. data/ext/pixo/ext/glfw/docs/window.dox +1008 -0
  353. data/ext/pixo/ext/glfw/examples/CMakeLists.txt +67 -0
  354. data/ext/pixo/ext/glfw/examples/boing.c +678 -0
  355. data/ext/pixo/ext/glfw/examples/gears.c +357 -0
  356. data/ext/pixo/ext/glfw/examples/glfw.icns +0 -0
  357. data/ext/pixo/ext/glfw/examples/glfw.ico +0 -0
  358. data/ext/pixo/ext/glfw/examples/glfw.rc +3 -0
  359. data/ext/pixo/ext/glfw/examples/heightmap.c +511 -0
  360. data/ext/pixo/ext/glfw/examples/particles.c +1068 -0
  361. data/ext/pixo/ext/glfw/examples/simple.c +163 -0
  362. data/ext/pixo/ext/glfw/examples/splitview.c +545 -0
  363. data/ext/pixo/ext/glfw/examples/wave.c +460 -0
  364. data/ext/pixo/ext/glfw/include/GLFW/glfw3.h +4248 -0
  365. data/ext/pixo/ext/glfw/include/GLFW/glfw3native.h +456 -0
  366. data/ext/pixo/ext/glfw/src/CMakeLists.txt +120 -0
  367. data/ext/pixo/ext/glfw/src/cocoa_init.m +398 -0
  368. data/ext/pixo/ext/glfw/src/cocoa_joystick.h +60 -0
  369. data/ext/pixo/ext/glfw/src/cocoa_joystick.m +511 -0
  370. data/ext/pixo/ext/glfw/src/cocoa_monitor.m +413 -0
  371. data/ext/pixo/ext/glfw/src/cocoa_platform.h +150 -0
  372. data/ext/pixo/ext/glfw/src/cocoa_time.c +60 -0
  373. data/ext/pixo/ext/glfw/src/cocoa_window.m +1653 -0
  374. data/ext/pixo/ext/glfw/src/context.c +720 -0
  375. data/ext/pixo/ext/glfw/src/egl_context.c +746 -0
  376. data/ext/pixo/ext/glfw/src/egl_context.h +213 -0
  377. data/ext/pixo/ext/glfw/src/glfw3.pc.in +13 -0
  378. data/ext/pixo/ext/glfw/src/glfw3Config.cmake.in +1 -0
  379. data/ext/pixo/ext/glfw/src/glfw_config.h.in +65 -0
  380. data/ext/pixo/ext/glfw/src/glx_context.c +677 -0
  381. data/ext/pixo/ext/glfw/src/glx_context.h +182 -0
  382. data/ext/pixo/ext/glfw/src/init.c +200 -0
  383. data/ext/pixo/ext/glfw/src/input.c +659 -0
  384. data/ext/pixo/ext/glfw/src/internal.h +1055 -0
  385. data/ext/pixo/ext/glfw/src/linux_joystick.c +341 -0
  386. data/ext/pixo/ext/glfw/src/linux_joystick.h +68 -0
  387. data/ext/pixo/ext/glfw/src/mir_init.c +238 -0
  388. data/ext/pixo/ext/glfw/src/mir_monitor.c +182 -0
  389. data/ext/pixo/ext/glfw/src/mir_platform.h +130 -0
  390. data/ext/pixo/ext/glfw/src/mir_window.c +848 -0
  391. data/ext/pixo/ext/glfw/src/monitor.c +477 -0
  392. data/ext/pixo/ext/glfw/src/nsgl_context.h +60 -0
  393. data/ext/pixo/ext/glfw/src/nsgl_context.m +308 -0
  394. data/ext/pixo/ext/glfw/src/posix_time.c +85 -0
  395. data/ext/pixo/ext/glfw/src/posix_time.h +48 -0
  396. data/ext/pixo/ext/glfw/src/posix_tls.c +68 -0
  397. data/ext/pixo/ext/glfw/src/posix_tls.h +49 -0
  398. data/ext/pixo/ext/glfw/src/vulkan.c +302 -0
  399. data/ext/pixo/ext/glfw/src/wgl_context.c +718 -0
  400. data/ext/pixo/ext/glfw/src/wgl_context.h +157 -0
  401. data/ext/pixo/ext/glfw/src/win32_init.c +473 -0
  402. data/ext/pixo/ext/glfw/src/win32_joystick.c +763 -0
  403. data/ext/pixo/ext/glfw/src/win32_joystick.h +64 -0
  404. data/ext/pixo/ext/glfw/src/win32_monitor.c +401 -0
  405. data/ext/pixo/ext/glfw/src/win32_platform.h +350 -0
  406. data/ext/pixo/ext/glfw/src/win32_time.c +74 -0
  407. data/ext/pixo/ext/glfw/src/win32_tls.c +69 -0
  408. data/ext/pixo/ext/glfw/src/win32_window.c +1724 -0
  409. data/ext/pixo/ext/glfw/src/window.c +904 -0
  410. data/ext/pixo/ext/glfw/src/wl_init.c +658 -0
  411. data/ext/pixo/ext/glfw/src/wl_monitor.c +269 -0
  412. data/ext/pixo/ext/glfw/src/wl_platform.h +179 -0
  413. data/ext/pixo/ext/glfw/src/wl_window.c +1050 -0
  414. data/ext/pixo/ext/glfw/src/x11_init.c +833 -0
  415. data/ext/pixo/ext/glfw/src/x11_monitor.c +491 -0
  416. data/ext/pixo/ext/glfw/src/x11_platform.h +296 -0
  417. data/ext/pixo/ext/glfw/src/x11_window.c +2475 -0
  418. data/ext/pixo/ext/glfw/src/xkb_unicode.c +889 -0
  419. data/ext/pixo/ext/glfw/src/xkb_unicode.h +33 -0
  420. data/ext/pixo/ext/glfw/tests/CMakeLists.txt +80 -0
  421. data/ext/pixo/ext/glfw/tests/clipboard.c +157 -0
  422. data/ext/pixo/ext/glfw/tests/cursor.c +317 -0
  423. data/ext/pixo/ext/glfw/tests/empty.c +131 -0
  424. data/ext/pixo/ext/glfw/tests/events.c +620 -0
  425. data/ext/pixo/ext/glfw/tests/gamma.c +188 -0
  426. data/ext/pixo/ext/glfw/tests/glfwinfo.c +899 -0
  427. data/ext/pixo/ext/glfw/tests/icon.c +148 -0
  428. data/ext/pixo/ext/glfw/tests/iconify.c +298 -0
  429. data/ext/pixo/ext/glfw/tests/joysticks.c +216 -0
  430. data/ext/pixo/ext/glfw/tests/monitors.c +243 -0
  431. data/ext/pixo/ext/glfw/tests/msaa.c +163 -0
  432. data/ext/pixo/ext/glfw/tests/reopen.c +192 -0
  433. data/ext/pixo/ext/glfw/tests/sharing.c +186 -0
  434. data/ext/pixo/ext/glfw/tests/tearing.c +214 -0
  435. data/ext/pixo/ext/glfw/tests/threads.c +143 -0
  436. data/ext/pixo/ext/glfw/tests/timeout.c +97 -0
  437. data/ext/pixo/ext/glfw/tests/title.c +78 -0
  438. data/ext/pixo/ext/glfw/tests/vulkan.c +2245 -0
  439. data/ext/pixo/ext/glfw/tests/windows.c +166 -0
  440. data/ext/pixo/ext/glm/CMakeLists.txt +227 -0
  441. data/ext/pixo/ext/glm/cmake/CMakePackageConfigHelpers.cmake +227 -0
  442. data/ext/pixo/ext/glm/cmake/GNUInstallDirs.cmake +188 -0
  443. data/ext/pixo/ext/glm/cmake/glm.pc.in +7 -0
  444. data/ext/pixo/ext/glm/cmake/glmBuildConfig.cmake.in +6 -0
  445. data/ext/pixo/ext/glm/cmake/glmConfig.cmake.in +9 -0
  446. data/ext/pixo/ext/glm/copying.txt +54 -0
  447. data/ext/pixo/ext/glm/doc/api/a00001.html +66 -0
  448. data/ext/pixo/ext/glm/doc/api/a00001_source.html +457 -0
  449. data/ext/pixo/ext/glm/doc/api/a00002.html +66 -0
  450. data/ext/pixo/ext/glm/doc/api/a00002_source.html +83 -0
  451. data/ext/pixo/ext/glm/doc/api/a00003.html +66 -0
  452. data/ext/pixo/ext/glm/doc/api/a00003_source.html +167 -0
  453. data/ext/pixo/ext/glm/doc/api/a00004.html +66 -0
  454. data/ext/pixo/ext/glm/doc/api/a00004_source.html +857 -0
  455. data/ext/pixo/ext/glm/doc/api/a00005.html +66 -0
  456. data/ext/pixo/ext/glm/doc/api/a00005_source.html +754 -0
  457. data/ext/pixo/ext/glm/doc/api/a00006.html +66 -0
  458. data/ext/pixo/ext/glm/doc/api/a00006_source.html +194 -0
  459. data/ext/pixo/ext/glm/doc/api/a00007.html +141 -0
  460. data/ext/pixo/ext/glm/doc/api/a00007_source.html +207 -0
  461. data/ext/pixo/ext/glm/doc/api/a00008.html +102 -0
  462. data/ext/pixo/ext/glm/doc/api/a00008_source.html +111 -0
  463. data/ext/pixo/ext/glm/doc/api/a00009.html +137 -0
  464. data/ext/pixo/ext/glm/doc/api/a00009_source.html +149 -0
  465. data/ext/pixo/ext/glm/doc/api/a00010.html +80 -0
  466. data/ext/pixo/ext/glm/doc/api/a00010_source.html +90 -0
  467. data/ext/pixo/ext/glm/doc/api/a00011.html +88 -0
  468. data/ext/pixo/ext/glm/doc/api/a00011_source.html +97 -0
  469. data/ext/pixo/ext/glm/doc/api/a00012.html +91 -0
  470. data/ext/pixo/ext/glm/doc/api/a00012_source.html +107 -0
  471. data/ext/pixo/ext/glm/doc/api/a00013.html +85 -0
  472. data/ext/pixo/ext/glm/doc/api/a00013_source.html +98 -0
  473. data/ext/pixo/ext/glm/doc/api/a00014.html +66 -0
  474. data/ext/pixo/ext/glm/doc/api/a00014_source.html +65 -0
  475. data/ext/pixo/ext/glm/doc/api/a00015.html +81 -0
  476. data/ext/pixo/ext/glm/doc/api/a00015_source.html +88 -0
  477. data/ext/pixo/ext/glm/doc/api/a00016.html +327 -0
  478. data/ext/pixo/ext/glm/doc/api/a00016_source.html +239 -0
  479. data/ext/pixo/ext/glm/doc/api/a00017.html +93 -0
  480. data/ext/pixo/ext/glm/doc/api/a00017_source.html +102 -0
  481. data/ext/pixo/ext/glm/doc/api/a00018.html +162 -0
  482. data/ext/pixo/ext/glm/doc/api/a00018_source.html +193 -0
  483. data/ext/pixo/ext/glm/doc/api/a00019.html +129 -0
  484. data/ext/pixo/ext/glm/doc/api/a00019_source.html +271 -0
  485. data/ext/pixo/ext/glm/doc/api/a00020.html +89 -0
  486. data/ext/pixo/ext/glm/doc/api/a00020_source.html +105 -0
  487. data/ext/pixo/ext/glm/doc/api/a00021.html +126 -0
  488. data/ext/pixo/ext/glm/doc/api/a00021_source.html +175 -0
  489. data/ext/pixo/ext/glm/doc/api/a00022.html +66 -0
  490. data/ext/pixo/ext/glm/doc/api/a00022_source.html +65 -0
  491. data/ext/pixo/ext/glm/doc/api/a00023.html +66 -0
  492. data/ext/pixo/ext/glm/doc/api/a00023_source.html +219 -0
  493. data/ext/pixo/ext/glm/doc/api/a00024.html +76 -0
  494. data/ext/pixo/ext/glm/doc/api/a00024_source.html +84 -0
  495. data/ext/pixo/ext/glm/doc/api/a00025.html +111 -0
  496. data/ext/pixo/ext/glm/doc/api/a00025_source.html +157 -0
  497. data/ext/pixo/ext/glm/doc/api/a00026.html +111 -0
  498. data/ext/pixo/ext/glm/doc/api/a00026_source.html +118 -0
  499. data/ext/pixo/ext/glm/doc/api/a00027.html +100 -0
  500. data/ext/pixo/ext/glm/doc/api/a00027_source.html +111 -0
  501. data/ext/pixo/ext/glm/doc/api/a00028.html +97 -0
  502. data/ext/pixo/ext/glm/doc/api/a00028_source.html +109 -0
  503. data/ext/pixo/ext/glm/doc/api/a00029.html +168 -0
  504. data/ext/pixo/ext/glm/doc/api/a00029_source.html +238 -0
  505. data/ext/pixo/ext/glm/doc/api/a00030.html +94 -0
  506. data/ext/pixo/ext/glm/doc/api/a00030_source.html +110 -0
  507. data/ext/pixo/ext/glm/doc/api/a00031.html +97 -0
  508. data/ext/pixo/ext/glm/doc/api/a00031_source.html +121 -0
  509. data/ext/pixo/ext/glm/doc/api/a00032.html +112 -0
  510. data/ext/pixo/ext/glm/doc/api/a00032_source.html +149 -0
  511. data/ext/pixo/ext/glm/doc/api/a00033.html +85 -0
  512. data/ext/pixo/ext/glm/doc/api/a00033_source.html +165 -0
  513. data/ext/pixo/ext/glm/doc/api/a00034.html +99 -0
  514. data/ext/pixo/ext/glm/doc/api/a00034_source.html +115 -0
  515. data/ext/pixo/ext/glm/doc/api/a00035.html +118 -0
  516. data/ext/pixo/ext/glm/doc/api/a00035_source.html +135 -0
  517. data/ext/pixo/ext/glm/doc/api/a00036.html +100 -0
  518. data/ext/pixo/ext/glm/doc/api/a00036_source.html +111 -0
  519. data/ext/pixo/ext/glm/doc/api/a00037.html +83 -0
  520. data/ext/pixo/ext/glm/doc/api/a00037_source.html +93 -0
  521. data/ext/pixo/ext/glm/doc/api/a00038.html +979 -0
  522. data/ext/pixo/ext/glm/doc/api/a00038_source.html +1716 -0
  523. data/ext/pixo/ext/glm/doc/api/a00039.html +66 -0
  524. data/ext/pixo/ext/glm/doc/api/a00039_source.html +65 -0
  525. data/ext/pixo/ext/glm/doc/api/a00040.html +66 -0
  526. data/ext/pixo/ext/glm/doc/api/a00040_source.html +119 -0
  527. data/ext/pixo/ext/glm/doc/api/a00041.html +81 -0
  528. data/ext/pixo/ext/glm/doc/api/a00041_source.html +93 -0
  529. data/ext/pixo/ext/glm/doc/api/a00042.html +79 -0
  530. data/ext/pixo/ext/glm/doc/api/a00042_source.html +91 -0
  531. data/ext/pixo/ext/glm/doc/api/a00043.html +67 -0
  532. data/ext/pixo/ext/glm/doc/api/a00043_source.html +185 -0
  533. data/ext/pixo/ext/glm/doc/api/a00044.html +93 -0
  534. data/ext/pixo/ext/glm/doc/api/a00044_source.html +104 -0
  535. data/ext/pixo/ext/glm/doc/api/a00045.html +98 -0
  536. data/ext/pixo/ext/glm/doc/api/a00045_source.html +107 -0
  537. data/ext/pixo/ext/glm/doc/api/a00046.html +66 -0
  538. data/ext/pixo/ext/glm/doc/api/a00046_source.html +65 -0
  539. data/ext/pixo/ext/glm/doc/api/a00047.html +93 -0
  540. data/ext/pixo/ext/glm/doc/api/a00047_source.html +124 -0
  541. data/ext/pixo/ext/glm/doc/api/a00048.html +72 -0
  542. data/ext/pixo/ext/glm/doc/api/a00048_source.html +237 -0
  543. data/ext/pixo/ext/glm/doc/api/a00049.html +79 -0
  544. data/ext/pixo/ext/glm/doc/api/a00049_source.html +89 -0
  545. data/ext/pixo/ext/glm/doc/api/a00050_source.html +2457 -0
  546. data/ext/pixo/ext/glm/doc/api/a00051.html +66 -0
  547. data/ext/pixo/ext/glm/doc/api/a00051_source.html +88 -0
  548. data/ext/pixo/ext/glm/doc/api/a00052.html +66 -0
  549. data/ext/pixo/ext/glm/doc/api/a00052_source.html +80 -0
  550. data/ext/pixo/ext/glm/doc/api/a00053.html +66 -0
  551. data/ext/pixo/ext/glm/doc/api/a00053_source.html +79 -0
  552. data/ext/pixo/ext/glm/doc/api/a00054.html +66 -0
  553. data/ext/pixo/ext/glm/doc/api/a00054_source.html +79 -0
  554. data/ext/pixo/ext/glm/doc/api/a00055.html +66 -0
  555. data/ext/pixo/ext/glm/doc/api/a00055_source.html +88 -0
  556. data/ext/pixo/ext/glm/doc/api/a00056.html +66 -0
  557. data/ext/pixo/ext/glm/doc/api/a00056_source.html +79 -0
  558. data/ext/pixo/ext/glm/doc/api/a00057.html +66 -0
  559. data/ext/pixo/ext/glm/doc/api/a00057_source.html +79 -0
  560. data/ext/pixo/ext/glm/doc/api/a00058_source.html +79 -0
  561. data/ext/pixo/ext/glm/doc/api/a00059.html +66 -0
  562. data/ext/pixo/ext/glm/doc/api/a00059_source.html +88 -0
  563. data/ext/pixo/ext/glm/doc/api/a00060.html +66 -0
  564. data/ext/pixo/ext/glm/doc/api/a00060_source.html +65 -0
  565. data/ext/pixo/ext/glm/doc/api/a00061.html +85 -0
  566. data/ext/pixo/ext/glm/doc/api/a00061_source.html +101 -0
  567. data/ext/pixo/ext/glm/doc/api/a00062.html +81 -0
  568. data/ext/pixo/ext/glm/doc/api/a00062_source.html +87 -0
  569. data/ext/pixo/ext/glm/doc/api/a00063.html +76 -0
  570. data/ext/pixo/ext/glm/doc/api/a00063_source.html +91 -0
  571. data/ext/pixo/ext/glm/doc/api/a00064.html +265 -0
  572. data/ext/pixo/ext/glm/doc/api/a00064_source.html +438 -0
  573. data/ext/pixo/ext/glm/doc/api/a00065.html +86 -0
  574. data/ext/pixo/ext/glm/doc/api/a00065_source.html +104 -0
  575. data/ext/pixo/ext/glm/doc/api/a00066.html +79 -0
  576. data/ext/pixo/ext/glm/doc/api/a00066_source.html +89 -0
  577. data/ext/pixo/ext/glm/doc/api/a00067.html +111 -0
  578. data/ext/pixo/ext/glm/doc/api/a00067_source.html +143 -0
  579. data/ext/pixo/ext/glm/doc/api/a00068.html +100 -0
  580. data/ext/pixo/ext/glm/doc/api/a00068_source.html +122 -0
  581. data/ext/pixo/ext/glm/doc/api/a00069.html +99 -0
  582. data/ext/pixo/ext/glm/doc/api/a00069_source.html +108 -0
  583. data/ext/pixo/ext/glm/doc/api/a00070.html +158 -0
  584. data/ext/pixo/ext/glm/doc/api/a00070_source.html +289 -0
  585. data/ext/pixo/ext/glm/doc/api/a00071.html +89 -0
  586. data/ext/pixo/ext/glm/doc/api/a00071_source.html +110 -0
  587. data/ext/pixo/ext/glm/doc/api/a00072.html +77 -0
  588. data/ext/pixo/ext/glm/doc/api/a00072_source.html +84 -0
  589. data/ext/pixo/ext/glm/doc/api/a00073.html +82 -0
  590. data/ext/pixo/ext/glm/doc/api/a00073_source.html +100 -0
  591. data/ext/pixo/ext/glm/doc/api/a00074.html +99 -0
  592. data/ext/pixo/ext/glm/doc/api/a00074_source.html +121 -0
  593. data/ext/pixo/ext/glm/doc/api/a00075.html +78 -0
  594. data/ext/pixo/ext/glm/doc/api/a00075_source.html +84 -0
  595. data/ext/pixo/ext/glm/doc/api/a00076.html +81 -0
  596. data/ext/pixo/ext/glm/doc/api/a00076_source.html +85 -0
  597. data/ext/pixo/ext/glm/doc/api/a00077.html +107 -0
  598. data/ext/pixo/ext/glm/doc/api/a00077_source.html +115 -0
  599. data/ext/pixo/ext/glm/doc/api/a00078.html +82 -0
  600. data/ext/pixo/ext/glm/doc/api/a00078_source.html +91 -0
  601. data/ext/pixo/ext/glm/doc/api/a00079.html +81 -0
  602. data/ext/pixo/ext/glm/doc/api/a00079_source.html +86 -0
  603. data/ext/pixo/ext/glm/doc/api/a00080.html +175 -0
  604. data/ext/pixo/ext/glm/doc/api/a00080_source.html +233 -0
  605. data/ext/pixo/ext/glm/doc/api/a00081.html +66 -0
  606. data/ext/pixo/ext/glm/doc/api/a00081_source.html +65 -0
  607. data/ext/pixo/ext/glm/doc/api/a00082_source.html +61 -0
  608. data/ext/pixo/ext/glm/doc/api/a00083.html +78 -0
  609. data/ext/pixo/ext/glm/doc/api/a00083_source.html +84 -0
  610. data/ext/pixo/ext/glm/doc/api/a00084.html +79 -0
  611. data/ext/pixo/ext/glm/doc/api/a00084_source.html +87 -0
  612. data/ext/pixo/ext/glm/doc/api/a00085.html +66 -0
  613. data/ext/pixo/ext/glm/doc/api/a00085_source.html +123 -0
  614. data/ext/pixo/ext/glm/doc/api/a00086.html +76 -0
  615. data/ext/pixo/ext/glm/doc/api/a00086_source.html +81 -0
  616. data/ext/pixo/ext/glm/doc/api/a00087.html +161 -0
  617. data/ext/pixo/ext/glm/doc/api/a00087_source.html +329 -0
  618. data/ext/pixo/ext/glm/doc/api/a00088.html +129 -0
  619. data/ext/pixo/ext/glm/doc/api/a00088_source.html +189 -0
  620. data/ext/pixo/ext/glm/doc/api/a00089.html +98 -0
  621. data/ext/pixo/ext/glm/doc/api/a00089_source.html +115 -0
  622. data/ext/pixo/ext/glm/doc/api/a00090.html +67 -0
  623. data/ext/pixo/ext/glm/doc/api/a00090_source.html +133 -0
  624. data/ext/pixo/ext/glm/doc/api/a00091.html +81 -0
  625. data/ext/pixo/ext/glm/doc/api/a00091_source.html +90 -0
  626. data/ext/pixo/ext/glm/doc/api/a00092.html +109 -0
  627. data/ext/pixo/ext/glm/doc/api/a00092_source.html +126 -0
  628. data/ext/pixo/ext/glm/doc/api/a00093.html +83 -0
  629. data/ext/pixo/ext/glm/doc/api/a00093_source.html +94 -0
  630. data/ext/pixo/ext/glm/doc/api/a00094.html +108 -0
  631. data/ext/pixo/ext/glm/doc/api/a00094_source.html +143 -0
  632. data/ext/pixo/ext/glm/doc/api/a00095.html +126 -0
  633. data/ext/pixo/ext/glm/doc/api/a00095_source.html +149 -0
  634. data/ext/pixo/ext/glm/doc/api/a00096.html +69 -0
  635. data/ext/pixo/ext/glm/doc/api/a00096_source.html +131 -0
  636. data/ext/pixo/ext/glm/doc/api/a00097.html +67 -0
  637. data/ext/pixo/ext/glm/doc/api/a00097_source.html +79 -0
  638. data/ext/pixo/ext/glm/doc/api/a00098.html +66 -0
  639. data/ext/pixo/ext/glm/doc/api/a00098_source.html +827 -0
  640. data/ext/pixo/ext/glm/doc/api/a00099.html +67 -0
  641. data/ext/pixo/ext/glm/doc/api/a00099_source.html +219 -0
  642. data/ext/pixo/ext/glm/doc/api/a00100.html +67 -0
  643. data/ext/pixo/ext/glm/doc/api/a00100_source.html +282 -0
  644. data/ext/pixo/ext/glm/doc/api/a00101.html +67 -0
  645. data/ext/pixo/ext/glm/doc/api/a00101_source.html +402 -0
  646. data/ext/pixo/ext/glm/doc/api/a00102.html +82 -0
  647. data/ext/pixo/ext/glm/doc/api/a00102_source.html +105 -0
  648. data/ext/pixo/ext/glm/doc/api/a00103.html +91 -0
  649. data/ext/pixo/ext/glm/doc/api/a00103_source.html +102 -0
  650. data/ext/pixo/ext/glm/doc/api/a00104.html +82 -0
  651. data/ext/pixo/ext/glm/doc/api/a00104_source.html +89 -0
  652. data/ext/pixo/ext/glm/doc/api/a00105.html +88 -0
  653. data/ext/pixo/ext/glm/doc/api/a00105_source.html +95 -0
  654. data/ext/pixo/ext/glm/doc/api/a00106.html +102 -0
  655. data/ext/pixo/ext/glm/doc/api/a00106_source.html +144 -0
  656. data/ext/pixo/ext/glm/doc/api/a00107.html +66 -0
  657. data/ext/pixo/ext/glm/doc/api/a00107_source.html +65 -0
  658. data/ext/pixo/ext/glm/doc/api/a00108.html +241 -0
  659. data/ext/pixo/ext/glm/doc/api/a00108_source.html +383 -0
  660. data/ext/pixo/ext/glm/doc/api/a00109.html +493 -0
  661. data/ext/pixo/ext/glm/doc/api/a00109_source.html +769 -0
  662. data/ext/pixo/ext/glm/doc/api/a00110.html +82 -0
  663. data/ext/pixo/ext/glm/doc/api/a00110_source.html +113 -0
  664. data/ext/pixo/ext/glm/doc/api/a00111.html +66 -0
  665. data/ext/pixo/ext/glm/doc/api/a00111_source.html +248 -0
  666. data/ext/pixo/ext/glm/doc/api/a00112.html +66 -0
  667. data/ext/pixo/ext/glm/doc/api/a00112_source.html +79 -0
  668. data/ext/pixo/ext/glm/doc/api/a00113.html +102 -0
  669. data/ext/pixo/ext/glm/doc/api/a00113_source.html +352 -0
  670. data/ext/pixo/ext/glm/doc/api/a00114.html +271 -0
  671. data/ext/pixo/ext/glm/doc/api/a00114_source.html +469 -0
  672. data/ext/pixo/ext/glm/doc/api/a00115.html +66 -0
  673. data/ext/pixo/ext/glm/doc/api/a00115_source.html +245 -0
  674. data/ext/pixo/ext/glm/doc/api/a00116.html +66 -0
  675. data/ext/pixo/ext/glm/doc/api/a00116_source.html +228 -0
  676. data/ext/pixo/ext/glm/doc/api/a00117.html +66 -0
  677. data/ext/pixo/ext/glm/doc/api/a00117_source.html +230 -0
  678. data/ext/pixo/ext/glm/doc/api/a00118.html +66 -0
  679. data/ext/pixo/ext/glm/doc/api/a00118_source.html +236 -0
  680. data/ext/pixo/ext/glm/doc/api/a00119.html +66 -0
  681. data/ext/pixo/ext/glm/doc/api/a00119_source.html +252 -0
  682. data/ext/pixo/ext/glm/doc/api/a00120.html +66 -0
  683. data/ext/pixo/ext/glm/doc/api/a00120_source.html +235 -0
  684. data/ext/pixo/ext/glm/doc/api/a00121.html +66 -0
  685. data/ext/pixo/ext/glm/doc/api/a00121_source.html +240 -0
  686. data/ext/pixo/ext/glm/doc/api/a00122.html +66 -0
  687. data/ext/pixo/ext/glm/doc/api/a00122_source.html +240 -0
  688. data/ext/pixo/ext/glm/doc/api/a00123.html +66 -0
  689. data/ext/pixo/ext/glm/doc/api/a00123_source.html +257 -0
  690. data/ext/pixo/ext/glm/doc/api/a00124.html +71 -0
  691. data/ext/pixo/ext/glm/doc/api/a00124_source.html +692 -0
  692. data/ext/pixo/ext/glm/doc/api/a00125.html +128 -0
  693. data/ext/pixo/ext/glm/doc/api/a00125_source.html +158 -0
  694. data/ext/pixo/ext/glm/doc/api/a00126.html +67 -0
  695. data/ext/pixo/ext/glm/doc/api/a00126_source.html +299 -0
  696. data/ext/pixo/ext/glm/doc/api/a00127.html +192 -0
  697. data/ext/pixo/ext/glm/doc/api/a00127_source.html +435 -0
  698. data/ext/pixo/ext/glm/doc/api/a00128.html +66 -0
  699. data/ext/pixo/ext/glm/doc/api/a00128_source.html +357 -0
  700. data/ext/pixo/ext/glm/doc/api/a00129.html +66 -0
  701. data/ext/pixo/ext/glm/doc/api/a00129_source.html +443 -0
  702. data/ext/pixo/ext/glm/doc/api/a00130.html +66 -0
  703. data/ext/pixo/ext/glm/doc/api/a00130_source.html +461 -0
  704. data/ext/pixo/ext/glm/doc/api/a00131.html +66 -0
  705. data/ext/pixo/ext/glm/doc/api/a00131_source.html +500 -0
  706. data/ext/pixo/ext/glm/doc/api/a00132.html +91 -0
  707. data/ext/pixo/ext/glm/doc/api/a00132_source.html +101 -0
  708. data/ext/pixo/ext/glm/doc/api/a00133.html +107 -0
  709. data/ext/pixo/ext/glm/doc/api/a00133_source.html +159 -0
  710. data/ext/pixo/ext/glm/doc/api/a00134.html +66 -0
  711. data/ext/pixo/ext/glm/doc/api/a00134_source.html +65 -0
  712. data/ext/pixo/ext/glm/doc/api/a00135.html +66 -0
  713. data/ext/pixo/ext/glm/doc/api/a00135_source.html +65 -0
  714. data/ext/pixo/ext/glm/doc/api/a00136.html +66 -0
  715. data/ext/pixo/ext/glm/doc/api/a00136_source.html +65 -0
  716. data/ext/pixo/ext/glm/doc/api/a00137.html +86 -0
  717. data/ext/pixo/ext/glm/doc/api/a00137_source.html +98 -0
  718. data/ext/pixo/ext/glm/doc/api/a00138.html +91 -0
  719. data/ext/pixo/ext/glm/doc/api/a00138_source.html +104 -0
  720. data/ext/pixo/ext/glm/doc/api/a00139.html +66 -0
  721. data/ext/pixo/ext/glm/doc/api/a00139_source.html +65 -0
  722. data/ext/pixo/ext/glm/doc/api/a00140.html +85 -0
  723. data/ext/pixo/ext/glm/doc/api/a00140_source.html +94 -0
  724. data/ext/pixo/ext/glm/doc/api/a00146.html +1123 -0
  725. data/ext/pixo/ext/glm/doc/api/a00147.html +325 -0
  726. data/ext/pixo/ext/glm/doc/api/a00148.html +367 -0
  727. data/ext/pixo/ext/glm/doc/api/a00149.html +577 -0
  728. data/ext/pixo/ext/glm/doc/api/a00150.html +210 -0
  729. data/ext/pixo/ext/glm/doc/api/a00151.html +364 -0
  730. data/ext/pixo/ext/glm/doc/api/a00152.html +532 -0
  731. data/ext/pixo/ext/glm/doc/api/a00153.html +393 -0
  732. data/ext/pixo/ext/glm/doc/api/a00154.html +103 -0
  733. data/ext/pixo/ext/glm/doc/api/a00155.html +177 -0
  734. data/ext/pixo/ext/glm/doc/api/a00156.html +84 -0
  735. data/ext/pixo/ext/glm/doc/api/a00157.html +808 -0
  736. data/ext/pixo/ext/glm/doc/api/a00158.html +2827 -0
  737. data/ext/pixo/ext/glm/doc/api/a00159.html +53 -0
  738. data/ext/pixo/ext/glm/doc/api/a00160.html +985 -0
  739. data/ext/pixo/ext/glm/doc/api/a00161.html +141 -0
  740. data/ext/pixo/ext/glm/doc/api/a00162.html +670 -0
  741. data/ext/pixo/ext/glm/doc/api/a00163.html +217 -0
  742. data/ext/pixo/ext/glm/doc/api/a00164.html +137 -0
  743. data/ext/pixo/ext/glm/doc/api/a00165.html +290 -0
  744. data/ext/pixo/ext/glm/doc/api/a00166.html +201 -0
  745. data/ext/pixo/ext/glm/doc/api/a00167.html +1885 -0
  746. data/ext/pixo/ext/glm/doc/api/a00168.html +129 -0
  747. data/ext/pixo/ext/glm/doc/api/a00169.html +1690 -0
  748. data/ext/pixo/ext/glm/doc/api/a00170.html +136 -0
  749. data/ext/pixo/ext/glm/doc/api/a00171.html +1406 -0
  750. data/ext/pixo/ext/glm/doc/api/a00172.html +939 -0
  751. data/ext/pixo/ext/glm/doc/api/a00173.html +303 -0
  752. data/ext/pixo/ext/glm/doc/api/a00174.html +406 -0
  753. data/ext/pixo/ext/glm/doc/api/a00175.html +603 -0
  754. data/ext/pixo/ext/glm/doc/api/a00176.html +688 -0
  755. data/ext/pixo/ext/glm/doc/api/a00177.html +3678 -0
  756. data/ext/pixo/ext/glm/doc/api/a00178.html +445 -0
  757. data/ext/pixo/ext/glm/doc/api/a00179.html +233 -0
  758. data/ext/pixo/ext/glm/doc/api/a00180.html +53 -0
  759. data/ext/pixo/ext/glm/doc/api/a00181.html +1293 -0
  760. data/ext/pixo/ext/glm/doc/api/a00182.html +273 -0
  761. data/ext/pixo/ext/glm/doc/api/a00183.html +103 -0
  762. data/ext/pixo/ext/glm/doc/api/a00184.html +213 -0
  763. data/ext/pixo/ext/glm/doc/api/a00185.html +153 -0
  764. data/ext/pixo/ext/glm/doc/api/a00186.html +117 -0
  765. data/ext/pixo/ext/glm/doc/api/a00187.html +312 -0
  766. data/ext/pixo/ext/glm/doc/api/a00188.html +193 -0
  767. data/ext/pixo/ext/glm/doc/api/a00189.html +464 -0
  768. data/ext/pixo/ext/glm/doc/api/a00190.html +565 -0
  769. data/ext/pixo/ext/glm/doc/api/a00191.html +99 -0
  770. data/ext/pixo/ext/glm/doc/api/a00192.html +553 -0
  771. data/ext/pixo/ext/glm/doc/api/a00193.html +355 -0
  772. data/ext/pixo/ext/glm/doc/api/a00194.html +282 -0
  773. data/ext/pixo/ext/glm/doc/api/a00195.html +246 -0
  774. data/ext/pixo/ext/glm/doc/api/a00196.html +143 -0
  775. data/ext/pixo/ext/glm/doc/api/a00197.html +137 -0
  776. data/ext/pixo/ext/glm/doc/api/a00198.html +53 -0
  777. data/ext/pixo/ext/glm/doc/api/a00199.html +314 -0
  778. data/ext/pixo/ext/glm/doc/api/a00200.html +397 -0
  779. data/ext/pixo/ext/glm/doc/api/a00201.html +55 -0
  780. data/ext/pixo/ext/glm/doc/api/a00202.html +126 -0
  781. data/ext/pixo/ext/glm/doc/api/a00203.html +105 -0
  782. data/ext/pixo/ext/glm/doc/api/a00204.html +117 -0
  783. data/ext/pixo/ext/glm/doc/api/a00205.html +191 -0
  784. data/ext/pixo/ext/glm/doc/api/a00206.html +421 -0
  785. data/ext/pixo/ext/glm/doc/api/a00207.html +259 -0
  786. data/ext/pixo/ext/glm/doc/api/a00208.html +317 -0
  787. data/ext/pixo/ext/glm/doc/api/a00209.html +251 -0
  788. data/ext/pixo/ext/glm/doc/api/a00210.html +64 -0
  789. data/ext/pixo/ext/glm/doc/api/a00211.html +293 -0
  790. data/ext/pixo/ext/glm/doc/api/a00212.html +99 -0
  791. data/ext/pixo/ext/glm/doc/api/a00213.html +127 -0
  792. data/ext/pixo/ext/glm/doc/api/a00214.html +90 -0
  793. data/ext/pixo/ext/glm/doc/api/a00215.html +127 -0
  794. data/ext/pixo/ext/glm/doc/api/a00216.html +115 -0
  795. data/ext/pixo/ext/glm/doc/api/a00217.html +93 -0
  796. data/ext/pixo/ext/glm/doc/api/a00218.html +105 -0
  797. data/ext/pixo/ext/glm/doc/api/a00219.html +93 -0
  798. data/ext/pixo/ext/glm/doc/api/a00220.html +613 -0
  799. data/ext/pixo/ext/glm/doc/api/a00221.html +55 -0
  800. data/ext/pixo/ext/glm/doc/api/a00222.html +137 -0
  801. data/ext/pixo/ext/glm/doc/api/a00223.html +165 -0
  802. data/ext/pixo/ext/glm/doc/api/a00224.html +439 -0
  803. data/ext/pixo/ext/glm/doc/api/a00225.html +53 -0
  804. data/ext/pixo/ext/glm/doc/api/a00226.html +53 -0
  805. data/ext/pixo/ext/glm/doc/api/a00227.html +53 -0
  806. data/ext/pixo/ext/glm/doc/api/a00228.html +53 -0
  807. data/ext/pixo/ext/glm/doc/api/a00229.html +211 -0
  808. data/ext/pixo/ext/glm/doc/api/a00230.html +213 -0
  809. data/ext/pixo/ext/glm/doc/api/a00231.html +83 -0
  810. data/ext/pixo/ext/glm/doc/api/a00232.html +143 -0
  811. data/ext/pixo/ext/glm/doc/api/a00233.html +372 -0
  812. data/ext/pixo/ext/glm/doc/api/a00234.html +7811 -0
  813. data/ext/pixo/ext/glm/doc/api/a00235.html +54 -0
  814. data/ext/pixo/ext/glm/doc/api/a00236.html +163 -0
  815. data/ext/pixo/ext/glm/doc/api/a00237.html +271 -0
  816. data/ext/pixo/ext/glm/doc/api/a00238.html +149 -0
  817. data/ext/pixo/ext/glm/doc/api/arrowdown.png +0 -0
  818. data/ext/pixo/ext/glm/doc/api/arrowright.png +0 -0
  819. data/ext/pixo/ext/glm/doc/api/bc_s.png +0 -0
  820. data/ext/pixo/ext/glm/doc/api/bdwn.png +0 -0
  821. data/ext/pixo/ext/glm/doc/api/closed.png +0 -0
  822. data/ext/pixo/ext/glm/doc/api/dir_1f76e953200861345293ade84ac7fb6c.html +61 -0
  823. data/ext/pixo/ext/glm/doc/api/dir_275089585c7fc1b5fd5d7d42c69cb1da.html +61 -0
  824. data/ext/pixo/ext/glm/doc/api/dir_577c788b67d63fb3b3b5752bd495d0f2.html +63 -0
  825. data/ext/pixo/ext/glm/doc/api/dir_5ce58d942b2d0776e17a9a58abc01e04.html +114 -0
  826. data/ext/pixo/ext/glm/doc/api/dir_7b98f88bffbed4b390b5f8f520d9c08e.html +61 -0
  827. data/ext/pixo/ext/glm/doc/api/dir_8d176b5b7dd0ae42ea6876078f2bde49.html +177 -0
  828. data/ext/pixo/ext/glm/doc/api/dir_9440d7c11b99dcd7e5d369c7cf9802fe.html +101 -0
  829. data/ext/pixo/ext/glm/doc/api/dir_e29b03b892e0e25920d021a614d4db9b.html +63 -0
  830. data/ext/pixo/ext/glm/doc/api/dir_e529a619cfdec1fa4c331fb042fd332f.html +129 -0
  831. data/ext/pixo/ext/glm/doc/api/doc.png +0 -0
  832. data/ext/pixo/ext/glm/doc/api/doxygen.css +865 -0
  833. data/ext/pixo/ext/glm/doc/api/doxygen.png +0 -0
  834. data/ext/pixo/ext/glm/doc/api/dynsections.js +104 -0
  835. data/ext/pixo/ext/glm/doc/api/files.html +200 -0
  836. data/ext/pixo/ext/glm/doc/api/folderclosed.png +0 -0
  837. data/ext/pixo/ext/glm/doc/api/folderopen.png +0 -0
  838. data/ext/pixo/ext/glm/doc/api/index.html +68 -0
  839. data/ext/pixo/ext/glm/doc/api/jquery.js +68 -0
  840. data/ext/pixo/ext/glm/doc/api/logo.png +0 -0
  841. data/ext/pixo/ext/glm/doc/api/modules.html +149 -0
  842. data/ext/pixo/ext/glm/doc/api/nav_f.png +0 -0
  843. data/ext/pixo/ext/glm/doc/api/nav_g.png +0 -0
  844. data/ext/pixo/ext/glm/doc/api/nav_h.png +0 -0
  845. data/ext/pixo/ext/glm/doc/api/open.png +0 -0
  846. data/ext/pixo/ext/glm/doc/api/splitbar.png +0 -0
  847. data/ext/pixo/ext/glm/doc/api/sync_off.png +0 -0
  848. data/ext/pixo/ext/glm/doc/api/sync_on.png +0 -0
  849. data/ext/pixo/ext/glm/doc/api/tab_a.png +0 -0
  850. data/ext/pixo/ext/glm/doc/api/tab_b.png +0 -0
  851. data/ext/pixo/ext/glm/doc/api/tab_h.png +0 -0
  852. data/ext/pixo/ext/glm/doc/api/tab_s.png +0 -0
  853. data/ext/pixo/ext/glm/doc/api/tabs.css +79 -0
  854. data/ext/pixo/ext/glm/doc/glm.docx +0 -0
  855. data/ext/pixo/ext/glm/doc/glm.pdf +0 -0
  856. data/ext/pixo/ext/glm/doc/logo.png +0 -0
  857. data/ext/pixo/ext/glm/doc/man.doxy +2396 -0
  858. data/ext/pixo/ext/glm/doc/pages.doxy +32 -0
  859. data/ext/pixo/ext/glm/doc/theme/doxygen.css +865 -0
  860. data/ext/pixo/ext/glm/doc/theme/tabs.css +79 -0
  861. data/ext/pixo/ext/glm/glm/CMakeLists.txt +67 -0
  862. data/ext/pixo/ext/glm/glm/common.hpp +6 -0
  863. data/ext/pixo/ext/glm/glm/detail/_features.hpp +399 -0
  864. data/ext/pixo/ext/glm/glm/detail/_fixes.hpp +30 -0
  865. data/ext/pixo/ext/glm/glm/detail/_noise.hpp +107 -0
  866. data/ext/pixo/ext/glm/glm/detail/_swizzle.hpp +797 -0
  867. data/ext/pixo/ext/glm/glm/detail/_swizzle_func.hpp +696 -0
  868. data/ext/pixo/ext/glm/glm/detail/_vectorize.hpp +131 -0
  869. data/ext/pixo/ext/glm/glm/detail/dummy.cpp +207 -0
  870. data/ext/pixo/ext/glm/glm/detail/func_common.hpp +427 -0
  871. data/ext/pixo/ext/glm/glm/detail/func_common.inl +848 -0
  872. data/ext/pixo/ext/glm/glm/detail/func_common_simd.inl +231 -0
  873. data/ext/pixo/ext/glm/glm/detail/func_exponential.hpp +103 -0
  874. data/ext/pixo/ext/glm/glm/detail/func_exponential.inl +146 -0
  875. data/ext/pixo/ext/glm/glm/detail/func_exponential_simd.inl +35 -0
  876. data/ext/pixo/ext/glm/glm/detail/func_geometric.hpp +113 -0
  877. data/ext/pixo/ext/glm/glm/detail/func_geometric.inl +247 -0
  878. data/ext/pixo/ext/glm/glm/detail/func_geometric_simd.inl +99 -0
  879. data/ext/pixo/ext/glm/glm/detail/func_integer.hpp +203 -0
  880. data/ext/pixo/ext/glm/glm/detail/func_integer.inl +375 -0
  881. data/ext/pixo/ext/glm/glm/detail/func_integer_simd.inl +66 -0
  882. data/ext/pixo/ext/glm/glm/detail/func_matrix.hpp +149 -0
  883. data/ext/pixo/ext/glm/glm/detail/func_matrix.inl +401 -0
  884. data/ext/pixo/ext/glm/glm/detail/func_matrix_simd.inl +88 -0
  885. data/ext/pixo/ext/glm/glm/detail/func_packing.hpp +168 -0
  886. data/ext/pixo/ext/glm/glm/detail/func_packing.inl +190 -0
  887. data/ext/pixo/ext/glm/glm/detail/func_packing_simd.inl +9 -0
  888. data/ext/pixo/ext/glm/glm/detail/func_trigonometric.hpp +176 -0
  889. data/ext/pixo/ext/glm/glm/detail/func_trigonometric.inl +200 -0
  890. data/ext/pixo/ext/glm/glm/detail/func_trigonometric_simd.inl +0 -0
  891. data/ext/pixo/ext/glm/glm/detail/func_vector_relational.hpp +111 -0
  892. data/ext/pixo/ext/glm/glm/detail/func_vector_relational.inl +105 -0
  893. data/ext/pixo/ext/glm/glm/detail/func_vector_relational_simd.inl +9 -0
  894. data/ext/pixo/ext/glm/glm/detail/glm.cpp +257 -0
  895. data/ext/pixo/ext/glm/glm/detail/precision.hpp +63 -0
  896. data/ext/pixo/ext/glm/glm/detail/setup.hpp +777 -0
  897. data/ext/pixo/ext/glm/glm/detail/type_float.hpp +67 -0
  898. data/ext/pixo/ext/glm/glm/detail/type_gentype.hpp +195 -0
  899. data/ext/pixo/ext/glm/glm/detail/type_gentype.inl +341 -0
  900. data/ext/pixo/ext/glm/glm/detail/type_half.hpp +19 -0
  901. data/ext/pixo/ext/glm/glm/detail/type_half.inl +244 -0
  902. data/ext/pixo/ext/glm/glm/detail/type_int.hpp +306 -0
  903. data/ext/pixo/ext/glm/glm/detail/type_mat.hpp +767 -0
  904. data/ext/pixo/ext/glm/glm/detail/type_mat.inl +3 -0
  905. data/ext/pixo/ext/glm/glm/detail/type_mat2x2.hpp +183 -0
  906. data/ext/pixo/ext/glm/glm/detail/type_mat2x2.inl +490 -0
  907. data/ext/pixo/ext/glm/glm/detail/type_mat2x3.hpp +165 -0
  908. data/ext/pixo/ext/glm/glm/detail/type_mat2x3.inl +464 -0
  909. data/ext/pixo/ext/glm/glm/detail/type_mat2x4.hpp +167 -0
  910. data/ext/pixo/ext/glm/glm/detail/type_mat2x4.inl +473 -0
  911. data/ext/pixo/ext/glm/glm/detail/type_mat3x2.hpp +173 -0
  912. data/ext/pixo/ext/glm/glm/detail/type_mat3x2.inl +498 -0
  913. data/ext/pixo/ext/glm/glm/detail/type_mat3x3.hpp +190 -0
  914. data/ext/pixo/ext/glm/glm/detail/type_mat3x3.inl +567 -0
  915. data/ext/pixo/ext/glm/glm/detail/type_mat3x4.hpp +172 -0
  916. data/ext/pixo/ext/glm/glm/detail/type_mat3x4.inl +538 -0
  917. data/ext/pixo/ext/glm/glm/detail/type_mat4x2.hpp +177 -0
  918. data/ext/pixo/ext/glm/glm/detail/type_mat4x2.inl +551 -0
  919. data/ext/pixo/ext/glm/glm/detail/type_mat4x3.hpp +177 -0
  920. data/ext/pixo/ext/glm/glm/detail/type_mat4x3.inl +568 -0
  921. data/ext/pixo/ext/glm/glm/detail/type_mat4x4.hpp +195 -0
  922. data/ext/pixo/ext/glm/glm/detail/type_mat4x4.inl +677 -0
  923. data/ext/pixo/ext/glm/glm/detail/type_mat4x4_simd.inl +7 -0
  924. data/ext/pixo/ext/glm/glm/detail/type_vec.hpp +576 -0
  925. data/ext/pixo/ext/glm/glm/detail/type_vec.inl +2 -0
  926. data/ext/pixo/ext/glm/glm/detail/type_vec1.hpp +299 -0
  927. data/ext/pixo/ext/glm/glm/detail/type_vec1.inl +564 -0
  928. data/ext/pixo/ext/glm/glm/detail/type_vec2.hpp +385 -0
  929. data/ext/pixo/ext/glm/glm/detail/type_vec2.inl +900 -0
  930. data/ext/pixo/ext/glm/glm/detail/type_vec3.hpp +406 -0
  931. data/ext/pixo/ext/glm/glm/detail/type_vec3.inl +1028 -0
  932. data/ext/pixo/ext/glm/glm/detail/type_vec4.hpp +451 -0
  933. data/ext/pixo/ext/glm/glm/detail/type_vec4.inl +975 -0
  934. data/ext/pixo/ext/glm/glm/detail/type_vec4_simd.inl +481 -0
  935. data/ext/pixo/ext/glm/glm/exponential.hpp +6 -0
  936. data/ext/pixo/ext/glm/glm/ext.hpp +117 -0
  937. data/ext/pixo/ext/glm/glm/fwd.hpp +2570 -0
  938. data/ext/pixo/ext/glm/glm/geometric.hpp +6 -0
  939. data/ext/pixo/ext/glm/glm/glm.hpp +88 -0
  940. data/ext/pixo/ext/glm/glm/gtc/bitfield.hpp +207 -0
  941. data/ext/pixo/ext/glm/glm/gtc/bitfield.inl +515 -0
  942. data/ext/pixo/ext/glm/glm/gtc/color_encoding.hpp +50 -0
  943. data/ext/pixo/ext/glm/glm/gtc/color_encoding.inl +65 -0
  944. data/ext/pixo/ext/glm/glm/gtc/color_space.hpp +56 -0
  945. data/ext/pixo/ext/glm/glm/gtc/color_space.inl +75 -0
  946. data/ext/pixo/ext/glm/glm/gtc/constants.hpp +176 -0
  947. data/ext/pixo/ext/glm/glm/gtc/constants.inl +181 -0
  948. data/ext/pixo/ext/glm/glm/gtc/epsilon.hpp +73 -0
  949. data/ext/pixo/ext/glm/glm/gtc/epsilon.inl +125 -0
  950. data/ext/pixo/ext/glm/glm/gtc/functions.hpp +53 -0
  951. data/ext/pixo/ext/glm/glm/gtc/functions.inl +31 -0
  952. data/ext/pixo/ext/glm/glm/gtc/integer.hpp +102 -0
  953. data/ext/pixo/ext/glm/glm/gtc/integer.inl +71 -0
  954. data/ext/pixo/ext/glm/glm/gtc/matrix_access.hpp +59 -0
  955. data/ext/pixo/ext/glm/glm/gtc/matrix_access.inl +63 -0
  956. data/ext/pixo/ext/glm/glm/gtc/matrix_integer.hpp +486 -0
  957. data/ext/pixo/ext/glm/glm/gtc/matrix_inverse.hpp +49 -0
  958. data/ext/pixo/ext/glm/glm/gtc/matrix_inverse.inl +120 -0
  959. data/ext/pixo/ext/glm/glm/gtc/matrix_transform.hpp +465 -0
  960. data/ext/pixo/ext/glm/glm/gtc/matrix_transform.inl +575 -0
  961. data/ext/pixo/ext/glm/glm/gtc/noise.hpp +60 -0
  962. data/ext/pixo/ext/glm/glm/gtc/noise.inl +808 -0
  963. data/ext/pixo/ext/glm/glm/gtc/packing.hpp +579 -0
  964. data/ext/pixo/ext/glm/glm/gtc/packing.inl +781 -0
  965. data/ext/pixo/ext/glm/glm/gtc/quaternion.hpp +397 -0
  966. data/ext/pixo/ext/glm/glm/gtc/quaternion.inl +801 -0
  967. data/ext/pixo/ext/glm/glm/gtc/quaternion_simd.inl +198 -0
  968. data/ext/pixo/ext/glm/glm/gtc/random.hpp +98 -0
  969. data/ext/pixo/ext/glm/glm/gtc/random.inl +350 -0
  970. data/ext/pixo/ext/glm/glm/gtc/reciprocal.hpp +135 -0
  971. data/ext/pixo/ext/glm/glm/gtc/reciprocal.inl +192 -0
  972. data/ext/pixo/ext/glm/glm/gtc/round.hpp +174 -0
  973. data/ext/pixo/ext/glm/glm/gtc/round.inl +344 -0
  974. data/ext/pixo/ext/glm/glm/gtc/type_aligned.hpp +362 -0
  975. data/ext/pixo/ext/glm/glm/gtc/type_precision.hpp +861 -0
  976. data/ext/pixo/ext/glm/glm/gtc/type_precision.inl +7 -0
  977. data/ext/pixo/ext/glm/glm/gtc/type_ptr.hpp +149 -0
  978. data/ext/pixo/ext/glm/glm/gtc/type_ptr.inl +450 -0
  979. data/ext/pixo/ext/glm/glm/gtc/ulp.hpp +63 -0
  980. data/ext/pixo/ext/glm/glm/gtc/ulp.inl +321 -0
  981. data/ext/pixo/ext/glm/glm/gtc/vec1.hpp +164 -0
  982. data/ext/pixo/ext/glm/glm/gtc/vec1.inl +2 -0
  983. data/ext/pixo/ext/glm/glm/gtx/associated_min_max.hpp +202 -0
  984. data/ext/pixo/ext/glm/glm/gtx/associated_min_max.inl +355 -0
  985. data/ext/pixo/ext/glm/glm/gtx/bit.hpp +95 -0
  986. data/ext/pixo/ext/glm/glm/gtx/bit.inl +93 -0
  987. data/ext/pixo/ext/glm/glm/gtx/closest_point.hpp +45 -0
  988. data/ext/pixo/ext/glm/glm/gtx/closest_point.inl +46 -0
  989. data/ext/pixo/ext/glm/glm/gtx/color_space.hpp +68 -0
  990. data/ext/pixo/ext/glm/glm/gtx/color_space.inl +143 -0
  991. data/ext/pixo/ext/glm/glm/gtx/color_space_YCoCg.hpp +56 -0
  992. data/ext/pixo/ext/glm/glm/gtx/color_space_YCoCg.inl +108 -0
  993. data/ext/pixo/ext/glm/glm/gtx/common.hpp +53 -0
  994. data/ext/pixo/ext/glm/glm/gtx/common.inl +112 -0
  995. data/ext/pixo/ext/glm/glm/gtx/compatibility.hpp +130 -0
  996. data/ext/pixo/ext/glm/glm/gtx/compatibility.inl +65 -0
  997. data/ext/pixo/ext/glm/glm/gtx/component_wise.hpp +65 -0
  998. data/ext/pixo/ext/glm/glm/gtx/component_wise.inl +128 -0
  999. data/ext/pixo/ext/glm/glm/gtx/dual_quaternion.hpp +266 -0
  1000. data/ext/pixo/ext/glm/glm/gtx/dual_quaternion.inl +357 -0
  1001. data/ext/pixo/ext/glm/glm/gtx/euler_angles.hpp +143 -0
  1002. data/ext/pixo/ext/glm/glm/gtx/euler_angles.inl +312 -0
  1003. data/ext/pixo/ext/glm/glm/gtx/extend.hpp +38 -0
  1004. data/ext/pixo/ext/glm/glm/gtx/extend.inl +49 -0
  1005. data/ext/pixo/ext/glm/glm/gtx/extended_min_max.hpp +133 -0
  1006. data/ext/pixo/ext/glm/glm/gtx/extended_min_max.inl +140 -0
  1007. data/ext/pixo/ext/glm/glm/gtx/fast_exponential.hpp +91 -0
  1008. data/ext/pixo/ext/glm/glm/gtx/fast_exponential.inl +137 -0
  1009. data/ext/pixo/ext/glm/glm/gtx/fast_square_root.hpp +88 -0
  1010. data/ext/pixo/ext/glm/glm/gtx/fast_square_root.inl +81 -0
  1011. data/ext/pixo/ext/glm/glm/gtx/fast_trigonometry.hpp +75 -0
  1012. data/ext/pixo/ext/glm/glm/gtx/fast_trigonometry.inl +143 -0
  1013. data/ext/pixo/ext/glm/glm/gtx/float_notmalize.inl +14 -0
  1014. data/ext/pixo/ext/glm/glm/gtx/gradient_paint.hpp +48 -0
  1015. data/ext/pixo/ext/glm/glm/gtx/gradient_paint.inl +37 -0
  1016. data/ext/pixo/ext/glm/glm/gtx/handed_coordinate_space.hpp +46 -0
  1017. data/ext/pixo/ext/glm/glm/gtx/handed_coordinate_space.inl +27 -0
  1018. data/ext/pixo/ext/glm/glm/gtx/hash.hpp +134 -0
  1019. data/ext/pixo/ext/glm/glm/gtx/hash.inl +185 -0
  1020. data/ext/pixo/ext/glm/glm/gtx/integer.hpp +72 -0
  1021. data/ext/pixo/ext/glm/glm/gtx/integer.inl +182 -0
  1022. data/ext/pixo/ext/glm/glm/gtx/intersect.hpp +87 -0
  1023. data/ext/pixo/ext/glm/glm/gtx/intersect.inl +170 -0
  1024. data/ext/pixo/ext/glm/glm/gtx/io.hpp +197 -0
  1025. data/ext/pixo/ext/glm/glm/gtx/io.inl +441 -0
  1026. data/ext/pixo/ext/glm/glm/gtx/log_base.hpp +44 -0
  1027. data/ext/pixo/ext/glm/glm/gtx/log_base.inl +18 -0
  1028. data/ext/pixo/ext/glm/glm/gtx/matrix_cross_product.hpp +43 -0
  1029. data/ext/pixo/ext/glm/glm/gtx/matrix_cross_product.inl +38 -0
  1030. data/ext/pixo/ext/glm/glm/gtx/matrix_decompose.hpp +42 -0
  1031. data/ext/pixo/ext/glm/glm/gtx/matrix_decompose.inl +194 -0
  1032. data/ext/pixo/ext/glm/glm/gtx/matrix_interpolation.hpp +61 -0
  1033. data/ext/pixo/ext/glm/glm/gtx/matrix_interpolation.inl +134 -0
  1034. data/ext/pixo/ext/glm/glm/gtx/matrix_major_storage.hpp +115 -0
  1035. data/ext/pixo/ext/glm/glm/gtx/matrix_major_storage.inl +167 -0
  1036. data/ext/pixo/ext/glm/glm/gtx/matrix_operation.hpp +84 -0
  1037. data/ext/pixo/ext/glm/glm/gtx/matrix_operation.inl +118 -0
  1038. data/ext/pixo/ext/glm/glm/gtx/matrix_query.hpp +73 -0
  1039. data/ext/pixo/ext/glm/glm/gtx/matrix_query.inl +114 -0
  1040. data/ext/pixo/ext/glm/glm/gtx/matrix_transform_2d.hpp +78 -0
  1041. data/ext/pixo/ext/glm/glm/gtx/matrix_transform_2d.inl +69 -0
  1042. data/ext/pixo/ext/glm/glm/gtx/mixed_product.hpp +37 -0
  1043. data/ext/pixo/ext/glm/glm/gtx/mixed_product.inl +16 -0
  1044. data/ext/pixo/ext/glm/glm/gtx/norm.hpp +86 -0
  1045. data/ext/pixo/ext/glm/glm/gtx/norm.inl +106 -0
  1046. data/ext/pixo/ext/glm/glm/gtx/normal.hpp +39 -0
  1047. data/ext/pixo/ext/glm/glm/gtx/normal.inl +16 -0
  1048. data/ext/pixo/ext/glm/glm/gtx/normalize_dot.hpp +45 -0
  1049. data/ext/pixo/ext/glm/glm/gtx/normalize_dot.inl +17 -0
  1050. data/ext/pixo/ext/glm/glm/gtx/number_precision.hpp +57 -0
  1051. data/ext/pixo/ext/glm/glm/gtx/number_precision.inl +7 -0
  1052. data/ext/pixo/ext/glm/glm/gtx/optimum_pow.hpp +50 -0
  1053. data/ext/pixo/ext/glm/glm/gtx/optimum_pow.inl +23 -0
  1054. data/ext/pixo/ext/glm/glm/gtx/orthonormalize.hpp +45 -0
  1055. data/ext/pixo/ext/glm/glm/gtx/orthonormalize.inl +30 -0
  1056. data/ext/pixo/ext/glm/glm/gtx/perpendicular.hpp +39 -0
  1057. data/ext/pixo/ext/glm/glm/gtx/perpendicular.inl +15 -0
  1058. data/ext/pixo/ext/glm/glm/gtx/polar_coordinates.hpp +44 -0
  1059. data/ext/pixo/ext/glm/glm/gtx/polar_coordinates.inl +37 -0
  1060. data/ext/pixo/ext/glm/glm/gtx/projection.hpp +36 -0
  1061. data/ext/pixo/ext/glm/glm/gtx/projection.inl +11 -0
  1062. data/ext/pixo/ext/glm/glm/gtx/quaternion.hpp +185 -0
  1063. data/ext/pixo/ext/glm/glm/gtx/quaternion.inl +212 -0
  1064. data/ext/pixo/ext/glm/glm/gtx/range.hpp +85 -0
  1065. data/ext/pixo/ext/glm/glm/gtx/raw_data.hpp +47 -0
  1066. data/ext/pixo/ext/glm/glm/gtx/raw_data.inl +2 -0
  1067. data/ext/pixo/ext/glm/glm/gtx/rotate_normalized_axis.hpp +64 -0
  1068. data/ext/pixo/ext/glm/glm/gtx/rotate_normalized_axis.inl +59 -0
  1069. data/ext/pixo/ext/glm/glm/gtx/rotate_vector.hpp +117 -0
  1070. data/ext/pixo/ext/glm/glm/gtx/rotate_vector.inl +188 -0
  1071. data/ext/pixo/ext/glm/glm/gtx/scalar_multiplication.hpp +69 -0
  1072. data/ext/pixo/ext/glm/glm/gtx/scalar_relational.hpp +32 -0
  1073. data/ext/pixo/ext/glm/glm/gtx/scalar_relational.inl +89 -0
  1074. data/ext/pixo/ext/glm/glm/gtx/spline.hpp +61 -0
  1075. data/ext/pixo/ext/glm/glm/gtx/spline.inl +63 -0
  1076. data/ext/pixo/ext/glm/glm/gtx/std_based_type.hpp +63 -0
  1077. data/ext/pixo/ext/glm/glm/gtx/std_based_type.inl +7 -0
  1078. data/ext/pixo/ext/glm/glm/gtx/string_cast.hpp +47 -0
  1079. data/ext/pixo/ext/glm/glm/gtx/string_cast.inl +458 -0
  1080. data/ext/pixo/ext/glm/glm/gtx/transform.hpp +56 -0
  1081. data/ext/pixo/ext/glm/glm/gtx/transform.inl +24 -0
  1082. data/ext/pixo/ext/glm/glm/gtx/transform2.hpp +107 -0
  1083. data/ext/pixo/ext/glm/glm/gtx/transform2.inl +126 -0
  1084. data/ext/pixo/ext/glm/glm/gtx/type_aligned.hpp +966 -0
  1085. data/ext/pixo/ext/glm/glm/gtx/type_aligned.inl +7 -0
  1086. data/ext/pixo/ext/glm/glm/gtx/type_trait.hpp +252 -0
  1087. data/ext/pixo/ext/glm/glm/gtx/type_trait.inl +0 -0
  1088. data/ext/pixo/ext/glm/glm/gtx/vector_angle.hpp +60 -0
  1089. data/ext/pixo/ext/glm/glm/gtx/vector_angle.inl +58 -0
  1090. data/ext/pixo/ext/glm/glm/gtx/vector_query.hpp +62 -0
  1091. data/ext/pixo/ext/glm/glm/gtx/vector_query.inl +193 -0
  1092. data/ext/pixo/ext/glm/glm/gtx/wrap.hpp +51 -0
  1093. data/ext/pixo/ext/glm/glm/gtx/wrap.inl +58 -0
  1094. data/ext/pixo/ext/glm/glm/integer.hpp +6 -0
  1095. data/ext/pixo/ext/glm/glm/mat2x2.hpp +52 -0
  1096. data/ext/pixo/ext/glm/glm/mat2x3.hpp +32 -0
  1097. data/ext/pixo/ext/glm/glm/mat2x4.hpp +31 -0
  1098. data/ext/pixo/ext/glm/glm/mat3x2.hpp +31 -0
  1099. data/ext/pixo/ext/glm/glm/mat3x3.hpp +52 -0
  1100. data/ext/pixo/ext/glm/glm/mat3x4.hpp +31 -0
  1101. data/ext/pixo/ext/glm/glm/mat4x2.hpp +31 -0
  1102. data/ext/pixo/ext/glm/glm/mat4x3.hpp +31 -0
  1103. data/ext/pixo/ext/glm/glm/mat4x4.hpp +52 -0
  1104. data/ext/pixo/ext/glm/glm/matrix.hpp +6 -0
  1105. data/ext/pixo/ext/glm/glm/packing.hpp +6 -0
  1106. data/ext/pixo/ext/glm/glm/simd/common.h +240 -0
  1107. data/ext/pixo/ext/glm/glm/simd/exponential.h +20 -0
  1108. data/ext/pixo/ext/glm/glm/simd/geometric.h +124 -0
  1109. data/ext/pixo/ext/glm/glm/simd/integer.h +115 -0
  1110. data/ext/pixo/ext/glm/glm/simd/matrix.h +1028 -0
  1111. data/ext/pixo/ext/glm/glm/simd/packing.h +8 -0
  1112. data/ext/pixo/ext/glm/glm/simd/platform.h +437 -0
  1113. data/ext/pixo/ext/glm/glm/simd/trigonometric.h +9 -0
  1114. data/ext/pixo/ext/glm/glm/simd/vector_relational.h +8 -0
  1115. data/ext/pixo/ext/glm/glm/trigonometric.hpp +6 -0
  1116. data/ext/pixo/ext/glm/glm/vec2.hpp +6 -0
  1117. data/ext/pixo/ext/glm/glm/vec3.hpp +6 -0
  1118. data/ext/pixo/ext/glm/glm/vec4.hpp +6 -0
  1119. data/ext/pixo/ext/glm/glm/vector_relational.hpp +6 -0
  1120. data/ext/pixo/ext/glm/readme.md +962 -0
  1121. data/ext/pixo/ext/glm/test/CMakeLists.txt +17 -0
  1122. data/ext/pixo/ext/glm/test/bug/CMakeLists.txt +0 -0
  1123. data/ext/pixo/ext/glm/test/core/CMakeLists.txt +38 -0
  1124. data/ext/pixo/ext/glm/test/core/core_func_common.cpp +1272 -0
  1125. data/ext/pixo/ext/glm/test/core/core_func_exponential.cpp +128 -0
  1126. data/ext/pixo/ext/glm/test/core/core_func_geometric.cpp +193 -0
  1127. data/ext/pixo/ext/glm/test/core/core_func_integer.cpp +1554 -0
  1128. data/ext/pixo/ext/glm/test/core/core_func_integer_bit_count.cpp +291 -0
  1129. data/ext/pixo/ext/glm/test/core/core_func_integer_find_lsb.cpp +400 -0
  1130. data/ext/pixo/ext/glm/test/core/core_func_integer_find_msb.cpp +438 -0
  1131. data/ext/pixo/ext/glm/test/core/core_func_matrix.cpp +277 -0
  1132. data/ext/pixo/ext/glm/test/core/core_func_noise.cpp +7 -0
  1133. data/ext/pixo/ext/glm/test/core/core_func_packing.cpp +156 -0
  1134. data/ext/pixo/ext/glm/test/core/core_func_swizzle.cpp +78 -0
  1135. data/ext/pixo/ext/glm/test/core/core_func_trigonometric.cpp +10 -0
  1136. data/ext/pixo/ext/glm/test/core/core_func_vector_relational.cpp +42 -0
  1137. data/ext/pixo/ext/glm/test/core/core_setup_force_cxx98.cpp +10 -0
  1138. data/ext/pixo/ext/glm/test/core/core_setup_message.cpp +263 -0
  1139. data/ext/pixo/ext/glm/test/core/core_setup_precision.cpp +58 -0
  1140. data/ext/pixo/ext/glm/test/core/core_type_aligned.cpp +128 -0
  1141. data/ext/pixo/ext/glm/test/core/core_type_cast.cpp +144 -0
  1142. data/ext/pixo/ext/glm/test/core/core_type_ctor.cpp +358 -0
  1143. data/ext/pixo/ext/glm/test/core/core_type_float.cpp +31 -0
  1144. data/ext/pixo/ext/glm/test/core/core_type_int.cpp +43 -0
  1145. data/ext/pixo/ext/glm/test/core/core_type_length.cpp +79 -0
  1146. data/ext/pixo/ext/glm/test/core/core_type_mat2x2.cpp +145 -0
  1147. data/ext/pixo/ext/glm/test/core/core_type_mat2x3.cpp +118 -0
  1148. data/ext/pixo/ext/glm/test/core/core_type_mat2x4.cpp +121 -0
  1149. data/ext/pixo/ext/glm/test/core/core_type_mat3x2.cpp +124 -0
  1150. data/ext/pixo/ext/glm/test/core/core_type_mat3x3.cpp +184 -0
  1151. data/ext/pixo/ext/glm/test/core/core_type_mat3x4.cpp +123 -0
  1152. data/ext/pixo/ext/glm/test/core/core_type_mat4x2.cpp +127 -0
  1153. data/ext/pixo/ext/glm/test/core/core_type_mat4x3.cpp +128 -0
  1154. data/ext/pixo/ext/glm/test/core/core_type_mat4x4.cpp +313 -0
  1155. data/ext/pixo/ext/glm/test/core/core_type_vec1.cpp +147 -0
  1156. data/ext/pixo/ext/glm/test/core/core_type_vec2.cpp +312 -0
  1157. data/ext/pixo/ext/glm/test/core/core_type_vec3.cpp +486 -0
  1158. data/ext/pixo/ext/glm/test/core/core_type_vec4.cpp +559 -0
  1159. data/ext/pixo/ext/glm/test/external/gli/CMakeLists.txt +27 -0
  1160. data/ext/pixo/ext/glm/test/external/gli/core/dummy.cpp +4 -0
  1161. data/ext/pixo/ext/glm/test/external/gli/core/generate_mipmaps.hpp +25 -0
  1162. data/ext/pixo/ext/glm/test/external/gli/core/generate_mipmaps.inl +69 -0
  1163. data/ext/pixo/ext/glm/test/external/gli/core/image2d.hpp +169 -0
  1164. data/ext/pixo/ext/glm/test/external/gli/core/image2d.inl +229 -0
  1165. data/ext/pixo/ext/glm/test/external/gli/core/operation.hpp +82 -0
  1166. data/ext/pixo/ext/glm/test/external/gli/core/operation.inl +233 -0
  1167. data/ext/pixo/ext/glm/test/external/gli/core/operator.hpp +28 -0
  1168. data/ext/pixo/ext/glm/test/external/gli/core/operator.inl +210 -0
  1169. data/ext/pixo/ext/glm/test/external/gli/core/shared_array.hpp +48 -0
  1170. data/ext/pixo/ext/glm/test/external/gli/core/shared_array.inl +151 -0
  1171. data/ext/pixo/ext/glm/test/external/gli/core/shared_ptr.hpp +41 -0
  1172. data/ext/pixo/ext/glm/test/external/gli/core/shared_ptr.inl +125 -0
  1173. data/ext/pixo/ext/glm/test/external/gli/core/size.hpp +31 -0
  1174. data/ext/pixo/ext/glm/test/external/gli/core/size.inl +47 -0
  1175. data/ext/pixo/ext/glm/test/external/gli/core/texture2d.hpp +122 -0
  1176. data/ext/pixo/ext/glm/test/external/gli/core/texture2d.inl +304 -0
  1177. data/ext/pixo/ext/glm/test/external/gli/core/texture2d_array.hpp +59 -0
  1178. data/ext/pixo/ext/glm/test/external/gli/core/texture2d_array.inl +78 -0
  1179. data/ext/pixo/ext/glm/test/external/gli/core/texture_cube.hpp +65 -0
  1180. data/ext/pixo/ext/glm/test/external/gli/core/texture_cube.inl +70 -0
  1181. data/ext/pixo/ext/glm/test/external/gli/core/texture_cube_array.hpp +59 -0
  1182. data/ext/pixo/ext/glm/test/external/gli/core/texture_cube_array.inl +72 -0
  1183. data/ext/pixo/ext/glm/test/external/gli/gli.hpp +31 -0
  1184. data/ext/pixo/ext/glm/test/external/gli/gtx/compression.hpp +27 -0
  1185. data/ext/pixo/ext/glm/test/external/gli/gtx/compression.inl +8 -0
  1186. data/ext/pixo/ext/glm/test/external/gli/gtx/fetch.hpp +46 -0
  1187. data/ext/pixo/ext/glm/test/external/gli/gtx/fetch.inl +91 -0
  1188. data/ext/pixo/ext/glm/test/external/gli/gtx/gl_texture2d.hpp +33 -0
  1189. data/ext/pixo/ext/glm/test/external/gli/gtx/gl_texture2d.inl +210 -0
  1190. data/ext/pixo/ext/glm/test/external/gli/gtx/gradient.hpp +38 -0
  1191. data/ext/pixo/ext/glm/test/external/gli/gtx/gradient.inl +74 -0
  1192. data/ext/pixo/ext/glm/test/external/gli/gtx/loader.hpp +37 -0
  1193. data/ext/pixo/ext/glm/test/external/gli/gtx/loader.inl +46 -0
  1194. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_dds10.hpp +35 -0
  1195. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_dds10.inl +595 -0
  1196. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_dds9.hpp +39 -0
  1197. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_dds9.inl +790 -0
  1198. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_tga.hpp +36 -0
  1199. data/ext/pixo/ext/glm/test/external/gli/gtx/loader_tga.inl +159 -0
  1200. data/ext/pixo/ext/glm/test/external/gli/gtx/wavelet.hpp +27 -0
  1201. data/ext/pixo/ext/glm/test/external/gli/gtx/wavelet.inl +8 -0
  1202. data/ext/pixo/ext/glm/test/glm.cppcheck +6 -0
  1203. data/ext/pixo/ext/glm/test/gtc/CMakeLists.txt +22 -0
  1204. data/ext/pixo/ext/glm/test/gtc/gtc_bitfield.cpp +642 -0
  1205. data/ext/pixo/ext/glm/test/gtc/gtc_color_encoding.cpp +51 -0
  1206. data/ext/pixo/ext/glm/test/gtc/gtc_color_space.cpp +50 -0
  1207. data/ext/pixo/ext/glm/test/gtc/gtc_constants.cpp +28 -0
  1208. data/ext/pixo/ext/glm/test/gtc/gtc_epsilon.cpp +77 -0
  1209. data/ext/pixo/ext/glm/test/gtc/gtc_functions.cpp +35 -0
  1210. data/ext/pixo/ext/glm/test/gtc/gtc_integer.cpp +232 -0
  1211. data/ext/pixo/ext/glm/test/gtc/gtc_matrix_access.cpp +381 -0
  1212. data/ext/pixo/ext/glm/test/gtc/gtc_matrix_integer.cpp +8 -0
  1213. data/ext/pixo/ext/glm/test/gtc/gtc_matrix_inverse.cpp +51 -0
  1214. data/ext/pixo/ext/glm/test/gtc/gtc_matrix_transform.cpp +54 -0
  1215. data/ext/pixo/ext/glm/test/gtc/gtc_noise.cpp +188 -0
  1216. data/ext/pixo/ext/glm/test/gtc/gtc_packing.cpp +682 -0
  1217. data/ext/pixo/ext/glm/test/gtc/gtc_quaternion.cpp +312 -0
  1218. data/ext/pixo/ext/glm/test/gtc/gtc_random.cpp +377 -0
  1219. data/ext/pixo/ext/glm/test/gtc/gtc_reciprocal.cpp +8 -0
  1220. data/ext/pixo/ext/glm/test/gtc/gtc_round.cpp +458 -0
  1221. data/ext/pixo/ext/glm/test/gtc/gtc_type_aligned.cpp +118 -0
  1222. data/ext/pixo/ext/glm/test/gtc/gtc_type_precision.cpp +890 -0
  1223. data/ext/pixo/ext/glm/test/gtc/gtc_type_ptr.cpp +252 -0
  1224. data/ext/pixo/ext/glm/test/gtc/gtc_ulp.cpp +96 -0
  1225. data/ext/pixo/ext/glm/test/gtc/gtc_user_defined_types.cpp +30 -0
  1226. data/ext/pixo/ext/glm/test/gtc/gtc_vec1.cpp +8 -0
  1227. data/ext/pixo/ext/glm/test/gtx/CMakeLists.txt +49 -0
  1228. data/ext/pixo/ext/glm/test/gtx/gtx_associated_min_max.cpp +9 -0
  1229. data/ext/pixo/ext/glm/test/gtx/gtx_closest_point.cpp +8 -0
  1230. data/ext/pixo/ext/glm/test/gtx/gtx_color_space.cpp +19 -0
  1231. data/ext/pixo/ext/glm/test/gtx/gtx_color_space_YCoCg.cpp +8 -0
  1232. data/ext/pixo/ext/glm/test/gtx/gtx_common.cpp +127 -0
  1233. data/ext/pixo/ext/glm/test/gtx/gtx_compatibility.cpp +18 -0
  1234. data/ext/pixo/ext/glm/test/gtx/gtx_component_wise.cpp +115 -0
  1235. data/ext/pixo/ext/glm/test/gtx/gtx_dual_quaternion.cpp +188 -0
  1236. data/ext/pixo/ext/glm/test/gtx/gtx_euler_angle.cpp +328 -0
  1237. data/ext/pixo/ext/glm/test/gtx/gtx_extend.cpp +8 -0
  1238. data/ext/pixo/ext/glm/test/gtx/gtx_extended_min_max.cpp +8 -0
  1239. data/ext/pixo/ext/glm/test/gtx/gtx_extented_min_max.cpp +39 -0
  1240. data/ext/pixo/ext/glm/test/gtx/gtx_fast_exponential.cpp +8 -0
  1241. data/ext/pixo/ext/glm/test/gtx/gtx_fast_square_root.cpp +45 -0
  1242. data/ext/pixo/ext/glm/test/gtx/gtx_fast_trigonometry.cpp +445 -0
  1243. data/ext/pixo/ext/glm/test/gtx/gtx_gradient_paint.cpp +33 -0
  1244. data/ext/pixo/ext/glm/test/gtx/gtx_handed_coordinate_space.cpp +8 -0
  1245. data/ext/pixo/ext/glm/test/gtx/gtx_int_10_10_10_2.cpp +18 -0
  1246. data/ext/pixo/ext/glm/test/gtx/gtx_integer.cpp +64 -0
  1247. data/ext/pixo/ext/glm/test/gtx/gtx_intersect.cpp +8 -0
  1248. data/ext/pixo/ext/glm/test/gtx/gtx_io.cpp +175 -0
  1249. data/ext/pixo/ext/glm/test/gtx/gtx_log_base.cpp +53 -0
  1250. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_cross_product.cpp +8 -0
  1251. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_decompose.cpp +18 -0
  1252. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_interpolation.cpp +10 -0
  1253. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_major_storage.cpp +8 -0
  1254. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_operation.cpp +8 -0
  1255. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_query.cpp +65 -0
  1256. data/ext/pixo/ext/glm/test/gtx/gtx_matrix_transform_2d.cpp +8 -0
  1257. data/ext/pixo/ext/glm/test/gtx/gtx_mixed_product.cpp +18 -0
  1258. data/ext/pixo/ext/glm/test/gtx/gtx_norm.cpp +8 -0
  1259. data/ext/pixo/ext/glm/test/gtx/gtx_normal.cpp +8 -0
  1260. data/ext/pixo/ext/glm/test/gtx/gtx_normalize_dot.cpp +8 -0
  1261. data/ext/pixo/ext/glm/test/gtx/gtx_number_precision.cpp +8 -0
  1262. data/ext/pixo/ext/glm/test/gtx/gtx_optimum_pow.cpp +8 -0
  1263. data/ext/pixo/ext/glm/test/gtx/gtx_orthonormalize.cpp +8 -0
  1264. data/ext/pixo/ext/glm/test/gtx/gtx_perpendicular.cpp +8 -0
  1265. data/ext/pixo/ext/glm/test/gtx/gtx_polar_coordinates.cpp +8 -0
  1266. data/ext/pixo/ext/glm/test/gtx/gtx_projection.cpp +8 -0
  1267. data/ext/pixo/ext/glm/test/gtx/gtx_quaternion.cpp +102 -0
  1268. data/ext/pixo/ext/glm/test/gtx/gtx_random.cpp +99 -0
  1269. data/ext/pixo/ext/glm/test/gtx/gtx_range.cpp +52 -0
  1270. data/ext/pixo/ext/glm/test/gtx/gtx_rotate_normalized_axis.cpp +8 -0
  1271. data/ext/pixo/ext/glm/test/gtx/gtx_rotate_vector.cpp +75 -0
  1272. data/ext/pixo/ext/glm/test/gtx/gtx_scalar_multiplication.cpp +34 -0
  1273. data/ext/pixo/ext/glm/test/gtx/gtx_scalar_relational.cpp +170 -0
  1274. data/ext/pixo/ext/glm/test/gtx/gtx_simd_mat4.cpp +324 -0
  1275. data/ext/pixo/ext/glm/test/gtx/gtx_simd_vec4.cpp +71 -0
  1276. data/ext/pixo/ext/glm/test/gtx/gtx_spline.cpp +99 -0
  1277. data/ext/pixo/ext/glm/test/gtx/gtx_string_cast.cpp +128 -0
  1278. data/ext/pixo/ext/glm/test/gtx/gtx_type_aligned.cpp +113 -0
  1279. data/ext/pixo/ext/glm/test/gtx/gtx_type_trait.cpp +12 -0
  1280. data/ext/pixo/ext/glm/test/gtx/gtx_vector_angle.cpp +58 -0
  1281. data/ext/pixo/ext/glm/test/gtx/gtx_vector_query.cpp +81 -0
  1282. data/ext/pixo/ext/glm/test/gtx/gtx_wrap.cpp +189 -0
  1283. data/ext/pixo/ext/glm/util/autoexp.txt +28 -0
  1284. data/ext/pixo/ext/glm/util/autoexp.vc2010.dat +3896 -0
  1285. data/ext/pixo/ext/glm/util/glm.natvis +69 -0
  1286. data/ext/pixo/ext/glm/util/usertype.dat +407 -0
  1287. data/ext/pixo/ext/tinyobjloader/CMakeLists.txt +146 -0
  1288. data/ext/pixo/ext/tinyobjloader/LICENSE +21 -0
  1289. data/ext/pixo/ext/tinyobjloader/README.md +254 -0
  1290. data/ext/pixo/ext/tinyobjloader/appveyor.yml +22 -0
  1291. data/ext/pixo/ext/tinyobjloader/build.ninja +53 -0
  1292. data/ext/pixo/ext/tinyobjloader/deps/cpplint.py +6323 -0
  1293. data/ext/pixo/ext/tinyobjloader/examples/callback_api/Makefile +2 -0
  1294. data/ext/pixo/ext/tinyobjloader/examples/callback_api/main.cc +166 -0
  1295. data/ext/pixo/ext/tinyobjloader/examples/obj_sticher/obj_sticher.cc +110 -0
  1296. data/ext/pixo/ext/tinyobjloader/examples/obj_sticher/obj_writer.cc +176 -0
  1297. data/ext/pixo/ext/tinyobjloader/examples/obj_sticher/obj_writer.h +9 -0
  1298. data/ext/pixo/ext/tinyobjloader/examples/obj_sticher/premake4.lua +38 -0
  1299. data/ext/pixo/ext/tinyobjloader/examples/viewer/README.md +37 -0
  1300. data/ext/pixo/ext/tinyobjloader/examples/viewer/premake4.lua +44 -0
  1301. data/ext/pixo/ext/tinyobjloader/examples/viewer/stb_image.h +6755 -0
  1302. data/ext/pixo/ext/tinyobjloader/examples/viewer/trackball.cc +292 -0
  1303. data/ext/pixo/ext/tinyobjloader/examples/viewer/trackball.h +75 -0
  1304. data/ext/pixo/ext/tinyobjloader/examples/viewer/viewer.cc +698 -0
  1305. data/ext/pixo/ext/tinyobjloader/examples/voxelize/Makefile +2 -0
  1306. data/ext/pixo/ext/tinyobjloader/examples/voxelize/README.md +5 -0
  1307. data/ext/pixo/ext/tinyobjloader/examples/voxelize/main.cc +74 -0
  1308. data/ext/pixo/ext/tinyobjloader/examples/voxelize/voxelizer.h +764 -0
  1309. data/ext/pixo/ext/tinyobjloader/experimental/LICENSE.ltalloc +26 -0
  1310. data/ext/pixo/ext/tinyobjloader/experimental/README.md +5 -0
  1311. data/ext/pixo/ext/tinyobjloader/experimental/ltalloc.cc +973 -0
  1312. data/ext/pixo/ext/tinyobjloader/experimental/ltalloc.h +14 -0
  1313. data/ext/pixo/ext/tinyobjloader/experimental/ltalloc.hpp +59 -0
  1314. data/ext/pixo/ext/tinyobjloader/experimental/premake5.lua +95 -0
  1315. data/ext/pixo/ext/tinyobjloader/experimental/tinyobj_loader_opt.h +1678 -0
  1316. data/ext/pixo/ext/tinyobjloader/experimental/trackball.cc +292 -0
  1317. data/ext/pixo/ext/tinyobjloader/experimental/trackball.h +75 -0
  1318. data/ext/pixo/ext/tinyobjloader/experimental/viewer.cc +748 -0
  1319. data/ext/pixo/ext/tinyobjloader/images/rungholt.jpg +0 -0
  1320. data/ext/pixo/ext/tinyobjloader/images/sanmugel.png +0 -0
  1321. data/ext/pixo/ext/tinyobjloader/jni/Android.mk +12 -0
  1322. data/ext/pixo/ext/tinyobjloader/jni/Application.mk +2 -0
  1323. data/ext/pixo/ext/tinyobjloader/jni/Makefile +2 -0
  1324. data/ext/pixo/ext/tinyobjloader/jni/README +1 -0
  1325. data/ext/pixo/ext/tinyobjloader/loader_example.cc +419 -0
  1326. data/ext/pixo/ext/tinyobjloader/models/catmark_torus_creases0.obj +101 -0
  1327. data/ext/pixo/ext/tinyobjloader/models/cornell_box.mtl +24 -0
  1328. data/ext/pixo/ext/tinyobjloader/models/cornell_box.obj +145 -0
  1329. data/ext/pixo/ext/tinyobjloader/models/cornell_box_multimaterial.obj +146 -0
  1330. data/ext/pixo/ext/tinyobjloader/models/cube.mtl +24 -0
  1331. data/ext/pixo/ext/tinyobjloader/models/cube.obj +31 -0
  1332. data/ext/pixo/ext/tinyobjloader/models/issue-92.mtl +6 -0
  1333. data/ext/pixo/ext/tinyobjloader/models/issue-92.obj +7 -0
  1334. data/ext/pixo/ext/tinyobjloader/models/issue-95-2.mtl +5 -0
  1335. data/ext/pixo/ext/tinyobjloader/models/issue-95-2.obj +7 -0
  1336. data/ext/pixo/ext/tinyobjloader/models/issue-95.mtl +5 -0
  1337. data/ext/pixo/ext/tinyobjloader/models/issue-95.obj +7 -0
  1338. data/ext/pixo/ext/tinyobjloader/models/missing_material_file.obj +145 -0
  1339. data/ext/pixo/ext/tinyobjloader/models/mtllib-multiple-files-issue-112.mtl +6 -0
  1340. data/ext/pixo/ext/tinyobjloader/models/mtllib-multiple-files-issue-112.obj +7 -0
  1341. data/ext/pixo/ext/tinyobjloader/models/no_material.obj +133 -0
  1342. data/ext/pixo/ext/tinyobjloader/models/pbr-mat-ext.mtl +19 -0
  1343. data/ext/pixo/ext/tinyobjloader/models/pbr-mat-ext.obj +10 -0
  1344. data/ext/pixo/ext/tinyobjloader/models/test-nan.obj +145 -0
  1345. data/ext/pixo/ext/tinyobjloader/models/texture-options-issue-85.mtl +36 -0
  1346. data/ext/pixo/ext/tinyobjloader/models/texture-options-issue-85.obj +7 -0
  1347. data/ext/pixo/ext/tinyobjloader/models/tr-and-d-issue-43.mtl +13 -0
  1348. data/ext/pixo/ext/tinyobjloader/models/tr-and-d-issue-43.obj +817 -0
  1349. data/ext/pixo/ext/tinyobjloader/models/usemtl-issue-104.obj +30 -0
  1350. data/ext/pixo/ext/tinyobjloader/models/usemtl-issue-68.mtl +9 -0
  1351. data/ext/pixo/ext/tinyobjloader/models/usemtl-issue-68.obj +817 -0
  1352. data/ext/pixo/ext/tinyobjloader/premake4.lua +29 -0
  1353. data/ext/pixo/ext/tinyobjloader/python/TODO.md +2 -0
  1354. data/ext/pixo/ext/tinyobjloader/python/cornell_box_multimaterial_output.json +581 -0
  1355. data/ext/pixo/ext/tinyobjloader/python/howto.py +9 -0
  1356. data/ext/pixo/ext/tinyobjloader/python/main.cpp +203 -0
  1357. data/ext/pixo/ext/tinyobjloader/python/setup.py +13 -0
  1358. data/ext/pixo/ext/tinyobjloader/tests/Makefile +16 -0
  1359. data/ext/pixo/ext/tinyobjloader/tests/README.md +37 -0
  1360. data/ext/pixo/ext/tinyobjloader/tests/catch.hpp +10445 -0
  1361. data/ext/pixo/ext/tinyobjloader/tests/config-msvc.py +52 -0
  1362. data/ext/pixo/ext/tinyobjloader/tests/config-posix.py +53 -0
  1363. data/ext/pixo/ext/tinyobjloader/tests/kuroga.py +312 -0
  1364. data/ext/pixo/ext/tinyobjloader/tests/tester.cc +588 -0
  1365. data/ext/pixo/ext/tinyobjloader/tests/vcbuild.bat +4 -0
  1366. data/ext/pixo/ext/tinyobjloader/tiny_obj_loader.cc +2 -0
  1367. data/ext/pixo/ext/tinyobjloader/tiny_obj_loader.h +2029 -0
  1368. data/ext/pixo/ext/tinyobjloader/tinyobjloader-config.cmake.in +9 -0
  1369. data/ext/pixo/ext/tinyobjloader/tinyobjloader.pc.in +15 -0
  1370. data/ext/pixo/ext/tinyobjloader/tools/travis_postbuild.sh +12 -0
  1371. data/ext/pixo/ext/tinyobjloader/tools/windows/premake5.exe +0 -0
  1372. data/ext/pixo/ext/tinyobjloader/vcsetup.bat +1 -0
  1373. data/ext/pixo/ext/tinyobjloader/wercker.yml +10 -0
  1374. data/ext/pixo/fadecandy_configs/4x4x4.json +21 -0
  1375. data/ext/pixo/fadecandy_configs/8x8x8.json +18 -0
  1376. data/ext/pixo/patterns/basic.glsl +20 -0
  1377. data/ext/pixo/patterns/bendy_pipes.glsl +116 -0
  1378. data/ext/pixo/patterns/blades.glsl +69 -0
  1379. data/ext/pixo/patterns/blob_neon.glsl +71 -0
  1380. data/ext/pixo/patterns/bubbles.glsl +58 -0
  1381. data/ext/pixo/patterns/chevron.glsl +45 -0
  1382. data/ext/pixo/patterns/clouds.glsl +382 -0
  1383. data/ext/pixo/patterns/cnoise.glsl +162 -0
  1384. data/ext/pixo/patterns/corrente_continua.glsl +51 -0
  1385. data/ext/pixo/patterns/drain.glsl +32 -0
  1386. data/ext/pixo/patterns/dual_spiral.glsl +21 -0
  1387. data/ext/pixo/patterns/ether.glsl +35 -0
  1388. data/ext/pixo/patterns/fire.glsl +56 -0
  1389. data/ext/pixo/patterns/fireball.glsl +229 -0
  1390. data/ext/pixo/patterns/flame.glsl +101 -0
  1391. data/ext/pixo/patterns/flower.glsl +27 -0
  1392. data/ext/pixo/patterns/galaxy.glsl +50 -0
  1393. data/ext/pixo/patterns/goop.glsl +117 -0
  1394. data/ext/pixo/patterns/hypno_rings.glsl +13 -0
  1395. data/ext/pixo/patterns/lightning.glsl +111 -0
  1396. data/ext/pixo/patterns/paint.glsl +39 -0
  1397. data/ext/pixo/patterns/plad.glsl +22 -0
  1398. data/ext/pixo/patterns/plasam.glsl +30 -0
  1399. data/ext/pixo/patterns/plasma_globe.glsl +215 -0
  1400. data/ext/pixo/patterns/pulse.glsl +44 -0
  1401. data/ext/pixo/patterns/pulsing_circles.glsl +32 -0
  1402. data/ext/pixo/patterns/rainbow_ribbon.glsl +41 -0
  1403. data/ext/pixo/patterns/rings.glsl +62 -0
  1404. data/ext/pixo/patterns/sauron.glsl +220 -0
  1405. data/ext/pixo/patterns/scales.glsl +64 -0
  1406. data/ext/pixo/patterns/soccer.glsl +737 -0
  1407. data/ext/pixo/patterns/spherical_polyhedra.glsl +251 -0
  1408. data/ext/pixo/patterns/spiral.glsl +23 -0
  1409. data/ext/pixo/patterns/star.glsl +518 -0
  1410. data/ext/pixo/patterns/tiedy.glsl +39 -0
  1411. data/ext/pixo/patterns/tunnel.glsl +145 -0
  1412. data/ext/pixo/patterns/warping_grid.glsl +50 -0
  1413. data/ext/pixo/pixlib/CMakeLists.txt +34 -0
  1414. data/ext/pixo/pixlib/include/opc_client.h +205 -0
  1415. data/ext/pixo/pixlib/include/pixlib/app.hpp +41 -0
  1416. data/ext/pixo/pixlib/include/pixlib/camera.hpp +78 -0
  1417. data/ext/pixo/pixlib/include/pixlib/cube.hpp +46 -0
  1418. data/ext/pixo/pixlib/include/pixlib/drawable.hpp +11 -0
  1419. data/ext/pixo/pixlib/include/pixlib/fade_candy.hpp +38 -0
  1420. data/ext/pixo/pixlib/include/pixlib/led_cluster.hpp +58 -0
  1421. data/ext/pixo/pixlib/include/pixlib/led_mesh.hpp +60 -0
  1422. data/ext/pixo/pixlib/include/pixlib/led_renderer.hpp +36 -0
  1423. data/ext/pixo/pixlib/include/pixlib/mesh.hpp +56 -0
  1424. data/ext/pixo/pixlib/include/pixlib/pattern.hpp +21 -0
  1425. data/ext/pixo/pixlib/include/pixlib/pattern_renderer.hpp +28 -0
  1426. data/ext/pixo/pixlib/include/pixlib/renderer.hpp +32 -0
  1427. data/ext/pixo/pixlib/include/pixlib/scene.hpp +39 -0
  1428. data/ext/pixo/pixlib/include/pixlib/shader.hpp +19 -0
  1429. data/ext/pixo/pixlib/include/pixlib/texture.hpp +34 -0
  1430. data/ext/pixo/pixlib/include/pixlib/timer.hpp +19 -0
  1431. data/ext/pixo/pixlib/include/pixlib.hpp +6 -0
  1432. data/ext/pixo/pixlib/src/app.cpp +59 -0
  1433. data/ext/pixo/pixlib/src/camera.cpp +106 -0
  1434. data/ext/pixo/pixlib/src/cube.cpp +100 -0
  1435. data/ext/pixo/pixlib/src/fade_candy.cpp +70 -0
  1436. data/ext/pixo/pixlib/src/led_cluster.cpp +78 -0
  1437. data/ext/pixo/pixlib/src/led_mesh.cpp +123 -0
  1438. data/ext/pixo/pixlib/src/led_renderer.cpp +135 -0
  1439. data/ext/pixo/pixlib/src/mesh.cpp +146 -0
  1440. data/ext/pixo/pixlib/src/pattern.cpp +32 -0
  1441. data/ext/pixo/pixlib/src/pattern_renderer.cpp +103 -0
  1442. data/ext/pixo/pixlib/src/renderer.cpp +127 -0
  1443. data/ext/pixo/pixlib/src/scene.cpp +52 -0
  1444. data/ext/pixo/pixlib/src/shader.cpp +59 -0
  1445. data/ext/pixo/pixlib/src/texture.cpp +62 -0
  1446. data/ext/pixo/pixlib/src/timer.cpp +39 -0
  1447. data/ext/pixo/src/CMakeLists.txt +14 -0
  1448. data/ext/pixo/src/main.cpp +244 -0
  1449. data/ext/pixo/src/opengl.h +4 -0
  1450. data/lib/pixo/version.rb +3 -0
  1451. data/lib/pixo.rb +7 -0
  1452. data/pixo.gemspec +34 -0
  1453. data/pkg/pixo-0.1.0.gem +0 -0
  1454. metadata +1539 -0
@@ -0,0 +1,1678 @@
1
+ //
2
+ // Optimized wavefront .obj loader.
3
+ // Requires ltalloc and C++11
4
+ //
5
+
6
+ /*
7
+ The MIT License (MIT)
8
+
9
+ Copyright (c) 2012-2016 Syoyo Fujita and many contributors.
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in
19
+ all copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
27
+ THE SOFTWARE.
28
+ */
29
+ #ifndef TINOBJ_LOADER_OPT_H_
30
+ #define TINOBJ_LOADER_OPT_H_
31
+
32
+ #ifdef _WIN32
33
+ #define atoll(S) _atoi64(S)
34
+ #include <windows.h>
35
+ #else
36
+ #include <fcntl.h>
37
+ #include <sys/mman.h>
38
+ #include <sys/stat.h>
39
+ #include <sys/types.h>
40
+ #include <unistd.h>
41
+ #include <unistd.h>
42
+ #endif
43
+
44
+ #include <cassert>
45
+ #include <cmath>
46
+ #include <cstdio>
47
+ #include <cstdlib>
48
+ #include <cstring>
49
+ #include <fstream>
50
+ #include <iostream>
51
+ #include <map>
52
+ #include <vector>
53
+
54
+ #include <atomic> // C++11
55
+ #include <chrono> // C++11
56
+ #include <thread> // C++11
57
+
58
+ #include "ltalloc.hpp"
59
+
60
+ namespace tinyobj_opt {
61
+
62
+ // ----------------------------------------------------------------------------
63
+ // Small vector class useful for multi-threaded environment.
64
+ //
65
+ // stack_container.h
66
+ //
67
+ // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
68
+ // Use of this source code is governed by a BSD-style license that can be
69
+ // found in the LICENSE file.
70
+
71
+ // This allocator can be used with STL containers to provide a stack buffer
72
+ // from which to allocate memory and overflows onto the heap. This stack buffer
73
+ // would be allocated on the stack and allows us to avoid heap operations in
74
+ // some situations.
75
+ //
76
+ // STL likes to make copies of allocators, so the allocator itself can't hold
77
+ // the data. Instead, we make the creator responsible for creating a
78
+ // StackAllocator::Source which contains the data. Copying the allocator
79
+ // merely copies the pointer to this shared source, so all allocators created
80
+ // based on our allocator will share the same stack buffer.
81
+ //
82
+ // This stack buffer implementation is very simple. The first allocation that
83
+ // fits in the stack buffer will use the stack buffer. Any subsequent
84
+ // allocations will not use the stack buffer, even if there is unused room.
85
+ // This makes it appropriate for array-like containers, but the caller should
86
+ // be sure to reserve() in the container up to the stack buffer size. Otherwise
87
+ // the container will allocate a small array which will "use up" the stack
88
+ // buffer.
89
+ template <typename T, size_t stack_capacity>
90
+ class StackAllocator : public std::allocator<T> {
91
+ public:
92
+ typedef typename std::allocator<T>::pointer pointer;
93
+ typedef typename std::allocator<T>::size_type size_type;
94
+
95
+ // Backing store for the allocator. The container owner is responsible for
96
+ // maintaining this for as long as any containers using this allocator are
97
+ // live.
98
+ struct Source {
99
+ Source() : used_stack_buffer_(false) {}
100
+
101
+ // Casts the buffer in its right type.
102
+ T *stack_buffer() { return reinterpret_cast<T *>(stack_buffer_); }
103
+ const T *stack_buffer() const {
104
+ return reinterpret_cast<const T *>(stack_buffer_);
105
+ }
106
+
107
+ //
108
+ // IMPORTANT: Take care to ensure that stack_buffer_ is aligned
109
+ // since it is used to mimic an array of T.
110
+ // Be careful while declaring any unaligned types (like bool)
111
+ // before stack_buffer_.
112
+ //
113
+
114
+ // The buffer itself. It is not of type T because we don't want the
115
+ // constructors and destructors to be automatically called. Define a POD
116
+ // buffer of the right size instead.
117
+ char stack_buffer_[sizeof(T[stack_capacity])];
118
+
119
+ // Set when the stack buffer is used for an allocation. We do not track
120
+ // how much of the buffer is used, only that somebody is using it.
121
+ bool used_stack_buffer_;
122
+ };
123
+
124
+ // Used by containers when they want to refer to an allocator of type U.
125
+ template <typename U>
126
+ struct rebind {
127
+ typedef StackAllocator<U, stack_capacity> other;
128
+ };
129
+
130
+ // For the straight up copy c-tor, we can share storage.
131
+ StackAllocator(const StackAllocator<T, stack_capacity> &rhs)
132
+ : source_(rhs.source_) {}
133
+
134
+ // ISO C++ requires the following constructor to be defined,
135
+ // and std::vector in VC++2008SP1 Release fails with an error
136
+ // in the class _Container_base_aux_alloc_real (from <xutility>)
137
+ // if the constructor does not exist.
138
+ // For this constructor, we cannot share storage; there's
139
+ // no guarantee that the Source buffer of Ts is large enough
140
+ // for Us.
141
+ // TODO(Google): If we were fancy pants, perhaps we could share storage
142
+ // iff sizeof(T) == sizeof(U).
143
+ template <typename U, size_t other_capacity>
144
+ StackAllocator(const StackAllocator<U, other_capacity> &other)
145
+ : source_(NULL) {
146
+ (void)other;
147
+ }
148
+
149
+ explicit StackAllocator(Source *source) : source_(source) {}
150
+
151
+ // Actually do the allocation. Use the stack buffer if nobody has used it yet
152
+ // and the size requested fits. Otherwise, fall through to the standard
153
+ // allocator.
154
+ pointer allocate(size_type n, void *hint = 0) {
155
+ if (source_ != NULL && !source_->used_stack_buffer_ &&
156
+ n <= stack_capacity) {
157
+ source_->used_stack_buffer_ = true;
158
+ return source_->stack_buffer();
159
+ } else {
160
+ return std::allocator<T>::allocate(n, hint);
161
+ }
162
+ }
163
+
164
+ // Free: when trying to free the stack buffer, just mark it as free. For
165
+ // non-stack-buffer pointers, just fall though to the standard allocator.
166
+ void deallocate(pointer p, size_type n) {
167
+ if (source_ != NULL && p == source_->stack_buffer())
168
+ source_->used_stack_buffer_ = false;
169
+ else
170
+ std::allocator<T>::deallocate(p, n);
171
+ }
172
+
173
+ private:
174
+ Source *source_;
175
+ };
176
+
177
+ // A wrapper around STL containers that maintains a stack-sized buffer that the
178
+ // initial capacity of the vector is based on. Growing the container beyond the
179
+ // stack capacity will transparently overflow onto the heap. The container must
180
+ // support reserve().
181
+ //
182
+ // WATCH OUT: the ContainerType MUST use the proper StackAllocator for this
183
+ // type. This object is really intended to be used only internally. You'll want
184
+ // to use the wrappers below for different types.
185
+ template <typename TContainerType, int stack_capacity>
186
+ class StackContainer {
187
+ public:
188
+ typedef TContainerType ContainerType;
189
+ typedef typename ContainerType::value_type ContainedType;
190
+ typedef StackAllocator<ContainedType, stack_capacity> Allocator;
191
+
192
+ // Allocator must be constructed before the container!
193
+ StackContainer() : allocator_(&stack_data_), container_(allocator_) {
194
+ // Make the container use the stack allocation by reserving our buffer size
195
+ // before doing anything else.
196
+ container_.reserve(stack_capacity);
197
+ }
198
+
199
+ // Getters for the actual container.
200
+ //
201
+ // Danger: any copies of this made using the copy constructor must have
202
+ // shorter lifetimes than the source. The copy will share the same allocator
203
+ // and therefore the same stack buffer as the original. Use std::copy to
204
+ // copy into a "real" container for longer-lived objects.
205
+ ContainerType &container() { return container_; }
206
+ const ContainerType &container() const { return container_; }
207
+
208
+ // Support operator-> to get to the container. This allows nicer syntax like:
209
+ // StackContainer<...> foo;
210
+ // std::sort(foo->begin(), foo->end());
211
+ ContainerType *operator->() { return &container_; }
212
+ const ContainerType *operator->() const { return &container_; }
213
+
214
+ #ifdef UNIT_TEST
215
+ // Retrieves the stack source so that that unit tests can verify that the
216
+ // buffer is being used properly.
217
+ const typename Allocator::Source &stack_data() const { return stack_data_; }
218
+ #endif
219
+
220
+ protected:
221
+ typename Allocator::Source stack_data_;
222
+ unsigned char pad_[7];
223
+ Allocator allocator_;
224
+ ContainerType container_;
225
+
226
+ // DISALLOW_EVIL_CONSTRUCTORS(StackContainer);
227
+ StackContainer(const StackContainer &);
228
+ void operator=(const StackContainer &);
229
+ };
230
+
231
+ // StackVector
232
+ //
233
+ // Example:
234
+ // StackVector<int, 16> foo;
235
+ // foo->push_back(22); // we have overloaded operator->
236
+ // foo[0] = 10; // as well as operator[]
237
+ template <typename T, size_t stack_capacity>
238
+ class StackVector
239
+ : public StackContainer<std::vector<T, StackAllocator<T, stack_capacity> >,
240
+ stack_capacity> {
241
+ public:
242
+ StackVector()
243
+ : StackContainer<std::vector<T, StackAllocator<T, stack_capacity> >,
244
+ stack_capacity>() {}
245
+
246
+ // We need to put this in STL containers sometimes, which requires a copy
247
+ // constructor. We can't call the regular copy constructor because that will
248
+ // take the stack buffer from the original. Here, we create an empty object
249
+ // and make a stack buffer of its own.
250
+ StackVector(const StackVector<T, stack_capacity> &other)
251
+ : StackContainer<std::vector<T, StackAllocator<T, stack_capacity> >,
252
+ stack_capacity>() {
253
+ this->container().assign(other->begin(), other->end());
254
+ }
255
+
256
+ StackVector<T, stack_capacity> &operator=(
257
+ const StackVector<T, stack_capacity> &other) {
258
+ this->container().assign(other->begin(), other->end());
259
+ return *this;
260
+ }
261
+
262
+ // Vectors are commonly indexed, which isn't very convenient even with
263
+ // operator-> (using "->at()" does exception stuff we don't want).
264
+ T &operator[](size_t i) { return this->container().operator[](i); }
265
+ const T &operator[](size_t i) const {
266
+ return this->container().operator[](i);
267
+ }
268
+ };
269
+
270
+ // ----------------------------------------------------------------------------
271
+
272
+ typedef struct {
273
+ std::string name;
274
+
275
+ float ambient[3];
276
+ float diffuse[3];
277
+ float specular[3];
278
+ float transmittance[3];
279
+ float emission[3];
280
+ float shininess;
281
+ float ior; // index of refraction
282
+ float dissolve; // 1 == opaque; 0 == fully transparent
283
+ // illumination model (see http://www.fileformat.info/format/material/)
284
+ int illum;
285
+
286
+ int dummy; // Suppress padding warning.
287
+
288
+ std::string ambient_texname; // map_Ka
289
+ std::string diffuse_texname; // map_Kd
290
+ std::string specular_texname; // map_Ks
291
+ std::string specular_highlight_texname; // map_Ns
292
+ std::string bump_texname; // map_bump, bump
293
+ std::string displacement_texname; // disp
294
+ std::string alpha_texname; // map_d
295
+
296
+ // PBR extension
297
+ // http://exocortex.com/blog/extending_wavefront_mtl_to_support_pbr
298
+ float roughness; // [0, 1] default 0
299
+ float metallic; // [0, 1] default 0
300
+ float sheen; // [0, 1] default 0
301
+ float clearcoat_thickness; // [0, 1] default 0
302
+ float clearcoat_roughness; // [0, 1] default 0
303
+ float anisotropy; // aniso. [0, 1] default 0
304
+ float anisotropy_rotation; // anisor. [0, 1] default 0
305
+ std::string roughness_texname; // map_Pr
306
+ std::string metallic_texname; // map_Pm
307
+ std::string sheen_texname; // map_Ps
308
+ std::string emissive_texname; // map_Ke
309
+ std::string normal_texname; // norm. For normal mapping.
310
+
311
+ std::map<std::string, std::string> unknown_parameter;
312
+ } material_t;
313
+
314
+ typedef struct {
315
+ std::string name; // group name or object name.
316
+ unsigned int face_offset;
317
+ unsigned int length;
318
+ } shape_t;
319
+
320
+ struct index_t {
321
+ int vertex_index, texcoord_index, normal_index;
322
+ index_t() : vertex_index(-1), texcoord_index(-1), normal_index(-1) {}
323
+ explicit index_t(int idx)
324
+ : vertex_index(idx), texcoord_index(idx), normal_index(idx) {}
325
+ index_t(int vidx, int vtidx, int vnidx)
326
+ : vertex_index(vidx), texcoord_index(vtidx), normal_index(vnidx) {}
327
+ };
328
+
329
+ typedef struct {
330
+ std::vector<float, lt::allocator<float> > vertices;
331
+ std::vector<float, lt::allocator<float> > normals;
332
+ std::vector<float, lt::allocator<float> > texcoords;
333
+ std::vector<index_t, lt::allocator<index_t> > indices;
334
+ std::vector<int, lt::allocator<int> > face_num_verts;
335
+ std::vector<int, lt::allocator<int> > material_ids;
336
+ } attrib_t;
337
+
338
+ typedef StackVector<char, 256> ShortString;
339
+
340
+ #define IS_SPACE(x) (((x) == ' ') || ((x) == '\t'))
341
+ #define IS_DIGIT(x) \
342
+ (static_cast<unsigned int>((x) - '0') < static_cast<unsigned int>(10))
343
+ #define IS_NEW_LINE(x) (((x) == '\r') || ((x) == '\n') || ((x) == '\0'))
344
+
345
+ static inline void skip_space(const char **token) {
346
+ while ((*token)[0] == ' ' || (*token)[0] == '\t') {
347
+ (*token)++;
348
+ }
349
+ }
350
+
351
+ static inline void skip_space_and_cr(const char **token) {
352
+ while ((*token)[0] == ' ' || (*token)[0] == '\t' || (*token)[0] == '\r') {
353
+ (*token)++;
354
+ }
355
+ }
356
+
357
+ static inline int until_space(const char *token) {
358
+ const char *p = token;
359
+ while (p[0] != '\0' && p[0] != ' ' && p[0] != '\t' && p[0] != '\r') {
360
+ p++;
361
+ }
362
+
363
+ return p - token;
364
+ }
365
+
366
+ static inline int length_until_newline(const char *token, int n) {
367
+ int len = 0;
368
+
369
+ // Assume token[n-1] = '\0'
370
+ for (len = 0; len < n - 1; len++) {
371
+ if (token[len] == '\n') {
372
+ break;
373
+ }
374
+ if ((token[len] == '\r') && ((len < (n - 2)) && (token[len + 1] != '\n'))) {
375
+ break;
376
+ }
377
+ }
378
+
379
+ return len;
380
+ }
381
+
382
+ // http://stackoverflow.com/questions/5710091/how-does-atoi-function-in-c-work
383
+ static inline int my_atoi(const char *c) {
384
+ int value = 0;
385
+ int sign = 1;
386
+ if (*c == '+' || *c == '-') {
387
+ if (*c == '-') sign = -1;
388
+ c++;
389
+ }
390
+ while (((*c) >= '0') && ((*c) <= '9')) { // isdigit(*c)
391
+ value *= 10;
392
+ value += (int)(*c - '0');
393
+ c++;
394
+ }
395
+ return value * sign;
396
+ }
397
+
398
+ // Make index zero-base, and also support relative index.
399
+ static inline int fixIndex(int idx, int n) {
400
+ if (idx > 0) return idx - 1;
401
+ if (idx == 0) return 0;
402
+ return n + idx; // negative value = relative
403
+ }
404
+
405
+ // Parse raw triples: i, i/j/k, i//k, i/j
406
+ static index_t parseRawTriple(const char **token) {
407
+ index_t vi(
408
+ static_cast<int>(0x80000000)); // 0x80000000 = -2147483648 = invalid
409
+
410
+ vi.vertex_index = my_atoi((*token));
411
+ while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' &&
412
+ (*token)[0] != '\t' && (*token)[0] != '\r') {
413
+ (*token)++;
414
+ }
415
+ if ((*token)[0] != '/') {
416
+ return vi;
417
+ }
418
+ (*token)++;
419
+
420
+ // i//k
421
+ if ((*token)[0] == '/') {
422
+ (*token)++;
423
+ vi.normal_index = my_atoi((*token));
424
+ while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' &&
425
+ (*token)[0] != '\t' && (*token)[0] != '\r') {
426
+ (*token)++;
427
+ }
428
+ return vi;
429
+ }
430
+
431
+ // i/j/k or i/j
432
+ vi.texcoord_index = my_atoi((*token));
433
+ while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' &&
434
+ (*token)[0] != '\t' && (*token)[0] != '\r') {
435
+ (*token)++;
436
+ }
437
+ if ((*token)[0] != '/') {
438
+ return vi;
439
+ }
440
+
441
+ // i/j/k
442
+ (*token)++; // skip '/'
443
+ vi.normal_index = my_atoi((*token));
444
+ while ((*token)[0] != '\0' && (*token)[0] != '/' && (*token)[0] != ' ' &&
445
+ (*token)[0] != '\t' && (*token)[0] != '\r') {
446
+ (*token)++;
447
+ }
448
+ return vi;
449
+ }
450
+
451
+ static inline bool parseString(ShortString *s, const char **token) {
452
+ skip_space(token);
453
+ size_t e = until_space((*token));
454
+ (*s)->insert((*s)->end(), (*token), (*token) + e);
455
+ (*token) += e;
456
+ return true;
457
+ }
458
+
459
+ static inline int parseInt(const char **token) {
460
+ skip_space(token);
461
+ int i = my_atoi((*token));
462
+ (*token) += until_space((*token));
463
+ return i;
464
+ }
465
+
466
+ // Tries to parse a floating point number located at s.
467
+ //
468
+ // s_end should be a location in the string where reading should absolutely
469
+ // stop. For example at the end of the string, to prevent buffer overflows.
470
+ //
471
+ // Parses the following EBNF grammar:
472
+ // sign = "+" | "-" ;
473
+ // END = ? anything not in digit ?
474
+ // digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
475
+ // integer = [sign] , digit , {digit} ;
476
+ // decimal = integer , ["." , integer] ;
477
+ // float = ( decimal , END ) | ( decimal , ("E" | "e") , integer , END ) ;
478
+ //
479
+ // Valid strings are for example:
480
+ // -0 +3.1417e+2 -0.0E-3 1.0324 -1.41 11e2
481
+ //
482
+ // If the parsing is a success, result is set to the parsed value and true
483
+ // is returned.
484
+ //
485
+ // The function is greedy and will parse until any of the following happens:
486
+ // - a non-conforming character is encountered.
487
+ // - s_end is reached.
488
+ //
489
+ // The following situations triggers a failure:
490
+ // - s >= s_end.
491
+ // - parse failure.
492
+ //
493
+ static bool tryParseDouble(const char *s, const char *s_end, double *result) {
494
+ if (s >= s_end) {
495
+ return false;
496
+ }
497
+
498
+ double mantissa = 0.0;
499
+ // This exponent is base 2 rather than 10.
500
+ // However the exponent we parse is supposed to be one of ten,
501
+ // thus we must take care to convert the exponent/and or the
502
+ // mantissa to a * 2^E, where a is the mantissa and E is the
503
+ // exponent.
504
+ // To get the final double we will use ldexp, it requires the
505
+ // exponent to be in base 2.
506
+ int exponent = 0;
507
+
508
+ // NOTE: THESE MUST BE DECLARED HERE SINCE WE ARE NOT ALLOWED
509
+ // TO JUMP OVER DEFINITIONS.
510
+ char sign = '+';
511
+ char exp_sign = '+';
512
+ char const *curr = s;
513
+
514
+ // How many characters were read in a loop.
515
+ int read = 0;
516
+ // Tells whether a loop terminated due to reaching s_end.
517
+ bool end_not_reached = false;
518
+
519
+ /*
520
+ BEGIN PARSING.
521
+ */
522
+
523
+ // Find out what sign we've got.
524
+ if (*curr == '+' || *curr == '-') {
525
+ sign = *curr;
526
+ curr++;
527
+ } else if (IS_DIGIT(*curr)) { /* Pass through. */
528
+ } else {
529
+ goto fail;
530
+ }
531
+
532
+ // Read the integer part.
533
+ end_not_reached = (curr != s_end);
534
+ while (end_not_reached && IS_DIGIT(*curr)) {
535
+ mantissa *= 10;
536
+ mantissa += static_cast<int>(*curr - 0x30);
537
+ curr++;
538
+ read++;
539
+ end_not_reached = (curr != s_end);
540
+ }
541
+
542
+ // We must make sure we actually got something.
543
+ if (read == 0) goto fail;
544
+ // We allow numbers of form "#", "###" etc.
545
+ if (!end_not_reached) goto assemble;
546
+
547
+ // Read the decimal part.
548
+ if (*curr == '.') {
549
+ curr++;
550
+ read = 1;
551
+ end_not_reached = (curr != s_end);
552
+ while (end_not_reached && IS_DIGIT(*curr)) {
553
+ // pow(10.0, -read)
554
+ double frac_value = 1.0;
555
+ for (int f = 0; f < read; f++) {
556
+ frac_value *= 0.1;
557
+ }
558
+ mantissa += static_cast<int>(*curr - 0x30) * frac_value;
559
+ read++;
560
+ curr++;
561
+ end_not_reached = (curr != s_end);
562
+ }
563
+ } else if (*curr == 'e' || *curr == 'E') {
564
+ } else {
565
+ goto assemble;
566
+ }
567
+
568
+ if (!end_not_reached) goto assemble;
569
+
570
+ // Read the exponent part.
571
+ if (*curr == 'e' || *curr == 'E') {
572
+ curr++;
573
+ // Figure out if a sign is present and if it is.
574
+ end_not_reached = (curr != s_end);
575
+ if (end_not_reached && (*curr == '+' || *curr == '-')) {
576
+ exp_sign = *curr;
577
+ curr++;
578
+ } else if (IS_DIGIT(*curr)) { /* Pass through. */
579
+ } else {
580
+ // Empty E is not allowed.
581
+ goto fail;
582
+ }
583
+
584
+ read = 0;
585
+ end_not_reached = (curr != s_end);
586
+ while (end_not_reached && IS_DIGIT(*curr)) {
587
+ exponent *= 10;
588
+ exponent += static_cast<int>(*curr - 0x30);
589
+ curr++;
590
+ read++;
591
+ end_not_reached = (curr != s_end);
592
+ }
593
+ exponent *= (exp_sign == '+' ? 1 : -1);
594
+ if (read == 0) goto fail;
595
+ }
596
+
597
+ assemble :
598
+
599
+ {
600
+ // = pow(5.0, exponent);
601
+ double a = 1.0;
602
+ for (int i = 0; i < exponent; i++) {
603
+ a = a * 5.0;
604
+ }
605
+ *result =
606
+ //(sign == '+' ? 1 : -1) * ldexp(mantissa * pow(5.0, exponent), exponent);
607
+ (sign == '+' ? 1 : -1) * (mantissa * a) *
608
+ static_cast<double>(1ULL << exponent); // 5.0^exponent * 2^exponent
609
+ }
610
+
611
+ return true;
612
+ fail:
613
+ return false;
614
+ }
615
+
616
+ static inline float parseFloat(const char **token) {
617
+ skip_space(token);
618
+ #ifdef TINY_OBJ_LOADER_OLD_FLOAT_PARSER
619
+ float f = static_cast<float>(atof(*token));
620
+ (*token) += strcspn((*token), " \t\r");
621
+ #else
622
+ const char *end = (*token) + until_space((*token));
623
+ double val = 0.0;
624
+ tryParseDouble((*token), end, &val);
625
+ float f = static_cast<float>(val);
626
+ (*token) = end;
627
+ #endif
628
+ return f;
629
+ }
630
+
631
+ static inline void parseFloat2(float *x, float *y, const char **token) {
632
+ (*x) = parseFloat(token);
633
+ (*y) = parseFloat(token);
634
+ }
635
+
636
+ static inline void parseFloat3(float *x, float *y, float *z,
637
+ const char **token) {
638
+ (*x) = parseFloat(token);
639
+ (*y) = parseFloat(token);
640
+ (*z) = parseFloat(token);
641
+ }
642
+
643
+ static void InitMaterial(material_t *material) {
644
+ material->name = "";
645
+ material->ambient_texname = "";
646
+ material->diffuse_texname = "";
647
+ material->specular_texname = "";
648
+ material->specular_highlight_texname = "";
649
+ material->bump_texname = "";
650
+ material->displacement_texname = "";
651
+ material->alpha_texname = "";
652
+ for (int i = 0; i < 3; i++) {
653
+ material->ambient[i] = 0.f;
654
+ material->diffuse[i] = 0.f;
655
+ material->specular[i] = 0.f;
656
+ material->transmittance[i] = 0.f;
657
+ material->emission[i] = 0.f;
658
+ }
659
+ material->illum = 0;
660
+ material->dissolve = 1.f;
661
+ material->shininess = 1.f;
662
+ material->ior = 1.f;
663
+ material->unknown_parameter.clear();
664
+ }
665
+
666
+ static void LoadMtl(std::map<std::string, int> *material_map,
667
+ std::vector<material_t> *materials,
668
+ std::istream *inStream) {
669
+ // Create a default material anyway.
670
+ material_t material;
671
+ InitMaterial(&material);
672
+
673
+ size_t maxchars = 8192; // Alloc enough size.
674
+ std::vector<char> buf(maxchars); // Alloc enough size.
675
+ while (inStream->peek() != -1) {
676
+ inStream->getline(&buf[0], static_cast<std::streamsize>(maxchars));
677
+
678
+ std::string linebuf(&buf[0]);
679
+
680
+ // Trim trailing whitespace.
681
+ if (linebuf.size() > 0) {
682
+ linebuf = linebuf.substr(0, linebuf.find_last_not_of(" \t") + 1);
683
+ }
684
+
685
+ // Trim newline '\r\n' or '\n'
686
+ if (linebuf.size() > 0) {
687
+ if (linebuf[linebuf.size() - 1] == '\n')
688
+ linebuf.erase(linebuf.size() - 1);
689
+ }
690
+ if (linebuf.size() > 0) {
691
+ if (linebuf[linebuf.size() - 1] == '\r')
692
+ linebuf.erase(linebuf.size() - 1);
693
+ }
694
+
695
+ // Skip if empty line.
696
+ if (linebuf.empty()) {
697
+ continue;
698
+ }
699
+
700
+ // Skip leading space.
701
+ const char *token = linebuf.c_str();
702
+ token += strspn(token, " \t");
703
+
704
+ assert(token);
705
+ if (token[0] == '\0') continue; // empty line
706
+
707
+ if (token[0] == '#') continue; // comment line
708
+
709
+ // new mtl
710
+ if ((0 == strncmp(token, "newmtl", 6)) && IS_SPACE((token[6]))) {
711
+ // flush previous material.
712
+ if (!material.name.empty()) {
713
+ material_map->insert(std::pair<std::string, int>(
714
+ material.name, static_cast<int>(materials->size())));
715
+ materials->push_back(material);
716
+ }
717
+
718
+ // initial temporary material
719
+ InitMaterial(&material);
720
+
721
+ // set new mtl name
722
+ char namebuf[4096];
723
+ token += 7;
724
+ #ifdef _MSC_VER
725
+ sscanf_s(token, "%s", namebuf, (unsigned)_countof(namebuf));
726
+ #else
727
+ sscanf(token, "%s", namebuf);
728
+ #endif
729
+ material.name = namebuf;
730
+ continue;
731
+ }
732
+
733
+ // ambient
734
+ if (token[0] == 'K' && token[1] == 'a' && IS_SPACE((token[2]))) {
735
+ token += 2;
736
+ float r, g, b;
737
+ parseFloat3(&r, &g, &b, &token);
738
+ material.ambient[0] = r;
739
+ material.ambient[1] = g;
740
+ material.ambient[2] = b;
741
+ continue;
742
+ }
743
+
744
+ // diffuse
745
+ if (token[0] == 'K' && token[1] == 'd' && IS_SPACE((token[2]))) {
746
+ token += 2;
747
+ float r, g, b;
748
+ parseFloat3(&r, &g, &b, &token);
749
+ material.diffuse[0] = r;
750
+ material.diffuse[1] = g;
751
+ material.diffuse[2] = b;
752
+ continue;
753
+ }
754
+
755
+ // specular
756
+ if (token[0] == 'K' && token[1] == 's' && IS_SPACE((token[2]))) {
757
+ token += 2;
758
+ float r, g, b;
759
+ parseFloat3(&r, &g, &b, &token);
760
+ material.specular[0] = r;
761
+ material.specular[1] = g;
762
+ material.specular[2] = b;
763
+ continue;
764
+ }
765
+
766
+ // transmittance
767
+ if ((token[0] == 'K' && token[1] == 't' && IS_SPACE((token[2]))) ||
768
+ (token[0] == 'T' && token[1] == 'f' && IS_SPACE((token[2])))) {
769
+ token += 2;
770
+ float r, g, b;
771
+ parseFloat3(&r, &g, &b, &token);
772
+ material.transmittance[0] = r;
773
+ material.transmittance[1] = g;
774
+ material.transmittance[2] = b;
775
+ continue;
776
+ }
777
+
778
+ // ior(index of refraction)
779
+ if (token[0] == 'N' && token[1] == 'i' && IS_SPACE((token[2]))) {
780
+ token += 2;
781
+ material.ior = parseFloat(&token);
782
+ continue;
783
+ }
784
+
785
+ // emission
786
+ if (token[0] == 'K' && token[1] == 'e' && IS_SPACE(token[2])) {
787
+ token += 2;
788
+ float r, g, b;
789
+ parseFloat3(&r, &g, &b, &token);
790
+ material.emission[0] = r;
791
+ material.emission[1] = g;
792
+ material.emission[2] = b;
793
+ continue;
794
+ }
795
+
796
+ // shininess
797
+ if (token[0] == 'N' && token[1] == 's' && IS_SPACE(token[2])) {
798
+ token += 2;
799
+ material.shininess = parseFloat(&token);
800
+ continue;
801
+ }
802
+
803
+ // illum model
804
+ if (0 == strncmp(token, "illum", 5) && IS_SPACE(token[5])) {
805
+ token += 6;
806
+ material.illum = parseInt(&token);
807
+ continue;
808
+ }
809
+
810
+ // dissolve
811
+ if ((token[0] == 'd' && IS_SPACE(token[1]))) {
812
+ token += 1;
813
+ material.dissolve = parseFloat(&token);
814
+ continue;
815
+ }
816
+
817
+ if (token[0] == 'T' && token[1] == 'r' && IS_SPACE(token[2])) {
818
+ token += 2;
819
+ // Invert value of Tr(assume Tr is in range [0, 1])
820
+ material.dissolve = 1.0f - parseFloat(&token);
821
+ continue;
822
+ }
823
+
824
+ // PBR: roughness
825
+ if (token[0] == 'P' && token[1] == 'r' && IS_SPACE(token[2])) {
826
+ token += 2;
827
+ material.roughness = parseFloat(&token);
828
+ continue;
829
+ }
830
+
831
+ // PBR: metallic
832
+ if (token[0] == 'P' && token[1] == 'm' && IS_SPACE(token[2])) {
833
+ token += 2;
834
+ material.metallic = parseFloat(&token);
835
+ continue;
836
+ }
837
+
838
+ // PBR: sheen
839
+ if (token[0] == 'P' && token[1] == 's' && IS_SPACE(token[2])) {
840
+ token += 2;
841
+ material.sheen = parseFloat(&token);
842
+ continue;
843
+ }
844
+
845
+ // PBR: clearcoat thickness
846
+ if (token[0] == 'P' && token[1] == 'c' && IS_SPACE(token[2])) {
847
+ token += 2;
848
+ material.clearcoat_thickness = parseFloat(&token);
849
+ continue;
850
+ }
851
+
852
+ // PBR: clearcoat roughness
853
+ if ((0 == strncmp(token, "Pcr", 3)) && IS_SPACE(token[3])) {
854
+ token += 4;
855
+ material.clearcoat_roughness = parseFloat(&token);
856
+ continue;
857
+ }
858
+
859
+ // PBR: anisotropy
860
+ if ((0 == strncmp(token, "aniso", 5)) && IS_SPACE(token[5])) {
861
+ token += 6;
862
+ material.anisotropy = parseFloat(&token);
863
+ continue;
864
+ }
865
+
866
+ // PBR: anisotropy rotation
867
+ if ((0 == strncmp(token, "anisor", 6)) && IS_SPACE(token[6])) {
868
+ token += 7;
869
+ material.anisotropy_rotation = parseFloat(&token);
870
+ continue;
871
+ }
872
+
873
+ // ambient texture
874
+ if ((0 == strncmp(token, "map_Ka", 6)) && IS_SPACE(token[6])) {
875
+ token += 7;
876
+ material.ambient_texname = token;
877
+ continue;
878
+ }
879
+
880
+ // diffuse texture
881
+ if ((0 == strncmp(token, "map_Kd", 6)) && IS_SPACE(token[6])) {
882
+ token += 7;
883
+ material.diffuse_texname = token;
884
+ continue;
885
+ }
886
+
887
+ // specular texture
888
+ if ((0 == strncmp(token, "map_Ks", 6)) && IS_SPACE(token[6])) {
889
+ token += 7;
890
+ material.specular_texname = token;
891
+ continue;
892
+ }
893
+
894
+ // specular highlight texture
895
+ if ((0 == strncmp(token, "map_Ns", 6)) && IS_SPACE(token[6])) {
896
+ token += 7;
897
+ material.specular_highlight_texname = token;
898
+ continue;
899
+ }
900
+
901
+ // bump texture
902
+ if ((0 == strncmp(token, "map_bump", 8)) && IS_SPACE(token[8])) {
903
+ token += 9;
904
+ material.bump_texname = token;
905
+ continue;
906
+ }
907
+
908
+ // alpha texture
909
+ if ((0 == strncmp(token, "map_d", 5)) && IS_SPACE(token[5])) {
910
+ token += 6;
911
+ material.alpha_texname = token;
912
+ continue;
913
+ }
914
+
915
+ // bump texture
916
+ if ((0 == strncmp(token, "bump", 4)) && IS_SPACE(token[4])) {
917
+ token += 5;
918
+ material.bump_texname = token;
919
+ continue;
920
+ }
921
+
922
+ // displacement texture
923
+ if ((0 == strncmp(token, "disp", 4)) && IS_SPACE(token[4])) {
924
+ token += 5;
925
+ material.displacement_texname = token;
926
+ continue;
927
+ }
928
+
929
+ // PBR: roughness texture
930
+ if ((0 == strncmp(token, "map_Pr", 6)) && IS_SPACE(token[6])) {
931
+ token += 7;
932
+ material.roughness_texname = token;
933
+ continue;
934
+ }
935
+
936
+ // PBR: metallic texture
937
+ if ((0 == strncmp(token, "map_Pm", 6)) && IS_SPACE(token[6])) {
938
+ token += 7;
939
+ material.metallic_texname = token;
940
+ continue;
941
+ }
942
+
943
+ // PBR: sheen texture
944
+ if ((0 == strncmp(token, "map_Ps", 6)) && IS_SPACE(token[6])) {
945
+ token += 7;
946
+ material.sheen_texname = token;
947
+ continue;
948
+ }
949
+
950
+ // PBR: emissive texture
951
+ if ((0 == strncmp(token, "map_Ke", 6)) && IS_SPACE(token[6])) {
952
+ token += 7;
953
+ material.emissive_texname = token;
954
+ continue;
955
+ }
956
+
957
+ // PBR: normal map texture
958
+ if ((0 == strncmp(token, "norm", 4)) && IS_SPACE(token[4])) {
959
+ token += 5;
960
+ material.normal_texname = token;
961
+ continue;
962
+ }
963
+
964
+ // unknown parameter
965
+ const char *_space = strchr(token, ' ');
966
+ if (!_space) {
967
+ _space = strchr(token, '\t');
968
+ }
969
+ if (_space) {
970
+ std::ptrdiff_t len = _space - token;
971
+ std::string key(token, static_cast<size_t>(len));
972
+ std::string value = _space + 1;
973
+ material.unknown_parameter.insert(
974
+ std::pair<std::string, std::string>(key, value));
975
+ }
976
+ }
977
+ // flush last material.
978
+ material_map->insert(std::pair<std::string, int>(
979
+ material.name, static_cast<int>(materials->size())));
980
+ materials->push_back(material);
981
+ }
982
+
983
+ typedef enum {
984
+ COMMAND_EMPTY,
985
+ COMMAND_V,
986
+ COMMAND_VN,
987
+ COMMAND_VT,
988
+ COMMAND_F,
989
+ COMMAND_G,
990
+ COMMAND_O,
991
+ COMMAND_USEMTL,
992
+ COMMAND_MTLLIB,
993
+
994
+ } CommandType;
995
+
996
+ typedef struct {
997
+ float vx, vy, vz;
998
+ float nx, ny, nz;
999
+ float tx, ty;
1000
+
1001
+ // for f
1002
+ std::vector<index_t, lt::allocator<index_t> > f;
1003
+ // std::vector<index_t> f;
1004
+ std::vector<int, lt::allocator<int> > f_num_verts;
1005
+
1006
+ const char *group_name;
1007
+ unsigned int group_name_len;
1008
+ const char *object_name;
1009
+ unsigned int object_name_len;
1010
+ const char *material_name;
1011
+ unsigned int material_name_len;
1012
+
1013
+ const char *mtllib_name;
1014
+ unsigned int mtllib_name_len;
1015
+
1016
+ CommandType type;
1017
+ } Command;
1018
+
1019
+ struct CommandCount {
1020
+ size_t num_v;
1021
+ size_t num_vn;
1022
+ size_t num_vt;
1023
+ size_t num_f;
1024
+ size_t num_indices;
1025
+ CommandCount() {
1026
+ num_v = 0;
1027
+ num_vn = 0;
1028
+ num_vt = 0;
1029
+ num_f = 0;
1030
+ num_indices = 0;
1031
+ }
1032
+ };
1033
+
1034
+ class LoadOption {
1035
+ public:
1036
+ LoadOption() : req_num_threads(-1), triangulate(true), verbose(false) {}
1037
+
1038
+ int req_num_threads;
1039
+ bool triangulate;
1040
+ bool verbose;
1041
+ };
1042
+
1043
+ /// Parse wavefront .obj(.obj string data is expanded to linear char array
1044
+ /// `buf')
1045
+ /// -1 to req_num_threads use the number of HW threads in the running system.
1046
+ bool parseObj(attrib_t *attrib, std::vector<shape_t> *shapes,
1047
+ std::vector<material_t> *materials, const char *buf, size_t len,
1048
+ const LoadOption &option);
1049
+
1050
+ #ifdef TINYOBJ_LOADER_OPT_IMPLEMENTATION
1051
+
1052
+ static bool parseLine(Command *command, const char *p, size_t p_len,
1053
+ bool triangulate = true) {
1054
+ // @todo { operate directly on pointer `p'. to do that, add range check for
1055
+ // string operatoion against `p', since `p' is not null-terminated at p[p_len]
1056
+ // }
1057
+ char linebuf[4096];
1058
+ assert(p_len < 4095);
1059
+ memcpy(linebuf, p, p_len);
1060
+ linebuf[p_len] = '\0';
1061
+
1062
+ const char *token = linebuf;
1063
+
1064
+ command->type = COMMAND_EMPTY;
1065
+
1066
+ // Skip leading space.
1067
+ skip_space(&token);
1068
+
1069
+ assert(token);
1070
+ if (token[0] == '\0') { // empty line
1071
+ return false;
1072
+ }
1073
+
1074
+ if (token[0] == '#') { // comment line
1075
+ return false;
1076
+ }
1077
+
1078
+ // vertex
1079
+ if (token[0] == 'v' && IS_SPACE((token[1]))) {
1080
+ token += 2;
1081
+ float x = 0.0f, y = 0.0f, z = 0.0f;
1082
+ parseFloat3(&x, &y, &z, &token);
1083
+ command->vx = x;
1084
+ command->vy = y;
1085
+ command->vz = z;
1086
+ command->type = COMMAND_V;
1087
+ return true;
1088
+ }
1089
+
1090
+ // normal
1091
+ if (token[0] == 'v' && token[1] == 'n' && IS_SPACE((token[2]))) {
1092
+ token += 3;
1093
+ float x = 0.0f, y = 0.0f, z = 0.0f;
1094
+ parseFloat3(&x, &y, &z, &token);
1095
+ command->nx = x;
1096
+ command->ny = y;
1097
+ command->nz = z;
1098
+ command->type = COMMAND_VN;
1099
+ return true;
1100
+ }
1101
+
1102
+ // texcoord
1103
+ if (token[0] == 'v' && token[1] == 't' && IS_SPACE((token[2]))) {
1104
+ token += 3;
1105
+ float x = 0.0f, y = 0.0f;
1106
+ parseFloat2(&x, &y, &token);
1107
+ command->tx = x;
1108
+ command->ty = y;
1109
+ command->type = COMMAND_VT;
1110
+ return true;
1111
+ }
1112
+
1113
+ // face
1114
+ if (token[0] == 'f' && IS_SPACE((token[1]))) {
1115
+ token += 2;
1116
+ skip_space(&token);
1117
+
1118
+ StackVector<index_t, 8> f;
1119
+
1120
+ while (!IS_NEW_LINE(token[0])) {
1121
+ index_t vi = parseRawTriple(&token);
1122
+ skip_space_and_cr(&token);
1123
+
1124
+ f->push_back(vi);
1125
+ }
1126
+
1127
+ command->type = COMMAND_F;
1128
+
1129
+ if (triangulate) {
1130
+ index_t i0 = f[0];
1131
+ index_t i1(-1);
1132
+ index_t i2 = f[1];
1133
+
1134
+ for (size_t k = 2; k < f->size(); k++) {
1135
+ i1 = i2;
1136
+ i2 = f[k];
1137
+ command->f.emplace_back(i0);
1138
+ command->f.emplace_back(i1);
1139
+ command->f.emplace_back(i2);
1140
+
1141
+ command->f_num_verts.emplace_back(3);
1142
+ }
1143
+
1144
+ } else {
1145
+ for (size_t k = 0; k < f->size(); k++) {
1146
+ command->f.emplace_back(f[k]);
1147
+ }
1148
+
1149
+ command->f_num_verts.emplace_back(f->size());
1150
+ }
1151
+
1152
+ return true;
1153
+ }
1154
+
1155
+ // use mtl
1156
+ if ((0 == strncmp(token, "usemtl", 6)) && IS_SPACE((token[6]))) {
1157
+ token += 7;
1158
+
1159
+ // int newMaterialId = -1;
1160
+ // if (material_map.find(namebuf) != material_map.end()) {
1161
+ // newMaterialId = material_map[namebuf];
1162
+ //} else {
1163
+ // // { error!! material not found }
1164
+ //}
1165
+
1166
+ // if (newMaterialId != materialId) {
1167
+ // materialId = newMaterialId;
1168
+ //}
1169
+
1170
+ // command->material_name = .insert(command->material_name->end(), namebuf,
1171
+ // namebuf + strlen(namebuf));
1172
+ // command->material_name->push_back('\0');
1173
+ skip_space(&token);
1174
+ command->material_name = p + (token - linebuf);
1175
+ command->material_name_len =
1176
+ length_until_newline(token, p_len - (token - linebuf)) + 1;
1177
+ command->type = COMMAND_USEMTL;
1178
+
1179
+ return true;
1180
+ }
1181
+
1182
+ // load mtl
1183
+ if ((0 == strncmp(token, "mtllib", 6)) && IS_SPACE((token[6]))) {
1184
+ // By specification, `mtllib` should be appear only once in .obj
1185
+ token += 7;
1186
+
1187
+ skip_space(&token);
1188
+ command->mtllib_name = p + (token - linebuf);
1189
+ command->mtllib_name_len =
1190
+ length_until_newline(token, p_len - (token - linebuf)) + 1;
1191
+ command->type = COMMAND_MTLLIB;
1192
+
1193
+ return true;
1194
+ }
1195
+
1196
+ // group name
1197
+ if (token[0] == 'g' && IS_SPACE((token[1]))) {
1198
+ // @todo { multiple group name. }
1199
+ token += 2;
1200
+
1201
+ command->group_name = p + (token - linebuf);
1202
+ command->group_name_len =
1203
+ length_until_newline(token, p_len - (token - linebuf)) + 1;
1204
+ command->type = COMMAND_G;
1205
+
1206
+ return true;
1207
+ }
1208
+
1209
+ // object name
1210
+ if (token[0] == 'o' && IS_SPACE((token[1]))) {
1211
+ // @todo { multiple object name? }
1212
+ token += 2;
1213
+
1214
+ command->object_name = p + (token - linebuf);
1215
+ command->object_name_len =
1216
+ length_until_newline(token, p_len - (token - linebuf)) + 1;
1217
+ command->type = COMMAND_O;
1218
+
1219
+ return true;
1220
+ }
1221
+
1222
+ return false;
1223
+ }
1224
+
1225
+ typedef struct {
1226
+ size_t pos;
1227
+ size_t len;
1228
+ } LineInfo;
1229
+
1230
+ // Idea come from https://github.com/antonmks/nvParse
1231
+ // 1. mmap file
1232
+ // 2. find newline(\n, \r\n, \r) and list of line data.
1233
+ // 3. Do parallel parsing for each line.
1234
+ // 4. Reconstruct final mesh data structure.
1235
+
1236
+ #define kMaxThreads (32)
1237
+
1238
+ static inline bool is_line_ending(const char *p, size_t i, size_t end_i) {
1239
+ if (p[i] == '\0') return true;
1240
+ if (p[i] == '\n') return true; // this includes \r\n
1241
+ if (p[i] == '\r') {
1242
+ if (((i + 1) < end_i) && (p[i + 1] != '\n')) { // detect only \r case
1243
+ return true;
1244
+ }
1245
+ }
1246
+ return false;
1247
+ }
1248
+
1249
+ bool parseObj(attrib_t *attrib, std::vector<shape_t> *shapes,
1250
+ std::vector<material_t> *materials, const char *buf, size_t len,
1251
+ const LoadOption &option) {
1252
+ attrib->vertices.clear();
1253
+ attrib->normals.clear();
1254
+ attrib->texcoords.clear();
1255
+ attrib->indices.clear();
1256
+ attrib->face_num_verts.clear();
1257
+ attrib->material_ids.clear();
1258
+ shapes->clear();
1259
+
1260
+ if (len < 1) return false;
1261
+
1262
+ auto num_threads = (option.req_num_threads < 0)
1263
+ ? std::thread::hardware_concurrency()
1264
+ : option.req_num_threads;
1265
+ num_threads =
1266
+ (std::max)(1, (std::min)(static_cast<int>(num_threads), kMaxThreads));
1267
+
1268
+ if (option.verbose) {
1269
+ std::cout << "# of threads = " << num_threads << std::endl;
1270
+ }
1271
+
1272
+ auto t1 = std::chrono::high_resolution_clock::now();
1273
+
1274
+ std::vector<LineInfo, lt::allocator<LineInfo> > line_infos[kMaxThreads];
1275
+ for (size_t t = 0; t < static_cast<size_t>(num_threads); t++) {
1276
+ // Pre allocate enough memory. len / 128 / num_threads is just a heuristic
1277
+ // value.
1278
+ line_infos[t].reserve(len / 128 / num_threads);
1279
+ }
1280
+
1281
+ std::chrono::duration<double, std::milli> ms_linedetection;
1282
+ std::chrono::duration<double, std::milli> ms_alloc;
1283
+ std::chrono::duration<double, std::milli> ms_parse;
1284
+ std::chrono::duration<double, std::milli> ms_load_mtl;
1285
+ std::chrono::duration<double, std::milli> ms_merge;
1286
+ std::chrono::duration<double, std::milli> ms_construct;
1287
+
1288
+ // 1. Find '\n' and create line data.
1289
+ {
1290
+ StackVector<std::thread, 16> workers;
1291
+
1292
+ auto start_time = std::chrono::high_resolution_clock::now();
1293
+ auto chunk_size = len / num_threads;
1294
+
1295
+ for (size_t t = 0; t < static_cast<size_t>(num_threads); t++) {
1296
+ workers->push_back(std::thread([&, t]() {
1297
+ auto start_idx = (t + 0) * chunk_size;
1298
+ auto end_idx = (std::min)((t + 1) * chunk_size, len - 1);
1299
+ if (t == static_cast<size_t>((num_threads - 1))) {
1300
+ end_idx = len - 1;
1301
+ }
1302
+
1303
+ size_t prev_pos = start_idx;
1304
+ for (size_t i = start_idx; i < end_idx; i++) {
1305
+ if (is_line_ending(buf, i, end_idx)) {
1306
+ if ((t > 0) && (prev_pos == start_idx) &&
1307
+ (!is_line_ending(buf, start_idx - 1, end_idx))) {
1308
+ // first linebreak found in (chunk > 0), and a line before this
1309
+ // linebreak belongs to previous chunk, so skip it.
1310
+ prev_pos = i + 1;
1311
+ continue;
1312
+ } else {
1313
+ LineInfo info;
1314
+ info.pos = prev_pos;
1315
+ info.len = i - prev_pos;
1316
+
1317
+ if (info.len > 0) {
1318
+ line_infos[t].push_back(info);
1319
+ }
1320
+
1321
+ prev_pos = i + 1;
1322
+ }
1323
+ }
1324
+ }
1325
+
1326
+ // Find extra line which spand across chunk boundary.
1327
+ if ((t < num_threads) && (buf[end_idx - 1] != '\n')) {
1328
+ auto extra_span_idx = (std::min)(end_idx - 1 + chunk_size, len - 1);
1329
+ for (size_t i = end_idx; i < extra_span_idx; i++) {
1330
+ if (is_line_ending(buf, i, extra_span_idx)) {
1331
+ LineInfo info;
1332
+ info.pos = prev_pos;
1333
+ info.len = i - prev_pos;
1334
+
1335
+ if (info.len > 0) {
1336
+ line_infos[t].push_back(info);
1337
+ }
1338
+
1339
+ break;
1340
+ }
1341
+ }
1342
+ }
1343
+ }));
1344
+ }
1345
+
1346
+ for (size_t t = 0; t < workers->size(); t++) {
1347
+ workers[t].join();
1348
+ }
1349
+
1350
+ auto end_time = std::chrono::high_resolution_clock::now();
1351
+
1352
+ ms_linedetection = end_time - start_time;
1353
+ }
1354
+
1355
+ auto line_sum = 0;
1356
+ for (size_t t = 0; t < num_threads; t++) {
1357
+ // std::cout << t << ": # of lines = " << line_infos[t].size() << std::endl;
1358
+ line_sum += line_infos[t].size();
1359
+ }
1360
+ // std::cout << "# of lines = " << line_sum << std::endl;
1361
+
1362
+ std::vector<Command> commands[kMaxThreads];
1363
+
1364
+ // 2. allocate buffer
1365
+ auto t_alloc_start = std::chrono::high_resolution_clock::now();
1366
+ {
1367
+ for (size_t t = 0; t < num_threads; t++) {
1368
+ commands[t].reserve(line_infos[t].size());
1369
+ }
1370
+ }
1371
+
1372
+ CommandCount command_count[kMaxThreads];
1373
+ // Array index to `mtllib` line. According to wavefront .obj spec, `mtllib'
1374
+ // should appear only once in .obj.
1375
+ int mtllib_t_index = -1;
1376
+ int mtllib_i_index = -1;
1377
+
1378
+ ms_alloc = std::chrono::high_resolution_clock::now() - t_alloc_start;
1379
+
1380
+ // 2. parse each line in parallel.
1381
+ {
1382
+ StackVector<std::thread, 16> workers;
1383
+ auto t_start = std::chrono::high_resolution_clock::now();
1384
+
1385
+ for (size_t t = 0; t < num_threads; t++) {
1386
+ workers->push_back(std::thread([&, t]() {
1387
+
1388
+ for (size_t i = 0; i < line_infos[t].size(); i++) {
1389
+ Command command;
1390
+ bool ret = parseLine(&command, &buf[line_infos[t][i].pos],
1391
+ line_infos[t][i].len, option.triangulate);
1392
+ if (ret) {
1393
+ if (command.type == COMMAND_V) {
1394
+ command_count[t].num_v++;
1395
+ } else if (command.type == COMMAND_VN) {
1396
+ command_count[t].num_vn++;
1397
+ } else if (command.type == COMMAND_VT) {
1398
+ command_count[t].num_vt++;
1399
+ } else if (command.type == COMMAND_F) {
1400
+ command_count[t].num_f += command.f.size();
1401
+ command_count[t].num_indices += command.f_num_verts.size();
1402
+ }
1403
+
1404
+ if (command.type == COMMAND_MTLLIB) {
1405
+ mtllib_t_index = t;
1406
+ mtllib_i_index = commands->size();
1407
+ }
1408
+
1409
+ commands[t].emplace_back(std::move(command));
1410
+ }
1411
+ }
1412
+
1413
+ }));
1414
+ }
1415
+
1416
+ for (size_t t = 0; t < workers->size(); t++) {
1417
+ workers[t].join();
1418
+ }
1419
+
1420
+ auto t_end = std::chrono::high_resolution_clock::now();
1421
+
1422
+ ms_parse = t_end - t_start;
1423
+ }
1424
+
1425
+ std::map<std::string, int> material_map;
1426
+
1427
+ // Load material(if exits)
1428
+ if (mtllib_i_index >= 0 && mtllib_t_index >= 0 &&
1429
+ commands[mtllib_t_index][mtllib_i_index].mtllib_name &&
1430
+ commands[mtllib_t_index][mtllib_i_index].mtllib_name_len > 0) {
1431
+ std::string material_filename =
1432
+ std::string(commands[mtllib_t_index][mtllib_i_index].mtllib_name,
1433
+ commands[mtllib_t_index][mtllib_i_index].mtllib_name_len);
1434
+ // std::cout << "mtllib :" << material_filename << std::endl;
1435
+
1436
+ auto t1 = std::chrono::high_resolution_clock::now();
1437
+
1438
+ std::ifstream ifs(material_filename);
1439
+ if (ifs.good()) {
1440
+ LoadMtl(&material_map, materials, &ifs);
1441
+
1442
+ // std::cout << "maetrials = " << materials.size() << std::endl;
1443
+
1444
+ ifs.close();
1445
+ }
1446
+
1447
+ auto t2 = std::chrono::high_resolution_clock::now();
1448
+
1449
+ ms_load_mtl = t2 - t1;
1450
+ }
1451
+
1452
+ auto command_sum = 0;
1453
+ for (size_t t = 0; t < num_threads; t++) {
1454
+ // std::cout << t << ": # of commands = " << commands[t].size() <<
1455
+ // std::endl;
1456
+ command_sum += commands[t].size();
1457
+ }
1458
+ // std::cout << "# of commands = " << command_sum << std::endl;
1459
+
1460
+ size_t num_v = 0;
1461
+ size_t num_vn = 0;
1462
+ size_t num_vt = 0;
1463
+ size_t num_f = 0;
1464
+ size_t num_indices = 0;
1465
+ for (size_t t = 0; t < num_threads; t++) {
1466
+ num_v += command_count[t].num_v;
1467
+ num_vn += command_count[t].num_vn;
1468
+ num_vt += command_count[t].num_vt;
1469
+ num_f += command_count[t].num_f;
1470
+ num_indices += command_count[t].num_indices;
1471
+ }
1472
+
1473
+ // std::cout << "# v " << num_v << std::endl;
1474
+ // std::cout << "# vn " << num_vn << std::endl;
1475
+ // std::cout << "# vt " << num_vt << std::endl;
1476
+ // std::cout << "# f " << num_f << std::endl;
1477
+
1478
+ // 4. merge
1479
+ // @todo { parallelize merge. }
1480
+ {
1481
+ auto t_start = std::chrono::high_resolution_clock::now();
1482
+
1483
+ attrib->vertices.resize(num_v * 3);
1484
+ attrib->normals.resize(num_vn * 3);
1485
+ attrib->texcoords.resize(num_vt * 2);
1486
+ attrib->indices.resize(num_f);
1487
+ attrib->face_num_verts.resize(num_indices);
1488
+ attrib->material_ids.resize(num_indices);
1489
+
1490
+ size_t v_offsets[kMaxThreads];
1491
+ size_t n_offsets[kMaxThreads];
1492
+ size_t t_offsets[kMaxThreads];
1493
+ size_t f_offsets[kMaxThreads];
1494
+ size_t face_offsets[kMaxThreads];
1495
+
1496
+ v_offsets[0] = 0;
1497
+ n_offsets[0] = 0;
1498
+ t_offsets[0] = 0;
1499
+ f_offsets[0] = 0;
1500
+ face_offsets[0] = 0;
1501
+
1502
+ for (size_t t = 1; t < num_threads; t++) {
1503
+ v_offsets[t] = v_offsets[t - 1] + command_count[t - 1].num_v;
1504
+ n_offsets[t] = n_offsets[t - 1] + command_count[t - 1].num_vn;
1505
+ t_offsets[t] = t_offsets[t - 1] + command_count[t - 1].num_vt;
1506
+ f_offsets[t] = f_offsets[t - 1] + command_count[t - 1].num_f;
1507
+ face_offsets[t] = face_offsets[t - 1] + command_count[t - 1].num_indices;
1508
+ }
1509
+
1510
+ StackVector<std::thread, 16> workers;
1511
+
1512
+ for (size_t t = 0; t < num_threads; t++) {
1513
+ int material_id = -1; // -1 = default unknown material.
1514
+ workers->push_back(std::thread([&, t]() {
1515
+ size_t v_count = v_offsets[t];
1516
+ size_t n_count = n_offsets[t];
1517
+ size_t t_count = t_offsets[t];
1518
+ size_t f_count = f_offsets[t];
1519
+ size_t face_count = face_offsets[t];
1520
+
1521
+ for (size_t i = 0; i < commands[t].size(); i++) {
1522
+ if (commands[t][i].type == COMMAND_EMPTY) {
1523
+ continue;
1524
+ } else if (commands[t][i].type == COMMAND_USEMTL) {
1525
+ if (commands[t][i].material_name &&
1526
+ commands[t][i].material_name_len > 0) {
1527
+ std::string material_name(commands[t][i].material_name,
1528
+ commands[t][i].material_name_len);
1529
+
1530
+ if (material_map.find(material_name) != material_map.end()) {
1531
+ material_id = material_map[material_name];
1532
+ } else {
1533
+ // Assign invalid material ID
1534
+ material_id = -1;
1535
+ }
1536
+ }
1537
+ } else if (commands[t][i].type == COMMAND_V) {
1538
+ attrib->vertices[3 * v_count + 0] = commands[t][i].vx;
1539
+ attrib->vertices[3 * v_count + 1] = commands[t][i].vy;
1540
+ attrib->vertices[3 * v_count + 2] = commands[t][i].vz;
1541
+ v_count++;
1542
+ } else if (commands[t][i].type == COMMAND_VN) {
1543
+ attrib->normals[3 * n_count + 0] = commands[t][i].nx;
1544
+ attrib->normals[3 * n_count + 1] = commands[t][i].ny;
1545
+ attrib->normals[3 * n_count + 2] = commands[t][i].nz;
1546
+ n_count++;
1547
+ } else if (commands[t][i].type == COMMAND_VT) {
1548
+ attrib->texcoords[2 * t_count + 0] = commands[t][i].tx;
1549
+ attrib->texcoords[2 * t_count + 1] = commands[t][i].ty;
1550
+ t_count++;
1551
+ } else if (commands[t][i].type == COMMAND_F) {
1552
+ for (size_t k = 0; k < commands[t][i].f.size(); k++) {
1553
+ index_t &vi = commands[t][i].f[k];
1554
+ int vertex_index = fixIndex(vi.vertex_index, v_count);
1555
+ int texcoord_index = fixIndex(vi.texcoord_index, t_count);
1556
+ int normal_index = fixIndex(vi.normal_index, n_count);
1557
+ attrib->indices[f_count + k] =
1558
+ index_t(vertex_index, texcoord_index, normal_index);
1559
+ }
1560
+ for (size_t k = 0; k < commands[t][i].f_num_verts.size(); k++) {
1561
+ attrib->material_ids[face_count + k] = material_id;
1562
+ attrib->face_num_verts[face_count + k] = commands[t][i].f_num_verts[k];
1563
+ }
1564
+
1565
+ f_count += commands[t][i].f.size();
1566
+ face_count += commands[t][i].f_num_verts.size();
1567
+ }
1568
+ }
1569
+ }));
1570
+ }
1571
+
1572
+ for (size_t t = 0; t < workers->size(); t++) {
1573
+ workers[t].join();
1574
+ }
1575
+
1576
+ auto t_end = std::chrono::high_resolution_clock::now();
1577
+ ms_merge = t_end - t_start;
1578
+ }
1579
+
1580
+ auto t4 = std::chrono::high_resolution_clock::now();
1581
+
1582
+ // 5. Construct shape information.
1583
+ {
1584
+ auto t_start = std::chrono::high_resolution_clock::now();
1585
+
1586
+ // @todo { Can we boost the performance by multi-threaded execution? }
1587
+ int face_count = 0;
1588
+ shape_t shape;
1589
+ shape.face_offset = 0;
1590
+ shape.length = 0;
1591
+ int face_prev_offset = 0;
1592
+ for (size_t t = 0; t < num_threads; t++) {
1593
+ for (size_t i = 0; i < commands[t].size(); i++) {
1594
+ if (commands[t][i].type == COMMAND_O ||
1595
+ commands[t][i].type == COMMAND_G) {
1596
+ std::string name;
1597
+ if (commands[t][i].type == COMMAND_O) {
1598
+ name = std::string(commands[t][i].object_name,
1599
+ commands[t][i].object_name_len);
1600
+ } else {
1601
+ name = std::string(commands[t][i].group_name,
1602
+ commands[t][i].group_name_len);
1603
+ }
1604
+
1605
+ if (face_count == 0) {
1606
+ // 'o' or 'g' appears before any 'f'
1607
+ shape.name = name;
1608
+ shape.face_offset = face_count;
1609
+ face_prev_offset = face_count;
1610
+ } else {
1611
+ if (shapes->size() == 0) {
1612
+ // 'o' or 'g' after some 'v' lines.
1613
+ // create a shape with null name
1614
+ shape.length = face_count - face_prev_offset;
1615
+ face_prev_offset = face_count;
1616
+
1617
+ shapes->push_back(shape);
1618
+
1619
+ } else {
1620
+ if ((face_count - face_prev_offset) > 0) {
1621
+ // push previous shape
1622
+ shape.length = face_count - face_prev_offset;
1623
+ shapes->push_back(shape);
1624
+ face_prev_offset = face_count;
1625
+ }
1626
+ }
1627
+
1628
+ // redefine shape.
1629
+ shape.name = name;
1630
+ shape.face_offset = face_count;
1631
+ shape.length = 0;
1632
+ }
1633
+ }
1634
+ if (commands[t][i].type == COMMAND_F) {
1635
+ face_count++;
1636
+ }
1637
+ }
1638
+ }
1639
+
1640
+ if ((face_count - face_prev_offset) > 0) {
1641
+ shape.length = face_count - shape.face_offset;
1642
+ if (shape.length > 0) {
1643
+ shapes->push_back(shape);
1644
+ }
1645
+ } else {
1646
+ // Guess no 'v' line occurrence after 'o' or 'g', so discards current
1647
+ // shape information.
1648
+ }
1649
+
1650
+ auto t_end = std::chrono::high_resolution_clock::now();
1651
+
1652
+ ms_construct = t_end - t_start;
1653
+ }
1654
+
1655
+ std::chrono::duration<double, std::milli> ms_total = t4 - t1;
1656
+ if (option.verbose) {
1657
+ std::cout << "total parsing time: " << ms_total.count() << " ms\n";
1658
+ std::cout << " line detection : " << ms_linedetection.count() << " ms\n";
1659
+ std::cout << " alloc buf : " << ms_alloc.count() << " ms\n";
1660
+ std::cout << " parse : " << ms_parse.count() << " ms\n";
1661
+ std::cout << " merge : " << ms_merge.count() << " ms\n";
1662
+ std::cout << " construct : " << ms_construct.count() << " ms\n";
1663
+ std::cout << " mtl load : " << ms_load_mtl.count() << " ms\n";
1664
+ std::cout << "# of vertices = " << attrib->vertices.size() << std::endl;
1665
+ std::cout << "# of normals = " << attrib->normals.size() << std::endl;
1666
+ std::cout << "# of texcoords = " << attrib->texcoords.size() << std::endl;
1667
+ std::cout << "# of face indices = " << attrib->indices.size() << std::endl;
1668
+ std::cout << "# of indices = " << attrib->material_ids.size() << std::endl;
1669
+ std::cout << "# of shapes = " << shapes->size() << std::endl;
1670
+ }
1671
+
1672
+ return true;
1673
+ }
1674
+ #endif // TINYOBJ_LOADER_OPT_IMPLEMENTATION
1675
+
1676
+ } // namespace tinyobj_opt
1677
+
1678
+ #endif // TINOBJ_LOADER_OPT_H_