aboutsummaryrefslogtreecommitdiff
path: root/js/lib/rdge/materials/flat-material.js
blob: 791dcc27fbdb3378bc5ff6e2f9afa84e3db60f35 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/* <copyright>
 This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
 No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
 (c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
 </copyright> */

var Material = require("js/lib/rdge/materials/material").Material;

///////////////////////////////////////////////////////////////////////
// Class GLMaterial
//      RDGE representation of a material.
///////////////////////////////////////////////////////////////////////
var FlatMaterial = function FlatMaterial()
{
    ///////////////////////////////////////////////////////////////////////
    // Instance variables
    ///////////////////////////////////////////////////////////////////////
    this._name = "Flat";
    this._shaderName = "flat";

    this._color = [1, 0, 0, 1];

    ///////////////////////////////////////////////////////////////////////
    // Property Accessors
    ///////////////////////////////////////////////////////////////////////
    this.getShaderName = function () { return this._shaderName; };
    this.isAnimated = function ()			{ return false;		};
	this.getTechniqueName	= function()	{  return 'colorMe' };

    ///////////////////////////////////////////////////////////////////////
    // Methods
    ///////////////////////////////////////////////////////////////////////
    // duplcate method requirde

    this.init = function (world)
	{
        // save the world
        if (world) {
            this.setWorld(world);

            // set up the shader
            this._shader = new RDGE.jshader();
            this._shader.def = flatShaderDef;
            this._shader.init();

            // set up the material node
            this._materialNode = RDGE.createMaterialNode("flatMaterial_" + world.generateUniqueNodeID());
            this._materialNode.setShader(this._shader);
		
			this.setShaderValues();
        }
        else
            throw new Error("GLWorld not supplied to material initialization");
    };


    ///////////////////////////////////////////////////////////////////////
    // Material Property Accessors
    ///////////////////////////////////////////////////////////////////////
    this._propNames = ["color"];
    this._propLabels = ["Color"];
    this._propTypes = ["color"];
    this._propValues = [];

    this._propValues[this._propNames[0]] = this._color;
};

///////////////////////////////////////////////////////////////////////////////////////
// RDGE shader
 
// shader spec (can also be loaded from a .JSON file, or constructed at runtime)
flatShaderDef  = 
{
	'shaders':  { // shader files
		'defaultVShader':"assets/shaders/Basic.vert.glsl",
		'defaultFShader':"assets/shaders/Basic.frag.glsl"
		},
	'techniques': { // rendering control
		'colorMe':[ // simple color pass
			{
				'vshader' : 'defaultVShader',
				'fshader' : 'defaultFShader',
		   
				// attributes
				'attributes' :
				 {
						'vert'	:	{ 'type' : 'vec3' },
						'normal' :	{ 'type' : 'vec3' },
						'texcoord'	:	{ 'type' : 'vec2' }
				 },
				// attributes
				'params' :
				 {
					'color' :   { 'type' : 'vec4' }
				 }
			}
		]
	 }
};

FlatMaterial.prototype = new Material();

if (typeof exports === "object") {
    exports.FlatMaterial = FlatMaterial;
}