jax 0.0.0.3 → 0.0.0.4

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 (51) hide show
  1. data/LICENSE +19 -0
  2. data/README.rdoc +32 -15
  3. data/Rakefile +8 -2
  4. data/builtin/shaders/functions/lights.ejs +19 -31
  5. data/builtin/shaders/lighting/fragment.ejs +20 -14
  6. data/builtin/shaders/normal_map/manifest.yml +2 -2
  7. data/builtin/shaders/texture/manifest.yml +2 -2
  8. data/guides/assets/images/getting_started/dungeon-complete.png +0 -0
  9. data/guides/assets/images/getting_started/dungeon-normal-map.png +0 -0
  10. data/guides/assets/images/getting_started/dungeon-rainbow-textured.png +0 -0
  11. data/guides/assets/images/getting_started/dungeon-rainbow.png +0 -0
  12. data/guides/assets/images/getting_started/dungeon-textured-lighting.png +0 -0
  13. data/guides/assets/images/getting_started/dungeon-textured.png +0 -0
  14. data/guides/assets/images/getting_started/teapot-red-directional-point.png +0 -0
  15. data/guides/assets/images/getting_started/teapot-red-directional.png +0 -0
  16. data/guides/assets/images/getting_started/teapot-red-nolight.png +0 -0
  17. data/guides/assets/images/getting_started/teapot-red-spot-point-directional.png +0 -0
  18. data/guides/assets/images/getting_started/teapot-white.png +0 -0
  19. data/guides/assets/images/getting_started/teapot-with-model.png +0 -0
  20. data/guides/source/getting_started.textile +80 -39
  21. data/guides/source/index.html.erb +5 -1
  22. data/guides/source/matrices.textile +5 -0
  23. data/lib/jax/generators/app/app_generator.rb +16 -5
  24. data/lib/jax/generators/app/templates/public/javascripts/jax.js +27 -11
  25. data/lib/jax/generators/commands.rb +17 -4
  26. data/lib/jax/generators/material/material_generator.rb +1 -1
  27. data/lib/jax/generators/shader/USAGE +4 -0
  28. data/lib/jax/generators/shader/shader_generator.rb +71 -0
  29. data/lib/jax/generators/shader/templates/common.ejs.tt +16 -0
  30. data/lib/jax/generators/shader/templates/fragment.ejs.tt +8 -0
  31. data/lib/jax/generators/shader/templates/manifest.yml.tt +15 -0
  32. data/lib/jax/generators/shader/templates/material.js.tt +28 -0
  33. data/lib/jax/generators/shader/templates/spec.js.tt +28 -0
  34. data/lib/jax/generators/shader/templates/vertex.ejs.tt +10 -0
  35. data/lib/jax/version.rb +1 -1
  36. data/spec/javascripts/jax/webgl/shader_chain_spec.js +1 -1
  37. data/spec/javascripts/{jax/builtin/materials → shaders}/core_materials_spec.js +0 -0
  38. data/spec/javascripts/{jax/builtin/materials → shaders}/dual_paraboloid_spec.js +0 -0
  39. data/spec/javascripts/{jax/builtin/materials → shaders}/fog_spec.js +0 -0
  40. data/spec/javascripts/{jax/builtin/materials → shaders}/lighting_spec.js +0 -0
  41. data/spec/javascripts/{jax/builtin/materials → shaders}/normal_map_spec.js +0 -0
  42. data/spec/javascripts/{jax/builtin/materials → shaders}/shadow_map_spec.js +0 -0
  43. data/spec/javascripts/{jax/builtin/materials → shaders}/texture_spec.js +0 -0
  44. data/src/jax/core/matrix_stack.js +7 -3
  45. data/src/jax/webgl/core/framebuffer.js +5 -0
  46. data/src/jax/webgl/scene/light_manager.js +4 -1
  47. data/src/jax/webgl/shader.js +11 -1
  48. data/src/jax/webgl/shader/manifest.js +6 -6
  49. data/src/jax/webgl/shader_chain.js +9 -2
  50. data/src/jax/webgl/world.js +8 -4
  51. metadata +40 -18
