WebGLBufferRenderer.js 1.3 KB
Newer Older
M
Mr.doob 已提交
1
/**
M
Mr.doob 已提交
2 3
 * @author mrdoob / http://mrdoob.com/
 */
M
Mr.doob 已提交
4

M
Mr.doob 已提交
5
function WebGLBufferRenderer( gl, extensions, infoRender ) {
M
Mr.doob 已提交
6 7 8

	var mode;

9
	function setMode( value ) {
M
Mr.doob 已提交
10 11 12

		mode = value;

13
	}
M
Mr.doob 已提交
14

15
	function render( start, count ) {
M
Mr.doob 已提交
16

M
Mr.doob 已提交
17
		gl.drawArrays( mode, start, count );
M
Mr.doob 已提交
18

M
Mr.doob 已提交
19 20
		infoRender.calls ++;
		infoRender.vertices += count;
M
Mr.doob 已提交
21

M
Mr.doob 已提交
22
		if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3;
23 24

	}
M
Mr.doob 已提交
25

26
	function renderInstances( geometry ) {
M
Mr.doob 已提交
27 28 29 30 31 32 33 34 35 36 37 38

		var extension = extensions.get( 'ANGLE_instanced_arrays' );

		if ( extension === null ) {

			console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
			return;

		}

		var position = geometry.attributes.position;

39 40
		var count = 0;

R
Rich Harris 已提交
41
		if ( (position && position.isInterleavedBufferAttribute) ) {
M
Mr.doob 已提交
42

43
			count = position.data.count;
44 45 46

			extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );

M
Mr.doob 已提交
47 48
		} else {

49
			count = position.count;
50 51 52

			extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount );

M
Mr.doob 已提交
53 54
		}

M
Mr.doob 已提交
55 56 57 58
		infoRender.calls ++;
		infoRender.vertices += count * geometry.maxInstancedCount;

		if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3;
59

60 61
	}

M
Mr.doob 已提交
62 63 64 65 66
	return {
		setMode: setMode,
		render: render,
		renderInstances: renderInstances
	};
M
Mr.doob 已提交
67

M
Mr.doob 已提交
68
}
R
Rich Harris 已提交
69 70


71
export { WebGLBufferRenderer };