Преглед изворни кода

Merge pull request #17659 from gero3/AddnumMultiviewViewsToParameters

WebGLPrograms: Add numMultiviewViews to parameters
Mr.doob пре 5 година
родитељ
комит
32c2afbc54
2 измењених фајлова са 11 додато и 12 уклоњено
  1. 8 11
      src/renderers/webgl/WebGLProgram.js
  2. 3 1
      src/renderers/webgl/WebGLPrograms.js

+ 8 - 11
src/renderers/webgl/WebGLProgram.js

@@ -401,9 +401,6 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 
 	var prefixVertex, prefixFragment;
 
-	var renderTarget = renderer.getRenderTarget();
-	var numMultiviewViews = renderTarget && renderTarget.isWebGLMultiviewRenderTarget ? renderTarget.numViews : 0;
-
 	if ( material.isRawShaderMaterial ) {
 
 		prefixVertex = [
@@ -697,14 +694,14 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 
 		// Multiview
 
-		if ( numMultiviewViews > 0 ) {
+		if ( parameters.numMultiviewViews > 0 ) {
 
 			prefixVertex = prefixVertex.replace(
 				'#version 300 es\n',
 				[
 					'#version 300 es\n',
 					'#extension GL_OVR_multiview2 : require',
-					'layout(num_views = ' + numMultiviewViews + ') in;',
+					'layout(num_views = ' + parameters.numMultiviewViews + ') in;',
 					'#define VIEW_ID gl_ViewID_OVR'
 				].join( '\n' )
 			);
@@ -717,10 +714,10 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 					'uniform mat3 normalMatrix;'
 				].join( '\n' ),
 				[
-					'uniform mat4 modelViewMatrices[' + numMultiviewViews + '];',
-					'uniform mat4 projectionMatrices[' + numMultiviewViews + '];',
-					'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
-					'uniform mat3 normalMatrices[' + numMultiviewViews + '];',
+					'uniform mat4 modelViewMatrices[' + parameters.numMultiviewViews + '];',
+					'uniform mat4 projectionMatrices[' + parameters.numMultiviewViews + '];',
+					'uniform mat4 viewMatrices[' + parameters.numMultiviewViews + '];',
+					'uniform mat3 normalMatrices[' + parameters.numMultiviewViews + '];',
 
 					'#define modelViewMatrix modelViewMatrices[VIEW_ID]',
 					'#define projectionMatrix projectionMatrices[VIEW_ID]',
@@ -741,7 +738,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 			prefixFragment = prefixFragment.replace(
 				'uniform mat4 viewMatrix;',
 				[
-					'uniform mat4 viewMatrices[' + numMultiviewViews + '];',
+					'uniform mat4 viewMatrices[' + parameters.numMultiviewViews + '];',
 					'#define viewMatrix viewMatrices[VIEW_ID]'
 				].join( '\n' )
 			);
@@ -890,7 +887,7 @@ function WebGLProgram( renderer, extensions, code, material, shader, parameters
 	this.program = program;
 	this.vertexShader = glVertexShader;
 	this.fragmentShader = glFragmentShader;
-	this.numMultiviewViews = numMultiviewViews;
+	this.numMultiviewViews = parameters.numMultiviewViews;
 
 	return this;
 

+ 3 - 1
src/renderers/webgl/WebGLPrograms.js

@@ -35,7 +35,7 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 	};
 
 	var parameterNames = [
-		"precision", "supportsVertexTextures", "instancing",
+		"precision", "supportsVertexTextures", "instancing", "numMultiviewViews",
 		"map", "mapEncoding", "matcap", "matcapEncoding", "envMap", "envMapMode", "envMapEncoding",
 		"lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "objectSpaceNormalMap", "tangentSpaceNormalMap", "clearcoatNormalMap", "displacementMap", "specularMap",
 		"roughnessMap", "metalnessMap", "gradientMap",
@@ -138,6 +138,7 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 		}
 
 		var currentRenderTarget = renderer.getRenderTarget();
+		var numMultiviewViews = currentRenderTarget && currentRenderTarget.isWebGLMultiviewRenderTarget ? currentRenderTarget.numViews : 0;
 
 		var parameters = {
 
@@ -150,6 +151,7 @@ function WebGLPrograms( renderer, extensions, capabilities ) {
 			instancing: object.isInstancedMesh === true,
 
 			supportsVertexTextures: vertexTextures,
+			numMultiviewViews: numMultiviewViews,
 			outputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),
 			map: !! material.map,
 			mapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),