Skip to content

Commit

Permalink
WebGLRenderer: Moved scissor/viewport state code to WebGLSate. Fixes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
mrdoob committed Dec 19, 2015
1 parent 7d9f979 commit 392b53f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 39 deletions.
5 changes: 5 additions & 0 deletions src/Three.Legacy.js
Expand Up @@ -446,6 +446,11 @@ Object.defineProperties( THREE.WebGLRenderer.prototype, {
return this.extensions.get( 'ANGLE_instanced_arrays' );
}
},
enableScissorTest: {
value: function () {
console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );
}
},
initMaterial: {
value: function () {
console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );
Expand Down
54 changes: 26 additions & 28 deletions src/renderers/WebGLRenderer.js
Expand Up @@ -88,6 +88,9 @@ THREE.WebGLRenderer = function ( parameters ) {

_usedTextureUnits = 0,

_scissor = new THREE.Vector4( 0, 0, _canvas.width, _canvas.height ),

This comment has been minimized.

Copy link
@WestLangley

WestLangley Dec 20, 2015

Collaborator

new THREE.Vector4 or new THREE.Rectangle? -- Although I prefer removing THREE.Rectangle, as I suggested elsewhere.

_scissorTest = false,

_viewport = new THREE.Vector4( 0, 0, _canvas.width, _canvas.height ),

_currentWidth = 0,
Expand Down Expand Up @@ -238,7 +241,8 @@ THREE.WebGLRenderer = function ( parameters ) {

state.init();

_gl.viewport( _viewport.x, _viewport.y, _viewport.z, _viewport.w );
state.scissor( _scissor );
state.viewport( _viewport );

glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );

Expand Down Expand Up @@ -370,39 +374,23 @@ THREE.WebGLRenderer = function ( parameters ) {

this.setViewport = function ( x, y, width, height ) {

if ( _currentRenderTarget === null ) {

x *= pixelRatio;
y *= pixelRatio;

width *= pixelRatio;
height *= pixelRatio;

_viewport.set( x, y, width, height );
_viewport.set( x, y, width, height ).multiplyScalar( pixelRatio );

This comment has been minimized.

Copy link
@WestLangley

WestLangley Dec 20, 2015

Collaborator

The multiplyScalar method is convenient. -- Another reason not to use THREE.Rectangle.

This comment has been minimized.

Copy link
@mrdoob

mrdoob Dec 20, 2015

Author Owner

Yes yes. I removed THREE.Rectangle in a previous commit.

This comment has been minimized.

Copy link
@mrdoob

mrdoob Dec 20, 2015

Author Owner

It didn't last too long 😅


}

_gl.viewport( x, y, width, height );
state.viewport( _viewport );

};

this.setScissor = function ( x, y, width, height ) {

if ( _currentRenderTarget === null ) {
_scissor.set( x, y, width, height ).multiplyScalar( pixelRatio );

x *= pixelRatio;
y *= pixelRatio;

width *= pixelRatio;
height *= pixelRatio;

}

_gl.scissor( x, y, width, height );
state.scissor( _scissor );

};

this.enableScissorTest = function ( boolean ) {
this.setScissorTest = function ( boolean ) {

_scissorTest = boolean;

state.setScissorTest( boolean );

Expand Down Expand Up @@ -3381,7 +3369,7 @@ THREE.WebGLRenderer = function ( parameters ) {
}

var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );
var framebuffer, viewport;
var framebuffer, scissor, scissorTest, viewport;

if ( renderTarget ) {

Expand All @@ -3397,34 +3385,44 @@ THREE.WebGLRenderer = function ( parameters ) {

}

scissor = renderTarget.scissor;
scissorTest = renderTarget.scissorTest;

viewport = renderTarget.viewport;

} else {

framebuffer = null;

scissor = _scissor;
scissorTest = _scissorTest;

viewport = _viewport;

}

if ( framebuffer !== _currentFramebuffer ) {

_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
_gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );

_currentFramebuffer = framebuffer;

}

state.scissor( scissor );
state.setScissorTest( scissorTest );

state.viewport( viewport );

if ( isCube ) {

var textureProperties = properties.get( renderTarget.texture );
_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, 0 );

}

_currentWidth = viewport.width;
_currentHeight = viewport.height;
_currentWidth = viewport.z;
_currentHeight = viewport.w;

};

Expand Down
14 changes: 3 additions & 11 deletions src/renderers/webgl/WebGLShadowMap.js
Expand Up @@ -96,10 +96,6 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
if ( scope.enabled === false ) return;
if ( scope.autoUpdate === false && scope.needsUpdate === false ) return;

// Save GL state

var currentScissorTest = _state.getScissorTest();

// Set GL state for depth map.
_gl.clearColor( 1, 1, 1, 1 );
_state.disable( _gl.BLEND );
Expand Down Expand Up @@ -209,8 +205,9 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
_lookTarget.add( cubeDirections[ face ] );
shadowCamera.up.copy( cubeUps[ face ] );
shadowCamera.lookAt( _lookTarget );

var vpDimensions = cube2DViewPorts[ face ];
_renderer.setViewport( vpDimensions.x, vpDimensions.y, vpDimensions.z, vpDimensions.w );
_state.viewport( vpDimensions );

} else {

Expand Down Expand Up @@ -294,13 +291,8 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
var clearColor = _renderer.getClearColor(),
clearAlpha = _renderer.getClearAlpha();
_renderer.setClearColor( clearColor, clearAlpha );
_state.enable( _gl.BLEND );

if ( currentScissorTest === true ) {

_state.setScissorTest( true );

}
_state.enable( _gl.BLEND );

if ( scope.cullFace === THREE.CullFaceFront ) {

Expand Down

0 comments on commit 392b53f

Please sign in to comment.