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.
- data/LICENSE +19 -0
- data/README.rdoc +32 -15
- data/Rakefile +8 -2
- data/builtin/shaders/functions/lights.ejs +19 -31
- data/builtin/shaders/lighting/fragment.ejs +20 -14
- data/builtin/shaders/normal_map/manifest.yml +2 -2
- data/builtin/shaders/texture/manifest.yml +2 -2
- data/guides/assets/images/getting_started/dungeon-complete.png +0 -0
- data/guides/assets/images/getting_started/dungeon-normal-map.png +0 -0
- data/guides/assets/images/getting_started/dungeon-rainbow-textured.png +0 -0
- data/guides/assets/images/getting_started/dungeon-rainbow.png +0 -0
- data/guides/assets/images/getting_started/dungeon-textured-lighting.png +0 -0
- data/guides/assets/images/getting_started/dungeon-textured.png +0 -0
- data/guides/assets/images/getting_started/teapot-red-directional-point.png +0 -0
- data/guides/assets/images/getting_started/teapot-red-directional.png +0 -0
- data/guides/assets/images/getting_started/teapot-red-nolight.png +0 -0
- data/guides/assets/images/getting_started/teapot-red-spot-point-directional.png +0 -0
- data/guides/assets/images/getting_started/teapot-white.png +0 -0
- data/guides/assets/images/getting_started/teapot-with-model.png +0 -0
- data/guides/source/getting_started.textile +80 -39
- data/guides/source/index.html.erb +5 -1
- data/guides/source/matrices.textile +5 -0
- data/lib/jax/generators/app/app_generator.rb +16 -5
- data/lib/jax/generators/app/templates/public/javascripts/jax.js +27 -11
- data/lib/jax/generators/commands.rb +17 -4
- data/lib/jax/generators/material/material_generator.rb +1 -1
- data/lib/jax/generators/shader/USAGE +4 -0
- data/lib/jax/generators/shader/shader_generator.rb +71 -0
- data/lib/jax/generators/shader/templates/common.ejs.tt +16 -0
- data/lib/jax/generators/shader/templates/fragment.ejs.tt +8 -0
- data/lib/jax/generators/shader/templates/manifest.yml.tt +15 -0
- data/lib/jax/generators/shader/templates/material.js.tt +28 -0
- data/lib/jax/generators/shader/templates/spec.js.tt +28 -0
- data/lib/jax/generators/shader/templates/vertex.ejs.tt +10 -0
- data/lib/jax/version.rb +1 -1
- data/spec/javascripts/jax/webgl/shader_chain_spec.js +1 -1
- data/spec/javascripts/{jax/builtin/materials → shaders}/core_materials_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/dual_paraboloid_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/fog_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/lighting_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/normal_map_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/shadow_map_spec.js +0 -0
- data/spec/javascripts/{jax/builtin/materials → shaders}/texture_spec.js +0 -0
- data/src/jax/core/matrix_stack.js +7 -3
- data/src/jax/webgl/core/framebuffer.js +5 -0
- data/src/jax/webgl/scene/light_manager.js +4 -1
- data/src/jax/webgl/shader.js +11 -1
- data/src/jax/webgl/shader/manifest.js +6 -6
- data/src/jax/webgl/shader_chain.js +9 -2
- data/src/jax/webgl/world.js +8 -4
- metadata +40 -18
File without changes
|
File without changes
|
@@ -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
|
@@ -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
|
},
|
data/src/jax/webgl/shader.js
CHANGED
@@ -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
|
-
|
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*\(
|
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 ?
|
162
|
+
(lastTookArguments ? colors : "") +
|
156
163
|
"}\n";
|
157
164
|
},
|
158
165
|
|
data/src/jax/webgl/world.js
CHANGED
@@ -74,11 +74,16 @@ Jax.World = (function() {
|
|
74
74
|
|
75
75
|
if (this.lighting.isEnabled()) {
|
76
76
|
/* ambient pass */
|
77
|
-
|
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.
|
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-
|
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:
|
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:
|
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
|