From eb59a523258cad3351cba9bf8de986e90a8e5b1c Mon Sep 17 00:00:00 2001
From: hwc487
Date: Wed, 21 Mar 2012 15:17:58 -0700
Subject: Added material library data to the canvas data.
---
js/lib/rdge/materials/bump-metal-material.js | 4 -
js/lib/rdge/materials/cloud-material.js | 300 ++++++++++++++++++++++++++
js/lib/rdge/materials/plasma-material.js | 1 -
js/lib/rdge/materials/pulse-material.js | 4 -
js/lib/rdge/materials/radial-blur-material.js | 4 -
js/lib/rdge/materials/uber-material.js | 5 -
6 files changed, 300 insertions(+), 18 deletions(-)
create mode 100644 js/lib/rdge/materials/cloud-material.js
(limited to 'js/lib')
diff --git a/js/lib/rdge/materials/bump-metal-material.js b/js/lib/rdge/materials/bump-metal-material.js
index 4a6e9ab8..2ef83227 100755
--- a/js/lib/rdge/materials/bump-metal-material.js
+++ b/js/lib/rdge/materials/bump-metal-material.js
@@ -154,10 +154,6 @@ var BumpMetalMaterial = function BumpMetalMaterial() {
this.exportJSON = function()
{
- var world = this.getWorld();
- if (!world)
- throw new Error( "no world in material.export, " + this.getName() );
-
var jObj =
{
'material' : this.getShaderName(),
diff --git a/js/lib/rdge/materials/cloud-material.js b/js/lib/rdge/materials/cloud-material.js
new file mode 100644
index 00000000..85088f91
--- /dev/null
+++ b/js/lib/rdge/materials/cloud-material.js
@@ -0,0 +1,300 @@
+/*
+ This file contains proprietary software owned by Motorola Mobility, Inc.
+ No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+ (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
+ */
+
+var MaterialParser = require("js/lib/rdge/materials/material-parser").MaterialParser;
+var Material = require("js/lib/rdge/materials/material").Material;
+///////////////////////////////////////////////////////////////////////
+// Class GLMaterial
+// RDGE representation of a material.
+///////////////////////////////////////////////////////////////////////
+var CloudMaterial = function CloudMaterial() {
+ ///////////////////////////////////////////////////////////////////////
+ // Instance variables
+ ///////////////////////////////////////////////////////////////////////
+ this._name = "CloudMaterial";
+ this._shaderName = "cloud";
+
+ this._texMap = 'assets/images/cloud2.jpg';
+ this._diffuseColor = [0.5, 0.5, 0.5, 0.5];
+
+ this._time = 0.0;
+ this._dTime = 0.01;
+
+ ///////////////////////////////////////////////////////////////////////
+ // Property Accessors
+ ///////////////////////////////////////////////////////////////////////
+ this.getName = function() { return this._name; };
+ this.getShaderName = function() { return this._shaderName; };
+
+ this.getTextureMap = function() { return this._propValues[this._propNames[0]] ? this._propValues[this._propNames[0]].slice() : null };
+ this.setTextureMap = function(m) { this._propValues[this._propNames[0]] = m ? m.slice(0) : null; this.updateTexture(); };
+
+ this.setDiffuseColor = function(c) { this._propValues[this._propNames[1]] = c.slice(0); this.updateColor(); };
+ this.getDiffuseColor = function() { return this._propValues[this._propNames[1]] ? this._propValues[this._propNames[1]].slice() : null; };
+
+ this.isAnimated = function() { return true; };
+
+ ///////////////////////////////////////////////////////////////////////
+ // Material Property Accessors
+ ///////////////////////////////////////////////////////////////////////
+ this._propNames = ["texmap", "diffusecolor"];
+ this._propLabels = ["Texture map", "Diffuse Color"];
+ this._propTypes = ["file", "color"];
+ this._propValues = [];
+
+ this._propValues[ this._propNames[0] ] = this._texMap.slice(0);
+ this._propValues[ this._propNames[1] ] = this._diffuseColor.slice();
+
+ this.setProperty = function( prop, value )
+ {
+ if (prop === 'color') prop = 'diffusecolor';
+
+ // make sure we have legitimate imput
+ var ok = this.validateProperty( prop, value );
+ if (!ok) {
+ console.log( "invalid property in Radial Gradient Material:" + prop + " : " + value );
+ }
+
+ switch (prop)
+ {
+ case "texmap":
+ this.setTextureMap(value);
+ break;
+
+ case "diffusecolor":
+ this.setDiffuseColor( value );
+ break;
+
+ case "color":
+ break;
+ }
+ };
+ ///////////////////////////////////////////////////////////////////////
+
+
+ ///////////////////////////////////////////////////////////////////////
+ // Methods
+ ///////////////////////////////////////////////////////////////////////
+ // duplcate method requirde
+ this.dup = function( world )
+ {
+ // save the world
+ if (world) this.setWorld( world );
+
+ // allocate a new uber material
+ var newMat = new CloudMaterial();
+
+ // copy over the current values;
+ var propNames = [], propValues = [], propTypes = [], propLabels = [];
+ this.getAllProperties( propNames, propValues, propTypes, propLabels);
+ var n = propNames.length;
+ for (var i=0; i 200.0) this._time = 0.0;
+ }
+ }
+ };
+
+ // JSON export
+ this.exportJSON = function()
+ {
+ var jObj =
+ {
+ 'material' : this.getShaderName(),
+ 'name' : this.getName(),
+ 'texture' : this._propValues[this._propNames[0]]
+ };
+
+ return jObj;
+ };
+
+ this.importJSON = function( jObj )
+ {
+ if (this.getShaderName() != jObj.material) throw new Error( "ill-formed material" );
+ this.setName( jObj.name );
+
+ try {
+ this._propValues[this._propNames[0]] = jObj.texture;
+ }
+ catch (e)
+ {
+ throw new Error( "could not import material: " + jObj );
+ }
+ }
+
+
+ this.export = function() {
+ // every material needs the base type and instance name
+ var exportStr = "material: " + this.getShaderName() + "\n";
+ exportStr += "name: " + this.getName() + "\n";
+
+ var world = this.getWorld();
+ if (!world)
+ throw new Error( "no world in material.export, " + this.getName() );
+
+ var texMapName = this._propValues[this._propNames[0]];
+ exportStr += "texture: " +texMapName + "\n";
+
+ // every material needs to terminate like this
+ exportStr += "endMaterial\n";
+
+ return exportStr;
+ };
+
+ this.import = function( importStr ) {
+ var pu = new MaterialParser( importStr );
+ var material = pu.nextValue( "material: " );
+ if (material != this.getShaderName()) throw new Error( "ill-formed material" );
+ this.setName( pu.nextValue( "name: ") );
+
+ var rtnStr;
+ try {
+ this._propValues[this._propNames[0]] = pu.nextValue( "texture: " );
+
+ var endKey = "endMaterial\n";
+ var index = importStr.indexOf( endKey );
+ index += endKey.length;
+ rtnStr = importStr.substr( index );
+ }
+ catch (e)
+ {
+ throw new Error( "could not import material: " + importStr );
+ }
+
+ return rtnStr;
+ }
+};
+
+///////////////////////////////////////////////////////////////////////////////////////
+// RDGE shader
+
+// shader spec (can also be loaded from a .JSON file, or constructed at runtime)
+var cloudMaterialDef =
+{'shaders':
+ {
+ 'defaultVShader':"assets/shaders/Cloud.vert.glsl",
+ 'defaultFShader':"assets/shaders/Cloud.frag.glsl"
+ },
+ 'techniques':
+ {
+ 'default':
+ [
+ {
+ 'vshader' : 'defaultVShader',
+ 'fshader' : 'defaultFShader',
+ // attributes
+ 'attributes' :
+ {
+ 'vert' : { 'type' : 'vec3' },
+ 'normal' : { 'type' : 'vec3' },
+ 'texcoord' : { 'type' : 'vec2' }
+ },
+ // parameters
+ 'params' :
+ {
+ 'u_tex0': { 'type' : 'tex2d' },
+ 'u_time' : { 'type' : 'float' },
+ 'u_DiffuseColor' : { 'type' : 'vec4' }
+ },
+
+ // render states
+ 'states' :
+ {
+ 'depthEnable' : true,
+ 'offset':[1.0, 0.1]
+ }
+ }
+ ]
+ }
+};
+
+
+
+
+CloudMaterial.prototype = new Material();
+
+if (typeof exports === "object") {
+ exports.CloudMaterial = CloudMaterial;
+}
+
diff --git a/js/lib/rdge/materials/plasma-material.js b/js/lib/rdge/materials/plasma-material.js
index 316a5989..b04d8451 100644
--- a/js/lib/rdge/materials/plasma-material.js
+++ b/js/lib/rdge/materials/plasma-material.js
@@ -69,7 +69,6 @@ var PlasmaMaterial = function PlasmaMaterial() {
this.exportJSON = function()
{
-
var jObj =
{
'material' : this.getShaderName(),
diff --git a/js/lib/rdge/materials/pulse-material.js b/js/lib/rdge/materials/pulse-material.js
index fd2cbe0b..e6be69b4 100644
--- a/js/lib/rdge/materials/pulse-material.js
+++ b/js/lib/rdge/materials/pulse-material.js
@@ -165,10 +165,6 @@ var PulseMaterial = function PulseMaterial() {
// JSON export
this.exportJSON = function()
{
- var world = this.getWorld();
- if (!world)
- throw new Error( "no world in material.export, " + this.getName() );
-
var jObj =
{
'material' : this.getShaderName(),
diff --git a/js/lib/rdge/materials/radial-blur-material.js b/js/lib/rdge/materials/radial-blur-material.js
index d67a3d43..91eebcff 100644
--- a/js/lib/rdge/materials/radial-blur-material.js
+++ b/js/lib/rdge/materials/radial-blur-material.js
@@ -159,10 +159,6 @@ var RadialBlurMaterial = function RadialBlurMaterial() {
this.exportJSON = function()
{
- var world = this.getWorld();
- if (!world)
- throw new Error( "no world in material.export, " + this.getName() );
-
var jObj =
{
'material' : this.getShaderName(),
diff --git a/js/lib/rdge/materials/uber-material.js b/js/lib/rdge/materials/uber-material.js
index 0868e3e9..c1d1913c 100755
--- a/js/lib/rdge/materials/uber-material.js
+++ b/js/lib/rdge/materials/uber-material.js
@@ -579,11 +579,6 @@ var UberMaterial = function UberMaterial() {
this.exportJSON = function()
{
- // we will be needing the world. Make sure it is there
- var world = this.getWorld();
- if (!world)
- throw new Error( "no world in material.export, " + this.getName() );
-
// every material needs the base type and instance name
var caps = this._ubershaderCaps;
var jObj =
--
cgit v1.2.3