jax 0.0.0.1

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 (446) hide show
  1. data/.gitignore +12 -0
  2. data/.gitmodules +3 -0
  3. data/.rvmrc +7 -0
  4. data/Gemfile +4 -0
  5. data/README.rdoc +32 -0
  6. data/Rakefile +144 -0
  7. data/bin/jax +11 -0
  8. data/builtin/shaders/basic/common.ejs +11 -0
  9. data/builtin/shaders/basic/fragment.ejs +5 -0
  10. data/builtin/shaders/basic/vertex.ejs +13 -0
  11. data/builtin/shaders/depthmap/common.ejs +1 -0
  12. data/builtin/shaders/depthmap/fragment.ejs +5 -0
  13. data/builtin/shaders/depthmap/vertex.ejs +7 -0
  14. data/builtin/shaders/fog/common.ejs +7 -0
  15. data/builtin/shaders/fog/fragment.ejs +23 -0
  16. data/builtin/shaders/fog/manifest.yml +12 -0
  17. data/builtin/shaders/fog/material.js +34 -0
  18. data/builtin/shaders/fog/vertex.ejs +10 -0
  19. data/builtin/shaders/functions/depth_map.ejs +24 -0
  20. data/builtin/shaders/functions/lights.ejs +155 -0
  21. data/builtin/shaders/lighting/common.ejs +5 -0
  22. data/builtin/shaders/lighting/fragment.ejs +34 -0
  23. data/builtin/shaders/lighting/manifest.yml +4 -0
  24. data/builtin/shaders/lighting/material.js +26 -0
  25. data/builtin/shaders/lighting/vertex.ejs +7 -0
  26. data/builtin/shaders/normal_map/common.ejs +12 -0
  27. data/builtin/shaders/normal_map/fragment.ejs +26 -0
  28. data/builtin/shaders/normal_map/manifest.yml +17 -0
  29. data/builtin/shaders/normal_map/material.js +16 -0
  30. data/builtin/shaders/normal_map/vertex.ejs +57 -0
  31. data/builtin/shaders/paraboloid-depthmap/common.ejs +6 -0
  32. data/builtin/shaders/paraboloid-depthmap/fragment.ejs +8 -0
  33. data/builtin/shaders/paraboloid-depthmap/material.js +15 -0
  34. data/builtin/shaders/paraboloid-depthmap/vertex.ejs +26 -0
  35. data/builtin/shaders/shadow_map/common.ejs +14 -0
  36. data/builtin/shaders/shadow_map/fragment.ejs +66 -0
  37. data/builtin/shaders/shadow_map/manifest.yml +1 -0
  38. data/builtin/shaders/shadow_map/material.js +26 -0
  39. data/builtin/shaders/shadow_map/vertex.ejs +46 -0
  40. data/builtin/shaders/texture/common.ejs +4 -0
  41. data/builtin/shaders/texture/fragment.ejs +11 -0
  42. data/builtin/shaders/texture/manifest.yml +17 -0
  43. data/builtin/shaders/texture/material.js +18 -0
  44. data/builtin/shaders/texture/vertex.ejs +9 -0
  45. data/guides/assets/images/book_icon.gif +0 -0
  46. data/guides/assets/images/bullet.gif +0 -0
  47. data/guides/assets/images/chapters_icon.gif +0 -0
  48. data/guides/assets/images/check_bullet.gif +0 -0
  49. data/guides/assets/images/credits_pic_blank.gif +0 -0
  50. data/guides/assets/images/edge_badge.png +0 -0
  51. data/guides/assets/images/feature_tile.gif +0 -0
  52. data/guides/assets/images/footer_tile.gif +0 -0
  53. data/guides/assets/images/getting_started/clean_passing_jasmine_suite.png +0 -0
  54. data/guides/assets/images/getting_started/rock.png +0 -0
  55. data/guides/assets/images/getting_started/rock_normal.png +0 -0
  56. data/guides/assets/images/grey_bullet.gif +0 -0
  57. data/guides/assets/images/header_backdrop.png +0 -0
  58. data/guides/assets/images/header_tile.gif +0 -0
  59. data/guides/assets/images/icons/README +5 -0
  60. data/guides/assets/images/icons/callouts/1.png +0 -0
  61. data/guides/assets/images/icons/callouts/10.png +0 -0
  62. data/guides/assets/images/icons/callouts/11.png +0 -0
  63. data/guides/assets/images/icons/callouts/12.png +0 -0
  64. data/guides/assets/images/icons/callouts/13.png +0 -0
  65. data/guides/assets/images/icons/callouts/14.png +0 -0
  66. data/guides/assets/images/icons/callouts/15.png +0 -0
  67. data/guides/assets/images/icons/callouts/2.png +0 -0
  68. data/guides/assets/images/icons/callouts/3.png +0 -0
  69. data/guides/assets/images/icons/callouts/4.png +0 -0
  70. data/guides/assets/images/icons/callouts/5.png +0 -0
  71. data/guides/assets/images/icons/callouts/6.png +0 -0
  72. data/guides/assets/images/icons/callouts/7.png +0 -0
  73. data/guides/assets/images/icons/callouts/8.png +0 -0
  74. data/guides/assets/images/icons/callouts/9.png +0 -0
  75. data/guides/assets/images/icons/caution.png +0 -0
  76. data/guides/assets/images/icons/example.png +0 -0
  77. data/guides/assets/images/icons/home.png +0 -0
  78. data/guides/assets/images/icons/important.png +0 -0
  79. data/guides/assets/images/icons/next.png +0 -0
  80. data/guides/assets/images/icons/note.png +0 -0
  81. data/guides/assets/images/icons/prev.png +0 -0
  82. data/guides/assets/images/icons/tip.png +0 -0
  83. data/guides/assets/images/icons/up.png +0 -0
  84. data/guides/assets/images/icons/warning.png +0 -0
  85. data/guides/assets/images/nav_arrow.gif +0 -0
  86. data/guides/assets/images/tab_grey.gif +0 -0
  87. data/guides/assets/images/tab_info.gif +0 -0
  88. data/guides/assets/images/tab_note.gif +0 -0
  89. data/guides/assets/images/tab_red.gif +0 -0
  90. data/guides/assets/images/tab_yellow.gif +0 -0
  91. data/guides/assets/images/tab_yellow.png +0 -0
  92. data/guides/assets/javascripts/guides.js +7 -0
  93. data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
  94. data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
  95. data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
  96. data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
  97. data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
  98. data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
  99. data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
  100. data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
  101. data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
  102. data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
  103. data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
  104. data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
  105. data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
  106. data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
  107. data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
  108. data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
  109. data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
  110. data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
  111. data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
  112. data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
  113. data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
  114. data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
  115. data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
  116. data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
  117. data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
  118. data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
  119. data/guides/assets/stylesheets/fixes.css +16 -0
  120. data/guides/assets/stylesheets/main.css +445 -0
  121. data/guides/assets/stylesheets/print.css +52 -0
  122. data/guides/assets/stylesheets/reset.css +43 -0
  123. data/guides/assets/stylesheets/style.css +13 -0
  124. data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
  125. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
  126. data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
  127. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
  128. data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
  129. data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
  130. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
  131. data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
  132. data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
  133. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
  134. data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
  135. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
  136. data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
  137. data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
  138. data/guides/assets/stylesheets/syntaxhighlighter/shThemeJaxGuides.css +116 -0
  139. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
  140. data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
  141. data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
  142. data/guides/jax_guides.rb +41 -0
  143. data/guides/jax_guides/common.rb +7 -0
  144. data/guides/jax_guides/generator.rb +287 -0
  145. data/guides/jax_guides/helpers.rb +29 -0
  146. data/guides/jax_guides/indexer.rb +69 -0
  147. data/guides/jax_guides/levenshtein.rb +31 -0
  148. data/guides/jax_guides/textile_extensions.rb +61 -0
  149. data/guides/source/getting_started.textile +1171 -0
  150. data/guides/source/index.html.erb +50 -0
  151. data/guides/source/layout.html.erb +158 -0
  152. data/guides/source/lighting.textile +5 -0
  153. data/guides/source/materials.textile +5 -0
  154. data/guides/source/shaders.textile +5 -0
  155. data/guides/source/testing.textile +5 -0
  156. data/guides/w3c_validator.rb +91 -0
  157. data/jax.gems +1 -0
  158. data/jax.gemspec +40 -0
  159. data/lib/jax.rb +28 -0
  160. data/lib/jax/application.rb +92 -0
  161. data/lib/jax/application/configuration.rb +27 -0
  162. data/lib/jax/generators/app.rb +17 -0
  163. data/lib/jax/generators/app/app_generator.rb +78 -0
  164. data/lib/jax/generators/app/templates/Gemfile.tt +3 -0
  165. data/lib/jax/generators/app/templates/Rakefile +6 -0
  166. data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +5 -0
  167. data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +3 -0
  168. data/lib/jax/generators/app/templates/app/models/.empty_directory +0 -0
  169. data/lib/jax/generators/app/templates/app/resources/.empty_directory +0 -0
  170. data/lib/jax/generators/app/templates/app/views/.empty_directory +0 -0
  171. data/lib/jax/generators/app/templates/config/application.rb.tt +6 -0
  172. data/lib/jax/generators/app/templates/config/boot.rb +13 -0
  173. data/lib/jax/generators/app/templates/config/routes.rb.tt +5 -0
  174. data/lib/jax/generators/app/templates/public/javascripts/jax.js +7561 -0
  175. data/lib/jax/generators/app/templates/public/webgl_not_supported.html +26 -0
  176. data/lib/jax/generators/app/templates/script/jax +7 -0
  177. data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +11 -0
  178. data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +12 -0
  179. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +90 -0
  180. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  181. data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
  182. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +216 -0
  183. data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +63 -0
  184. data/lib/jax/generators/commands.rb +81 -0
  185. data/lib/jax/generators/controller/USAGE +9 -0
  186. data/lib/jax/generators/controller/controller_generator.rb +59 -0
  187. data/lib/jax/generators/controller/templates/controller_source.js.tt +16 -0
  188. data/lib/jax/generators/controller/templates/controller_test.js.tt +11 -0
  189. data/lib/jax/generators/controller/templates/helper.js.tt +3 -0
  190. data/lib/jax/generators/controller/templates/helper_test.js.tt +12 -0
  191. data/lib/jax/generators/controller/templates/view.js.tt +4 -0
  192. data/lib/jax/generators/light_source/USAGE +14 -0
  193. data/lib/jax/generators/light_source/light_source_generator.rb +47 -0
  194. data/lib/jax/generators/light_source/templates/light.yml.tt +39 -0
  195. data/lib/jax/generators/material/USAGE +29 -0
  196. data/lib/jax/generators/material/material_generator.rb +81 -0
  197. data/lib/jax/generators/material/templates/append.yml.tt +7 -0
  198. data/lib/jax/generators/material/templates/material.yml.tt +33 -0
  199. data/lib/jax/generators/model/USAGE +5 -0
  200. data/lib/jax/generators/model/model_generator.rb +42 -0
  201. data/lib/jax/generators/model/templates/model.js.tt +11 -0
  202. data/lib/jax/generators/model/templates/test.js.tt +11 -0
  203. data/lib/jax/generators/script_jax_loader.rb +32 -0
  204. data/lib/jax/monkeypatch/jasmine.rb +3 -0
  205. data/lib/jax/monkeypatch/jasmine/config.rb +21 -0
  206. data/lib/jax/monkeypatch/jasmine/server.rb +50 -0
  207. data/lib/jax/packager.rb +58 -0
  208. data/lib/jax/packager/sprockets_template.rb +49 -0
  209. data/lib/jax/resource_compiler.rb +50 -0
  210. data/lib/jax/routes.rb +61 -0
  211. data/lib/jax/shader.rb +158 -0
  212. data/lib/jax/tasks/rake.rb +34 -0
  213. data/lib/jax/version.rb +12 -0
  214. data/public/images/brickwall.jpg +0 -0
  215. data/public/images/jacks.jpg +0 -0
  216. data/public/images/normal_map.jpg +0 -0
  217. data/public/images/rock.png +0 -0
  218. data/public/images/rockNormal.png +0 -0
  219. data/public/images/rss.png +0 -0
  220. data/public/webgl_not_supported.html +26 -0
  221. data/spec/example_app/Gemfile +1 -0
  222. data/spec/example_app/Rakefile +15 -0
  223. data/spec/example_app/app/controllers/application_controller.js +5 -0
  224. data/spec/example_app/app/controllers/courthouse_controller.js +24 -0
  225. data/spec/example_app/app/controllers/lighting_controller.js +69 -0
  226. data/spec/example_app/app/controllers/shadows_controller.js +130 -0
  227. data/spec/example_app/app/controllers/textures_controller.js +52 -0
  228. data/spec/example_app/app/helpers/application_helper.js +3 -0
  229. data/spec/example_app/app/helpers/textures_helper.js +3 -0
  230. data/spec/example_app/app/models/character.js +23 -0
  231. data/spec/example_app/app/models/door.js +10 -0
  232. data/spec/example_app/app/models/scene.js +19 -0
  233. data/spec/example_app/app/resources/characters/judge.yml +3 -0
  234. data/spec/example_app/app/resources/doors/courthouse_door.yml +5 -0
  235. data/spec/example_app/app/resources/light_sources/directional_light.yml +13 -0
  236. data/spec/example_app/app/resources/light_sources/point_light.yml +31 -0
  237. data/spec/example_app/app/resources/light_sources/spot_light.yml +15 -0
  238. data/spec/example_app/app/resources/light_sources/sun.yml +7 -0
  239. data/spec/example_app/app/resources/light_sources/textures_point.yml +34 -0
  240. data/spec/example_app/app/resources/materials/bricks.yml +36 -0
  241. data/spec/example_app/app/resources/materials/lighting_with_shadows.yml +27 -0
  242. data/spec/example_app/app/resources/scenes/courthouse.yml +4 -0
  243. data/spec/example_app/app/views/courthouse/index.js +4 -0
  244. data/spec/example_app/app/views/lighting/index.js +4 -0
  245. data/spec/example_app/app/views/shadows/index.js +6 -0
  246. data/spec/example_app/app/views/textures/index.js +4 -0
  247. data/spec/example_app/config/application.rb +6 -0
  248. data/spec/example_app/config/boot.rb +13 -0
  249. data/spec/example_app/config/routes.rb +6 -0
  250. data/spec/example_app/public/images/185__normalmap.png +0 -0
  251. data/spec/example_app/public/images/face_norm.jpg +0 -0
  252. data/spec/example_app/public/images/rock.png +0 -0
  253. data/spec/example_app/public/images/rockNormal.png +0 -0
  254. data/spec/example_app/public/images/rss.png +0 -0
  255. data/spec/example_app/public/webgl_not_supported.html +26 -0
  256. data/spec/example_app/script/jax +7 -0
  257. data/spec/example_app/spec/javascripts/controllers/textures_controller_spec.js +11 -0
  258. data/spec/example_app/spec/javascripts/helpers/application_helper_spec.js +12 -0
  259. data/spec/example_app/spec/javascripts/resources/directional_light_spec.js +16 -0
  260. data/spec/example_app/spec/javascripts/resources/point_light_spec.js +17 -0
  261. data/spec/example_app/spec/javascripts/resources/spot_light_spec.js +18 -0
  262. data/spec/example_app/spec/javascripts/support/jasmine.yml +89 -0
  263. data/spec/example_app/spec/javascripts/support/jasmine_runner.rb +32 -0
  264. data/spec/example_app/spec/javascripts/support/spec_helpers/jax_spec_helper.js +93 -0
  265. data/spec/example_app/spec/javascripts/support/spec_layout.html.erb +84 -0
  266. data/spec/generators/app_generator_spec.rb +46 -0
  267. data/spec/generators/controller_generator_spec.rb +68 -0
  268. data/spec/generators/light_generator_spec.rb +51 -0
  269. data/spec/generators/material_generator_spec.rb +35 -0
  270. data/spec/generators/model_generator_spec.rb +43 -0
  271. data/spec/javascripts/Player.js +58 -0
  272. data/spec/javascripts/helpers/SpecHelper.js +216 -0
  273. data/spec/javascripts/jax/builtin/materials/core_materials_spec.js +41 -0
  274. data/spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js +37 -0
  275. data/spec/javascripts/jax/builtin/materials/fog_spec.js +19 -0
  276. data/spec/javascripts/jax/builtin/materials/lighting_spec.js +19 -0
  277. data/spec/javascripts/jax/builtin/materials/normal_map_spec.js +19 -0
  278. data/spec/javascripts/jax/builtin/materials/shadow_map_spec.js +19 -0
  279. data/spec/javascripts/jax/builtin/materials/texture_spec.js +19 -0
  280. data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
  281. data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
  282. data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
  283. data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
  284. data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
  285. data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
  286. data/spec/javascripts/jax/compatibility_spec.js +50 -0
  287. data/spec/javascripts/jax/context_spec.js +82 -0
  288. data/spec/javascripts/jax/controller_spec.js +145 -0
  289. data/spec/javascripts/jax/core/delegation_spec.js +48 -0
  290. data/spec/javascripts/jax/core/events_spec.js +17 -0
  291. data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
  292. data/spec/javascripts/jax/core/utils_spec.js +256 -0
  293. data/spec/javascripts/jax/helper_spec.js +33 -0
  294. data/spec/javascripts/jax/model_spec.js +87 -0
  295. data/spec/javascripts/jax/optimizations/material_limitations_spec.js +87 -0
  296. data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +68 -0
  297. data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
  298. data/spec/javascripts/jax/route_set_spec.js +67 -0
  299. data/spec/javascripts/jax/view_manager_spec.js +17 -0
  300. data/spec/javascripts/jax/webgl/camera_spec.js +159 -0
  301. data/spec/javascripts/jax/webgl/framebuffer_spec.js +46 -0
  302. data/spec/javascripts/jax/webgl/lighting_spec.js +61 -0
  303. data/spec/javascripts/jax/webgl/material_spec.js +118 -0
  304. data/spec/javascripts/jax/webgl/mesh_spec.js +86 -0
  305. data/spec/javascripts/jax/webgl/shader/manifest_spec.js +60 -0
  306. data/spec/javascripts/jax/webgl/shader_chain_spec.js +192 -0
  307. data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
  308. data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
  309. data/spec/javascripts/jax/webgl/texture_spec.js +162 -0
  310. data/spec/javascripts/jax/webgl_spec.js +5 -0
  311. data/spec/javascripts/jax/world_spec.js +88 -0
  312. data/spec/javascripts/jax_spec.js +27 -0
  313. data/spec/javascripts/support/jasmine.yml +85 -0
  314. data/spec/javascripts/support/jasmine_runner.rb +32 -0
  315. data/spec/lib/jax/routes_spec.rb +24 -0
  316. data/spec/lib/jax/shader_spec.rb +57 -0
  317. data/spec/lib/jax/tasks/jax_rake_spec.rb +79 -0
  318. data/spec/spec_helper.rb +11 -0
  319. data/spec/support/file_exist_matcher.rb +23 -0
  320. data/spec/support/spec_shell.rb +97 -0
  321. data/src/jax.js +84 -0
  322. data/src/jax/anim_frame.js +47 -0
  323. data/src/jax/builtin/all.js +7 -0
  324. data/src/jax/builtin/meshes/cube.js +62 -0
  325. data/src/jax/builtin/meshes/plane.js +36 -0
  326. data/src/jax/builtin/meshes/quad.js +80 -0
  327. data/src/jax/builtin/meshes/sphere.js +46 -0
  328. data/src/jax/builtin/meshes/teapot.js +38 -0
  329. data/src/jax/builtin/meshes/torus.js +46 -0
  330. data/src/jax/compatibility.js +140 -0
  331. data/src/jax/context.js +253 -0
  332. data/src/jax/controller.js +157 -0
  333. data/src/jax/core.js +39 -0
  334. data/src/jax/core/math.js +40 -0
  335. data/src/jax/core/matrix_stack.js +306 -0
  336. data/src/jax/core/util.js +226 -0
  337. data/src/jax/events.js +179 -0
  338. data/src/jax/geometry.js +3 -0
  339. data/src/jax/geometry/plane.js +59 -0
  340. data/src/jax/helper.js +8 -0
  341. data/src/jax/model.js +163 -0
  342. data/src/jax/prototype/class.js +78 -0
  343. data/src/jax/prototype/core.js +112 -0
  344. data/src/jax/prototype/extensions.js +124 -0
  345. data/src/jax/route_set.js +125 -0
  346. data/src/jax/vendor/ejs.js +4 -0
  347. data/src/jax/vendor/glMatrix.js +3 -0
  348. data/src/jax/view.js +37 -0
  349. data/src/jax/view_manager.js +46 -0
  350. data/src/jax/webgl.js +98 -0
  351. data/src/jax/webgl/camera.js +526 -0
  352. data/src/jax/webgl/core.js +6 -0
  353. data/src/jax/webgl/core/buffer.js +161 -0
  354. data/src/jax/webgl/core/edge.js +6 -0
  355. data/src/jax/webgl/core/events.js +25 -0
  356. data/src/jax/webgl/core/face.js +8 -0
  357. data/src/jax/webgl/core/framebuffer.js +206 -0
  358. data/src/jax/webgl/material.js +375 -0
  359. data/src/jax/webgl/mesh.js +412 -0
  360. data/src/jax/webgl/scene.js +11 -0
  361. data/src/jax/webgl/scene/frustum.js +260 -0
  362. data/src/jax/webgl/scene/light_manager.js +112 -0
  363. data/src/jax/webgl/scene/light_source.js +248 -0
  364. data/src/jax/webgl/shader.js +282 -0
  365. data/src/jax/webgl/shader/delegator.js +13 -0
  366. data/src/jax/webgl/shader/delegator/attribute.js +53 -0
  367. data/src/jax/webgl/shader/delegator/uniform.js +71 -0
  368. data/src/jax/webgl/shader/manifest.js +64 -0
  369. data/src/jax/webgl/shader/program.js +140 -0
  370. data/src/jax/webgl/shader_chain.js +256 -0
  371. data/src/jax/webgl/texture.js +312 -0
  372. data/src/jax/webgl/world.js +119 -0
  373. data/vendor/ejs/.svn/all-wcprops +17 -0
  374. data/vendor/ejs/.svn/entries +114 -0
  375. data/vendor/ejs/.svn/text-base/Eratta.txt.svn-base +3 -0
  376. data/vendor/ejs/.svn/text-base/license.txt.svn-base +21 -0
  377. data/vendor/ejs/Eratta.txt +3 -0
  378. data/vendor/ejs/example/.svn/all-wcprops +29 -0
  379. data/vendor/ejs/example/.svn/entries +164 -0
  380. data/vendor/ejs/example/.svn/prop-base/ejs.gif.svn-base +5 -0
  381. data/vendor/ejs/example/.svn/text-base/demo.html.svn-base +54 -0
  382. data/vendor/ejs/example/.svn/text-base/ejs.gif.svn-base +0 -0
  383. data/vendor/ejs/example/.svn/text-base/example.css.svn-base +31 -0
  384. data/vendor/ejs/example/.svn/text-base/example.js.svn-base +88 -0
  385. data/vendor/ejs/example/demo.html +54 -0
  386. data/vendor/ejs/example/ejs.gif +0 -0
  387. data/vendor/ejs/example/example.css +31 -0
  388. data/vendor/ejs/example/example.js +88 -0
  389. data/vendor/ejs/lib/.svn/all-wcprops +11 -0
  390. data/vendor/ejs/lib/.svn/entries +62 -0
  391. data/vendor/ejs/lib/.svn/text-base/ejs_fulljslint.js.svn-base +3774 -0
  392. data/vendor/ejs/lib/ejs_fulljslint.js +3774 -0
  393. data/vendor/ejs/license.txt +21 -0
  394. data/vendor/ejs/script/.svn/all-wcprops +17 -0
  395. data/vendor/ejs/script/.svn/entries +96 -0
  396. data/vendor/ejs/script/.svn/prop-base/yuicompressor-2.2.4.jar.svn-base +5 -0
  397. data/vendor/ejs/script/.svn/text-base/production.bat.svn-base +4 -0
  398. data/vendor/ejs/script/.svn/text-base/yuicompressor-2.2.4.jar.svn-base +0 -0
  399. data/vendor/ejs/script/production.bat +4 -0
  400. data/vendor/ejs/script/yuicompressor-2.2.4.jar +0 -0
  401. data/vendor/ejs/src/.svn/all-wcprops +17 -0
  402. data/vendor/ejs/src/.svn/entries +96 -0
  403. data/vendor/ejs/src/.svn/text-base/ejs.js.svn-base +505 -0
  404. data/vendor/ejs/src/.svn/text-base/view.js.svn-base +200 -0
  405. data/vendor/ejs/src/ejs.js +505 -0
  406. data/vendor/ejs/src/view.js +200 -0
  407. data/vendor/ejs/test/.svn/all-wcprops +23 -0
  408. data/vendor/ejs/test/.svn/entries +139 -0
  409. data/vendor/ejs/test/.svn/text-base/index.html.svn-base +18 -0
  410. data/vendor/ejs/test/.svn/text-base/setup_test.html.svn-base +44 -0
  411. data/vendor/ejs/test/.svn/text-base/sidebar.html.svn-base +28 -0
  412. data/vendor/ejs/test/included/.svn/all-wcprops +23 -0
  413. data/vendor/ejs/test/included/.svn/entries +130 -0
  414. data/vendor/ejs/test/included/.svn/text-base/prototype.js.svn-base +4184 -0
  415. data/vendor/ejs/test/included/.svn/text-base/test.css.svn-base +44 -0
  416. data/vendor/ejs/test/included/.svn/text-base/unittest.js.svn-base +564 -0
  417. data/vendor/ejs/test/included/prototype.js +4184 -0
  418. data/vendor/ejs/test/included/test.css +44 -0
  419. data/vendor/ejs/test/included/unittest.js +564 -0
  420. data/vendor/ejs/test/index.html +18 -0
  421. data/vendor/ejs/test/setup_test.html +44 -0
  422. data/vendor/ejs/test/sidebar.html +28 -0
  423. data/vendor/ejs/test/templates/.svn/all-wcprops +11 -0
  424. data/vendor/ejs/test/templates/.svn/entries +62 -0
  425. data/vendor/ejs/test/templates/.svn/text-base/test.ejs.svn-base +3 -0
  426. data/vendor/ejs/test/templates/test.ejs +3 -0
  427. data/vendor/ejs/test/tests/.svn/all-wcprops +23 -0
  428. data/vendor/ejs/test/tests/.svn/entries +130 -0
  429. data/vendor/ejs/test/tests/.svn/text-base/rendering.js.svn-base +94 -0
  430. data/vendor/ejs/test/tests/.svn/text-base/templating.js.svn-base +43 -0
  431. data/vendor/ejs/test/tests/.svn/text-base/views.js.svn-base +100 -0
  432. data/vendor/ejs/test/tests/rendering.js +94 -0
  433. data/vendor/ejs/test/tests/templating.js +43 -0
  434. data/vendor/ejs/test/tests/views.js +100 -0
  435. data/vendor/glmatrix/benchmark/js/CanvasMatrix.js +722 -0
  436. data/vendor/glmatrix/benchmark/js/EWGL_math.js +742 -0
  437. data/vendor/glmatrix/benchmark/js/mjs.js +1230 -0
  438. data/vendor/glmatrix/benchmark/matrix_benchmark.html +419 -0
  439. data/vendor/glmatrix/glMatrix-min.js +32 -0
  440. data/vendor/glmatrix/glMatrix.js +1815 -0
  441. data/vendor/glmatrix/unit tests/glMatrix-test.js +74 -0
  442. data/vendor/glmatrix/unit tests/qunit.css +119 -0
  443. data/vendor/glmatrix/unit tests/qunit.js +1069 -0
  444. data/vendor/glmatrix/unit tests/test_glMatrix.html +21 -0
  445. data/vendor/yuicompressor-2.4.2.jar +0 -0
  446. metadata +748 -0
