Browse Source

Merge pull request #19019 from Mugen87/dev41

WebGLRenderer: Add support for integer attributes with WebGL2.
Mr.doob 5 years ago
parent
commit
d60217bde6

+ 2 - 2
src/renderers/WebGLRenderer.js

@@ -942,7 +942,7 @@ function WebGLRenderer( parameters ) {
 						}
 						}
 
 
 						_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
 						_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
-						_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );
+						state.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );
 
 
 					} else {
 					} else {
 
 
@@ -963,7 +963,7 @@ function WebGLRenderer( parameters ) {
 						}
 						}
 
 
 						_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
 						_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );
-						_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );
+						state.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );
 
 
 					}
 					}
 
 

+ 1 - 0
src/renderers/webgl/WebGLState.d.ts

@@ -56,6 +56,7 @@ export class WebGLState {
 	enableAttribute( attribute: number ): void;
 	enableAttribute( attribute: number ): void;
 	enableAttributeAndDivisor( attribute: number, meshPerAttribute: number ): void;
 	enableAttributeAndDivisor( attribute: number, meshPerAttribute: number ): void;
 	disableUnusedAttributes(): void;
 	disableUnusedAttributes(): void;
+	vertexAttribPointer( index: number, size: number, type: number, normalized: boolean, stride: number, offset: number ): void;
 	enable( id: number ): void;
 	enable( id: number ): void;
 	disable( id: number ): void;
 	disable( id: number ): void;
 	useProgram( program: any ): boolean;
 	useProgram( program: any ): boolean;

+ 15 - 0
src/renderers/webgl/WebGLState.js

@@ -462,6 +462,20 @@ function WebGLState( gl, extensions, capabilities ) {
 
 
 	}
 	}
 
 
+	function vertexAttribPointer( index, size, type, normalized, stride, offset ) {
+
+		if ( isWebGL2 === true && ( type === gl.INT || type === gl.UNSIGNED_INT ) ) {
+
+			gl.vertexAttribIPointer( index, size, type, normalized, stride, offset );
+
+		} else {
+
+			gl.vertexAttribPointer( index, size, type, normalized, stride, offset );
+
+		}
+
+	}
+
 	function enable( id ) {
 	function enable( id ) {
 
 
 		if ( enabledCapabilities[ id ] !== true ) {
 		if ( enabledCapabilities[ id ] !== true ) {
@@ -980,6 +994,7 @@ function WebGLState( gl, extensions, capabilities ) {
 		enableAttribute: enableAttribute,
 		enableAttribute: enableAttribute,
 		enableAttributeAndDivisor: enableAttributeAndDivisor,
 		enableAttributeAndDivisor: enableAttributeAndDivisor,
 		disableUnusedAttributes: disableUnusedAttributes,
 		disableUnusedAttributes: disableUnusedAttributes,
+		vertexAttribPointer: vertexAttribPointer,
 		enable: enable,
 		enable: enable,
 		disable: disable,
 		disable: disable,