提交 86c44445 编写于 作者: O OpenShift guest

add some more API updates

上级 8bf81107
......@@ -162,10 +162,14 @@ THREE.WebGLRenderer = THREE.WebGLRenderer2 = function ( parameters ) {
this.setViewport = renderer.setViewport;
this.setScissor = renderer.setScissor;
this.enableScissorTest = renderer.enableScissorTest;
this.setDepthWrite = renderer.setDepthWrite;
this.setDepthTest = renderer.setDepthTest;
this.setRenderTarget = renderer.setRenderTarget;
this.setBlending = renderer.setBlending;
this.setTexture = renderer.setTexture;
this.setMaterialFaces = renderer.setMaterialFaces;
this.setFaceCulling = renderer.setFaceCulling;
// Clearing
......
......@@ -8,303 +8,303 @@ THREE.WebGLRenderer2.ShaderBuilder = function(renderer,info){
THREE.WebGLRenderer2.ShaderBuilder.prototype.buildProgram = function ( shaderID, fragmentShader, vertexShader, uniforms, attributes, defines, parameters ) {
var renderer = this.renderer;
var p, pl, d, program, code;
var chunks = [];
var renderer = this.renderer;
var p, pl, d, program, code;
var chunks = [];
// Generate code
// Generate code
if ( shaderID ) {
if ( shaderID ) {
chunks.push( shaderID );
chunks.push( shaderID );
} else {
} else {
chunks.push( fragmentShader );
chunks.push( vertexShader );
chunks.push( fragmentShader );
chunks.push( vertexShader );
}
for ( d in defines ) {
}
chunks.push( d );
chunks.push( defines[ d ] );
for ( d in defines ) {
}
chunks.push( d );
chunks.push( defines[ d ] );
for ( p in parameters ) {
}
chunks.push( p );
chunks.push( parameters[ p ] );
for ( p in parameters ) {
}
chunks.push( p );
chunks.push( parameters[ p ] );
code = chunks.join();
}
// Check if code has been already compiled
code = chunks.join();
for ( p = 0, pl = this.programs.length; p < pl; p ++ ) {
// Check if code has been already compiled
var programInfo = this.programs[ p ];
for ( p = 0, pl = this.programs.length; p < pl; p ++ ) {
if ( programInfo.code === code ) {
var programInfo = this.programs[ p ];
//console.log( "Code already compiled." /*: \n\n" + code*/ );
if ( programInfo.code === code ) {
programInfo.usedTimes ++;
//console.log( "Code already compiled." /*: \n\n" + code*/ );
return programInfo.program;
programInfo.usedTimes ++;
}
return programInfo.program;
}
var shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC";
}
if ( parameters.shadowMapType === THREE.PCFShadowMap ) {
var shadowMapTypeDefine = "SHADOWMAP_TYPE_BASIC";
shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF";
if ( parameters.shadowMapType === THREE.PCFShadowMap ) {
} else if ( parameters.shadowMapType === THREE.PCFSoftShadowMap ) {
shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF";
shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT";
} else if ( parameters.shadowMapType === THREE.PCFSoftShadowMap ) {
}
shadowMapTypeDefine = "SHADOWMAP_TYPE_PCF_SOFT";
//console.log( "building new program " );
}
//
//console.log( "building new program " );
var customDefines = this.generateDefines( defines );
//
//
var customDefines = this.generateDefines( defines );
var prefix_vertex = [
//
"precision " + renderer.precision + " float;",
var prefix_vertex = [
customDefines,
"precision " + renderer.precision + " float;",
renderer.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "",
customDefines,
parameters.gammaInput ? "#define GAMMA_INPUT" : "",
parameters.gammaOutput ? "#define GAMMA_OUTPUT" : "",
parameters.physicallyBasedShading ? "#define PHYSICALLY_BASED_SHADING" : "",
renderer.supportsVertexTextures ? "#define VERTEX_TEXTURES" : "",
"#define MAX_DIR_LIGHTS " + parameters.maxDirLights,
"#define MAX_POINT_LIGHTS " + parameters.maxPointLights,
"#define MAX_SPOT_LIGHTS " + parameters.maxSpotLights,
"#define MAX_HEMI_LIGHTS " + parameters.maxHemiLights,
parameters.gammaInput ? "#define GAMMA_INPUT" : "",
parameters.gammaOutput ? "#define GAMMA_OUTPUT" : "",
parameters.physicallyBasedShading ? "#define PHYSICALLY_BASED_SHADING" : "",
"#define MAX_SHADOWS " + parameters.maxShadows,
"#define MAX_DIR_LIGHTS " + parameters.maxDirLights,
"#define MAX_POINT_LIGHTS " + parameters.maxPointLights,
"#define MAX_SPOT_LIGHTS " + parameters.maxSpotLights,
"#define MAX_HEMI_LIGHTS " + parameters.maxHemiLights,
"#define MAX_BONES " + parameters.maxBones,
"#define MAX_SHADOWS " + parameters.maxShadows,
parameters.map ? "#define USE_MAP" : "",
parameters.envMap ? "#define USE_ENVMAP" : "",
parameters.lightMap ? "#define USE_LIGHTMAP" : "",
parameters.bumpMap ? "#define USE_BUMPMAP" : "",
parameters.normalMap ? "#define USE_NORMALMAP" : "",
parameters.specularMap ? "#define USE_SPECULARMAP" : "",
parameters.vertexColors ? "#define USE_COLOR" : "",
"#define MAX_BONES " + parameters.maxBones,
parameters.skinning ? "#define USE_SKINNING" : "",
parameters.useVertexTexture ? "#define BONE_TEXTURE" : "",
parameters.boneTextureWidth ? "#define N_BONE_PIXEL_X " + parameters.boneTextureWidth.toFixed( 1 ) : "",
parameters.boneTextureHeight ? "#define N_BONE_PIXEL_Y " + parameters.boneTextureHeight.toFixed( 1 ) : "",
parameters.map ? "#define USE_MAP" : "",
parameters.envMap ? "#define USE_ENVMAP" : "",
parameters.lightMap ? "#define USE_LIGHTMAP" : "",
parameters.bumpMap ? "#define USE_BUMPMAP" : "",
parameters.normalMap ? "#define USE_NORMALMAP" : "",
parameters.specularMap ? "#define USE_SPECULARMAP" : "",
parameters.vertexColors ? "#define USE_COLOR" : "",
parameters.morphTargets ? "#define USE_MORPHTARGETS" : "",
parameters.morphNormals ? "#define USE_MORPHNORMALS" : "",
parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
parameters.wrapAround ? "#define WRAP_AROUND" : "",
parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
parameters.flipSided ? "#define FLIP_SIDED" : "",
parameters.skinning ? "#define USE_SKINNING" : "",
parameters.useVertexTexture ? "#define BONE_TEXTURE" : "",
parameters.boneTextureWidth ? "#define N_BONE_PIXEL_X " + parameters.boneTextureWidth.toFixed( 1 ) : "",
parameters.boneTextureHeight ? "#define N_BONE_PIXEL_Y " + parameters.boneTextureHeight.toFixed( 1 ) : "",
parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "",
parameters.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "",
parameters.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "",
parameters.morphTargets ? "#define USE_MORPHTARGETS" : "",
parameters.morphNormals ? "#define USE_MORPHNORMALS" : "",
parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
parameters.wrapAround ? "#define WRAP_AROUND" : "",
parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
parameters.flipSided ? "#define FLIP_SIDED" : "",
parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "",
parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "",
parameters.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "",
parameters.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "",
"uniform mat4 modelMatrix;",
"uniform mat4 modelViewMatrix;",
"uniform mat4 projectionMatrix;",
"uniform mat4 viewMatrix;",
"uniform mat3 normalMatrix;",
"uniform vec3 cameraPosition;",
parameters.sizeAttenuation ? "#define USE_SIZEATTENUATION" : "",
"attribute vec3 position;",
"attribute vec3 normal;",
"attribute vec2 uv;",
"attribute vec2 uv2;",
"uniform mat4 modelMatrix;",
"uniform mat4 modelViewMatrix;",
"uniform mat4 projectionMatrix;",
"uniform mat4 viewMatrix;",
"uniform mat3 normalMatrix;",
"uniform vec3 cameraPosition;",
"#ifdef USE_COLOR",
"attribute vec3 position;",
"attribute vec3 normal;",
"attribute vec2 uv;",
"attribute vec2 uv2;",
"attribute vec3 color;",
"#ifdef USE_COLOR",
"#endif",
"attribute vec3 color;",
"#ifdef USE_MORPHTARGETS",
"#endif",
"attribute vec3 morphTarget0;",
"attribute vec3 morphTarget1;",
"attribute vec3 morphTarget2;",
"attribute vec3 morphTarget3;",
"#ifdef USE_MORPHTARGETS",
"#ifdef USE_MORPHNORMALS",
"attribute vec3 morphTarget0;",
"attribute vec3 morphTarget1;",
"attribute vec3 morphTarget2;",
"attribute vec3 morphTarget3;",
"attribute vec3 morphNormal0;",
"attribute vec3 morphNormal1;",
"attribute vec3 morphNormal2;",
"attribute vec3 morphNormal3;",
"#ifdef USE_MORPHNORMALS",
"#else",
"attribute vec3 morphNormal0;",
"attribute vec3 morphNormal1;",
"attribute vec3 morphNormal2;",
"attribute vec3 morphNormal3;",
"attribute vec3 morphTarget4;",
"attribute vec3 morphTarget5;",
"attribute vec3 morphTarget6;",
"attribute vec3 morphTarget7;",
"#else",
"#endif",
"attribute vec3 morphTarget4;",
"attribute vec3 morphTarget5;",
"attribute vec3 morphTarget6;",
"attribute vec3 morphTarget7;",
"#endif",
"#ifdef USE_SKINNING",
"#endif",
"attribute vec4 skinIndex;",
"attribute vec4 skinWeight;",
"#ifdef USE_SKINNING",
"#endif",
"attribute vec4 skinIndex;",
"attribute vec4 skinWeight;",
""
"#endif",
].join("\n");
""
var prefix_fragment = [
].join("\n");
"precision " + renderer.precision + " float;",
var prefix_fragment = [
( parameters.bumpMap || parameters.normalMap ) ? "#extension GL_OES_standard_derivatives : enable" : "",
"precision " + renderer.precision + " float;",
customDefines,
( parameters.bumpMap || parameters.normalMap ) ? "#extension GL_OES_standard_derivatives : enable" : "",
"#define MAX_DIR_LIGHTS " + parameters.maxDirLights,
"#define MAX_POINT_LIGHTS " + parameters.maxPointLights,
"#define MAX_SPOT_LIGHTS " + parameters.maxSpotLights,
"#define MAX_HEMI_LIGHTS " + parameters.maxHemiLights,
customDefines,
"#define MAX_SHADOWS " + parameters.maxShadows,
"#define MAX_DIR_LIGHTS " + parameters.maxDirLights,
"#define MAX_POINT_LIGHTS " + parameters.maxPointLights,
"#define MAX_SPOT_LIGHTS " + parameters.maxSpotLights,
"#define MAX_HEMI_LIGHTS " + parameters.maxHemiLights,
parameters.alphaTest ? "#define ALPHATEST " + parameters.alphaTest: "",
"#define MAX_SHADOWS " + parameters.maxShadows,
parameters.gammaInput ? "#define GAMMA_INPUT" : "",
parameters.gammaOutput ? "#define GAMMA_OUTPUT" : "",
parameters.alphaTest ? "#define ALPHATEST " + parameters.alphaTest: "",
( parameters.useFog && parameters.fog ) ? "#define USE_FOG" : "",
( parameters.useFog && parameters.fogExp ) ? "#define FOG_EXP2" : "",
parameters.gammaInput ? "#define GAMMA_INPUT" : "",
parameters.gammaOutput ? "#define GAMMA_OUTPUT" : "",
parameters.map ? "#define USE_MAP" : "",
parameters.envMap ? "#define USE_ENVMAP" : "",
parameters.lightMap ? "#define USE_LIGHTMAP" : "",
parameters.bumpMap ? "#define USE_BUMPMAP" : "",
parameters.normalMap ? "#define USE_NORMALMAP" : "",
parameters.specularMap ? "#define USE_SPECULARMAP" : "",
parameters.vertexColors ? "#define USE_COLOR" : "",
( parameters.useFog && parameters.fog ) ? "#define USE_FOG" : "",
( parameters.useFog && parameters.fogExp ) ? "#define FOG_EXP2" : "",
parameters.metal ? "#define METAL" : "",
parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
parameters.wrapAround ? "#define WRAP_AROUND" : "",
parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
parameters.flipSided ? "#define FLIP_SIDED" : "",
parameters.map ? "#define USE_MAP" : "",
parameters.envMap ? "#define USE_ENVMAP" : "",
parameters.lightMap ? "#define USE_LIGHTMAP" : "",
parameters.bumpMap ? "#define USE_BUMPMAP" : "",
parameters.normalMap ? "#define USE_NORMALMAP" : "",
parameters.specularMap ? "#define USE_SPECULARMAP" : "",
parameters.vertexColors ? "#define USE_COLOR" : "",
parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "",
parameters.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "",
parameters.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "",
parameters.metal ? "#define METAL" : "",
parameters.perPixel ? "#define PHONG_PER_PIXEL" : "",
parameters.wrapAround ? "#define WRAP_AROUND" : "",
parameters.doubleSided ? "#define DOUBLE_SIDED" : "",
parameters.flipSided ? "#define FLIP_SIDED" : "",
"uniform mat4 viewMatrix;",
"uniform vec3 cameraPosition;",
""
parameters.shadowMapEnabled ? "#define USE_SHADOWMAP" : "",
parameters.shadowMapEnabled ? "#define " + shadowMapTypeDefine : "",
parameters.shadowMapDebug ? "#define SHADOWMAP_DEBUG" : "",
parameters.shadowMapCascade ? "#define SHADOWMAP_CASCADE" : "",
].join("\n");
"uniform mat4 viewMatrix;",
"uniform vec3 cameraPosition;",
""
program = renderer.compileShader(prefix_vertex + vertexShader, prefix_fragment + fragmentShader);
//console.log( prefix_fragment + fragmentShader );
//console.log( prefix_vertex + vertexShader );
].join("\n");
program.uniforms = {};
program.attributes = {};
program = renderer.compileShader(prefix_vertex + vertexShader, prefix_fragment + fragmentShader);
//console.log( prefix_fragment + fragmentShader );
//console.log( prefix_vertex + vertexShader );
var identifiers, u, a, i;
program.uniforms = {};
program.attributes = {};
// cache uniform locations
var identifiers, u, a, i;
identifiers = [
// cache uniform locations
'viewMatrix', 'modelViewMatrix', 'projectionMatrix', 'normalMatrix', 'modelMatrix', 'cameraPosition',
'morphTargetInfluences'
identifiers = [
];
'viewMatrix', 'modelViewMatrix', 'projectionMatrix', 'normalMatrix', 'modelMatrix', 'cameraPosition',
'morphTargetInfluences'
if ( parameters.useVertexTexture ) {
];
identifiers.push( 'boneTexture' );
if ( parameters.useVertexTexture ) {
} else {
identifiers.push( 'boneTexture' );
identifiers.push( 'boneGlobalMatrices' );
} else {
}
identifiers.push( 'boneGlobalMatrices' );
for ( u in uniforms ) {
}
identifiers.push( u );
for ( u in uniforms ) {
}
identifiers.push( u );
this.cacheUniformLocations( program, identifiers );
}
// cache attributes locations
this.cacheUniformLocations( program, identifiers );
identifiers = [
// cache attributes locations
"position", "normal", "uv", "uv2", "tangent", "color",
"skinIndex", "skinWeight", "lineDistance"
identifiers = [
];
"position", "normal", "uv", "uv2", "tangent", "color",
"skinIndex", "skinWeight", "lineDistance"
for ( i = 0; i < parameters.maxMorphTargets; i ++ ) {
];
identifiers.push( "morphTarget" + i );
for ( i = 0; i < parameters.maxMorphTargets; i ++ ) {
}
identifiers.push( "morphTarget" + i );
for ( i = 0; i < parameters.maxMorphNormals; i ++ ) {
}
identifiers.push( "morphNormal" + i );
for ( i = 0; i < parameters.maxMorphNormals; i ++ ) {
}
identifiers.push( "morphNormal" + i );
for ( a in attributes ) {
}
identifiers.push( a );
for ( a in attributes ) {
}
identifiers.push( a );
this.cacheAttributeLocations( program, identifiers );
}
this.cacheAttributeLocations( program, identifiers );
program.id = this.programs_counter ++;
program.id = this.programs_counter ++;
this.programs.push( { program: program, code: code, usedTimes: 1 } );
this.programs.push( { program: program, code: code, usedTimes: 1 } );
this.info.memory.programs = this.programs.length;
this.info.memory.programs = this.programs.length;
return program;
return program;
};
};
THREE.WebGLRenderer2.ShaderBuilder.prototype.generateDefines = function( defines ) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册