@@ -130,20 +130,24 @@ Jax.MatrixStack = (function() {
130
130
  *
131
131
  * See also Jax.MatrixStack#pop()
132
132
  **/
133
- push: function() { pushMatrix(this); },
133
+ push: function() { pushMatrix(this); return this; },
134
134
 
135
135
  /**
136
+ * Jax.MatrixStack#pop() -> Jax.MatrixStack
137
+ *
136
138
  * Reverts back to an earlier matrix stack, effectively undoing any changes that have been made
137
139
  * since the most recent call to Jax.MatrixStack#push().
140
+ *
141
+ * See also Jax.MatrixStack#push()
138
142
  **/
139
- pop: function() { this.depth--; },
143
+ pop: function() { this.depth--; return this; },
140
144
 
141
145
  /**
142
146
  * Jax.MatrixStack#reset() -> Jax.MatrixStack
143
147
  *
144
148
  * Resets the stack depth to zero, effectively undoing all calls to #push().
145
149
  **/
146
- reset: function() { this.depth = 0; },
150
+ reset: function() { this.depth = 0; return this; },
147
151
 
148
152
  /**
149
153
  * Jax.MatrixStack#loadModelMatrix(matr) -> Jax.MatrixStack
@@ -1,3 +1,8 @@
1
+ /**
2
+ * class Jax.Framebuffer
3
+ *
4
+ * Used for rendering images off-screen and capturing the result.
5
+ **/
1
6
  Jax.Framebuffer = (function() {
2
7
  function build(context, self) {
3
8
  var handle = context.glCreateFramebuffer();
@@ -38,13 +38,16 @@ Jax.Scene.LightManager = (function() {
38
38
  },
39
39
 
40
40
  illuminate: function(context, objects, options) {
41
+ // Use alpha blending for the first pass, and additive blending for subsequent passes.
42
+ this.context.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
41
43
  for (var i = 0; i < this._lights.length; i++) {
42
- this._current_light = i;
43
44
  for (var j = 0; j < objects.length; j++) {
45
+ this._current_light = i;
44
46
  /* TODO optimization: see if objects[j] is even affected by this._lights[i] (based on attenuation) */
45
47
  if (objects[j].isLit())
46
48
  objects[j].render(context, options);
47
49
  }
50
+ this.context.glBlendFunc(GL_ONE, GL_ONE);
48
51
  }
49
52
  delete this._current_light;
50
53
  },
@@ -1,3 +1,8 @@
1
+ /**
2
+ * class Jax.Shader
3
+ *
4
+ * Wraps around a WebGL shader program.
5
+ **/
1
6
  Jax.Shader = (function() {
2
7
  function buildStackTrace(context, glShader, source) {
3
8
  source = source.split(/\n/);
@@ -119,8 +124,13 @@ Jax.Shader = (function() {
119
124
  return source;
120
125
  }
121
126
 
127
+ function sourceWithoutComments(source) {
128
+ return source.replace(/\/\*.*\*\//g, "");
129
+ }
130
+
122
131
  function numArgumentsInMain(source) {
123
- var result = /void\s*main\((.*?)\)\s*\{/.exec(source);
132
+ // if a comment contains 'void main' in it, we'll get false positives
133
+ var result = /void\s*main\((.*?)\)\s*\{/.exec(sourceWithoutComments(source));
124
134
  if (result) {
125
135
  result = result[1].replace(/\s*/g, '');
126
136
  if (result == "" || result == "void") return 0;
@@ -1,10 +1,10 @@
1
1
  /**
2
- class Jax.Shader.Manifest
3
-
4
- Used to track variable assignments. After all assignments have been made just prior to committing a render phase,
5
- the manifest will be used to actually pass variable values into the shader. This keeps from specifying shader
6
- values more than once. Manifest can also be used to cache values between render passes, because its values are
7
- never reset.
2
+ * class Jax.Shader.Manifest
3
+ *
4
+ * Used to track variable assignments. After all assignments have been made just prior to committing a render phase,
5
+ * the manifest will be used to actually pass variable values into the shader. This keeps from specifying shader
6
+ * values more than once. Manifest can also be used to cache values between render passes, because its values are
7
+ * never reset.
8
8
  **/
9
9
  Jax.Shader.Manifest = Jax.Class.create({
10
10
  initialize: function(existing) {
@@ -8,7 +8,7 @@ Jax.ShaderChain = (function() {
8
8
  function preprocessFunctions(self, prefix, suffix, source) {
9
9
  /* TODO mangle all function and structure names to prevent conflicts -- right now we only mangle main() */
10
10
 
11
- return source.replace(/void\s*main\s*\(/, 'void '+sanitizeName(prefix)+'_main_'+sanitizeName(suffix)+'(');
11
+ return source.replace(/void\s*main\s*\(/g, 'void '+sanitizeName(prefix)+'_main_'+sanitizeName(suffix)+'(');
12
12
  }
13
13
 
14
14
  function preprocessorOptions(self) {
@@ -148,11 +148,18 @@ Jax.ShaderChain = (function() {
148
148
  functionCalls += " "+sanitizeName(this.phases[i].getName())+i+"_main_f("+args+");\n";
149
149
  }
150
150
 
151
+ var colors = "#ifdef PASS_TYPE\n"
152
+ + " if (PASS_TYPE == "+Jax.Scene.ILLUMINATION_PASS+") gl_FragColor = ambient + diffuse + specular;\n"
153
+ + " else gl_FragColor = ambient;\n"
154
+ + "#else\n"
155
+ + " gl_FragColor = ambient + diffuse + specular;\n"
156
+ + "#endif\n";
157
+
151
158
  return "/**** Shader chain generated #main ****/\n" +
152
159
  "void main(void) {\n" +
153
160
  "vec4 ambient = vec4(1.0,1.0,1.0,1.0), diffuse = vec4(1.0,1.0,1.0,1.0), specular = vec4(1.0,1.0,1.0,1.0);\n" +
154
161
  functionCalls +
155
- (lastTookArguments ? "gl_FragColor = ambient + diffuse + specular;\n" : "") +
162
+ (lastTookArguments ? colors : "") +
156
163
  "}\n";
157
164
  },
158
165
 
@@ -74,11 +74,16 @@ Jax.World = (function() {
74
74
 
75
75
  if (this.lighting.isEnabled()) {
76
76
  /* ambient pass */
77
- for (i = 0; i < this.objects.length; i++) {
77
+ /*
78
+ So.... I see a legit need for an ambient pass for A) unlit objects and B)
79
+ scene lighting. But jax doesn't yet support scene lighting so really only
80
+ unlit objects need an ambient pass. For lit objects, why not let
81
+ lighting take care of (ambient + diffuse + specular) all at once?
82
+ */
83
+ for (i = 0; i < this.objects.length; i++)
78
84
  if (!this.objects[i].lit)
79
85
  this.objects[i].render(this.context, unlit);
80
- }
81
- this.lighting.ambient(this.context, this.objects);
86
+ // this.lighting.ambient(this.context, this.objects);
82
87
 
83
88
  /* shadowgen pass */
84
89
  this.context.current_pass = Jax.Scene.SHADOWMAP_PASS;
@@ -88,7 +93,6 @@ Jax.World = (function() {
88
93
  }
89
94
 
90
95
  /* illumination pass */
91
- this.context.glBlendFunc(GL_ONE, GL_ONE);
92
96
  this.context.current_pass = Jax.Scene.ILLUMINATION_PASS;
93
97
  this.lighting.illuminate(this.context, this.objects);
94
98
  } else {
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: jax
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.0.3
5
+ version: 0.0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Colin MacKenzie IV
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-18 00:00:00 -04:00
13
+ date: 2011-05-19 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -181,6 +181,7 @@ files:
181
181
  - .gitmodules
182
182
  - .rvmrc
183
183
  - Gemfile
184
+ - LICENSE
184
185
  - README.rdoc
185
186
  - Rakefile
186
187
  - bin/jax
@@ -230,8 +231,20 @@ files:
230
231
  - guides/assets/images/feature_tile.gif
231
232
  - guides/assets/images/footer_tile.gif
232
233
  - guides/assets/images/getting_started/clean_passing_jasmine_suite.png
234
+ - guides/assets/images/getting_started/dungeon-complete.png
235
+ - guides/assets/images/getting_started/dungeon-normal-map.png
236
+ - guides/assets/images/getting_started/dungeon-rainbow-textured.png
237
+ - guides/assets/images/getting_started/dungeon-rainbow.png
238
+ - guides/assets/images/getting_started/dungeon-textured-lighting.png
239
+ - guides/assets/images/getting_started/dungeon-textured.png
233
240
  - guides/assets/images/getting_started/rock.png
234
241
  - guides/assets/images/getting_started/rock_normal.png
242
+ - guides/assets/images/getting_started/teapot-red-directional-point.png
243
+ - guides/assets/images/getting_started/teapot-red-directional.png
244
+ - guides/assets/images/getting_started/teapot-red-nolight.png
245
+ - guides/assets/images/getting_started/teapot-red-spot-point-directional.png
246
+ - guides/assets/images/getting_started/teapot-white.png
247
+ - guides/assets/images/getting_started/teapot-with-model.png
235
248
  - guides/assets/images/grey_bullet.gif
236
249
  - guides/assets/images/header_backdrop.png
237
250
  - guides/assets/images/header_tile.gif
@@ -330,6 +343,7 @@ files:
330
343
  - guides/source/layout.html.erb
331
344
  - guides/source/lighting.textile
332
345
  - guides/source/materials.textile
346
+ - guides/source/matrices.textile
333
347
  - guides/source/shaders.textile
334
348
  - guides/source/testing.textile
335
349
  - guides/w3c_validator.rb
@@ -380,6 +394,14 @@ files:
380
394
  - lib/jax/generators/model/templates/model.js.tt
381
395
  - lib/jax/generators/model/templates/test.js.tt
382
396
  - lib/jax/generators/script_jax_loader.rb
397
+ - lib/jax/generators/shader/USAGE
398
+ - lib/jax/generators/shader/shader_generator.rb
399
+ - lib/jax/generators/shader/templates/common.ejs.tt
400
+ - lib/jax/generators/shader/templates/fragment.ejs.tt
401
+ - lib/jax/generators/shader/templates/manifest.yml.tt
402
+ - lib/jax/generators/shader/templates/material.js.tt
403
+ - lib/jax/generators/shader/templates/spec.js.tt
404
+ - lib/jax/generators/shader/templates/vertex.ejs.tt
383
405
  - lib/jax/monkeypatch/jasmine.rb
384
406
  - lib/jax/monkeypatch/jasmine/config.rb
385
407
  - lib/jax/monkeypatch/jasmine/server.rb
@@ -449,13 +471,6 @@ files:
449
471
  - spec/generators/model_generator_spec.rb
450
472
  - spec/javascripts/Player.js
451
473
  - spec/javascripts/helpers/SpecHelper.js
452
- - spec/javascripts/jax/builtin/materials/core_materials_spec.js
453
- - spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js
454
- - spec/javascripts/jax/builtin/materials/fog_spec.js
455
- - spec/javascripts/jax/builtin/materials/lighting_spec.js
456
- - spec/javascripts/jax/builtin/materials/normal_map_spec.js
457
- - spec/javascripts/jax/builtin/materials/shadow_map_spec.js
458
- - spec/javascripts/jax/builtin/materials/texture_spec.js
459
474
  - spec/javascripts/jax/builtin/meshes/cube_spec.js
460
475
  - spec/javascripts/jax/builtin/meshes/plane_spec.js
461
476
  - spec/javascripts/jax/builtin/meshes/quad_spec.js
@@ -489,6 +504,13 @@ files:
489
504
  - spec/javascripts/jax/webgl_spec.js
490
505
  - spec/javascripts/jax/world_spec.js
491
506
  - spec/javascripts/jax_spec.js
507
+ - spec/javascripts/shaders/core_materials_spec.js
508
+ - spec/javascripts/shaders/dual_paraboloid_spec.js
509
+ - spec/javascripts/shaders/fog_spec.js
510
+ - spec/javascripts/shaders/lighting_spec.js
511
+ - spec/javascripts/shaders/normal_map_spec.js
512
+ - spec/javascripts/shaders/shadow_map_spec.js
513
+ - spec/javascripts/shaders/texture_spec.js
492
514
  - spec/javascripts/support/jasmine.yml
493
515
  - spec/javascripts/support/jasmine_runner.rb
494
516
  - spec/lib/jax/routes_spec.rb
@@ -636,7 +658,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
636
658
  requirements:
637
659
  - - ">="
638
660
  - !ruby/object:Gem::Version
639
- hash: 2432223765413461543
661
+ hash: 1105159901056856411
640
662
  segments:
641
663
  - 0
642
664
  version: "0"
@@ -645,7 +667,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
645
667
  requirements:
646
668
  - - ">="
647
669
  - !ruby/object:Gem::Version
648
- hash: 2432223765413461543
670
+ hash: 1105159901056856411
649
671
  segments:
650
672
  - 0
651
673
  version: "0"
@@ -709,13 +731,6 @@ test_files:
709
731
  - spec/generators/model_generator_spec.rb
710
732
  - spec/javascripts/Player.js
711
733
  - spec/javascripts/helpers/SpecHelper.js
712
- - spec/javascripts/jax/builtin/materials/core_materials_spec.js
713
- - spec/javascripts/jax/builtin/materials/dual_paraboloid_spec.js
714
- - spec/javascripts/jax/builtin/materials/fog_spec.js
715
- - spec/javascripts/jax/builtin/materials/lighting_spec.js
716
- - spec/javascripts/jax/builtin/materials/normal_map_spec.js
717
- - spec/javascripts/jax/builtin/materials/shadow_map_spec.js
718
- - spec/javascripts/jax/builtin/materials/texture_spec.js
719
734
  - spec/javascripts/jax/builtin/meshes/cube_spec.js
720
735
  - spec/javascripts/jax/builtin/meshes/plane_spec.js
721
736
  - spec/javascripts/jax/builtin/meshes/quad_spec.js
@@ -749,6 +764,13 @@ test_files:
749
764
  - spec/javascripts/jax/webgl_spec.js
750
765
  - spec/javascripts/jax/world_spec.js
751
766
  - spec/javascripts/jax_spec.js
767
+ - spec/javascripts/shaders/core_materials_spec.js
768
+ - spec/javascripts/shaders/dual_paraboloid_spec.js
769
+ - spec/javascripts/shaders/fog_spec.js
770
+ - spec/javascripts/shaders/lighting_spec.js
771
+ - spec/javascripts/shaders/normal_map_spec.js
772
+ - spec/javascripts/shaders/shadow_map_spec.js
773
+ - spec/javascripts/shaders/texture_spec.js
752
774
  - spec/javascripts/support/jasmine.yml
753
775
  - spec/javascripts/support/jasmine_runner.rb
754
776
  - spec/lib/jax/routes_spec.rb