constructor( parameters ) {

    		super();

    		this.type = 'ShaderMaterial';

    		this.defines = {};
    		this.uniforms = {};

    		this.vertexShader = default_vertex;
    		this.fragmentShader = default_fragment;

    		this.linewidth = 1;

    		this.wireframe = false;
    		this.wireframeLinewidth = 1;

    		this.fog = false; // set to use scene fog
    		this.lights = false; // set to use scene lights
    		this.clipping = false; // set to use user-defined clipping planes

    		this.extensions = {
    			derivatives: false, // set to use derivatives
    			fragDepth: false, // set to use fragment depth values
    			drawBuffers: false, // set to use draw buffers
    			shaderTextureLOD: false // set to use shader texture LOD
    		};

    		// When rendered geometry doesn't include these attributes but the material does,
    		// use these default values in WebGL. This avoids errors when buffer data is missing.
    		this.defaultAttributeValues = {
    			'color': [ 1, 1, 1 ],
    			'uv': [ 0, 0 ],
    			'uv2': [ 0, 0 ]
    		};

    		this.index0AttributeName = undefined;
    		this.uniformsNeedUpdate = false;

    		this.glslVersion = null;

    		if ( parameters !== undefined ) {

    			if ( parameters.attributes !== undefined ) {

    				console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );

    			}

    			this.setValues( parameters );

    		}

    	}
parameters = {
 defines: { "label" : "value" },
 uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } },

 fragmentShader: <string>,
 vertexShader: <string>,

 wireframe: <boolean>,
 wireframeLinewidth: <float>,

 lights: <bool>
}