瀏覽代碼

WebGLRenderer: option to enable multi_draw / gl_DrawID in vertex shader (#27630)

* feat: multi_draw / enable gl_DrawID

* chore: remove space

* chore: rename extensionMultidraw to extensionMultiDraw

* chore: rename variable in extension

* Update WebGLPrograms.js

Clean up.

* chore: update docs

---------

Co-authored-by: Michael Herzog <[email protected]>
Co-authored-by: Vegar Ringdal <[email protected]>
Vegar Ringdal 1 年之前
父節點
當前提交
6daf300367

+ 1 - 0
docs/api/en/materials/ShaderMaterial.html

@@ -347,6 +347,7 @@ this.extensions = {
 	drawBuffers: false, // set to use draw buffers 
 	shaderTextureLOD: false, // set to use shader texture LOD
 	clipCullDistance: false // set to use vertex shader clipping
+	multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 };
 			</code>
 		</p>

+ 2 - 1
src/materials/ShaderMaterial.js

@@ -37,7 +37,8 @@ class ShaderMaterial extends Material {
 			fragDepth: false, // set to use fragment depth values
 			drawBuffers: false, // set to use draw buffers
 			shaderTextureLOD: false, // set to use shader texture LOD
-			clipCullDistance: false // set to use vertex shader clipping
+			clipCullDistance: false, // set to use vertex shader clipping
+			multiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID
 		};
 
 		// When rendered geometry doesn't include these attributes but the material does,

+ 2 - 1
src/renderers/webgl/WebGLProgram.js

@@ -154,7 +154,8 @@ function generateExtensions( parameters ) {
 function generateVertexExtensions( parameters ) {
 
 	const chunks = [
-		parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : ''
+		parameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',
+		parameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',
 	];
 
 	return chunks.filter( filterEmptyLine ).join( '\n' );

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

@@ -353,7 +353,8 @@ function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities
 			extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
 			extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
 			extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
-			extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance && extensions.has( 'WEBGL_clip_cull_distance' ),
+			extensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),
+			extensionMultiDraw: HAS_EXTENSIONS && material.extensions.multiDraw === true && extensions.has( 'WEBGL_multi_draw' ),
 
 			rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
 			rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),