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.
- data/.gitignore +12 -0
- data/.gitmodules +3 -0
- data/.rvmrc +7 -0
- data/Gemfile +4 -0
- data/README.rdoc +32 -0
- data/Rakefile +144 -0
- data/bin/jax +11 -0
- data/builtin/shaders/basic/common.ejs +11 -0
- data/builtin/shaders/basic/fragment.ejs +5 -0
- data/builtin/shaders/basic/vertex.ejs +13 -0
- data/builtin/shaders/depthmap/common.ejs +1 -0
- data/builtin/shaders/depthmap/fragment.ejs +5 -0
- data/builtin/shaders/depthmap/vertex.ejs +7 -0
- data/builtin/shaders/fog/common.ejs +7 -0
- data/builtin/shaders/fog/fragment.ejs +23 -0
- data/builtin/shaders/fog/manifest.yml +12 -0
- data/builtin/shaders/fog/material.js +34 -0
- data/builtin/shaders/fog/vertex.ejs +10 -0
- data/builtin/shaders/functions/depth_map.ejs +24 -0
- data/builtin/shaders/functions/lights.ejs +155 -0
- data/builtin/shaders/lighting/common.ejs +5 -0
- data/builtin/shaders/lighting/fragment.ejs +34 -0
- data/builtin/shaders/lighting/manifest.yml +4 -0
- data/builtin/shaders/lighting/material.js +26 -0
- data/builtin/shaders/lighting/vertex.ejs +7 -0
- data/builtin/shaders/normal_map/common.ejs +12 -0
- data/builtin/shaders/normal_map/fragment.ejs +26 -0
- data/builtin/shaders/normal_map/manifest.yml +17 -0
- data/builtin/shaders/normal_map/material.js +16 -0
- data/builtin/shaders/normal_map/vertex.ejs +57 -0
- data/builtin/shaders/paraboloid-depthmap/common.ejs +6 -0
- data/builtin/shaders/paraboloid-depthmap/fragment.ejs +8 -0
- data/builtin/shaders/paraboloid-depthmap/material.js +15 -0
- data/builtin/shaders/paraboloid-depthmap/vertex.ejs +26 -0
- data/builtin/shaders/shadow_map/common.ejs +14 -0
- data/builtin/shaders/shadow_map/fragment.ejs +66 -0
- data/builtin/shaders/shadow_map/manifest.yml +1 -0
- data/builtin/shaders/shadow_map/material.js +26 -0
- data/builtin/shaders/shadow_map/vertex.ejs +46 -0
- data/builtin/shaders/texture/common.ejs +4 -0
- data/builtin/shaders/texture/fragment.ejs +11 -0
- data/builtin/shaders/texture/manifest.yml +17 -0
- data/builtin/shaders/texture/material.js +18 -0
- data/builtin/shaders/texture/vertex.ejs +9 -0
- data/guides/assets/images/book_icon.gif +0 -0
- data/guides/assets/images/bullet.gif +0 -0
- data/guides/assets/images/chapters_icon.gif +0 -0
- data/guides/assets/images/check_bullet.gif +0 -0
- data/guides/assets/images/credits_pic_blank.gif +0 -0
- data/guides/assets/images/edge_badge.png +0 -0
- data/guides/assets/images/feature_tile.gif +0 -0
- data/guides/assets/images/footer_tile.gif +0 -0
- data/guides/assets/images/getting_started/clean_passing_jasmine_suite.png +0 -0
- data/guides/assets/images/getting_started/rock.png +0 -0
- data/guides/assets/images/getting_started/rock_normal.png +0 -0
- data/guides/assets/images/grey_bullet.gif +0 -0
- data/guides/assets/images/header_backdrop.png +0 -0
- data/guides/assets/images/header_tile.gif +0 -0
- data/guides/assets/images/icons/README +5 -0
- data/guides/assets/images/icons/callouts/1.png +0 -0
- data/guides/assets/images/icons/callouts/10.png +0 -0
- data/guides/assets/images/icons/callouts/11.png +0 -0
- data/guides/assets/images/icons/callouts/12.png +0 -0
- data/guides/assets/images/icons/callouts/13.png +0 -0
- data/guides/assets/images/icons/callouts/14.png +0 -0
- data/guides/assets/images/icons/callouts/15.png +0 -0
- data/guides/assets/images/icons/callouts/2.png +0 -0
- data/guides/assets/images/icons/callouts/3.png +0 -0
- data/guides/assets/images/icons/callouts/4.png +0 -0
- data/guides/assets/images/icons/callouts/5.png +0 -0
- data/guides/assets/images/icons/callouts/6.png +0 -0
- data/guides/assets/images/icons/callouts/7.png +0 -0
- data/guides/assets/images/icons/callouts/8.png +0 -0
- data/guides/assets/images/icons/callouts/9.png +0 -0
- data/guides/assets/images/icons/caution.png +0 -0
- data/guides/assets/images/icons/example.png +0 -0
- data/guides/assets/images/icons/home.png +0 -0
- data/guides/assets/images/icons/important.png +0 -0
- data/guides/assets/images/icons/next.png +0 -0
- data/guides/assets/images/icons/note.png +0 -0
- data/guides/assets/images/icons/prev.png +0 -0
- data/guides/assets/images/icons/tip.png +0 -0
- data/guides/assets/images/icons/up.png +0 -0
- data/guides/assets/images/icons/warning.png +0 -0
- data/guides/assets/images/nav_arrow.gif +0 -0
- data/guides/assets/images/tab_grey.gif +0 -0
- data/guides/assets/images/tab_info.gif +0 -0
- data/guides/assets/images/tab_note.gif +0 -0
- data/guides/assets/images/tab_red.gif +0 -0
- data/guides/assets/images/tab_yellow.gif +0 -0
- data/guides/assets/images/tab_yellow.png +0 -0
- data/guides/assets/javascripts/guides.js +7 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushAS3.js +59 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushAppleScript.js +75 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushBash.js +59 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCSharp.js +65 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushColdFusion.js +100 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCpp.js +97 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushCss.js +91 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushDelphi.js +55 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushDiff.js +41 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushErlang.js +52 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushGroovy.js +67 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJScript.js +52 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJava.js +57 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushJavaFX.js +58 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPerl.js +72 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPhp.js +88 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPlain.js +33 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPowerShell.js +74 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushPython.js +64 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushRuby.js +55 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushSass.js +94 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushScala.js +51 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushSql.js +66 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushVb.js +56 -0
- data/guides/assets/javascripts/syntaxhighlighter/shBrushXml.js +69 -0
- data/guides/assets/javascripts/syntaxhighlighter/shCore.js +17 -0
- data/guides/assets/stylesheets/fixes.css +16 -0
- data/guides/assets/stylesheets/main.css +445 -0
- data/guides/assets/stylesheets/print.css +52 -0
- data/guides/assets/stylesheets/reset.css +43 -0
- data/guides/assets/stylesheets/style.css +13 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCore.css +226 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreDefault.css +328 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreDjango.css +331 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreEclipse.css +339 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreEmacs.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreFadeToGrey.css +328 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreMDUltra.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreMidnight.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shCoreRDark.css +324 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeDefault.css +117 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeDjango.css +120 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeEclipse.css +128 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeEmacs.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeFadeToGrey.css +117 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeJaxGuides.css +116 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeMDUltra.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeMidnight.css +113 -0
- data/guides/assets/stylesheets/syntaxhighlighter/shThemeRDark.css +113 -0
- data/guides/jax_guides.rb +41 -0
- data/guides/jax_guides/common.rb +7 -0
- data/guides/jax_guides/generator.rb +287 -0
- data/guides/jax_guides/helpers.rb +29 -0
- data/guides/jax_guides/indexer.rb +69 -0
- data/guides/jax_guides/levenshtein.rb +31 -0
- data/guides/jax_guides/textile_extensions.rb +61 -0
- data/guides/source/getting_started.textile +1171 -0
- data/guides/source/index.html.erb +50 -0
- data/guides/source/layout.html.erb +158 -0
- data/guides/source/lighting.textile +5 -0
- data/guides/source/materials.textile +5 -0
- data/guides/source/shaders.textile +5 -0
- data/guides/source/testing.textile +5 -0
- data/guides/w3c_validator.rb +91 -0
- data/jax.gems +1 -0
- data/jax.gemspec +40 -0
- data/lib/jax.rb +28 -0
- data/lib/jax/application.rb +92 -0
- data/lib/jax/application/configuration.rb +27 -0
- data/lib/jax/generators/app.rb +17 -0
- data/lib/jax/generators/app/app_generator.rb +78 -0
- data/lib/jax/generators/app/templates/Gemfile.tt +3 -0
- data/lib/jax/generators/app/templates/Rakefile +6 -0
- data/lib/jax/generators/app/templates/app/controllers/application_controller.js.tt +5 -0
- data/lib/jax/generators/app/templates/app/helpers/application_helper.js.tt +3 -0
- data/lib/jax/generators/app/templates/app/models/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/app/resources/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/app/views/.empty_directory +0 -0
- data/lib/jax/generators/app/templates/config/application.rb.tt +6 -0
- data/lib/jax/generators/app/templates/config/boot.rb +13 -0
- data/lib/jax/generators/app/templates/config/routes.rb.tt +5 -0
- data/lib/jax/generators/app/templates/public/javascripts/jax.js +7561 -0
- data/lib/jax/generators/app/templates/public/webgl_not_supported.html +26 -0
- data/lib/jax/generators/app/templates/script/jax +7 -0
- data/lib/jax/generators/app/templates/spec/javascripts/controllers/application_controller_spec.js +11 -0
- data/lib/jax/generators/app/templates/spec/javascripts/helpers/application_helper_spec.js +12 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine.yml +90 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_config.rb +23 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/spec_helpers/jax_spec_helper.js +216 -0
- data/lib/jax/generators/app/templates/spec/javascripts/support/spec_layout.html.erb +63 -0
- data/lib/jax/generators/commands.rb +81 -0
- data/lib/jax/generators/controller/USAGE +9 -0
- data/lib/jax/generators/controller/controller_generator.rb +59 -0
- data/lib/jax/generators/controller/templates/controller_source.js.tt +16 -0
- data/lib/jax/generators/controller/templates/controller_test.js.tt +11 -0
- data/lib/jax/generators/controller/templates/helper.js.tt +3 -0
- data/lib/jax/generators/controller/templates/helper_test.js.tt +12 -0
- data/lib/jax/generators/controller/templates/view.js.tt +4 -0
- data/lib/jax/generators/light_source/USAGE +14 -0
- data/lib/jax/generators/light_source/light_source_generator.rb +47 -0
- data/lib/jax/generators/light_source/templates/light.yml.tt +39 -0
- data/lib/jax/generators/material/USAGE +29 -0
- data/lib/jax/generators/material/material_generator.rb +81 -0
- data/lib/jax/generators/material/templates/append.yml.tt +7 -0
- data/lib/jax/generators/material/templates/material.yml.tt +33 -0
- data/lib/jax/generators/model/USAGE +5 -0
- data/lib/jax/generators/model/model_generator.rb +42 -0
- data/lib/jax/generators/model/templates/model.js.tt +11 -0
- data/lib/jax/generators/model/templates/test.js.tt +11 -0
- data/lib/jax/generators/script_jax_loader.rb +32 -0
- data/lib/jax/monkeypatch/jasmine.rb +3 -0
- data/lib/jax/monkeypatch/jasmine/config.rb +21 -0
- data/lib/jax/monkeypatch/jasmine/server.rb +50 -0
- data/lib/jax/packager.rb +58 -0
- data/lib/jax/packager/sprockets_template.rb +49 -0
- data/lib/jax/resource_compiler.rb +50 -0
- data/lib/jax/routes.rb +61 -0
- data/lib/jax/shader.rb +158 -0
- data/lib/jax/tasks/rake.rb +34 -0
- data/lib/jax/version.rb +12 -0
- data/public/images/brickwall.jpg +0 -0
- data/public/images/jacks.jpg +0 -0
- data/public/images/normal_map.jpg +0 -0
- data/public/images/rock.png +0 -0
- data/public/images/rockNormal.png +0 -0
- data/public/images/rss.png +0 -0
- data/public/webgl_not_supported.html +26 -0
- data/spec/example_app/Gemfile +1 -0
- data/spec/example_app/Rakefile +15 -0
- data/spec/example_app/app/controllers/application_controller.js +5 -0
- data/spec/example_app/app/controllers/courthouse_controller.js +24 -0
- data/spec/example_app/app/controllers/lighting_controller.js +69 -0
- data/spec/example_app/app/controllers/shadows_controller.js +130 -0
- data/spec/example_app/app/controllers/textures_controller.js +52 -0
- data/spec/example_app/app/helpers/application_helper.js +3 -0
- data/spec/example_app/app/helpers/textures_helper.js +3 -0
- data/spec/example_app/app/models/character.js +23 -0
- data/spec/example_app/app/models/door.js +10 -0
- data/spec/example_app/app/models/scene.js +19 -0
- data/spec/example_app/app/resources/characters/judge.yml +3 -0
- data/spec/example_app/app/resources/doors/courthouse_door.yml +5 -0
- data/spec/example_app/app/resources/light_sources/directional_light.yml +13 -0
- data/spec/example_app/app/resources/light_sources/point_light.yml +31 -0
- data/spec/example_app/app/resources/light_sources/spot_light.yml +15 -0
- data/spec/example_app/app/resources/light_sources/sun.yml +7 -0
- data/spec/example_app/app/resources/light_sources/textures_point.yml +34 -0
- data/spec/example_app/app/resources/materials/bricks.yml +36 -0
- data/spec/example_app/app/resources/materials/lighting_with_shadows.yml +27 -0
- data/spec/example_app/app/resources/scenes/courthouse.yml +4 -0
- data/spec/example_app/app/views/courthouse/index.js +4 -0
- data/spec/example_app/app/views/lighting/index.js +4 -0
- data/spec/example_app/app/views/shadows/index.js +6 -0
- data/spec/example_app/app/views/textures/index.js +4 -0
- data/spec/example_app/config/application.rb +6 -0
- data/spec/example_app/config/boot.rb +13 -0
- data/spec/example_app/config/routes.rb +6 -0
- data/spec/example_app/public/images/185__normalmap.png +0 -0
- data/spec/example_app/public/images/face_norm.jpg +0 -0
- data/spec/example_app/public/images/rock.png +0 -0
- data/spec/example_app/public/images/rockNormal.png +0 -0
- data/spec/example_app/public/images/rss.png +0 -0
- data/spec/example_app/public/webgl_not_supported.html +26 -0
- data/spec/example_app/script/jax +7 -0
- data/spec/example_app/spec/javascripts/controllers/textures_controller_spec.js +11 -0
- data/spec/example_app/spec/javascripts/helpers/application_helper_spec.js +12 -0
- data/spec/example_app/spec/javascripts/resources/directional_light_spec.js +16 -0
- data/spec/example_app/spec/javascripts/resources/point_light_spec.js +17 -0
- data/spec/example_app/spec/javascripts/resources/spot_light_spec.js +18 -0
- data/spec/example_app/spec/javascripts/support/jasmine.yml +89 -0
- data/spec/example_app/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/example_app/spec/javascripts/support/spec_helpers/jax_spec_helper.js +93 -0
- data/spec/example_app/spec/javascripts/support/spec_layout.html.erb +84 -0
- data/spec/generators/app_generator_spec.rb +46 -0
- data/spec/generators/controller_generator_spec.rb +68 -0
- data/spec/generators/light_generator_spec.rb +51 -0
- data/spec/generators/material_generator_spec.rb +35 -0
- data/spec/generators/model_generator_spec.rb +43 -0
- data/spec/javascripts/Player.js +58 -0
- data/spec/javascripts/helpers/SpecHelper.js +216 -0
- data/spec/javascripts/jax/builtin/materials/core_materials_spec.js +41 -0
- data/spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js +37 -0
- data/spec/javascripts/jax/builtin/materials/fog_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/lighting_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/normal_map_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/shadow_map_spec.js +19 -0
- data/spec/javascripts/jax/builtin/materials/texture_spec.js +19 -0
- data/spec/javascripts/jax/builtin/meshes/cube_spec.js +10 -0
- data/spec/javascripts/jax/builtin/meshes/plane_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/quad_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/sphere_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/teapot_spec.js +8 -0
- data/spec/javascripts/jax/builtin/meshes/torus_spec.js +8 -0
- data/spec/javascripts/jax/compatibility_spec.js +50 -0
- data/spec/javascripts/jax/context_spec.js +82 -0
- data/spec/javascripts/jax/controller_spec.js +145 -0
- data/spec/javascripts/jax/core/delegation_spec.js +48 -0
- data/spec/javascripts/jax/core/events_spec.js +17 -0
- data/spec/javascripts/jax/core/matrix_stack_spec.js +28 -0
- data/spec/javascripts/jax/core/utils_spec.js +256 -0
- data/spec/javascripts/jax/helper_spec.js +33 -0
- data/spec/javascripts/jax/model_spec.js +87 -0
- data/spec/javascripts/jax/optimizations/material_limitations_spec.js +87 -0
- data/spec/javascripts/jax/optimizations/shaders/basic_spec.js +68 -0
- data/spec/javascripts/jax/prototype/extensions_spec.js +34 -0
- data/spec/javascripts/jax/route_set_spec.js +67 -0
- data/spec/javascripts/jax/view_manager_spec.js +17 -0
- data/spec/javascripts/jax/webgl/camera_spec.js +159 -0
- data/spec/javascripts/jax/webgl/framebuffer_spec.js +46 -0
- data/spec/javascripts/jax/webgl/lighting_spec.js +61 -0
- data/spec/javascripts/jax/webgl/material_spec.js +118 -0
- data/spec/javascripts/jax/webgl/mesh_spec.js +86 -0
- data/spec/javascripts/jax/webgl/shader/manifest_spec.js +60 -0
- data/spec/javascripts/jax/webgl/shader_chain_spec.js +192 -0
- data/spec/javascripts/jax/webgl/shader_spec.js +276 -0
- data/spec/javascripts/jax/webgl/tangent_space_spec.js +142 -0
- data/spec/javascripts/jax/webgl/texture_spec.js +162 -0
- data/spec/javascripts/jax/webgl_spec.js +5 -0
- data/spec/javascripts/jax/world_spec.js +88 -0
- data/spec/javascripts/jax_spec.js +27 -0
- data/spec/javascripts/support/jasmine.yml +85 -0
- data/spec/javascripts/support/jasmine_runner.rb +32 -0
- data/spec/lib/jax/routes_spec.rb +24 -0
- data/spec/lib/jax/shader_spec.rb +57 -0
- data/spec/lib/jax/tasks/jax_rake_spec.rb +79 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/file_exist_matcher.rb +23 -0
- data/spec/support/spec_shell.rb +97 -0
- data/src/jax.js +84 -0
- data/src/jax/anim_frame.js +47 -0
- data/src/jax/builtin/all.js +7 -0
- data/src/jax/builtin/meshes/cube.js +62 -0
- data/src/jax/builtin/meshes/plane.js +36 -0
- data/src/jax/builtin/meshes/quad.js +80 -0
- data/src/jax/builtin/meshes/sphere.js +46 -0
- data/src/jax/builtin/meshes/teapot.js +38 -0
- data/src/jax/builtin/meshes/torus.js +46 -0
- data/src/jax/compatibility.js +140 -0
- data/src/jax/context.js +253 -0
- data/src/jax/controller.js +157 -0
- data/src/jax/core.js +39 -0
- data/src/jax/core/math.js +40 -0
- data/src/jax/core/matrix_stack.js +306 -0
- data/src/jax/core/util.js +226 -0
- data/src/jax/events.js +179 -0
- data/src/jax/geometry.js +3 -0
- data/src/jax/geometry/plane.js +59 -0
- data/src/jax/helper.js +8 -0
- data/src/jax/model.js +163 -0
- data/src/jax/prototype/class.js +78 -0
- data/src/jax/prototype/core.js +112 -0
- data/src/jax/prototype/extensions.js +124 -0
- data/src/jax/route_set.js +125 -0
- data/src/jax/vendor/ejs.js +4 -0
- data/src/jax/vendor/glMatrix.js +3 -0
- data/src/jax/view.js +37 -0
- data/src/jax/view_manager.js +46 -0
- data/src/jax/webgl.js +98 -0
- data/src/jax/webgl/camera.js +526 -0
- data/src/jax/webgl/core.js +6 -0
- data/src/jax/webgl/core/buffer.js +161 -0
- data/src/jax/webgl/core/edge.js +6 -0
- data/src/jax/webgl/core/events.js +25 -0
- data/src/jax/webgl/core/face.js +8 -0
- data/src/jax/webgl/core/framebuffer.js +206 -0
- data/src/jax/webgl/material.js +375 -0
- data/src/jax/webgl/mesh.js +412 -0
- data/src/jax/webgl/scene.js +11 -0
- data/src/jax/webgl/scene/frustum.js +260 -0
- data/src/jax/webgl/scene/light_manager.js +112 -0
- data/src/jax/webgl/scene/light_source.js +248 -0
- data/src/jax/webgl/shader.js +282 -0
- data/src/jax/webgl/shader/delegator.js +13 -0
- data/src/jax/webgl/shader/delegator/attribute.js +53 -0
- data/src/jax/webgl/shader/delegator/uniform.js +71 -0
- data/src/jax/webgl/shader/manifest.js +64 -0
- data/src/jax/webgl/shader/program.js +140 -0
- data/src/jax/webgl/shader_chain.js +256 -0
- data/src/jax/webgl/texture.js +312 -0
- data/src/jax/webgl/world.js +119 -0
- data/vendor/ejs/.svn/all-wcprops +17 -0
- data/vendor/ejs/.svn/entries +114 -0
- data/vendor/ejs/.svn/text-base/Eratta.txt.svn-base +3 -0
- data/vendor/ejs/.svn/text-base/license.txt.svn-base +21 -0
- data/vendor/ejs/Eratta.txt +3 -0
- data/vendor/ejs/example/.svn/all-wcprops +29 -0
- data/vendor/ejs/example/.svn/entries +164 -0
- data/vendor/ejs/example/.svn/prop-base/ejs.gif.svn-base +5 -0
- data/vendor/ejs/example/.svn/text-base/demo.html.svn-base +54 -0
- data/vendor/ejs/example/.svn/text-base/ejs.gif.svn-base +0 -0
- data/vendor/ejs/example/.svn/text-base/example.css.svn-base +31 -0
- data/vendor/ejs/example/.svn/text-base/example.js.svn-base +88 -0
- data/vendor/ejs/example/demo.html +54 -0
- data/vendor/ejs/example/ejs.gif +0 -0
- data/vendor/ejs/example/example.css +31 -0
- data/vendor/ejs/example/example.js +88 -0
- data/vendor/ejs/lib/.svn/all-wcprops +11 -0
- data/vendor/ejs/lib/.svn/entries +62 -0
- data/vendor/ejs/lib/.svn/text-base/ejs_fulljslint.js.svn-base +3774 -0
- data/vendor/ejs/lib/ejs_fulljslint.js +3774 -0
- data/vendor/ejs/license.txt +21 -0
- data/vendor/ejs/script/.svn/all-wcprops +17 -0
- data/vendor/ejs/script/.svn/entries +96 -0
- data/vendor/ejs/script/.svn/prop-base/yuicompressor-2.2.4.jar.svn-base +5 -0
- data/vendor/ejs/script/.svn/text-base/production.bat.svn-base +4 -0
- data/vendor/ejs/script/.svn/text-base/yuicompressor-2.2.4.jar.svn-base +0 -0
- data/vendor/ejs/script/production.bat +4 -0
- data/vendor/ejs/script/yuicompressor-2.2.4.jar +0 -0
- data/vendor/ejs/src/.svn/all-wcprops +17 -0
- data/vendor/ejs/src/.svn/entries +96 -0
- data/vendor/ejs/src/.svn/text-base/ejs.js.svn-base +505 -0
- data/vendor/ejs/src/.svn/text-base/view.js.svn-base +200 -0
- data/vendor/ejs/src/ejs.js +505 -0
- data/vendor/ejs/src/view.js +200 -0
- data/vendor/ejs/test/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/.svn/entries +139 -0
- data/vendor/ejs/test/.svn/text-base/index.html.svn-base +18 -0
- data/vendor/ejs/test/.svn/text-base/setup_test.html.svn-base +44 -0
- data/vendor/ejs/test/.svn/text-base/sidebar.html.svn-base +28 -0
- data/vendor/ejs/test/included/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/included/.svn/entries +130 -0
- data/vendor/ejs/test/included/.svn/text-base/prototype.js.svn-base +4184 -0
- data/vendor/ejs/test/included/.svn/text-base/test.css.svn-base +44 -0
- data/vendor/ejs/test/included/.svn/text-base/unittest.js.svn-base +564 -0
- data/vendor/ejs/test/included/prototype.js +4184 -0
- data/vendor/ejs/test/included/test.css +44 -0
- data/vendor/ejs/test/included/unittest.js +564 -0
- data/vendor/ejs/test/index.html +18 -0
- data/vendor/ejs/test/setup_test.html +44 -0
- data/vendor/ejs/test/sidebar.html +28 -0
- data/vendor/ejs/test/templates/.svn/all-wcprops +11 -0
- data/vendor/ejs/test/templates/.svn/entries +62 -0
- data/vendor/ejs/test/templates/.svn/text-base/test.ejs.svn-base +3 -0
- data/vendor/ejs/test/templates/test.ejs +3 -0
- data/vendor/ejs/test/tests/.svn/all-wcprops +23 -0
- data/vendor/ejs/test/tests/.svn/entries +130 -0
- data/vendor/ejs/test/tests/.svn/text-base/rendering.js.svn-base +94 -0
- data/vendor/ejs/test/tests/.svn/text-base/templating.js.svn-base +43 -0
- data/vendor/ejs/test/tests/.svn/text-base/views.js.svn-base +100 -0
- data/vendor/ejs/test/tests/rendering.js +94 -0
- data/vendor/ejs/test/tests/templating.js +43 -0
- data/vendor/ejs/test/tests/views.js +100 -0
- data/vendor/glmatrix/benchmark/js/CanvasMatrix.js +722 -0
- data/vendor/glmatrix/benchmark/js/EWGL_math.js +742 -0
- data/vendor/glmatrix/benchmark/js/mjs.js +1230 -0
- data/vendor/glmatrix/benchmark/matrix_benchmark.html +419 -0
- data/vendor/glmatrix/glMatrix-min.js +32 -0
- data/vendor/glmatrix/glMatrix.js +1815 -0
- data/vendor/glmatrix/unit tests/glMatrix-test.js +74 -0
- data/vendor/glmatrix/unit tests/qunit.css +119 -0
- data/vendor/glmatrix/unit tests/qunit.js +1069 -0
- data/vendor/glmatrix/unit tests/test_glMatrix.html +21 -0
- data/vendor/yuicompressor-2.4.2.jar +0 -0
- metadata +748 -0
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/.rvmrc
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
|
@@ -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
|
+
|
data/Rakefile
ADDED
|
@@ -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 →",
|
|
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,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,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,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,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
|
+
}
|