From e2c86dae12287b6127e1af162943d437d26b6ab5 Mon Sep 17 00:00:00 2001 From: Ben Houston Date: Sat, 20 Feb 2016 14:09:08 -0500 Subject: [PATCH] adopt macro-defined encodings, remove uniform defined encodings. --- .../ShaderChunk/emissivemap_fragment.glsl | 2 +- .../emissivemap_pars_fragment.glsl | 7 ++++- .../ShaderChunk/encoding_template.glsl | 28 +++++++++---------- .../shaders/ShaderChunk/envmap_fragment.glsl | 2 +- .../ShaderChunk/envmap_pars_fragment.glsl | 7 ++++- .../shaders/ShaderChunk/lights_pars.glsl | 2 +- .../shaders/ShaderChunk/map_fragment.glsl | 2 +- .../ShaderChunk/map_pars_fragment.glsl | 7 ++++- src/renderers/webgl/WebGLProgram.js | 3 ++ src/renderers/webgl/WebGLPrograms.js | 7 +++-- 10 files changed, 44 insertions(+), 23 deletions(-) diff --git a/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl b/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl index 25dc6d0ded..c0951b050b 100644 --- a/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl @@ -2,7 +2,7 @@ vec4 emissiveColor = texture2D( emissiveMap, vUv ); - emissiveColor.rgb = EncodingToLinear( emissiveColor, emissiveMapEncoding ).rgb; + emissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb; totalEmissiveLight *= emissiveColor.rgb; diff --git a/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl index cb51a1118f..6c60f2f140 100644 --- a/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/emissivemap_pars_fragment.glsl @@ -1,6 +1,11 @@ #ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; - uniform int emissiveMapEncoding; + + vec4 emissiveMapTexelToLinear( vec4 texel ) { + #define DECODE_MACRO EMISSIVEMAP_ENCODING + #include "encoding_template.glsl" + #undef DECODE_MACRO + } #endif diff --git a/src/renderers/shaders/ShaderChunk/encoding_template.glsl b/src/renderers/shaders/ShaderChunk/encoding_template.glsl index c2e6a9e174..553c117122 100644 --- a/src/renderers/shaders/ShaderChunk/encoding_template.glsl +++ b/src/renderers/shaders/ShaderChunk/encoding_template.glsl @@ -3,19 +3,19 @@ #if defined( MACRO_DECODE ) - #if ( MACRO_ENCODING_TYPE == ENCODING_Linear ) + #if ( MACRO_DECODE == ENCODING_Linear ) return value; - #elif ( MACRO_ENCODING_TYPE == ENCODING_sRGB ) + #elif ( MACRO_DECODE == ENCODING_sRGB ) return sRGBToLinear( value ); - #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBE ) + #elif ( MACRO_DECODE == ENCODING_RGBE ) return RGBEToLinear( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_LogLuv ) TODO + //#elif ( MACRO_DECODE == ENCODING_LogLuv ) TODO // return LogLuvToLinear( value ); - #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM7 ) + #elif ( MACRO_DECODE == ENCODING_RGBM7 ) return RGBM7ToLinear( value ); - #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM16 ) + #elif ( MACRO_DECODE == ENCODING_RGBM16 ) return RGBM16ToLinear( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBD ) TODO + //#elif ( MACRO_DECODE == ENCODING_RGBD ) TODO // return RGBMDToLinear( value ); #else return vec4( 1.0, 0.0, 0.0, 1.0 ); @@ -23,19 +23,19 @@ #elif defined( MACRO_ENCODE ) - #if ( MACRO_ENCODING_TYPE == ENCODING_Linear ) + #if ( MACRO_ENCODE == ENCODING_Linear ) return value; - #elif ( MACRO_ENCODING_TYPE == ENCODING_sRGB ) + #elif ( MACRO_ENCODE == ENCODING_sRGB ) return LinearTosRGB( value ); - #elif ( MACRO_ENCODING_TYPE == ENCODING_RGBE ) + #elif ( MACRO_ENCODE == ENCODING_RGBE ) return LinearToRGBE( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_LogLuv ) TODO + //#elif ( MACRO_ENCODE == ENCODING_LogLuv ) TODO // return LinearToLogLuv( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM7 ) TODO + //#elif ( MACRO_ENCODE == ENCODING_RGBM7 ) TODO // return LinearToRGBM7( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBM16 ) TODO + //#elif ( MACRO_ENCODE == ENCODING_RGBM16 ) TODO // return LinearToRGBM16( value ); - //#elif ( MACRO_ENCODING_TYPE == ENCODING_RGBD ) TODO + //#elif ( MACRO_ENCODE == ENCODING_RGBD ) TODO // return LinearToRGBMD( value ); #else return vec4( 1.0, 0.0, 0.0, 1.0 ); diff --git a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl index 47619a8200..bb24b40d9f 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl @@ -43,7 +43,7 @@ vec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 ); #endif - envColor = EncodingToLinear( envColor, envMapEncoding ); + envColor = envMapTexelToLinear( envColor ); #ifdef ENVMAP_BLENDING_MULTIPLY diff --git a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl index ce777c5b5a..407b7c62ed 100644 --- a/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl @@ -10,7 +10,12 @@ uniform sampler2D envMap; #endif uniform float flipEnvMap; - uniform int envMapEncoding; + + vec4 envMapTexelToLinear( vec4 texel ) { + #define DECODE_MACRO ENVMAP_ENCODING + #include "encoding_template.glsl" + #undef DECODE_MACRO + } #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( STANDARD ) diff --git a/src/renderers/shaders/ShaderChunk/lights_pars.glsl b/src/renderers/shaders/ShaderChunk/lights_pars.glsl index 239633efce..cfd49e8511 100644 --- a/src/renderers/shaders/ShaderChunk/lights_pars.glsl +++ b/src/renderers/shaders/ShaderChunk/lights_pars.glsl @@ -278,7 +278,7 @@ #endif - envMapColor.rgb = EncodingToLinear( envMapColor, envMapEncoding ).rgb; + envMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb; return envMapColor.rgb * envMapIntensity; diff --git a/src/renderers/shaders/ShaderChunk/map_fragment.glsl b/src/renderers/shaders/ShaderChunk/map_fragment.glsl index e70f2cd9a1..b5fb51b16c 100644 --- a/src/renderers/shaders/ShaderChunk/map_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/map_fragment.glsl @@ -2,7 +2,7 @@ vec4 texelColor = texture2D( map, vUv ); - texelColor = EncodingToLinear( texelColor, mapEncoding ); + texelColor = mapTexelToLinear( texelColor ); diffuseColor *= texelColor; #endif diff --git a/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl b/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl index c3ecdae9fb..ebe3153e65 100644 --- a/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl +++ b/src/renderers/shaders/ShaderChunk/map_pars_fragment.glsl @@ -1,6 +1,11 @@ #ifdef USE_MAP uniform sampler2D map; - uniform int mapEncoding; + + vec4 mapTexelToLinear( vec4 texel ) { + #define DECODE_MACRO MAP_ENCODING + #include "encoding_template.glsl" + #undef DECODE_MACRO + } #endif diff --git a/src/renderers/webgl/WebGLProgram.js b/src/renderers/webgl/WebGLProgram.js index a0fdd5b32b..62fdcbf70d 100644 --- a/src/renderers/webgl/WebGLProgram.js +++ b/src/renderers/webgl/WebGLProgram.js @@ -406,13 +406,16 @@ THREE.WebGLProgram = ( function () { ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', + parameters.mapEncoding ? '#define MAP_ENCODING ' + material.map.encoding : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapTypeDefine : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.envMapEncoding ? '#define ENVMAP_ENCODING ' + material.envMap.encoding : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.emissiveMapEncoding ? '#define EMISSIVEMAP_ENCODING ' + material.emissiveMap.encoding : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', diff --git a/src/renderers/webgl/WebGLPrograms.js b/src/renderers/webgl/WebGLPrograms.js index ca8dfee787..3b8443f2df 100644 --- a/src/renderers/webgl/WebGLPrograms.js +++ b/src/renderers/webgl/WebGLPrograms.js @@ -15,8 +15,8 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) { }; var parameterNames = [ - "precision", "supportsVertexTextures", "map", "envMap", "envMapMode", - "lightMap", "aoMap", "emissiveMap", "bumpMap", "normalMap", "displacementMap", "specularMap", + "precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding", + "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap", "roughnessMap", "metalnessMap", "alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp", "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", @@ -96,11 +96,14 @@ THREE.WebGLPrograms = function ( renderer, capabilities ) { supportsVertexTextures: capabilities.vertexTextures, map: !! material.map, + mapEncoding: ( !! material.map ) ? material.map.encoding : false, envMap: !! material.envMap, envMapMode: material.envMap && material.envMap.mapping, + envMapEncoding: ( !! material.envMap ) ? material.envMap.encoding : false, lightMap: !! material.lightMap, aoMap: !! material.aoMap, emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: ( !! material.emissiveMap ) ? material.emissiveMap.encoding : false, bumpMap: !! material.bumpMap, normalMap: !! material.normalMap, displacementMap: !! material.displacementMap, -- GitLab