Browse Source

Conditionally apply automatic GLSL 3.0 conversions.
Add GLSL1 and GLSL3 version constants

Jose Rojas 5 years ago
parent
commit
7f6b1282a7
2 changed files with 15 additions and 12 deletions
  1. 3 0
      src/constants.js
  2. 12 12
      src/renderers/webgl/WebGLProgram.js

+ 3 - 0
src/constants.js

@@ -195,3 +195,6 @@ export const StreamReadUsage = 35041;
 export const StaticCopyUsage = 35046;
 export const StaticCopyUsage = 35046;
 export const DynamicCopyUsage = 35050;
 export const DynamicCopyUsage = 35050;
 export const StreamCopyUsage = 35042;
 export const StreamCopyUsage = 35042;
+
+export const GLSL1 = "#version 100 es"
+export const GLSL3 = "#version 300 es"

+ 12 - 12
src/renderers/webgl/WebGLProgram.js

@@ -2,6 +2,7 @@ import { WebGLUniforms } from './WebGLUniforms.js';
 import { WebGLShader } from './WebGLShader.js';
 import { WebGLShader } from './WebGLShader.js';
 import { ShaderChunk } from '../shaders/ShaderChunk.js';
 import { ShaderChunk } from '../shaders/ShaderChunk.js';
 import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, EquirectangularRefractionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GammaEncoding, RGBDEncoding, RGBM16Encoding, RGBM7Encoding, RGBEEncoding, sRGBEncoding, LinearEncoding, LogLuvEncoding } from '../../constants.js';
 import { NoToneMapping, AddOperation, MixOperation, MultiplyOperation, EquirectangularRefractionMapping, CubeRefractionMapping, EquirectangularReflectionMapping, CubeUVRefractionMapping, CubeUVReflectionMapping, CubeReflectionMapping, PCFSoftShadowMap, PCFShadowMap, VSMShadowMap, ACESFilmicToneMapping, CineonToneMapping, CustomToneMapping, ReinhardToneMapping, LinearToneMapping, GammaEncoding, RGBDEncoding, RGBM16Encoding, RGBM7Encoding, RGBEEncoding, sRGBEncoding, LinearEncoding, LogLuvEncoding } from '../../constants.js';
+import { GLSL3 } from '../../constants.js';
 
 
 let programIdCount = 0;
 let programIdCount = 0;
 
 
@@ -405,13 +406,12 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	const program = gl.createProgram();
 	const program = gl.createProgram();
 
 
 	let prefixVertex, prefixFragment;
 	let prefixVertex, prefixFragment;
-	let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion : '';
+	let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + "\n" : '';
 
 
 	if ( parameters.isRawShaderMaterial ) {
 	if ( parameters.isRawShaderMaterial ) {
 
 
 		prefixVertex = [
 		prefixVertex = [
-
-			versionString,
+			
 			customDefines
 			customDefines
 
 
 		].filter( filterEmptyLine ).join( '\n' );
 		].filter( filterEmptyLine ).join( '\n' );
@@ -424,7 +424,6 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 
 		prefixFragment = [
 		prefixFragment = [
 
 
-			versionString,
 			customExtensions,
 			customExtensions,
 			customDefines
 			customDefines
 
 
@@ -675,19 +674,20 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 	vertexShader = unrollLoops( vertexShader );
 	vertexShader = unrollLoops( vertexShader );
 	fragmentShader = unrollLoops( fragmentShader );
 	fragmentShader = unrollLoops( fragmentShader );
 
 
-	if ( parameters.isWebGL2 && ! parameters.isRawShaderMaterial ) {
+	if ( parameters.glslVersion == null && parameters.isWebGL2 && ! parameters.isRawShaderMaterial ) {
 
 
-		// GLSL 3.0 conversion
+		// Automated GLSL 3.0 conversion. The shader chunks of standard shaders (eg MeshStandardMaterial) require GLSL 3.0 features.
+		// Apply these conversions if no glslVersion is specified.
 
 
-		prefixVertex = [
-			'#version 300 es\n',
+		versionString = '#version 300 es\n'
+
+		prefixVertex = [			
 			'#define attribute in',
 			'#define attribute in',
 			'#define varying out',
 			'#define varying out',
 			'#define texture2D texture'
 			'#define texture2D texture'
 		].join( '\n' ) + '\n' + prefixVertex;
 		].join( '\n' ) + '\n' + prefixVertex;
 
 
-		prefixFragment = [
-			'#version 300 es\n',
+		prefixFragment = [			
 			'#define varying in',
 			'#define varying in',
 			'out highp vec4 pc_fragColor;',
 			'out highp vec4 pc_fragColor;',
 			'#define gl_FragColor pc_fragColor',
 			'#define gl_FragColor pc_fragColor',
@@ -705,8 +705,8 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
 
 
 	}
 	}
 
 
-	const vertexGlsl = prefixVertex + vertexShader;
-	const fragmentGlsl = prefixFragment + fragmentShader;
+	const vertexGlsl = versionString + prefixVertex + vertexShader;
+	const fragmentGlsl = versionString + prefixFragment + fragmentShader;
 
 
 	// console.log( '*VERTEX*', vertexGlsl );
 	// console.log( '*VERTEX*', vertexGlsl );
 	// console.log( '*FRAGMENT*', fragmentGlsl );
 	// console.log( '*FRAGMENT*', fragmentGlsl );