mirror of
https://github.com/wahyd4/three.js.git
synced 2026-08-15 07:56:00 +10:00
Added data object ( vertices, faces ) to Canvas/SVG/WebGLRenderer to get some render counts from the last render call.
This commit is contained in:
@@ -4,7 +4,8 @@
|
||||
|
||||
THREE.CanvasRenderer = function () {
|
||||
|
||||
var _renderList = null,
|
||||
var _this = this,
|
||||
_renderList = null,
|
||||
_projector = new THREE.Projector(),
|
||||
|
||||
_canvas = document.createElement( 'canvas' ),
|
||||
@@ -81,6 +82,13 @@ THREE.CanvasRenderer = function () {
|
||||
this.sortObjects = true;
|
||||
this.sortElements = true;
|
||||
|
||||
this.data = {
|
||||
|
||||
vertices: 0,
|
||||
faces: 0
|
||||
|
||||
}
|
||||
|
||||
this.setSize = function ( width, height ) {
|
||||
|
||||
_canvasWidth = width;
|
||||
@@ -152,6 +160,9 @@ THREE.CanvasRenderer = function () {
|
||||
|
||||
this.autoClear ? this.clear() : _context.setTransform( 1, 0, 0, - 1, _canvasWidthHalf, _canvasHeightHalf );
|
||||
|
||||
_this.data.vertices = 0;
|
||||
_this.data.faces = 0;
|
||||
|
||||
_renderList = _projector.projectScene( scene, camera, this.sortElements );
|
||||
|
||||
/* DEBUG
|
||||
@@ -538,6 +549,9 @@ THREE.CanvasRenderer = function () {
|
||||
|
||||
function renderFace3( v1, v2, v3, uv1, uv2, uv3, element, material, scene ) {
|
||||
|
||||
_this.data.vertices += 3;
|
||||
_this.data.faces ++;
|
||||
|
||||
setOpacity( material.opacity );
|
||||
setBlending( material.blending );
|
||||
|
||||
@@ -561,7 +575,6 @@ THREE.CanvasRenderer = function () {
|
||||
|
||||
} else if ( material.envMap ) {
|
||||
|
||||
|
||||
if ( material.envMap.mapping instanceof THREE.SphericalReflectionMapping ) {
|
||||
|
||||
var cameraMatrix = camera.matrixWorldInverse;
|
||||
@@ -684,6 +697,9 @@ THREE.CanvasRenderer = function () {
|
||||
|
||||
function renderFace4( v1, v2, v3, v4, v5, v6, element, material, scene ) {
|
||||
|
||||
_this.data.vertices += 4;
|
||||
_this.data.faces ++;
|
||||
|
||||
setOpacity( material.opacity );
|
||||
setBlending( material.blending );
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
THREE.SVGRenderer = function () {
|
||||
|
||||
var _renderList = null,
|
||||
var _this = this,
|
||||
_renderList = null,
|
||||
_projector = new THREE.Projector(),
|
||||
_svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'),
|
||||
_svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf,
|
||||
@@ -34,6 +35,13 @@ THREE.SVGRenderer = function () {
|
||||
this.sortObjects = true;
|
||||
this.sortElements = true;
|
||||
|
||||
this.data = {
|
||||
|
||||
vertices: 0,
|
||||
faces: 0
|
||||
|
||||
}
|
||||
|
||||
this.setQuality = function( quality ) {
|
||||
|
||||
switch(quality) {
|
||||
@@ -72,11 +80,10 @@ THREE.SVGRenderer = function () {
|
||||
|
||||
var e, el, m, ml, fm, fml, element, material;
|
||||
|
||||
if ( this.autoClear ) {
|
||||
this.autoClear && this.clear();
|
||||
|
||||
this.clear();
|
||||
|
||||
}
|
||||
_this.data.vertices = 0;
|
||||
_this.data.faces = 0;
|
||||
|
||||
_renderList = _projector.projectScene( scene, camera, this.sortElements );
|
||||
|
||||
@@ -368,6 +375,9 @@ THREE.SVGRenderer = function () {
|
||||
|
||||
function renderFace3( v1, v2, v3, element, material, scene ) {
|
||||
|
||||
_this.data.vertices += 3;
|
||||
_this.data.faces ++;
|
||||
|
||||
_svgNode = getPathNode( _pathCount ++ );
|
||||
_svgNode.setAttribute( 'd', 'M ' + v1.positionScreen.x + ' ' + v1.positionScreen.y + ' L ' + v2.positionScreen.x + ' ' + v2.positionScreen.y + ' L ' + v3.positionScreen.x + ',' + v3.positionScreen.y + 'z' );
|
||||
|
||||
@@ -424,6 +434,9 @@ THREE.SVGRenderer = function () {
|
||||
|
||||
function renderFace4( v1, v2, v3, v4, element, material, scene ) {
|
||||
|
||||
_this.data.vertices += 4;
|
||||
_this.data.faces ++;
|
||||
|
||||
_svgNode = getPathNode( _pathCount ++ );
|
||||
_svgNode.setAttribute( 'd', 'M ' + v1.positionScreen.x + ' ' + v1.positionScreen.y + ' L ' + v2.positionScreen.x + ' ' + v2.positionScreen.y + ' L ' + v3.positionScreen.x + ',' + v3.positionScreen.y + ' L ' + v4.positionScreen.x + ',' + v4.positionScreen.y + 'z' );
|
||||
|
||||
|
||||
@@ -20,15 +20,13 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
|
||||
// See http://code.google.com/p/chromium/issues/detail?id=63491
|
||||
|
||||
var _gl,
|
||||
_canvas = document.createElement( 'canvas' ),
|
||||
var _this = this,
|
||||
_gl, _canvas = document.createElement( 'canvas' ),
|
||||
_programs = [],
|
||||
_currentProgram = null,
|
||||
_currentFramebuffer = null,
|
||||
_currentDepthMask = true,
|
||||
|
||||
_this = this,
|
||||
|
||||
// gl state cache
|
||||
|
||||
_oldDoubleSided = null,
|
||||
@@ -79,6 +77,12 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
clearColor = parameters.clearColor !== undefined ? new THREE.Color( parameters.clearColor ) : new THREE.Color( 0x000000 );
|
||||
clearAlpha = parameters.clearAlpha !== undefined ? parameters.clearAlpha : 0;
|
||||
|
||||
this.data = {
|
||||
|
||||
vertices: 0,
|
||||
faces: 0
|
||||
|
||||
}
|
||||
|
||||
this.maxMorphTargets = 8;
|
||||
this.domElement = _canvas;
|
||||
@@ -2576,6 +2580,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
|
||||
}
|
||||
|
||||
_this.data.vertices += geometryGroup.__webglFaceCount;
|
||||
_this.data.faces += geometryGroup.__webglFaceCount / 3;
|
||||
|
||||
// render lines
|
||||
|
||||
} else if ( object instanceof THREE.Line ) {
|
||||
@@ -2924,6 +2931,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
lights = scene.lights,
|
||||
fog = scene.fog;
|
||||
|
||||
_this.data.vertices = 0;
|
||||
_this.data.faces = 0;
|
||||
|
||||
camera.matrixAutoUpdate && camera.update( undefined, true );
|
||||
|
||||
scene.update( undefined, false, camera );
|
||||
@@ -3550,96 +3560,95 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
|
||||
|
||||
// screen cull
|
||||
|
||||
if( _lensFlare.hasVertexTexture ||
|
||||
( screenPositionPixels[ 0 ] > 0 &&
|
||||
|
||||
if ( _lensFlare.hasVertexTexture || ( screenPositionPixels[ 0 ] > 0 &&
|
||||
screenPositionPixels[ 0 ] < _viewportWidth &&
|
||||
screenPositionPixels[ 1 ] > 0 &&
|
||||
screenPositionPixels[ 1 ] < _viewportHeight )) {
|
||||
|
||||
|
||||
// save current RGB to temp texture
|
||||
|
||||
|
||||
_gl.bindTexture( _gl.TEXTURE_2D, _lensFlare.tempTexture );
|
||||
_gl.copyTexImage2D( _gl.TEXTURE_2D, 0, _gl.RGB, screenPositionPixels[ 0 ] - 8, screenPositionPixels[ 1 ] - 8, 16, 16, 0 );
|
||||
|
||||
|
||||
|
||||
// render pink quad
|
||||
|
||||
|
||||
_gl.uniform1i( uniforms.renderType, 0 );
|
||||
_gl.uniform2fv( uniforms.scale, scale );
|
||||
_gl.uniform3fv( uniforms.screenPosition, screenPosition );
|
||||
|
||||
|
||||
_gl.disable( _gl.BLEND );
|
||||
_gl.enable( _gl.DEPTH_TEST );
|
||||
|
||||
|
||||
_gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 );
|
||||
|
||||
|
||||
|
||||
|
||||
// copy result to occlusionMap
|
||||
|
||||
|
||||
_gl.bindTexture( _gl.TEXTURE_2D, _lensFlare.occlusionTexture );
|
||||
_gl.copyTexImage2D( _gl.TEXTURE_2D, 0, _gl.RGBA, screenPositionPixels[ 0 ] - 8, screenPositionPixels[ 1 ] - 8, 16, 16, 0 );
|
||||
|
||||
|
||||
|
||||
|
||||
// restore graphics
|
||||
|
||||
|
||||
_gl.uniform1i( uniforms.renderType, 1 );
|
||||
_gl.disable( _gl.DEPTH_TEST );
|
||||
_gl.bindTexture( _gl.TEXTURE_2D, _lensFlare.tempTexture );
|
||||
_gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 );
|
||||
|
||||
|
||||
|
||||
|
||||
// update object positions
|
||||
|
||||
|
||||
object.positionScreen.x = screenPosition[ 0 ];
|
||||
object.positionScreen.y = screenPosition[ 1 ];
|
||||
object.positionScreen.z = screenPosition[ 2 ];
|
||||
|
||||
|
||||
if ( object.customUpdateCallback ) {
|
||||
|
||||
|
||||
object.customUpdateCallback( object );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
object.updateLensFlares();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// render flares
|
||||
|
||||
|
||||
_gl.uniform1i( uniforms.renderType, 2 );
|
||||
_gl.enable( _gl.BLEND );
|
||||
|
||||
|
||||
for ( f = 0, fl = object.lensFlares.length; f < fl; f ++ ) {
|
||||
|
||||
|
||||
flare = object.lensFlares[ f ];
|
||||
|
||||
|
||||
if ( flare.opacity > 0.001 && flare.scale > 0.001 ) {
|
||||
|
||||
|
||||
screenPosition[ 0 ] = flare.x;
|
||||
screenPosition[ 1 ] = flare.y;
|
||||
screenPosition[ 2 ] = flare.z;
|
||||
|
||||
|
||||
size = flare.size * flare.scale / _viewportHeight;
|
||||
scale[ 0 ] = size * invAspect;
|
||||
scale[ 1 ] = size;
|
||||
|
||||
|
||||
_gl.uniform3fv( uniforms.screenPosition, screenPosition );
|
||||
_gl.uniform2fv( uniforms.scale, scale );
|
||||
_gl.uniform1f( uniforms.rotation, flare.rotation );
|
||||
_gl.uniform1f( uniforms.opacity, flare.opacity );
|
||||
|
||||
|
||||
setBlending( flare.blending );
|
||||
setTexture( flare.texture, 1 );
|
||||
|
||||
|
||||
_gl.drawElements( _gl.TRIANGLES, 6, _gl.UNSIGNED_SHORT, 0 );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4211,7 +4220,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//console.log( "building new program " );
|
||||
|
||||
//
|
||||
@@ -4629,29 +4638,29 @@ THREE.WebGLRenderer = function ( parameters ) {
|
||||
_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTexture.__webglFramebuffer );
|
||||
|
||||
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, renderTexture.__webglTexture, 0 );
|
||||
|
||||
if( renderTexture.depthBuffer && !renderTexture.stencilBuffer ) {
|
||||
|
||||
|
||||
if ( renderTexture.depthBuffer && !renderTexture.stencilBuffer ) {
|
||||
|
||||
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTexture.width, renderTexture.height );
|
||||
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderTexture.__webglRenderbuffer );
|
||||
|
||||
/* For some reason this is not working. Defaulting to RGBA4.
|
||||
|
||||
/* For some reason this is not working. Defaulting to RGBA4.
|
||||
} else if( !renderTexture.depthBuffer && renderTexture.stencilBuffer ) {
|
||||
|
||||
|
||||
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.STENCIL_INDEX8, renderTexture.width, renderTexture.height );
|
||||
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderTexture.__webglRenderbuffer );
|
||||
*/
|
||||
} else if( renderTexture.depthBuffer && renderTexture.stencilBuffer ) {
|
||||
|
||||
|
||||
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTexture.width, renderTexture.height );
|
||||
_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderTexture.__webglRenderbuffer );
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTexture.width, renderTexture.height );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Release everything
|
||||
|
||||
|
||||
Reference in New Issue
Block a user