|
@@ -340,6 +340,9 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
|
|
|
|
var prefixVertex, prefixFragment;
|
|
var prefixVertex, prefixFragment;
|
|
|
|
|
|
|
|
+ var renderTarget = renderer.getRenderTarget();
|
|
|
|
+ var numMultiviewViews = renderTarget && renderTarget.isWebGLMultiviewRenderTarget ? renderTarget.numViews : 0;
|
|
|
|
+
|
|
if ( material.isRawShaderMaterial ) {
|
|
if ( material.isRawShaderMaterial ) {
|
|
|
|
|
|
prefixVertex = [
|
|
prefixVertex = [
|
|
@@ -427,14 +430,29 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
|
|
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
|
|
parameters.logarithmicDepthBuffer && ( capabilities.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
parameters.logarithmicDepthBuffer && ( capabilities.isWebGL2 || extensions.get( 'EXT_frag_depth' ) ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
|
|
-
|
|
|
|
'uniform mat4 modelMatrix;',
|
|
'uniform mat4 modelMatrix;',
|
|
- 'uniform mat4 modelViewMatrix;',
|
|
|
|
- 'uniform mat4 projectionMatrix;',
|
|
|
|
- 'uniform mat4 viewMatrix;',
|
|
|
|
- 'uniform mat3 normalMatrix;',
|
|
|
|
'uniform vec3 cameraPosition;',
|
|
'uniform vec3 cameraPosition;',
|
|
|
|
|
|
|
|
+ numMultiviewViews > 0 ? [
|
|
|
|
+ 'uniform mat4 modelViewMatrices[' + numMultiviewViews + '];',
|
|
|
|
+ 'uniform mat3 normalMatrices[' + numMultiviewViews + '];',
|
|
|
|
+ 'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
|
|
+ 'uniform mat4 projectionMatrices[' + numMultiviewViews + '];',
|
|
|
|
+
|
|
|
|
+ '#define modelViewMatrix modelViewMatrices[VIEW_ID]',
|
|
|
|
+ '#define normalMatrix normalMatrices[VIEW_ID]',
|
|
|
|
+ '#define viewMatrix viewMatrices[VIEW_ID]',
|
|
|
|
+ '#define projectionMatrix projectionMatrices[VIEW_ID]'
|
|
|
|
+
|
|
|
|
+ ].join( '\n' ) : [
|
|
|
|
+
|
|
|
|
+ 'uniform mat4 modelViewMatrix;',
|
|
|
|
+ 'uniform mat4 projectionMatrix;',
|
|
|
|
+ 'uniform mat4 viewMatrix;',
|
|
|
|
+ 'uniform mat3 normalMatrix;',
|
|
|
|
+
|
|
|
|
+ ].join( '\n' ),
|
|
|
|
+
|
|
'attribute vec3 position;',
|
|
'attribute vec3 position;',
|
|
'attribute vec3 normal;',
|
|
'attribute vec3 normal;',
|
|
'attribute vec2 uv;',
|
|
'attribute vec2 uv;',
|
|
@@ -551,9 +569,15 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
|
|
|
|
( ( material.extensions ? material.extensions.shaderTextureLOD : false ) || parameters.envMap ) && ( capabilities.isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) ) ? '#define TEXTURE_LOD_EXT' : '',
|
|
( ( material.extensions ? material.extensions.shaderTextureLOD : false ) || parameters.envMap ) && ( capabilities.isWebGL2 || extensions.get( 'EXT_shader_texture_lod' ) ) ? '#define TEXTURE_LOD_EXT' : '',
|
|
|
|
|
|
- 'uniform mat4 viewMatrix;',
|
|
|
|
'uniform vec3 cameraPosition;',
|
|
'uniform vec3 cameraPosition;',
|
|
|
|
|
|
|
|
+ numMultiviewViews > 0 ? [
|
|
|
|
+
|
|
|
|
+ 'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
|
|
|
|
+ '#define viewMatrix viewMatrices[VIEW_ID]'
|
|
|
|
+
|
|
|
|
+ ].join( '\n' ) : 'uniform mat4 viewMatrix;',
|
|
|
|
+
|
|
( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',
|
|
( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',
|
|
( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
|
|
( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
|
|
( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
|
|
( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
|
|
@@ -607,6 +631,15 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
// GLSL 3.0 conversion
|
|
// GLSL 3.0 conversion
|
|
prefixVertex = [
|
|
prefixVertex = [
|
|
'#version 300 es\n',
|
|
'#version 300 es\n',
|
|
|
|
+
|
|
|
|
+ numMultiviewViews > 0 ? [
|
|
|
|
+
|
|
|
|
+ '#extension GL_OVR_multiview2 : require',
|
|
|
|
+ 'layout(num_views = ' + numMultiviewViews + ') in;',
|
|
|
|
+ '#define VIEW_ID gl_ViewID_OVR'
|
|
|
|
+
|
|
|
|
+ ].join( '\n' ) : '',
|
|
|
|
+
|
|
'#define attribute in',
|
|
'#define attribute in',
|
|
'#define varying out',
|
|
'#define varying out',
|
|
'#define texture2D texture'
|
|
'#define texture2D texture'
|
|
@@ -614,6 +647,12 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
|
|
|
|
prefixFragment = [
|
|
prefixFragment = [
|
|
'#version 300 es\n',
|
|
'#version 300 es\n',
|
|
|
|
+ numMultiviewViews > 0 ? [
|
|
|
|
+
|
|
|
|
+ '#extension GL_OVR_multiview2 : require',
|
|
|
|
+ '#define VIEW_ID gl_ViewID_OVR'
|
|
|
|
+
|
|
|
|
+ ].join( '\n' ) : '',
|
|
'#define varying in',
|
|
'#define varying in',
|
|
isGLSL3ShaderMaterial ? '' : 'out highp vec4 pc_fragColor;',
|
|
isGLSL3ShaderMaterial ? '' : 'out highp vec4 pc_fragColor;',
|
|
isGLSL3ShaderMaterial ? '' : '#define gl_FragColor pc_fragColor',
|
|
isGLSL3ShaderMaterial ? '' : '#define gl_FragColor pc_fragColor',
|
|
@@ -771,6 +810,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters,
|
|
this.program = program;
|
|
this.program = program;
|
|
this.vertexShader = glVertexShader;
|
|
this.vertexShader = glVertexShader;
|
|
this.fragmentShader = glFragmentShader;
|
|
this.fragmentShader = glFragmentShader;
|
|
|
|
+ this.numMultiviewViews = numMultiviewViews;
|
|
|
|
|
|
return this;
|
|
return this;
|
|
|
|
|