aboutsummaryrefslogtreecommitdiff
path: root/js/lib/rdge/materials
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/rdge/materials')
-rwxr-xr-xjs/lib/rdge/materials/linear-gradient-material.js46
-rwxr-xr-xjs/lib/rdge/materials/material.js4
-rwxr-xr-xjs/lib/rdge/materials/radial-gradient-material.js64
3 files changed, 86 insertions, 28 deletions
diff --git a/js/lib/rdge/materials/linear-gradient-material.js b/js/lib/rdge/materials/linear-gradient-material.js
index 586948bb..2df76d61 100755
--- a/js/lib/rdge/materials/linear-gradient-material.js
+++ b/js/lib/rdge/materials/linear-gradient-material.js
@@ -6,6 +6,7 @@
6 6
7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; 7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
8var Material = require("js/lib/rdge/materials/material").Material; 8var Material = require("js/lib/rdge/materials/material").Material;
9var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive;
9 10
10var LinearGradientMaterial = function LinearGradientMaterial() { 11var LinearGradientMaterial = function LinearGradientMaterial() {
11 /////////////////////////////////////////////////////////////////////// 12 ///////////////////////////////////////////////////////////////////////
@@ -25,6 +26,8 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
25 // this._colorCount = 4; 26 // this._colorCount = 4;
26 this._angle = 0.0; // the shader takes [cos(a), sin(a)] 27 this._angle = 0.0; // the shader takes [cos(a), sin(a)]
27 28
29 this._textureTransform = [1,0,0, 0,1,0, 0,0,1];
30
28 /////////////////////////////////////////////////////////////////////// 31 ///////////////////////////////////////////////////////////////////////
29 // Property Accessors 32 // Property Accessors
30 /////////////////////////////////////////////////////////////////////// 33 ///////////////////////////////////////////////////////////////////////
@@ -136,12 +139,6 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
136 } 139 }
137 }; 140 };
138 141
139 // this.getColorCount = function() { return this._colorCount; };
140 // this.setColorCount = function(c) { this._colorCount = c;
141 // if (this._shader && this._shader['default'])
142 // this._shader['default'].u_colorCount.set([c]);
143 // };
144
145 this.getAngle = function () { 142 this.getAngle = function () {
146 return this._angle; 143 return this._angle;
147 }; 144 };
@@ -204,23 +201,21 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
204 // Methods 201 // Methods
205 /////////////////////////////////////////////////////////////////////// 202 ///////////////////////////////////////////////////////////////////////
206 // duplcate method requirde 203 // duplcate method requirde
207 this.dup = function () 204 this.dup = function () {
208 { 205 // allocate a new material
209 // get the current values; 206 var newMat = new LinearGradientMaterial();
210 var propNames = [], propValues = [], propTypes = [], propLabels = [];
211 this.getAllProperties(propNames, propValues, propTypes, propLabels);
212
213 // allocate a new material
214 var newMat = new LinearGradientMaterial();
215 207
216 // copy over the current values; 208 // copy over the current values;
217 var n = propNames.length; 209 var propNames = [], propValues = [], propTypes = [], propLabels = [];
218 for (var i = 0; i < n; i++) 210 this.getAllProperties( propNames, propValues, propTypes, propLabels);
219 newMat.setProperty(propNames[i], propValues[i]); 211 var n = propNames.length;
220 212 for (var i=0; i<n; i++) {
221 return newMat; 213 newMat.setProperty( propNames[i], propValues[i] );
222 } 214 }
215 newMat._textureTransform = this._textureTransform.slice();
223 216
217 return newMat;
218 };
224 219
225 this.init = function (world) { 220 this.init = function (world) {
226 this.setWorld(world); 221 this.setWorld(world);
@@ -265,7 +260,9 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
265 this._shader['default'].u_colorStop4.set([s]); 260 this._shader['default'].u_colorStop4.set([s]);
266 261
267 this.setAngle(this.getAngle()); 262 this.setAngle(this.getAngle());
268 } 263
264 this._shader['default'].u_texTransform.set( this._textureTransform );
265 }
269 }; 266 };
270 267
271 this.exportJSON = function () { 268 this.exportJSON = function () {
@@ -281,7 +278,8 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
281 'colorStop2': this.getColorStop2(), 278 'colorStop2': this.getColorStop2(),
282 'colorStop3': this.getColorStop3(), 279 'colorStop3': this.getColorStop3(),
283 'colorStop4': this.getColorStop4(), 280 'colorStop4': this.getColorStop4(),
284 'angle': this.getAngle() 281 'angle': this.getAngle(),
282 'textureTransform': this._textureTransform
285 }; 283 };
286 284
287 return jObj; 285 return jObj;
@@ -301,6 +299,7 @@ var LinearGradientMaterial = function LinearGradientMaterial() {
301 colorStop3 = jObj.colorStop3, 299 colorStop3 = jObj.colorStop3,
302 colorStop4 = jObj.colorStop4, 300 colorStop4 = jObj.colorStop4,
303 angle = jObj.angle; 301 angle = jObj.angle;
302 this._textureTransform = jObj.textureTransform;
304 303
305 this.setProperty("color1", color1); 304 this.setProperty("color1", color1);
306 this.setProperty("color2", color2); 305 this.setProperty("color2", color2);
@@ -387,7 +386,8 @@ var linearGradientMaterialDef =
387 'u_colorStop2': { 'type' : 'float' }, 386 'u_colorStop2': { 'type' : 'float' },
388 'u_colorStop3': { 'type' : 'float' }, 387 'u_colorStop3': { 'type' : 'float' },
389 'u_colorStop4': { 'type' : 'float' }, 388 'u_colorStop4': { 'type' : 'float' },
390 'u_cos_sin_angle' : { 'type' : 'vec2' } 389 'u_cos_sin_angle': { 'type' : 'vec2' },
390 'u_texTransform': { 'type' : 'mat3' }
391 //'u_colorCount': {'type' : 'int' } 391 //'u_colorCount': {'type' : 'int' }
392 392
393 }, 393 },
diff --git a/js/lib/rdge/materials/material.js b/js/lib/rdge/materials/material.js
index 77220bf7..9f0ae6f1 100755
--- a/js/lib/rdge/materials/material.js
+++ b/js/lib/rdge/materials/material.js
@@ -233,6 +233,10 @@ var Material = function GLMaterial( world ) {
233 // animated materials should implement the update method 233 // animated materials should implement the update method
234 }; 234 };
235 235
236 this.fitToPrimitive = function( prim ) {
237 // some materials need to preserve an aspect ratio - or someting else.
238 };
239
236 this.registerTexture = function( texture ) { 240 this.registerTexture = function( texture ) {
237 // the world needs to know about the texture map 241 // the world needs to know about the texture map
238 var world = this.getWorld(); 242 var world = this.getWorld();
diff --git a/js/lib/rdge/materials/radial-gradient-material.js b/js/lib/rdge/materials/radial-gradient-material.js
index 083b7371..67a85041 100755
--- a/js/lib/rdge/materials/radial-gradient-material.js
+++ b/js/lib/rdge/materials/radial-gradient-material.js
@@ -6,6 +6,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
6 6
7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser; 7var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
8var Material = require("js/lib/rdge/materials/material").Material; 8var Material = require("js/lib/rdge/materials/material").Material;
9var ShapePrimitive = require("js/lib/geom/shape-primitive").ShapePrimitive;
9 10
10var RadialGradientMaterial = function RadialGradientMaterial() { 11var RadialGradientMaterial = function RadialGradientMaterial() {
11 /////////////////////////////////////////////////////////////////////// 12 ///////////////////////////////////////////////////////////////////////
@@ -24,6 +25,8 @@ var RadialGradientMaterial = function RadialGradientMaterial() {
24 this._colorStop4 = 1.0; 25 this._colorStop4 = 1.0;
25 // this._colorCount = 4; 26 // this._colorCount = 4;
26 27
28 this._textureTransform = [1,0,0, 0,1,0, 0,0,1];
29
27 /////////////////////////////////////////////////////////////////////// 30 ///////////////////////////////////////////////////////////////////////
28 // Property Accessors 31 // Property Accessors
29 /////////////////////////////////////////////////////////////////////// 32 ///////////////////////////////////////////////////////////////////////
@@ -191,9 +194,21 @@ var RadialGradientMaterial = function RadialGradientMaterial() {
191 // Methods 194 // Methods
192 /////////////////////////////////////////////////////////////////////// 195 ///////////////////////////////////////////////////////////////////////
193 // duplcate method requirde 196 // duplcate method requirde
194 this.dup = function () { 197 this.dup = function () {
195 return new RadialGradientMaterial(); 198 // allocate a new material
196 }; 199 var newMat = new RadialGradientMaterial();
200
201 // copy over the current values;
202 var propNames = [], propValues = [], propTypes = [], propLabels = [];
203 this.getAllProperties( propNames, propValues, propTypes, propLabels);
204 var n = propNames.length;
205 for (var i=0; i<n; i++) {
206 newMat.setProperty( propNames[i], propValues[i] );
207 }
208 newMat._textureTransform = this._textureTransform.slice();
209
210 return newMat;
211 };
197 212
198 this.init = function (world) { 213 this.init = function (world) {
199 this.setWorld(world); 214 this.setWorld(world);
@@ -234,9 +249,45 @@ var RadialGradientMaterial = function RadialGradientMaterial() {
234 this._shader['default'].u_colorStop3.set([s]); 249 this._shader['default'].u_colorStop3.set([s]);
235 s = this.getColorStop4(); 250 s = this.getColorStop4();
236 this._shader['default'].u_colorStop4.set([s]); 251 this._shader['default'].u_colorStop4.set([s]);
252
253 this._shader['default'].u_texTransform.set( this._textureTransform );
237 } 254 }
238 }; 255 };
239 256
257 this.fitToPrimitive = function( prim )
258 {
259 var bounds = ShapePrimitive.getBounds( prim );
260 if (bounds)
261 {
262 var dx = Math.abs( bounds[3] - bounds[0] ),
263 dy = Math.abs( bounds[4] - bounds[1] );