提交 e38a65e3 编写于 作者: M Mr.doob

Merge pull request #6982 from ikerr/Buffer-geometry-multi-material

Multi-material support in BufferGeometry
...@@ -773,7 +773,7 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -773,7 +773,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}; };
this.renderBufferDirect = function ( camera, lights, fog, material, object ) { this.renderBufferDirect = function ( camera, lights, fog, material, object, materialIndex ) {
if ( material instanceof THREE.MeshFaceMaterial ) { if ( material instanceof THREE.MeshFaceMaterial ) {
...@@ -785,7 +785,7 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -785,7 +785,7 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( material === null || material.visible === false ) continue; if ( material === null || material.visible === false ) continue;
_this.renderBufferDirect( camera, lights, fog, material, object ); _this.renderBufferDirect( camera, lights, fog, material, object, i );
} }
...@@ -869,15 +869,15 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -869,15 +869,15 @@ THREE.WebGLRenderer = function ( parameters ) {
if ( object instanceof THREE.Mesh ) { if ( object instanceof THREE.Mesh ) {
renderMesh( material, geometry, object, program, updateBuffers ); renderMesh( material, geometry, object, program, updateBuffers, materialIndex );
} else if ( object instanceof THREE.Line ) { } else if ( object instanceof THREE.Line ) {
renderLine( material, geometry, object, program, updateBuffers ); renderLine( material, geometry, object, program, updateBuffers, materialIndex );
} else if ( object instanceof THREE.PointCloud ) { } else if ( object instanceof THREE.PointCloud ) {
renderPointCloud( material, geometry, object, program, updateBuffers ); renderPointCloud( material, geometry, object, program, updateBuffers, materialIndex );
} }
...@@ -1014,7 +1014,7 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1014,7 +1014,7 @@ THREE.WebGLRenderer = function ( parameters ) {
} }
function renderMesh( material, geometry, object, program, updateBuffers ) { function renderMesh( material, geometry, object, program, updateBuffers, materialIndex ) {
var mode = _gl.TRIANGLES; var mode = _gl.TRIANGLES;
...@@ -1092,6 +1092,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1092,6 +1092,8 @@ THREE.WebGLRenderer = function ( parameters ) {
var startIndex = offsets[ i ].index; var startIndex = offsets[ i ].index;
if ( materialIndex !== undefined && offsets[ i ].materialIndex !== materialIndex ) continue;
if ( updateBuffers ) { if ( updateBuffers ) {
setupVertexAttributes( material, program, geometry, startIndex ); setupVertexAttributes( material, program, geometry, startIndex );
...@@ -1201,6 +1203,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1201,6 +1203,8 @@ THREE.WebGLRenderer = function ( parameters ) {
// render non-indexed triangles // render non-indexed triangles
if ( materialIndex !== undefined && offsets[ i ].materialIndex !== materialIndex ) continue;
if ( geometry instanceof THREE.InstancedBufferGeometry ) { if ( geometry instanceof THREE.InstancedBufferGeometry ) {
console.error( 'THREE.WebGLRenderer.renderMesh: cannot use drawCalls with THREE.InstancedBufferGeometry.' ); console.error( 'THREE.WebGLRenderer.renderMesh: cannot use drawCalls with THREE.InstancedBufferGeometry.' );
...@@ -1224,7 +1228,7 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1224,7 +1228,7 @@ THREE.WebGLRenderer = function ( parameters ) {
} }
function renderLine( material, geometry, object, program, updateBuffers ) { function renderLine( material, geometry, object, program, updateBuffers, materialIndex ) {
var mode = object instanceof THREE.LineSegments ? _gl.LINES : _gl.LINE_STRIP; var mode = object instanceof THREE.LineSegments ? _gl.LINES : _gl.LINE_STRIP;
...@@ -1283,6 +1287,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1283,6 +1287,8 @@ THREE.WebGLRenderer = function ( parameters ) {
var startIndex = offsets[ i ].index; var startIndex = offsets[ i ].index;
if ( materialIndex !== undefined && offsets[ i ].materialIndex === materialIndex ) continue;
if ( updateBuffers ) { if ( updateBuffers ) {
setupVertexAttributes( material, program, geometry, startIndex ); setupVertexAttributes( material, program, geometry, startIndex );
...@@ -1325,6 +1331,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1325,6 +1331,8 @@ THREE.WebGLRenderer = function ( parameters ) {
for ( var i = 0, il = offsets.length; i < il; i ++ ) { for ( var i = 0, il = offsets.length; i < il; i ++ ) {
if ( materialIndex !== undefined && offsets[ i ].materialIndex !== materialIndex ) continue;
_gl.drawArrays( mode, offsets[ i ].index, offsets[ i ].count ); _gl.drawArrays( mode, offsets[ i ].index, offsets[ i ].count );
_infoRender.calls ++; _infoRender.calls ++;
...@@ -1338,7 +1346,7 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1338,7 +1346,7 @@ THREE.WebGLRenderer = function ( parameters ) {
} }
function renderPointCloud( material, geometry, object, program, updateBuffers ) { function renderPointCloud( material, geometry, object, program, updateBuffers, materialIndex ) {
var mode = _gl.POINTS; var mode = _gl.POINTS;
...@@ -1392,6 +1400,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1392,6 +1400,8 @@ THREE.WebGLRenderer = function ( parameters ) {
var startIndex = offsets[ i ].index; var startIndex = offsets[ i ].index;
if ( materialIndex !== undefined && offsets[ i ].materialIndex !== materialIndex ) continue;
if ( updateBuffers ) { if ( updateBuffers ) {
setupVertexAttributes( material, program, geometry, startIndex ); setupVertexAttributes( material, program, geometry, startIndex );
...@@ -1434,6 +1444,8 @@ THREE.WebGLRenderer = function ( parameters ) { ...@@ -1434,6 +1444,8 @@ THREE.WebGLRenderer = function ( parameters ) {
for ( var i = 0, il = offsets.length; i < il; i ++ ) { for ( var i = 0, il = offsets.length; i < il; i ++ ) {
if ( materialIndex !== undefined && offsets[ i ].materialIndex !== materialIndex ) continue;
_gl.drawArrays( mode, offsets[ i ].index, offsets[ i ].count ); _gl.drawArrays( mode, offsets[ i ].index, offsets[ i ].count );
_infoRender.calls ++; _infoRender.calls ++;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册