提交 5e792a68 编写于 作者: G gero3

cleanup WebglProgram

上级 feca7fd4
......@@ -243,14 +243,29 @@ function unrollLoops( string ) {
}
function WebGLProgram( renderer, extensions, code, material, shader, parameters, capabilities ) {
function generatePrecision( parameters ) {
var gl = renderer.getContext();
var precisionstring = "precision " + parameters.precision + " float;\nprecision " + parameters.precision + " int;";
var defines = material.defines;
if ( parameters.precision === "highp" ) {
var vertexShader = shader.vertexShader;
var fragmentShader = shader.fragmentShader;
precisionstring += "\n#define HIGH_PRECISION;";
} else if ( parameters.precision === "mediump" ) {
precisionstring += "\n#define MEDIUM_PRECISION;";
} else if ( parameters.precision === "lowp" ) {
precisionstring += "\n#define LOW_PRECISION;";
}
return precisionstring;
}
function generateShadowMapTypeDefine( parameters ) {
var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
......@@ -268,9 +283,13 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
}
return shadowMapTypeDefine;
}
function generateEnvMapTypeDefine( parameters, material ) {
var envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
var envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
if ( parameters.envMap ) {
......@@ -297,6 +316,18 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
}
}
return envMapTypeDefine;
}
function generateEnvMapModeDefine( parameters, material ) {
var envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
if ( parameters.envMap ) {
switch ( material.envMap.mapping ) {
case CubeRefractionMapping:
......@@ -306,6 +337,18 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
}
}
return envMapModeDefine;
}
function generateEnvMapBlendingDefine( parameters, material ) {
var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
if ( parameters.envMap ) {
switch ( material.combine ) {
case MultiplyOperation:
......@@ -324,18 +367,30 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
}
var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
return envMapBlendingDefine;
// console.log( 'building new program ' );
}
//
function WebGLProgram( renderer, extensions, code, material, shader, parameters, capabilities ) {
var gl = renderer.getContext();
var defines = material.defines;
var vertexShader = shader.vertexShader;
var fragmentShader = shader.fragmentShader;
var shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
var envMapTypeDefine = generateEnvMapTypeDefine( parameters, material );
var envMapModeDefine = generateEnvMapModeDefine( parameters, material );
var envMapBlendingDefine = generateEnvMapBlendingDefine( parameters, material );
var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;
var customExtensions = capabilities.isWebGL2 ? '' : generateExtensions( material.extensions, parameters, extensions );
var customDefines = generateDefines( defines );
//
var program = gl.createProgram();
var prefixVertex, prefixFragment;
......@@ -374,10 +429,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
prefixVertex = [
'precision ' + parameters.precision + ' float;',
'precision ' + parameters.precision + ' int;',
( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '',
generatePrecision( parameters ),
'#define SHADER_NAME ' + shader.name,
......@@ -509,10 +561,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
customExtensions,
'precision ' + parameters.precision + ' float;',
'precision ' + parameters.precision + ' int;',
( parameters.precision === 'highp' ) ? '#define HIGH_PRECISION' : '',
generatePrecision( parameters ),
'#define SHADER_NAME ' + shader.name,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册