Browse Source

Update instancing for WebGL 2.0

Takahiro 7 years ago
parent
commit
5392545f37

+ 4 - 2
src/renderers/webgl/WebGLBufferRenderer.js

@@ -4,6 +4,8 @@
 
 function WebGLBufferRenderer( gl, extensions, info ) {
 
+	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
+
 	var mode;
 
 	function setMode( value ) {
@@ -37,11 +39,11 @@ function WebGLBufferRenderer( gl, extensions, info ) {
 
 			count = position.data.count;
 
-			extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );
+			extension[ isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, 0, count, geometry.maxInstancedCount );
 
 		} else {
 
-			extension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );
+			extension[ isWebGL2 ? 'drawArraysInstanced' : 'drawArraysInstancedANGLE' ]( mode, start, count, geometry.maxInstancedCount );
 
 		}
 

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

@@ -4,6 +4,8 @@
 
 function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 
+	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
+
 	var mode;
 
 	function setMode( value ) {
@@ -40,7 +42,7 @@ function WebGLIndexedBufferRenderer( gl, extensions, info ) {
 
 		}
 
-		extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
+		extension[ isWebGL2 ? 'drawElementsInstanced' : 'drawElementsInstancedANGLE' ]( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );
 
 		info.update( count, mode, geometry.maxInstancedCount );
 

+ 4 - 2
src/renderers/webgl/WebGLState.js

@@ -7,6 +7,8 @@ import { Vector4 } from '../../math/Vector4.js';
 
 function WebGLState( gl, extensions, utils ) {
 
+	var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
+
 	function ColorBuffer() {
 
 		var locked = false;
@@ -430,7 +432,7 @@ function WebGLState( gl, extensions, utils ) {
 
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 
-			extension.vertexAttribDivisorANGLE( attribute, 0 );
+			extension[ isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, 0 );
 			attributeDivisors[ attribute ] = 0;
 
 		}
@@ -452,7 +454,7 @@ function WebGLState( gl, extensions, utils ) {
 
 			var extension = extensions.get( 'ANGLE_instanced_arrays' );
 
-			extension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );
+			extension[ isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
 			attributeDivisors[ attribute ] = meshPerAttribute;
 
 		}