@@ -0,0 +1,12 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ **/*/pkg/*
5
+ .idea
6
+ dist
7
+ doc
8
+ .*.pdoc.yaml
9
+ .hg
10
+ tmp/
11
+ guides/output
12
+ /pkg/
@@ -0,0 +1,3 @@
1
+ [submodule "vendor/pdoc"]
2
+ path = vendor/pdoc
3
+ url = git://github.com/tobie/pdoc.git
data/.rvmrc ADDED
@@ -0,0 +1,7 @@
1
+ rvm use --create --install 1.9.2@webgl 2>&1
2
+
3
+ # Bundle is available, non-custom config.
4
+ if command -v bundle >/dev/null && ! [ -e .bundle ] ; then
5
+ bundle install
6
+ mkdir .bundle
7
+ fi
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in jax.gemspec
4
+ gemspec
@@ -0,0 +1,32 @@
1
+ == Important
2
+
3
+ JAX is a working title and is subject to change. Also, it is under heavy development and is largely incomplete.
4
+ Keep in mind that this README represents how JAX is _meant_ to work upon completion, not necessarily how it would
5
+ work if you were to clone the git repository right now.
6
+
7
+ <b>I reserve the right to commit broken code until version 0.0.1 is officially released.</b>
8
+
9
+ == JAX
10
+
11
+ JAX is a framework for developing rich WebGL-enabled applications using JavaScript and Ruby.
12
+
13
+ == Requirements
14
+
15
+ It requires ruby, which you can download at: http://www.ruby-lang.org
16
+
17
+ Other than that, JAX requires a few ruby gems which will be retrieved automatically when installing.
18
+
19
+ == Getting Started
20
+
21
+ If you're unfamiliar with Jax, a good place to start would be at the {Jax Wiki}[http://github.com/sinisterchipmunk/jax/wiki]
22
+ where you can find tutorials, documentation, and tips.
23
+
24
+ <b>Please be aware that, like Jax itself, the Wiki is a work in progress and will be updated periodically to reflect the
25
+ latest code changes.</b>
26
+
27
+ == The Demo App
28
+
29
+ This project includes an {example application}[https://github.com/sinisterchipmunk/jax/tree/master/spec/example_app],
30
+ which is meant to represent a very basic Jax application. It provides a visual testbed for various aspects of Jax
31
+ while simultaneously demonstrating key concepts such as event processing and resource management.
32
+
@@ -0,0 +1,144 @@
1
+ # used to flag auto-compile. Just makes my life easier.
2
+ $JAX_DEVELOPMENT = true
3
+ $JAX_RAKE = true
4
+
5
+ begin
6
+ require 'bundler'
7
+ Bundler::GemHelper.install_tasks
8
+ rescue LoadError
9
+ puts " *** You don't seem to have Bundler installed. ***"
10
+ puts " Please run the following command:"
11
+ puts
12
+ puts " gem install bundler --version=1.0.10"
13
+ exit
14
+ end
15
+
16
+ DEPENDENCIES = %w(jasmine sprockets treetop bluecloth)
17
+ DEPENDENCIES.each do |dep|
18
+ begin
19
+ require dep
20
+ rescue LoadError
21
+ system("bundle", "install")
22
+ exec("bundle", "exec", "rake", *ARGV)
23
+ end
24
+ end
25
+
26
+ # pdoc is a different beast because the released gem seems to be quite dated,
27
+ # and is incompatible with Ruby 1.9.2. We'll grab the latest from git, instead.
28
+ begin
29
+ require File.join(File.dirname(__FILE__), 'vendor/pdoc/lib/pdoc')
30
+ rescue LoadError
31
+ puts "You don't seem to have pdoc. Fetching..."
32
+ if !system("git", "submodule", "init") || !system("git", "submodule", "update")
33
+ puts "Couldn't fetch pdoc. Make sure you have git installed."
34
+ exit
35
+ end
36
+ require File.join(File.dirname(__FILE__), 'vendor/pdoc/lib/pdoc')
37
+ end
38
+
39
+ load 'jasmine/tasks/jasmine.rake'
40
+ require File.expand_path("lib/jax/monkeypatch/jasmine", File.dirname(__FILE__))
41
+
42
+ require File.join(File.dirname(__FILE__), "lib/jax")
43
+ JAX_ROOT = File.dirname(__FILE__)
44
+ # put a dummy Application in place
45
+ class Development < Jax::Application
46
+ end
47
+
48
+
49
+ desc "compile Jax"
50
+ task :compile do
51
+ secretary = Sprockets::Secretary.new(
52
+ :root => File.dirname(__FILE__),
53
+ :asset_root => "public",
54
+ :load_path => ["src"],
55
+ :source_files => ["src/jax.js", "builtin/**/*.js"]
56
+ )
57
+ rm_rf "dist"
58
+ mkdir_p "dist"
59
+ secretary.concatenation.save_to "dist/jax.js"
60
+
61
+ # generate the built-in shaders for testing against (these are not added to the real jax dist because they are
62
+ # regenerated in the user's app)
63
+ rm File.join(File.dirname(__FILE__), "tmp/shaders.js")
64
+ File.open(File.join(File.dirname(__FILE__), "tmp/shaders.js"), "w") do |f|
65
+ Jax.application.shaders.each { |shader| shader.save_to f }
66
+ end
67
+
68
+ puts "generated #{File.expand_path "dist/jax.js", '.'}"
69
+ cp File.join(File.dirname(__FILE__), "dist/jax.js"),
70
+ File.join(File.dirname(__FILE__), "lib/jax/generators/app/templates/public/javascripts/jax.js")
71
+
72
+ puts "(project built)"
73
+ end
74
+
75
+ desc "compile and minify Jax into dist/jax.js and dist/jax-min.js"
76
+ task :minify => :compile do
77
+ puts "(minifying...)"
78
+ if system("java", "-jar", File.join(File.dirname(__FILE__), "vendor/yuicompressor-2.4.2.jar"), "dist/jax.js", "-o", "dist/jax-min.js")
79
+ puts "(done.)"
80
+ else
81
+ puts "(Error while minifying!)"
82
+ end
83
+ end
84
+
85
+ namespace :doc do
86
+ desc "build the Jax JavaScript documentation"
87
+ task :js do
88
+ FileUtils.rm_rf 'doc'
89
+
90
+ PDoc.run({
91
+ :source_files => [File.join('src', 'jax.js')] + Dir[File.join('src', 'jax', '**', '*.js')],
92
+ :destination => "doc",
93
+ # :index_page => 'src/README.markdown',
94
+ :syntax_highlighter => 'coderay',
95
+ :markdown_parser => :bluecloth,
96
+ :src_code_text => "View source on GitHub &rarr;",
97
+ :src_code_href => proc { |obj|
98
+ "https://github.com/sinisterchipmunk/jax/tree/master/#{obj.file}#L#{obj.line_number}"
99
+ },
100
+ :pretty_urls => false,
101
+ :bust_cache => false,
102
+ :name => 'Jax WebGL Framework',
103
+ :short_name => 'Jax',
104
+ :home_url => 'http://jaxgl.com',
105
+ :version => Jax::VERSION,
106
+ # :index_header => "",
107
+ # :footer => '',
108
+ # :assets => 'doc_assets'
109
+ })
110
+
111
+ Dir['src/**/.*.pdoc.yaml'].each { |f| FileUtils.rm f }
112
+ end
113
+ end
114
+
115
+ namespace :guides do
116
+ desc 'Generate guides (for authors), use ONLY=foo to process just "foo.textile"'
117
+ task :generate do
118
+ rm_rf "guides/output"
119
+ ENV["WARN_BROKEN_LINKS"] = "1" # authors can't disable this
120
+ ruby "guides/jax_guides.rb"
121
+ end
122
+
123
+ desc 'Validate guides, use ONLY=foo to process just "foo.html"'
124
+ task :validate do
125
+ ruby "guides/w3c_validator.rb"
126
+ end
127
+
128
+ desc "Publish the guides"
129
+ task :publish => 'guides:generate' do
130
+ require 'rake/contrib/sshpublisher'
131
+ mkdir_p 'pkg'
132
+ `tar -czf pkg/guides.gz guides/output`
133
+ Rake::SshFilePublisher.new("jaxgl.com", "~/guides/public", "pkg", "guides.gz").upload
134
+ `ssh jaxgl.com 'cd ~/guides/public/ && tar -xvzf guides.gz && mv guides/output/* . && rm -rf guides*'`
135
+ end
136
+ end
137
+
138
+ # 'Guides' tasks & code borrowed from Railties.
139
+ desc 'Generate guides (for authors), use ONLY=foo to process just "foo.textile"'
140
+ task :guides => 'guides:generate'
141
+
142
+ task :jasmine => :compile
143
+ task :build => :compile
144
+ task :default => :compile
data/bin/jax ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ require "rubygems"
3
+ require "thor"
4
+ require "thor/group"
5
+
6
+ require File.join(File.expand_path(File.dirname(__FILE__)), "../lib/jax/generators/script_jax_loader")
7
+
8
+ Jax::Generators::ScriptJaxLoader.exec_script_jax! # this uses exec so, if found, the rest of this file won't load
9
+
10
+ require File.join(File.expand_path(File.dirname(__FILE__)), "../lib/jax/generators/app")
11
+ JaxGenerator.start
@@ -0,0 +1,11 @@
1
+ shared uniform mat4 ivMatrix, mvMatrix, pMatrix, vMatrix;
2
+ shared uniform mat3 vnMatrix, nMatrix;
3
+
4
+ shared uniform vec4 materialDiffuse, materialAmbient, materialSpecular;
5
+ shared uniform float materialShininess;
6
+
7
+ shared uniform int PASS_TYPE;
8
+
9
+ shared varying vec2 vTexCoords;
10
+ shared varying vec3 vNormal, vSurfacePos;
11
+ shared varying vec4 vBaseColor;
@@ -0,0 +1,5 @@
1
+ void main(inout vec4 ambient, inout vec4 diffuse, inout vec4 specular) {
2
+ ambient = materialAmbient * vBaseColor;
3
+ diffuse = materialDiffuse * vBaseColor;
4
+ specular = materialSpecular * vBaseColor;
5
+ }
@@ -0,0 +1,13 @@
1
+ shared attribute vec2 VERTEX_TEXCOORDS;
2
+ shared attribute vec3 VERTEX_NORMAL;
3
+ shared attribute vec4 VERTEX_POSITION, VERTEX_COLOR, VERTEX_TANGENT;
4
+
5
+ void main(void) {
6
+ vBaseColor = VERTEX_COLOR;
7
+ vNormal = nMatrix * VERTEX_NORMAL;
8
+ vTexCoords = VERTEX_TEXCOORDS;
9
+
10
+ vSurfacePos = (mvMatrix * VERTEX_POSITION).xyz;
11
+
12
+ gl_Position = pMatrix * mvMatrix * VERTEX_POSITION;
13
+ }
@@ -0,0 +1 @@
1
+ shared uniform mat4 pMatrix;
@@ -0,0 +1,5 @@
1
+ //= require "../functions/depth_map"
2
+
3
+ void main(void) {
4
+ gl_FragColor = pack_depth(gl_FragCoord.z);
5
+ }
@@ -0,0 +1,7 @@
1
+ shared attribute vec4 VERTEX_POSITION;
2
+
3
+ shared uniform mat4 mvMatrix;
4
+
5
+ void main(void) {
6
+ gl_Position = pMatrix * mvMatrix * VERTEX_POSITION;
7
+ }
@@ -0,0 +1,7 @@
1
+ uniform vec4 FogColor;
2
+
3
+ uniform int Algorithm;
4
+
5
+ uniform float Scale;
6
+ uniform float End;
7
+ uniform float Density;
@@ -0,0 +1,23 @@
1
+ const float LOG2 = 1.442695;
2
+
3
+ void main(inout vec4 ambient, inout vec4 diffuse, inout vec4 specular) {
4
+ float fog;
5
+ float distance = length(gl_FragCoord.z / gl_FragCoord.w);
6
+
7
+ if (Algorithm == <%=Jax.LINEAR%>) {
8
+ fog = (End - distance) * Scale;
9
+ } else if (Algorithm == <%=Jax.EXPONENTIAL%>) {
10
+ fog = exp(-Density * distance);
11
+ } else if (Algorithm == <%=Jax.EXP2%>) {
12
+ fog = exp2(-Density * Density * distance * distance * LOG2);
13
+ } else {
14
+ /* error condition, output red */
15
+ ambient = diffuse = specular = vec4(1,0,0,1);
16
+ return;
17
+ }
18
+
19
+ fog = clamp(fog, 0.0, 1.0);
20
+
21
+ ambient = mix(FogColor, ambient, fog);
22
+ diffuse = mix(FogColor, diffuse, fog);
23
+ }
@@ -0,0 +1,12 @@
1
+ description: A fog effect.
2
+
3
+ options:
4
+ color:
5
+ red: 1.0
6
+ green: 1.0
7
+ blue: 1.0
8
+ alpha: 1.0
9
+ algorithm: EXP2
10
+ start: 10.0
11
+ end: 100.0
12
+ density: 0.0015
@@ -0,0 +1,34 @@
1
+ Jax.LINEAR = 1;
2
+ Jax.EXPONENTIAL = 2;
3
+ Jax.EXP2 = 3;
4
+
5
+ Jax.Material.Fog = Jax.Class.create(Jax.Material, {
6
+ initialize: function($super, options) {
7
+ options = Jax.Util.normalizeOptions(options, {
8
+ shader: "fog",
9
+ algorithm: Jax.EXP2,
10
+ start: 10.0,
11
+ end: 100.0,
12
+ density: 0.0015,
13
+ color:[1,1,1,1]
14
+ });
15
+ options.color = Jax.Util.colorize(options.color);
16
+ options.color = [options.color[0],options.color[1],options.color[2],options.color[3]];
17
+ if (typeof(options.algorithm) == "string") {
18
+ var name = options.algorithm;
19
+ options.algorithm = Jax[name];
20
+ if (!options.algorithm) throw new Error("Jax: Fog algorithm must be one of LINEAR, EXPONENTIAL, or EXP2");
21
+ }
22
+ $super(options);
23
+ },
24
+
25
+ setUniforms: function($super, context, mesh, options, uniforms) {
26
+ $super(context, mesh, options, uniforms);
27
+
28
+ uniforms.set('End', this.end);
29
+ uniforms.set('Scale', 1.0 / (this.end - this.start));
30
+ uniforms.set('Algorithm', this.algorithm);
31
+ uniforms.set('Density', this.density);
32
+ uniforms.set('FogColor', this.color);
33
+ }
34
+ });
@@ -0,0 +1,10 @@
1
+ shared attribute vec4 VERTEX_POSITION;
2
+
3
+ shared uniform mat4 mvMatrix, pMatrix;
4
+
5
+ const float LOG2 = 1.442695;
6
+
7
+ void main(void) {
8
+ vec4 pos = mvMatrix * VERTEX_POSITION;
9
+ gl_Position = pMatrix * pos;
10
+ }
@@ -0,0 +1,24 @@
1
+ vec4 pack_depth(const in float depth)
2
+ {
3
+ const vec4 bit_shift = vec4(256.0*256.0*256.0, 256.0*256.0, 256.0, 1.0);
4
+ const vec4 bit_mask = vec4(0.0, 1.0/256.0, 1.0/256.0, 1.0/256.0);
5
+ vec4 res = fract(depth * bit_shift);
6
+ res -= res.xxyz * bit_mask;
7
+ return res;
8
+ }
9
+
10
+ /*
11
+ float linearize(in float z) {
12
+ float A = pMatrix[2].z, B = pMatrix[3].z;
13
+ float n = - B / (1.0 - A); // camera z near
14
+ float f = B / (1.0 + A); // camera z far
15
+ return (2.0 * n) / (f + n - z * (f - n));
16
+ }
17
+ */
18
+
19
+ float unpack_depth(const in vec4 rgba_depth)
20
+ {
21
+ const vec4 bit_shift = vec4(1.0/(256.0*256.0*256.0), 1.0/(256.0*256.0), 1.0/256.0, 1.0);
22
+ float depth = dot(rgba_depth, bit_shift);
23
+ return depth;
24
+ }
@@ -0,0 +1,155 @@
1
+ /* see http://jax.thoughtsincomputation.com/2011/05/webgl-apps-crashing-on-windows-7/ */
2
+ //const struct LightSource {
3
+ // int enabled;
4
+ // int type;
5
+ // vec3 position; // in world space
6
+ // vec3 direction; // in world space
7
+ // vec4 ambient, diffuse, specular;
8
+ // float constant_attenuation, linear_attenuation, quadratic_attenuation;
9
+ // float spotExponent, spotCosCutoff;
10
+ //};
11
+
12
+ shared uniform bool LIGHT_ENABLED;
13
+ shared uniform int LIGHT_TYPE;
14
+ shared uniform vec3 LIGHT_POSITION, LIGHT_DIRECTION;
15
+ shared uniform vec4 LIGHT_AMBIENT, LIGHT_DIFFUSE, LIGHT_SPECULAR;
16
+ shared uniform float LIGHT_ATTENUATION_CONSTANT, LIGHT_ATTENUATION_LINEAR, LIGHT_ATTENUATION_QUADRATIC,
17
+ LIGHT_SPOT_EXPONENT, LIGHT_SPOT_COS_CUTOFF;
18
+
19
+ float calcAttenuation(in vec3 ecPosition3,
20
+ out vec3 lightDirection)
21
+ {
22
+ // lightDirection = vec3(vnMatrix * -light.position) - ecPosition3;
23
+ lightDirection = vec3(ivMatrix * vec4(LIGHT_POSITION, 1.0)) - ecPosition3;
24
+ float d = length(lightDirection);
25
+
26
+ return 1.0 / (LIGHT_ATTENUATION_CONSTANT + LIGHT_ATTENUATION_LINEAR * d + LIGHT_ATTENUATION_QUADRATIC * d * d);
27
+ }
28
+
29
+ void DirectionalLight(in vec3 normal,
30
+ inout vec4 ambient,
31
+ inout vec4 diffuse,
32
+ inout vec4 specular)
33
+ {
34
+ if (PASS_TYPE == <%=Jax.Scene.AMBIENT_PASS%>)
35
+ ambient += LIGHT_AMBIENT;
36
+ else {
37
+ vec3 nLDir = normalize(vnMatrix * -normalize(LIGHT_DIRECTION));
38
+ vec3 halfVector = normalize(nLDir + vec3(0,0,1));
39
+ float pf;
40
+
41
+ float NdotD = max(0.0, dot(normal, nLDir));
42
+ float NdotHV = max(0.0, dot(normal, halfVector));
43
+
44
+ if (NdotD == 0.0) pf = 0.0;
45
+ else pf = pow(NdotHV, materialShininess);
46
+
47
+ diffuse += LIGHT_DIFFUSE * NdotD;
48
+ specular += LIGHT_SPECULAR * pf;
49
+ }
50
+ }
51
+
52
+ /* Use when attenuation != (1,0,0) */
53
+ void PointLightWithAttenuation(in vec3 ecPosition3,
54
+ in vec3 normal,
55
+ inout vec4 ambient,
56
+ inout vec4 diffuse,
57
+ inout vec4 specular)
58
+ {
59
+ float NdotD; // normal . light direction
60
+ float NdotHV;// normal . half vector
61
+ float pf; // specular factor
62
+ float attenuation;
63
+ vec3 VP; // direction from surface to light position
64
+ vec3 halfVector; // direction of maximum highlights
65
+
66
+ attenuation = calcAttenuation(ecPosition3, VP);
67
+ VP = normalize(VP);
68
+
69
+ halfVector = normalize(VP+vec3(0,0,1));
70
+ NdotD = max(0.0, dot(normal, VP));
71
+ NdotHV= max(0.0, dot(normal, halfVector));
72
+
73
+ if (NdotD == 0.0) pf = 0.0;
74
+ else pf = pow(NdotHV, materialShininess);
75
+
76
+ if (PASS_TYPE == <%=Jax.Scene.AMBIENT_PASS%>)
77
+ ambient += LIGHT_AMBIENT * attenuation;
78
+ else {
79
+ diffuse += LIGHT_DIFFUSE * NdotD * attenuation;
80
+ specular += LIGHT_SPECULAR * pf * attenuation;
81
+ }
82
+ }
83
+
84
+ /* Use for better performance when attenuation == (1,0,0) */
85
+ void PointLightWithoutAttenuation(in vec3 ecPosition3,
86
+ in vec3 normal,
87
+ inout vec4 ambient,
88
+ inout vec4 diffuse,
89
+ inout vec4 specular)
90
+ {
91
+ float NdotD; // normal . light direction
92
+ float NdotHV;// normal . half vector
93
+ float pf; // specular factor
94
+ float d; // distance from surface to light source
95
+ vec3 VP; // direction from surface to light position
96
+ vec3 halfVector; // direction of maximum highlights
97
+
98
+ VP = vec3(ivMatrix * vec4(LIGHT_POSITION, 1.0)) - ecPosition3;
99
+ d = length(VP);
100
+ VP = normalize(VP);
101
+ halfVector = normalize(VP+vec3(0,0,1));
102
+ NdotD = max(0.0, dot(normal, VP));
103
+ NdotHV= max(0.0, dot(normal, halfVector));
104
+
105
+ if (NdotD == 0.0) pf = 0.0;
106
+ else pf = pow(NdotHV, materialShininess);
107
+
108
+ if (PASS_TYPE == <%=Jax.Scene.AMBIENT_PASS%>)
109
+ ambient += LIGHT_AMBIENT;
110
+ else {
111
+ diffuse += LIGHT_DIFFUSE * NdotD;
112
+ specular += LIGHT_SPECULAR * pf;
113
+ }
114
+ }
115
+
116
+ void SpotLight(in vec3 ecPosition3,
117
+ in vec3 normal,
118
+ inout vec4 ambient,
119
+ inout vec4 diffuse,
120
+ inout vec4 specular)
121
+ {
122
+ float NdotD; // normal . light direction
123
+ float NdotHV;// normal . half vector
124
+ float pf; // specular factor
125
+ float attenuation;
126
+ vec3 VP; // direction from surface to light position
127
+ vec3 halfVector; // direction of maximum highlights
128
+ float spotDot; // cosine of angle between spotlight
129
+ float spotAttenuation; // spotlight attenuation factor
130
+
131
+ attenuation = calcAttenuation(ecPosition3, VP);
132
+ VP = normalize(VP);
133
+
134
+ // See if point on surface is inside cone of illumination
135
+ spotDot = dot(-VP, normalize(vnMatrix*LIGHT_DIRECTION));
136
+ if (spotDot < LIGHT_SPOT_COS_CUTOFF)
137
+ spotAttenuation = 0.0;
138
+ else spotAttenuation = pow(spotDot, LIGHT_SPOT_EXPONENT);
139
+
140
+ attenuation *= spotAttenuation;
141
+
142
+ halfVector = normalize(VP+vec3(0,0,1));
143
+ NdotD = max(0.0, dot(normal, VP));
144
+ NdotHV= max(0.0, dot(normal, halfVector));
145
+
146
+ if (NdotD == 0.0) pf = 0.0;
147
+ else pf = pow(NdotHV, materialShininess);
148
+
149
+ if (PASS_TYPE == <%=Jax.Scene.AMBIENT_PASS%>)
150
+ ambient += LIGHT_AMBIENT * attenuation;
151
+ else {
152
+ diffuse += LIGHT_DIFFUSE * NdotD * attenuation;
153
+ specular += LIGHT_SPECULAR * pf * attenuation;
154
+ }
155
+ }