topical media & game development

talk show tell print

mobile-query-three-vendor-three.js-postprocessing-MaskPass.js / js



  

author: alteredq / alteredqualia.com/

  
  
  THREE.MaskPass = function ( scene, camera ) {
  
          this.scene = scene;
          this.camera = camera;
  
          this.enabled = true;
          this.clear = true;
          this.needsSwap = false;
  
          this.inverse = false;
  
  };
  
  THREE.MaskPass.prototype = {
  
          render: function ( renderer, writeBuffer, readBuffer, delta ) {
  
                  var context = renderer.context;
  
                  // don't update color or depth
  
                  context.colorMask( false, false, false, false );
                  context.depthMask( false );
  
                  // set up stencil
  
                  var writeValue, clearValue;
  
                  if ( this.inverse ) {
  
                          writeValue = 0;
                          clearValue = 1;
  
                  } else {
  
                          writeValue = 1;
                          clearValue = 0;
  
                  }
  
                  context.enable( context.STENCIL_TEST );
                  context.stencilOp( context.REPLACE, context.REPLACE, context.REPLACE );
                  context.stencilFunc( context.ALWAYS, writeValue, 0xffffffff );
                  context.clearStencil( clearValue );
  
                  // draw into the stencil buffer
  
                  renderer.render( this.scene, this.camera, readBuffer, this.clear );
                  renderer.render( this.scene, this.camera, writeBuffer, this.clear );
  
                  // re-enable update of color and depth
  
                  context.colorMask( true, true, true, true );
                  context.depthMask( true );
  
                  // only render where stencil is set to 1
  
                  context.stencilFunc( context.EQUAL, 1, 0xffffffff );  // draw if == 1
                  context.stencilOp( context.KEEP, context.KEEP, context.KEEP );
  
          }
  
  };
  
  THREE.ClearMaskPass = function () {
  
          this.enabled = true;
  
  };
  
  THREE.ClearMaskPass.prototype = {
  
          render: function ( renderer, writeBuffer, readBuffer, delta ) {
  
                  var context = renderer.context;
  
                  context.disable( context.STENCIL_TEST );
  
          }
  
  };
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.