|
@@ -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,
|
|
|
|