|
@@ -399,6 +399,7 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
const program = gl.createProgram();
|
|
|
|
|
|
let prefixVertex, prefixFragment;
|
|
|
+ let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + "\n" : '';
|
|
|
|
|
|
if ( parameters.isRawShaderMaterial ) {
|
|
|
|
|
@@ -666,19 +667,21 @@ function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
|
|
|
vertexShader = unrollLoops( vertexShader );
|
|
|
fragmentShader = unrollLoops( fragmentShader );
|
|
|
|
|
|
- if ( parameters.isWebGL2 && ! parameters.isRawShaderMaterial ) {
|
|
|
+ if ( ( parameters.glslVersion === null || parameters.glslVersion === undefined ) &&
|
|
|
+ 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 within WebGL2.
|
|
|
+ // Apply these conversions if no glslVersion is specified.
|
|
|
+
|
|
|
+ versionString = '#version 300 es\n';
|
|
|
|
|
|
prefixVertex = [
|
|
|
- '#version 300 es\n',
|
|
|
'#define attribute in',
|
|
|
'#define varying out',
|
|
|
'#define texture2D texture'
|
|
|
].join( '\n' ) + '\n' + prefixVertex;
|
|
|
|
|
|
prefixFragment = [
|
|
|
- '#version 300 es\n',
|
|
|
'#define varying in',
|
|
|
'out highp vec4 pc_fragColor;',
|
|
|
'#define gl_FragColor pc_fragColor',
|
|
@@ -696,8 +699,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( '*FRAGMENT*', fragmentGlsl );
|