jax 0.0.0.3 → 0.0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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