|
@@ -115,15 +115,13 @@ function getToneMappingFunction( functionName, toneMapping ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-function generateExtensions( extensions, parameters, rendererExtensions ) {
|
|
|
|
-
|
|
|
|
- extensions = extensions || {};
|
|
|
|
|
|
+function generateExtensions( parameters ) {
|
|
|
|
|
|
var chunks = [
|
|
var chunks = [
|
|
- ( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
|
|
- ( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
|
|
- ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
|
|
- ( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
|
|
|
|
+ ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
|
|
|
|
+ ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
|
|
|
|
+ ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
|
|
|
|
+ ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
|
|
];
|
|
];
|
|
|
|
|
|
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
return chunks.filter( filterEmptyLine ).join( '\n' );
|
|
@@ -377,14 +375,14 @@ function generateEnvMapBlendingDefine( parameters ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
-function WebGLProgram( renderer, extensions, cacheKey, material, shader, parameters ) {
|
|
|
|
|
|
+function WebGLProgram( renderer, cacheKey, parameters ) {
|
|
|
|
|
|
var gl = renderer.getContext();
|
|
var gl = renderer.getContext();
|
|
|
|
|
|
- var defines = material.defines;
|
|
|
|
|
|
+ var defines = parameters.defines;
|
|
|
|
|
|
- var vertexShader = shader.vertexShader;
|
|
|
|
- var fragmentShader = shader.fragmentShader;
|
|
|
|
|
|
+ var vertexShader = parameters.vertexShader;
|
|
|
|
+ var fragmentShader = parameters.fragmentShader;
|
|
var shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
|
|
var shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
|
|
var envMapTypeDefine = generateEnvMapTypeDefine( parameters );
|
|
var envMapTypeDefine = generateEnvMapTypeDefine( parameters );
|
|
var envMapModeDefine = generateEnvMapModeDefine( parameters );
|
|
var envMapModeDefine = generateEnvMapModeDefine( parameters );
|
|
@@ -393,7 +391,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
|
|
var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
|
|
|
|
|
|
- var customExtensions = parameters.isWebGL2 ? '' : generateExtensions( material.extensions, parameters, extensions );
|
|
|
|
|
|
+ var customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
|
|
|
|
|
|
var customDefines = generateDefines( defines );
|
|
var customDefines = generateDefines( defines );
|
|
|
|
|
|
@@ -403,7 +401,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
var numMultiviewViews = parameters.numMultiviewViews;
|
|
var numMultiviewViews = parameters.numMultiviewViews;
|
|
|
|
|
|
- if ( material.isRawShaderMaterial ) {
|
|
|
|
|
|
+ if ( parameters.isRawShaderMaterial ) {
|
|
|
|
|
|
prefixVertex = [
|
|
prefixVertex = [
|
|
|
|
|
|
@@ -436,7 +434,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
generatePrecision( parameters ),
|
|
generatePrecision( parameters ),
|
|
|
|
|
|
- '#define SHADER_NAME ' + shader.name,
|
|
|
|
|
|
+ '#define SHADER_NAME ' + parameters.shaderName,
|
|
|
|
|
|
customDefines,
|
|
customDefines,
|
|
|
|
|
|
@@ -488,7 +486,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
|
|
parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
|
|
|
|
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
- parameters.logarithmicDepthBuffer && ( parameters.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
|
|
|
|
+ parameters.logarithmicDepthBuffer && ( parameters.isWebGL2 || parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
|
|
|
|
'uniform mat4 modelMatrix;',
|
|
'uniform mat4 modelMatrix;',
|
|
'uniform mat4 modelViewMatrix;',
|
|
'uniform mat4 modelViewMatrix;',
|
|
@@ -562,7 +560,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
generatePrecision( parameters ),
|
|
generatePrecision( parameters ),
|
|
|
|
|
|
- '#define SHADER_NAME ' + shader.name,
|
|
|
|
|
|
+ '#define SHADER_NAME ' + parameters.name,
|
|
|
|
|
|
customDefines,
|
|
customDefines,
|
|
|
|
|
|
@@ -614,9 +612,9 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',
|
|
parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',
|
|
|
|
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
- parameters.logarithmicDepthBuffer && ( parameters.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
|
|
|
|
+ parameters.logarithmicDepthBuffer && ( parameters.isWebGL2 || parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
|
|
|
|
- ( ( material.extensions ? material.extensions.shaderTextureLOD : false ) || parameters.envMap ) && ( parameters.isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) ) ? '#define TEXTURE_LOD_EXT' : '',
|
|
|
|
|
|
+ ( parameters.extensionShaderTextureLOD || parameters.envMap ) && ( parameters.isWebGL2 || parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '',
|
|
|
|
|
|
'uniform mat4 viewMatrix;',
|
|
'uniform mat4 viewMatrix;',
|
|
'uniform vec3 cameraPosition;',
|
|
'uniform vec3 cameraPosition;',
|
|
@@ -637,7 +635,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
parameters.lightMapEncoding ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',
|
|
parameters.lightMapEncoding ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '',
|
|
parameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',
|
|
parameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',
|
|
|
|
|
|
- parameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',
|
|
|
|
|
|
+ parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
|
|
|
|
|
|
'\n'
|
|
'\n'
|
|
|
|
|
|
@@ -656,13 +654,13 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
vertexShader = unrollLoops( vertexShader );
|
|
vertexShader = unrollLoops( vertexShader );
|
|
fragmentShader = unrollLoops( fragmentShader );
|
|
fragmentShader = unrollLoops( fragmentShader );
|
|
|
|
|
|
- if ( parameters.isWebGL2 && ! material.isRawShaderMaterial ) {
|
|
|
|
|
|
+ if ( parameters.isWebGL2 && ! parameters.isRawShaderMaterial ) {
|
|
|
|
|
|
var isGLSL3ShaderMaterial = false;
|
|
var isGLSL3ShaderMaterial = false;
|
|
|
|
|
|
var versionRegex = /^\s*#version\s+300\s+es\s*\n/;
|
|
var versionRegex = /^\s*#version\s+300\s+es\s*\n/;
|
|
|
|
|
|
- if ( material.isShaderMaterial &&
|
|
|
|
|
|
+ if ( parameters.isShaderMaterial &&
|
|
vertexShader.match( versionRegex ) !== null &&
|
|
vertexShader.match( versionRegex ) !== null &&
|
|
fragmentShader.match( versionRegex ) !== null ) {
|
|
fragmentShader.match( versionRegex ) !== null ) {
|
|
|
|
|
|
@@ -768,9 +766,9 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
// Force a particular attribute to index 0.
|
|
// Force a particular attribute to index 0.
|
|
|
|
|
|
- if ( material.index0AttributeName !== undefined ) {
|
|
|
|
|
|
+ if ( parameters.index0AttributeName !== undefined ) {
|
|
|
|
|
|
- gl.bindAttribLocation( program, 0, material.index0AttributeName );
|
|
|
|
|
|
+ gl.bindAttribLocation( program, 0, parameters.index0AttributeName );
|
|
|
|
|
|
} else if ( parameters.morphTargets === true ) {
|
|
} else if ( parameters.morphTargets === true ) {
|
|
|
|
|
|
@@ -815,7 +813,6 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
this.diagnostics = {
|
|
this.diagnostics = {
|
|
|
|
|
|
runnable: runnable,
|
|
runnable: runnable,
|
|
- material: material,
|
|
|
|
|
|
|
|
programLog: programLog,
|
|
programLog: programLog,
|
|
|
|
|
|
@@ -887,7 +884,7 @@ function WebGLProgram( renderer, extensions, cacheKey, material, shader, paramet
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
- this.name = shader.name;
|
|
|
|
|
|
+ this.name = parameters.shaderName;
|
|
this.id = programIdCount ++;
|
|
this.id = programIdCount ++;
|
|
this.cacheKey = cacheKey;
|
|
this.cacheKey = cacheKey;
|
|
this.usedTimes = 1;
|
|
this.usedTimes = 1;
|