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.
- 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
|