Browse Source

Editor: More work on ShaderMaterial support.

Mr.doob 11 years ago
parent
commit
07a8ba6a14

+ 16 - 2
editor/js/Sidebar.Material.js

@@ -134,7 +134,8 @@ Sidebar.Material = function ( editor ) {
 	// vertex shader
 
 	var materialVertexShaderRow = new UI.Panel();
-	var materialVertexShader = new UI.TextArea().setWidth( '150px' ).setHeight( '40px' ).onChange( update );
+	var materialVertexShader = new UI.TextArea().setWidth( '150px' ).setHeight( '40px' );
+	materialVertexShader.setValue( 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}' ).onChange( update );
 
 	materialVertexShaderRow.add( new UI.Text( 'Vertex Shader' ).setWidth( '90px' ) );
 	materialVertexShaderRow.add( materialVertexShader );
@@ -144,7 +145,8 @@ Sidebar.Material = function ( editor ) {
 	// fragment shader
 
 	var materialFragmentShaderRow = new UI.Panel();
-	var materialFragmentShader = new UI.TextArea().setWidth( '150px' ).setHeight( '40px' ).onChange( update );
+	var materialFragmentShader = new UI.TextArea().setWidth( '150px' ).setHeight( '40px' );
+	materialFragmentShader.setValue( 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}' ).onChange( update );
 
 	materialFragmentShaderRow.add( new UI.Text( 'Fragment Shader' ).setWidth( '90px' ) );
 	materialFragmentShaderRow.add( materialFragmentShader );
@@ -379,6 +381,18 @@ Sidebar.Material = function ( editor ) {
 
 			}
 
+			if ( material.vertexShader !== undefined ) {
+
+				material.vertexShader = materialVertexShader.getValue();
+
+			}
+
+			if ( material.fragmentShader !== undefined ) {
+
+				material.fragmentShader = materialFragmentShader.getValue();
+
+			}
+
 			if ( material.vertexColors !== undefined ) {
 
 				geometry.buffersNeedUpdate = true;

+ 6 - 0
examples/js/exporters/MaterialExporter.js

@@ -90,6 +90,12 @@ THREE.MaterialExporter.prototype = {
 
 			}
 
+		} else if ( material instanceof THREE.ShaderMaterial ) {
+
+			output.type = 'ShaderMaterial';
+			output.vertexShader = material.vertexShader;
+			output.fragmentShader = material.fragmentShader;
+
 		} else if ( material instanceof THREE.SpriteMaterial ) {
 
 			output.type = 'SpriteMaterial';

+ 2 - 0
src/loaders/MaterialLoader.js

@@ -41,6 +41,8 @@ THREE.MaterialLoader.prototype = {
 		if ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );
 		if ( json.specular !== undefined ) material.specular.setHex( json.specular );
 		if ( json.shininess !== undefined ) material.shininess = json.shininess;
+		if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;
+		if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;		
 		if ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;
 		if ( json.blending !== undefined ) material.blending = json.blending;
 		if ( json.side !== undefined ) material.side = json.side;