pixo 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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_