|
@@ -32,6 +32,9 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
_oldFlipSided = null,
|
|
|
_oldBlending = null,
|
|
|
_oldDepth = null,
|
|
|
+ _oldPolygonOffset = null;
|
|
|
+ _oldPolygonOffsetFactor = null;
|
|
|
+ _oldPolygonOffsetUnits = null;
|
|
|
_cullEnabled = true,
|
|
|
|
|
|
_viewportX = 0,
|
|
@@ -2973,6 +2976,35 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
}
|
|
|
|
|
|
};
|
|
|
+
|
|
|
+ function setPolygonOffset ( polygonoffset, factor, units ) {
|
|
|
+
|
|
|
+ if ( _oldPolygonOffset != polygonoffset ) {
|
|
|
+
|
|
|
+ if ( polygonoffset ) {
|
|
|
+
|
|
|
+ _gl.enable( _gl.POLYGON_OFFSET_FILL );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ _gl.disable( _gl.POLYGON_OFFSET_FILL );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ _oldPolygonOffset = polygonoffset;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( polygonoffset && ( _oldPolygonOffsetFactor != factor || _oldPolygonOffsetUnits != units ) ) {
|
|
|
+
|
|
|
+ _gl.polygonOffset( factor, units );
|
|
|
+
|
|
|
+ _oldPolygonOffsetFactor = factor;
|
|
|
+ _oldPolygonOffsetUnits = units;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
|
|
|
function computeFrustum( m ) {
|
|
|
|
|
@@ -3211,6 +3243,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
material = opaque.list[ i ];
|
|
|
|
|
|
setDepthTest( material.depthTest );
|
|
|
+ setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
|
renderBuffer( camera, lights, fog, material, buffer, object );
|
|
|
|
|
|
}
|
|
@@ -3237,6 +3270,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
material = opaque.list[ i ];
|
|
|
|
|
|
setDepthTest( material.depthTest );
|
|
|
+ setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
|
|
|
|
program = setProgram( camera, lights, fog, material, object );
|
|
|
object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } );
|
|
@@ -3267,6 +3301,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
setBlending( material.blending );
|
|
|
setDepthTest( material.depthTest );
|
|
|
+ setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
|
|
|
|
renderBuffer( camera, lights, fog, material, buffer, object );
|
|
|
|
|
@@ -3295,6 +3330,7 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
setBlending( material.blending );
|
|
|
setDepthTest( material.depthTest );
|
|
|
+ setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
|
|
|
|
|
|
program = setProgram( camera, lights, fog, material, object );
|
|
|
object.render( function( object ) { renderBufferImmediate( object, program, material.shading ); } );
|