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
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/* Defines constants, functions, etc. that may exist in one browser but not in another */
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
Object.keys defined only in the newest browsers. If they're going to fail, let them fail due to HTML5 incompatibility
|
|
5
|
+
and not standards compat.
|
|
6
|
+
*/
|
|
7
|
+
if (!Object.keys) {
|
|
8
|
+
Object.keys = function(object) {
|
|
9
|
+
var arr = [];
|
|
10
|
+
for (var i in object)
|
|
11
|
+
arr.push(i);
|
|
12
|
+
return arr;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
/* KeyEvent in Firefox contains various keyCode constants, but they are missing in Chrome. */
|
|
18
|
+
if (typeof(KeyEvent) == "undefined") {
|
|
19
|
+
// KeyEvent constants taken from Firefox 3.6
|
|
20
|
+
KeyEvent = {
|
|
21
|
+
fake: true,
|
|
22
|
+
DOM_VK_CANCEL : 3,
|
|
23
|
+
DOM_VK_HELP : 6,
|
|
24
|
+
DOM_VK_BACK_SPACE : 8,
|
|
25
|
+
DOM_VK_TAB : 9,
|
|
26
|
+
DOM_VK_CLEAR : 12,
|
|
27
|
+
DOM_VK_RETURN : 13,
|
|
28
|
+
DOM_VK_ENTER : 14,
|
|
29
|
+
DOM_VK_SHIFT : 16,
|
|
30
|
+
DOM_VK_CONTROL : 17,
|
|
31
|
+
DOM_VK_ALT : 18,
|
|
32
|
+
DOM_VK_PAUSE : 19,
|
|
33
|
+
DOM_VK_CAPS_LOCK : 20,
|
|
34
|
+
DOM_VK_ESCAPE : 27,
|
|
35
|
+
DOM_VK_SPACE : 32,
|
|
36
|
+
DOM_VK_PAGE_UP : 33,
|
|
37
|
+
DOM_VK_PAGE_DOWN : 34,
|
|
38
|
+
DOM_VK_END : 35,
|
|
39
|
+
DOM_VK_HOME : 36,
|
|
40
|
+
DOM_VK_LEFT : 37,
|
|
41
|
+
DOM_VK_UP : 38,
|
|
42
|
+
DOM_VK_RIGHT : 39,
|
|
43
|
+
DOM_VK_DOWN : 40,
|
|
44
|
+
DOM_VK_PRINTSCREEN : 44,
|
|
45
|
+
DOM_VK_INSERT : 45,
|
|
46
|
+
DOM_VK_DELETE : 46,
|
|
47
|
+
DOM_VK_0 : 48,
|
|
48
|
+
DOM_VK_1 : 49,
|
|
49
|
+
DOM_VK_2 : 50,
|
|
50
|
+
DOM_VK_3 : 51,
|
|
51
|
+
DOM_VK_4 : 52,
|
|
52
|
+
DOM_VK_5 : 53,
|
|
53
|
+
DOM_VK_6 : 54,
|
|
54
|
+
DOM_VK_7 : 55,
|
|
55
|
+
DOM_VK_8 : 56,
|
|
56
|
+
DOM_VK_9 : 57,
|
|
57
|
+
DOM_VK_SEMICOLON : 59,
|
|
58
|
+
DOM_VK_EQUALS : 61,
|
|
59
|
+
DOM_VK_A : 65,
|
|
60
|
+
DOM_VK_B : 66,
|
|
61
|
+
DOM_VK_C : 67,
|
|
62
|
+
DOM_VK_D : 68,
|
|
63
|
+
DOM_VK_E : 69,
|
|
64
|
+
DOM_VK_F : 70,
|
|
65
|
+
DOM_VK_G : 71,
|
|
66
|
+
DOM_VK_H : 72,
|
|
67
|
+
DOM_VK_I : 73,
|
|
68
|
+
DOM_VK_J : 74,
|
|
69
|
+
DOM_VK_K : 75,
|
|
70
|
+
DOM_VK_L : 76,
|
|
71
|
+
DOM_VK_M : 77,
|
|
72
|
+
DOM_VK_N : 78,
|
|
73
|
+
DOM_VK_O : 79,
|
|
74
|
+
DOM_VK_P : 80,
|
|
75
|
+
DOM_VK_Q : 81,
|
|
76
|
+
DOM_VK_R : 82,
|
|
77
|
+
DOM_VK_S : 83,
|
|
78
|
+
DOM_VK_T : 84,
|
|
79
|
+
DOM_VK_U : 85,
|
|
80
|
+
DOM_VK_V : 86,
|
|
81
|
+
DOM_VK_W : 87,
|
|
82
|
+
DOM_VK_X : 88,
|
|
83
|
+
DOM_VK_Y : 89,
|
|
84
|
+
DOM_VK_Z : 90,
|
|
85
|
+
DOM_VK_CONTEXT_MENU : 93,
|
|
86
|
+
DOM_VK_NUMPAD0 : 96,
|
|
87
|
+
DOM_VK_NUMPAD1 : 97,
|
|
88
|
+
DOM_VK_NUMPAD2 : 98,
|
|
89
|
+
DOM_VK_NUMPAD3 : 99,
|
|
90
|
+
DOM_VK_NUMPAD4 : 100,
|
|
91
|
+
DOM_VK_NUMPAD5 : 101,
|
|
92
|
+
DOM_VK_NUMPAD6 : 102,
|
|
93
|
+
DOM_VK_NUMPAD7 : 103,
|
|
94
|
+
DOM_VK_NUMPAD8 : 104,
|
|
95
|
+
DOM_VK_NUMPAD9 : 105,
|
|
96
|
+
DOM_VK_MULTIPLY : 106,
|
|
97
|
+
DOM_VK_ADD : 107,
|
|
98
|
+
DOM_VK_SEPARATOR : 108,
|
|
99
|
+
DOM_VK_SUBTRACT : 109,
|
|
100
|
+
DOM_VK_DECIMAL : 110,
|
|
101
|
+
DOM_VK_DIVIDE : 111,
|
|
102
|
+
DOM_VK_F1 : 112,
|
|
103
|
+
DOM_VK_F2 : 113,
|
|
104
|
+
DOM_VK_F3 : 114,
|
|
105
|
+
DOM_VK_F4 : 115,
|
|
106
|
+
DOM_VK_F5 : 116,
|
|
107
|
+
DOM_VK_F6 : 117,
|
|
108
|
+
DOM_VK_F7 : 118,
|
|
109
|
+
DOM_VK_F8 : 119,
|
|
110
|
+
DOM_VK_F9 : 120,
|
|
111
|
+
DOM_VK_F10 : 121,
|
|
112
|
+
DOM_VK_F11 : 122,
|
|
113
|
+
DOM_VK_F12 : 123,
|
|
114
|
+
DOM_VK_F13 : 124,
|
|
115
|
+
DOM_VK_F14 : 125,
|
|
116
|
+
DOM_VK_F15 : 126,
|
|
117
|
+
DOM_VK_F16 : 127,
|
|
118
|
+
DOM_VK_F17 : 128,
|
|
119
|
+
DOM_VK_F18 : 129,
|
|
120
|
+
DOM_VK_F19 : 130,
|
|
121
|
+
DOM_VK_F20 : 131,
|
|
122
|
+
DOM_VK_F21 : 132,
|
|
123
|
+
DOM_VK_F22 : 133,
|
|
124
|
+
DOM_VK_F23 : 134,
|
|
125
|
+
DOM_VK_F24 : 135,
|
|
126
|
+
DOM_VK_NUM_LOCK : 144,
|
|
127
|
+
DOM_VK_SCROLL_LOCK : 145,
|
|
128
|
+
DOM_VK_COMMA : 188,
|
|
129
|
+
DOM_VK_PERIOD : 190,
|
|
130
|
+
DOM_VK_SLASH : 191,
|
|
131
|
+
DOM_VK_BACK_QUOTE : 192,
|
|
132
|
+
DOM_VK_OPEN_BRACKET : 219,
|
|
133
|
+
DOM_VK_BACK_SLASH : 220,
|
|
134
|
+
DOM_VK_CLOSE_BRACKET : 221,
|
|
135
|
+
DOM_VK_QUOTE : 222,
|
|
136
|
+
DOM_VK_META: 224
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/* TODO handle special cases -- see http://www.javascripter.net/faq/keycodes.htm */
|
|
140
|
+
}
|
data/src/jax/context.js
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
//= require "webgl"
|
|
2
|
+
//= require "events"
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* class Jax.Context
|
|
6
|
+
* The highest level of operation in Jax. Initialization is simple:
|
|
7
|
+
*
|
|
8
|
+
* var context = new Jax.Context(canvas);
|
|
9
|
+
*
|
|
10
|
+
* where _canvas_ is a reference to an HTML5 Canvas element.
|
|
11
|
+
*
|
|
12
|
+
* If there is a root route set up, then at this point you are done.
|
|
13
|
+
* If not, there's an additional step:
|
|
14
|
+
*
|
|
15
|
+
* context.redirect_to("controller_name/action_name");
|
|
16
|
+
*
|
|
17
|
+
* where *controller_name* is the short name of the controller to start at,
|
|
18
|
+
* and *action_name* is the action to fire within that controller.
|
|
19
|
+
*
|
|
20
|
+
* Note that the specified redirect path must be registered in the route set.
|
|
21
|
+
*
|
|
22
|
+
* Jax will automatically initialize and maintain a WebGL rendering bridge,
|
|
23
|
+
* and WebGL methods can be called directly on this context by prefixing
|
|
24
|
+
* the name of the method with "gl". For example:
|
|
25
|
+
*
|
|
26
|
+
* context.glClear(GL_COLOR_BIT | GL_DEPTH_BUFFER_BIT);
|
|
27
|
+
*
|
|
28
|
+
**/
|
|
29
|
+
Jax.Context = (function() {
|
|
30
|
+
function setupContext(self) {
|
|
31
|
+
try { self.gl = self.canvas.getContext(WEBGL_CONTEXT_NAME, WEBGL_CONTEXT_OPTIONS); } catch(e) { }
|
|
32
|
+
if (!self.gl) throw new Error("WebGL could not be initialized!");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function startRendering(self) {
|
|
36
|
+
function render() {
|
|
37
|
+
if (self.current_view) {
|
|
38
|
+
reloadMatrices(self);
|
|
39
|
+
self.glViewport(0, 0, self.canvas.width, self.canvas.height);
|
|
40
|
+
self.current_view.render();
|
|
41
|
+
self.render_interval = requestAnimFrame(render, self.canvas);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
clearTimeout(self.render_interval);
|
|
45
|
+
self.render_interval = null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
self.render_interval = setTimeout(render, Jax.render_speed);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function stopRendering(self) {
|
|
53
|
+
clearTimeout(self.render_interval);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function startUpdating(self) {
|
|
57
|
+
function updateFunc() {
|
|
58
|
+
if (!self.lastUpdate) self.lastUpdate = new Date();
|
|
59
|
+
var now = new Date();
|
|
60
|
+
var timechange = (now - self.lastUpdate) / 1000.0;
|
|
61
|
+
self.lastUpdate = now;
|
|
62
|
+
|
|
63
|
+
self.update(timechange);
|
|
64
|
+
self.update_interval = setTimeout(updateFunc, Jax.update_speed);
|
|
65
|
+
}
|
|
66
|
+
updateFunc();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function stopUpdating(self) {
|
|
70
|
+
clearTimeout(self.update_interval);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function setupView(self, view) {
|
|
74
|
+
view.context = self;
|
|
75
|
+
view.world = self.world;
|
|
76
|
+
view.player = self.player;
|
|
77
|
+
for (var i in self) {
|
|
78
|
+
if (i.indexOf("gl") == 0) {
|
|
79
|
+
/* it's a WebGL method */
|
|
80
|
+
view[i] = eval("(function() { return this.context."+i+".apply(this.context, arguments); })");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/* TODO we should set up helpers, etc. here too */
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function reloadMatrices(self) {
|
|
87
|
+
self.matrix_stack.reset(); // reset depth
|
|
88
|
+
self.matrix_stack.loadModelMatrix(Jax.IDENTITY_MATRIX);
|
|
89
|
+
self.matrix_stack.loadViewMatrix(self.player.camera.getModelViewMatrix());
|
|
90
|
+
self.matrix_stack.loadProjectionMatrix(self.player.camera.getProjectionMatrix());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
var klass = Jax.Class.create({
|
|
94
|
+
initialize: function(canvas) {
|
|
95
|
+
if (typeof(canvas) == "string") canvas = document.getElementById(canvas);
|
|
96
|
+
if (!canvas) throw new Error("Can't initialize a WebGL context without a canvas!");
|
|
97
|
+
this.id = ++Jax.Context.identifier;
|
|
98
|
+
this.canvas = canvas;
|
|
99
|
+
setupContext(this);
|
|
100
|
+
this.setupEventListeners();
|
|
101
|
+
this.render_interval = null;
|
|
102
|
+
this.glClearColor(0.0, 0.0, 0.0, 1.0);
|
|
103
|
+
this.glClearDepth(1.0);
|
|
104
|
+
this.glEnable(GL_DEPTH_TEST);
|
|
105
|
+
this.glDepthFunc(GL_LEQUAL);
|
|
106
|
+
this.glEnable(GL_BLEND);
|
|
107
|
+
this.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
108
|
+
this.checkForRenderErrors();
|
|
109
|
+
this.world = new Jax.World(this);
|
|
110
|
+
this.player = {camera: new Jax.Camera()};
|
|
111
|
+
this.player.camera.perspective({width:canvas.width, height:canvas.height});
|
|
112
|
+
this.matrix_stack = new Jax.MatrixStack();
|
|
113
|
+
this.current_pass = Jax.Scene.AMBIENT_PASS;
|
|
114
|
+
|
|
115
|
+
startUpdating(this);
|
|
116
|
+
if (Jax.routes.isRouted("/"))
|
|
117
|
+
this.redirectTo("/");
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
hasStencil: function() {
|
|
121
|
+
return !!this.gl.stencil;
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Jax.Context#redirectTo(path) -> Controller
|
|
126
|
+
* - path (String): the path to redirect to
|
|
127
|
+
*
|
|
128
|
+
* Redirects to the specified route, and then returns the Jax.Controller that
|
|
129
|
+
* was just redirected to. The act of redirecting will dispose of the current
|
|
130
|
+
* World, so be prepared to initialize a new scene.
|
|
131
|
+
**/
|
|
132
|
+
redirectTo: function(path) {
|
|
133
|
+
stopRendering(this);
|
|
134
|
+
|
|
135
|
+
this.world.dispose();
|
|
136
|
+
this.player.camera.reset();
|
|
137
|
+
/* yes, this is necessary. If the routing fails, controller must be null to prevent #update with a new world. */
|
|
138
|
+
this.current_controller = this.current_view = null;
|
|
139
|
+
this.current_controller = Jax.routes.dispatch(path, this);
|
|
140
|
+
if (!this.current_controller.view_key)
|
|
141
|
+
throw new Error("Controller '"+this.current_controller.getControllerName()+"' did not produce a renderable result");
|
|
142
|
+
this.current_view = Jax.views.find(this.current_controller.view_key);
|
|
143
|
+
|
|
144
|
+
setupView(this, this.current_view);
|
|
145
|
+
if (!this.isRendering()) startRendering(this);
|
|
146
|
+
|
|
147
|
+
return this.current_controller;
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
update: function(timechange) {
|
|
151
|
+
if (this.current_controller && this.current_controller.update)
|
|
152
|
+
this.current_controller.update(timechange);
|
|
153
|
+
this.world.update(timechange);
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Jax.Context#isRendering() -> Boolean
|
|
158
|
+
* Returns true if this Jax.Context currently has a render interval set.
|
|
159
|
+
* This will be false by default if there is no root route; otherwise
|
|
160
|
+
* it will be true. It is also enabled automatically upon the first
|
|
161
|
+
* valid redirect.
|
|
162
|
+
**/
|
|
163
|
+
isRendering: function() {
|
|
164
|
+
return this.render_interval != null;
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Jax.Context#dispose() -> undefined
|
|
169
|
+
*
|
|
170
|
+
* Permanently disposes of this context, freeing the resources it is using.
|
|
171
|
+
* This stops actions from running, closes any open rendering contexts, and
|
|
172
|
+
* clears all other timeouts and intervals.
|
|
173
|
+
*
|
|
174
|
+
* A Jax.Context cannot be used once it is disposed.
|
|
175
|
+
**/
|
|
176
|
+
dispose: function() {
|
|
177
|
+
this.disposed = true;
|
|
178
|
+
stopRendering(this);
|
|
179
|
+
stopUpdating(this);
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Jax.Context#isDisposed() -> Boolean
|
|
184
|
+
* Returns true if this context has been disposed.
|
|
185
|
+
**/
|
|
186
|
+
isDisposed: function() {
|
|
187
|
+
return !!this.disposed;
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
pushMatrix: function(yield_to) {
|
|
191
|
+
this.matrix_stack.push();
|
|
192
|
+
yield_to();
|
|
193
|
+
this.matrix_stack.pop();
|
|
194
|
+
},
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Jax.Context#getViewMatrix() -> mat4
|
|
198
|
+
* Returns the view matrix. See Jax.MatrixStack#getViewMatrix for details.
|
|
199
|
+
**/
|
|
200
|
+
getViewMatrix: function() { return this.matrix_stack.getViewMatrix(); },
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Jax.Context#getInverseViewMatrix() -> mat4
|
|
204
|
+
* Returns the inverse view matrix. See Jax.MatrixStack#getInverseViewMatrix for details.
|
|
205
|
+
**/
|
|
206
|
+
getInverseViewMatrix: function() { return this.matrix_stack.getInverseViewMatrix(); },
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Jax.Context#getFrustum() -> Jax.Scene.Frustum
|
|
210
|
+
* Returns the frustum for the player's camera. Equivalent to calling
|
|
211
|
+
*
|
|
212
|
+
* context.player.camera.getFrustum()
|
|
213
|
+
*
|
|
214
|
+
* Note that changes to the matrix via #multMatrix will not be represented
|
|
215
|
+
* in this Jax.Scene.Frustum.
|
|
216
|
+
**/
|
|
217
|
+
getFrustum: function() { return this.player.camera.frustum; },
|
|
218
|
+
|
|
219
|
+
checkForRenderErrors: function() {
|
|
220
|
+
/* Error checking is slow, so don't do it in production mode */
|
|
221
|
+
if (Jax.environment == "production") return;
|
|
222
|
+
|
|
223
|
+
var error = this.glGetError();
|
|
224
|
+
if (error != GL_NO_ERROR)
|
|
225
|
+
{
|
|
226
|
+
var str = "GL error in "+this.canvas.id+": "+error;
|
|
227
|
+
error = new Error(str);
|
|
228
|
+
var message = error;
|
|
229
|
+
if (error.stack)
|
|
230
|
+
{
|
|
231
|
+
var stack = error.stack.split("\n");
|
|
232
|
+
stack.shift();
|
|
233
|
+
message += "\n\n"+stack.join("\n");
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
throw error;
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
|
|
240
|
+
handleRenderError: function(method_name, args, err) {
|
|
241
|
+
throw err;
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
/* set up matrix stack delegation */
|
|
246
|
+
klass.delegate(/^(get|load|mult)(.*)Matrix$/).into("matrix_stack");
|
|
247
|
+
|
|
248
|
+
return klass;
|
|
249
|
+
})();
|
|
250
|
+
|
|
251
|
+
Jax.Context.identifier = 0;
|
|
252
|
+
Jax.Context.addMethods(GL_METHODS);
|
|
253
|
+
Jax.Context.addMethods(Jax.EVENT_METHODS);
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* class Jax.Controller
|
|
3
|
+
* Controllers are a major component of the Jax framework, because they are in
|
|
4
|
+
* charge of receiving input from the user, setting up a scene, tearing it down,
|
|
5
|
+
* and deciding when is the right time to transition to a different controller.
|
|
6
|
+
*
|
|
7
|
+
* Controllers need to be either registered with Jax.routes or invoked using
|
|
8
|
+
* Jax.Controller.invoke(). They are not intended to be instantiated directly,
|
|
9
|
+
* so you should avoid doing this in your code and instead rely on the route set.
|
|
10
|
+
*
|
|
11
|
+
* Methods added to controllers are called actions. You can name actions whatever
|
|
12
|
+
* you want, but some action names serve special purposes. They are as follows:
|
|
13
|
+
*
|
|
14
|
+
* * *index* - called when the action name is omitted from a route.
|
|
15
|
+
* * *destroy* - called when leaving the current controller.
|
|
16
|
+
* * *mouse_clicked* - called when the mouse is clicked within the canvas.
|
|
17
|
+
* * *mouse_entered* - called when the mouse enters the canvas.
|
|
18
|
+
* * *mouse_exited* - called when the mouse exits the canvas.
|
|
19
|
+
* * *mouse_moved* - called when the mouse is moved, unless a button is pressed.
|
|
20
|
+
* * *mouse_dragged* - called when the mouse is moved while a button is pressed.
|
|
21
|
+
* * *mouse_pressed* - called when a mouse button has been pressed.
|
|
22
|
+
* * *mouse_released* - called when a mouse button has been released.
|
|
23
|
+
* * *mouse_clicked* - called when a mouse button has been clicked.
|
|
24
|
+
* * *key_pressed* - called when a keyboard button has been pressed.
|
|
25
|
+
* * *key_released* - called when a keyboard button has been released.
|
|
26
|
+
* * *key_typed* - called when a keyboard button has been typed.
|
|
27
|
+
* * *update* - called (approximately) every 60 milliseconds for as long
|
|
28
|
+
* as a controller is active. Time difference in seconds is passed as an arguments.
|
|
29
|
+
*
|
|
30
|
+
* Example:
|
|
31
|
+
*
|
|
32
|
+
* var WelcomeController = Jax.Controller.Create("welcome", ApplicationController, {
|
|
33
|
+
* index: function() {
|
|
34
|
+
* // ...
|
|
35
|
+
* },
|
|
36
|
+
*
|
|
37
|
+
* mouse_clicked: function(event) {
|
|
38
|
+
* // ...
|
|
39
|
+
* },
|
|
40
|
+
*
|
|
41
|
+
* update: function(timechange) {
|
|
42
|
+
* // it's been [timechange] seconds since last update
|
|
43
|
+
* }
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* With the exception of event actions, which will be fired every time an event occurs,
|
|
47
|
+
* controller actions are only triggered once for a given controller unless they
|
|
48
|
+
* explicitly trigger other actions by calling them directly. They differ from their
|
|
49
|
+
* corresponding views (see Jax.View) in this way, as a view is rendered many times
|
|
50
|
+
* -- up to a target rate of 60 passes per second.
|
|
51
|
+
**/
|
|
52
|
+
(function() {
|
|
53
|
+
var protected_instance_method_names = [
|
|
54
|
+
'initialize', 'toString', 'getControllerName', 'constructor', 'isKindOf', 'fireAction',
|
|
55
|
+
'eraseResult'
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
function is_protected(method_name) {
|
|
59
|
+
for (var i = 0; i < protected_instance_method_names.length; i++)
|
|
60
|
+
if (protected_instance_method_names[i] == method_name)
|
|
61
|
+
return true;
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
Jax.Controller = (function() {
|
|
66
|
+
function setViewKey(self) {
|
|
67
|
+
self.view_key = self.getControllerName()+"/"+self.action_name;
|
|
68
|
+
self.rendered_or_redirected = true;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return Jax.Class.create({
|
|
72
|
+
fireAction: function(action_name) {
|
|
73
|
+
this.eraseResult();
|
|
74
|
+
this.action_name = action_name;
|
|
75
|
+
|
|
76
|
+
if (this[action_name])
|
|
77
|
+
this[action_name].call(this, []);
|
|
78
|
+
else throw new Error("Call to missing action: '"+action_name+"' in controller '"+this.getControllerName()+"'");
|
|
79
|
+
|
|
80
|
+
if (!this.rendered_or_redirected)
|
|
81
|
+
setViewKey(this);
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
eraseResult: function() {
|
|
85
|
+
this.rendered_or_redirected = false;
|
|
86
|
+
this.view_key = null;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
})();
|
|
90
|
+
|
|
91
|
+
var controller_class_methods = {
|
|
92
|
+
invoke: function(action_name, context) {
|
|
93
|
+
var instance = new this();
|
|
94
|
+
instance.context = context;
|
|
95
|
+
instance.world = context && context.world;
|
|
96
|
+
instance.player = context && context.player;
|
|
97
|
+
instance.fireAction(action_name);
|
|
98
|
+
return instance;
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Jax.Controller.create(controllerName, methods) -> Class
|
|
104
|
+
* Jax.Controller.create(controllerName, superclass, methods) -> Class
|
|
105
|
+
* - controllerName (String): the short name of this controller
|
|
106
|
+
* - superclass (Class): a parent class to inherit from
|
|
107
|
+
* - methods (Object): a set of methods to be added to the Class
|
|
108
|
+
*
|
|
109
|
+
* The controllerName must be the short name of the controller, as represented
|
|
110
|
+
* in Jax.RouteSet. An example controller name for a WelcomeController would be
|
|
111
|
+
* "welcome".
|
|
112
|
+
*
|
|
113
|
+
* If superclass is not given, Jax.Controller is used as the superclass instead.
|
|
114
|
+
*
|
|
115
|
+
* The methods object follows the same structure as Prototype.
|
|
116
|
+
*
|
|
117
|
+
* Example:
|
|
118
|
+
*
|
|
119
|
+
* var WelcomeController = Jax.Controller.Create("welcome", ApplicationController, {
|
|
120
|
+
* index: function() {
|
|
121
|
+
* // ...
|
|
122
|
+
* },
|
|
123
|
+
*
|
|
124
|
+
* mouse_clicked: function(event) {
|
|
125
|
+
* // ...
|
|
126
|
+
* }
|
|
127
|
+
* });
|
|
128
|
+
**/
|
|
129
|
+
Jax.Controller.create = function(controller_name, superclass, inner) {
|
|
130
|
+
if (typeof(controller_name) != "string")
|
|
131
|
+
{
|
|
132
|
+
inner = superclass;
|
|
133
|
+
superclass = controller_name;
|
|
134
|
+
controller_name = "generic";
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
var klass;
|
|
138
|
+
if (inner) klass = Jax.Class.create(superclass, inner);
|
|
139
|
+
else klass = Jax.Class.create(Jax.Controller, superclass);
|
|
140
|
+
|
|
141
|
+
Object.extend(klass, controller_class_methods);
|
|
142
|
+
Object.extend(klass, { getControllerName: function() { return controller_name; } });
|
|
143
|
+
klass.addMethods({getControllerName: function() { return controller_name; } });
|
|
144
|
+
|
|
145
|
+
// we already know the controller name and all its actions, so may as well
|
|
146
|
+
// set up routing here.
|
|
147
|
+
for (var method_name in klass.prototype)
|
|
148
|
+
{
|
|
149
|
+
if (!is_protected(method_name)) {
|
|
150
|
+
// it's not a protected name, so treat it as an action
|
|
151
|
+
Jax.routes.map(controller_name+"/"+method_name, klass, method_name);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return klass;
|
|
156
|
+
};
|
|
157
|
+
})();
|