home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / org / papervision3d / render / BasicRenderEngine.as
Encoding:
Text File  |  2010-06-23  |  7.9 KB  |  200 lines

  1. package org.papervision3d.render
  2. {
  3.    import flash.geom.Point;
  4.    import org.papervision3d.core.clipping.DefaultClipping;
  5.    import org.papervision3d.core.proto.CameraObject3D;
  6.    import org.papervision3d.core.proto.SceneObject3D;
  7.    import org.papervision3d.core.render.AbstractRenderEngine;
  8.    import org.papervision3d.core.render.IRenderEngine;
  9.    import org.papervision3d.core.render.command.IRenderListItem;
  10.    import org.papervision3d.core.render.command.RenderableListItem;
  11.    import org.papervision3d.core.render.data.RenderHitData;
  12.    import org.papervision3d.core.render.data.RenderSessionData;
  13.    import org.papervision3d.core.render.data.RenderStatistics;
  14.    import org.papervision3d.core.render.filter.BasicRenderFilter;
  15.    import org.papervision3d.core.render.filter.IRenderFilter;
  16.    import org.papervision3d.core.render.material.MaterialManager;
  17.    import org.papervision3d.core.render.project.BasicProjectionPipeline;
  18.    import org.papervision3d.core.render.project.ProjectionPipeline;
  19.    import org.papervision3d.core.render.sort.BasicRenderSorter;
  20.    import org.papervision3d.core.render.sort.IRenderSorter;
  21.    import org.papervision3d.core.utils.StopWatch;
  22.    import org.papervision3d.events.RendererEvent;
  23.    import org.papervision3d.view.Viewport3D;
  24.    import org.papervision3d.view.layer.ViewportLayer;
  25.    
  26.    public class BasicRenderEngine extends AbstractRenderEngine implements IRenderEngine
  27.    {
  28.       public var clipping:DefaultClipping;
  29.       
  30.       protected var renderDoneEvent:RendererEvent;
  31.       
  32.       public var sorter:IRenderSorter;
  33.       
  34.       public var projectionPipeline:ProjectionPipeline;
  35.       
  36.       protected var renderList:Array;
  37.       
  38.       protected var renderStatistics:RenderStatistics;
  39.       
  40.       protected var cleanRHD:RenderHitData = new RenderHitData();
  41.       
  42.       protected var projectionDoneEvent:RendererEvent;
  43.       
  44.       protected var renderSessionData:RenderSessionData;
  45.       
  46.       protected var stopWatch:StopWatch;
  47.       
  48.       public var filter:IRenderFilter;
  49.       
  50.       public function BasicRenderEngine()
  51.       {
  52.          super();
  53.          this.init();
  54.       }
  55.       
  56.       protected function doRender(param1:RenderSessionData, param2:Array = null) : RenderStatistics
  57.       {
  58.          var _loc3_:RenderableListItem = null;
  59.          var _loc5_:ViewportLayer = null;
  60.          this.stopWatch.reset();
  61.          this.stopWatch.start();
  62.          MaterialManager.getInstance().updateMaterialsBeforeRender(param1);
  63.          this.filter.filter(this.renderList);
  64.          this.sorter.sort(this.renderList);
  65.          var _loc4_:Viewport3D = param1.viewPort;
  66.          while(true)
  67.          {
  68.             _loc3_ = this.renderList.pop();
  69.             if(!_loc3_)
  70.             {
  71.                break;
  72.             }
  73.             _loc5_ = _loc4_.accessLayerFor(_loc3_,true);
  74.             _loc3_.render(param1,_loc5_.graphicsChannel);
  75.             _loc4_.lastRenderList.push(_loc3_);
  76.             _loc5_.processRenderItem(_loc3_);
  77.          }
  78.          MaterialManager.getInstance().updateMaterialsAfterRender(param1);
  79.          param1.renderStatistics.renderTime = this.stopWatch.stop();
  80.          param1.viewPort.updateAfterRender(param1);
  81.          return this.renderStatistics;
  82.       }
  83.       
  84.       protected function init() : void
  85.       {
  86.          this.renderStatistics = new RenderStatistics();
  87.          this.projectionPipeline = new BasicProjectionPipeline();
  88.          this.stopWatch = new StopWatch();
  89.          this.sorter = new BasicRenderSorter();
  90.          this.filter = new BasicRenderFilter();
  91.          this.renderList = new Array();
  92.          this.clipping = null;
  93.          this.renderSessionData = new RenderSessionData();
  94.          this.renderSessionData.renderer = this;
  95.          this.projectionDoneEvent = new RendererEvent(RendererEvent.PROJECTION_DONE,this.renderSessionData);
  96.          this.renderDoneEvent = new RendererEvent(RendererEvent.RENDER_DONE,this.renderSessionData);
  97.       }
  98.       
  99.       override public function renderScene(param1:SceneObject3D, param2:CameraObject3D, param3:Viewport3D) : RenderStatistics
  100.       {
  101.          param2.viewport = param3.sizeRectangle;
  102.          this.renderSessionData.scene = param1;
  103.          this.renderSessionData.camera = param2;
  104.          this.renderSessionData.viewPort = param3;
  105.          this.renderSessionData.container = param3.containerSprite;
  106.          this.renderSessionData.triangleCuller = param3.triangleCuller;
  107.          this.renderSessionData.particleCuller = param3.particleCuller;
  108.          this.renderSessionData.renderObjects = param1.objects;
  109.          this.renderSessionData.renderLayers = null;
  110.          this.renderSessionData.renderStatistics.clear();
  111.          this.renderSessionData.clipping = this.clipping;
  112.          if(this.clipping)
  113.          {
  114.             this.clipping.reset(this.renderSessionData);
  115.          }
  116.          param3.updateBeforeRender(this.renderSessionData);
  117.          this.projectionPipeline.project(this.renderSessionData);
  118.          if(hasEventListener(RendererEvent.PROJECTION_DONE))
  119.          {
  120.             dispatchEvent(this.projectionDoneEvent);
  121.          }
  122.          this.doRender(this.renderSessionData,null);
  123.          if(hasEventListener(RendererEvent.RENDER_DONE))
  124.          {
  125.             dispatchEvent(this.renderDoneEvent);
  126.          }
  127.          return this.renderSessionData.renderStatistics;
  128.       }
  129.       
  130.       public function hitTestPoint2D(param1:Point, param2:Viewport3D) : RenderHitData
  131.       {
  132.          return param2.hitTestPoint2D(param1);
  133.       }
  134.       
  135.       override public function removeFromRenderList(param1:IRenderListItem) : int
  136.       {
  137.          return this.renderList.splice(this.renderList.indexOf(param1),1);
  138.       }
  139.       
  140.       override public function addToRenderList(param1:RenderableListItem) : int
  141.       {
  142.          return this.renderList.push(param1);
  143.       }
  144.       
  145.       private function getLayerObjects(param1:Array) : Array
  146.       {
  147.          var _loc3_:ViewportLayer = null;
  148.          var _loc2_:Array = new Array();
  149.          for each(_loc3_ in param1)
  150.          {
  151.             _loc2_ = _loc2_.concat(_loc3_.getLayerObjects());
  152.          }
  153.          return _loc2_;
  154.       }
  155.       
  156.       public function destroy() : void
  157.       {
  158.          this.renderDoneEvent = null;
  159.          this.projectionDoneEvent = null;
  160.          this.projectionPipeline = null;
  161.          this.sorter = null;
  162.          this.filter = null;
  163.          this.renderStatistics = null;
  164.          this.renderList = null;
  165.          this.renderSessionData.destroy();
  166.          this.renderSessionData = null;
  167.          this.cleanRHD = null;
  168.          this.stopWatch = null;
  169.          this.clipping = null;
  170.       }
  171.       
  172.       public function renderLayers(param1:SceneObject3D, param2:CameraObject3D, param3:Viewport3D, param4:Array = null) : RenderStatistics
  173.       {
  174.          this.renderSessionData.scene = param1;
  175.          this.renderSessionData.camera = param2;
  176.          this.renderSessionData.viewPort = param3;
  177.          this.renderSessionData.container = param3.containerSprite;
  178.          this.renderSessionData.triangleCuller = param3.triangleCuller;
  179.          this.renderSessionData.particleCuller = param3.particleCuller;
  180.          this.renderSessionData.renderObjects = this.getLayerObjects(param4);
  181.          this.renderSessionData.renderLayers = param4;
  182.          this.renderSessionData.renderStatistics.clear();
  183.          this.renderSessionData.clipping = this.clipping;
  184.          param3.updateBeforeRender(this.renderSessionData);
  185.          this.projectionPipeline.project(this.renderSessionData);
  186.          if(hasEventListener(RendererEvent.PROJECTION_DONE))
  187.          {
  188.             dispatchEvent(this.projectionDoneEvent);
  189.          }
  190.          this.doRender(this.renderSessionData);
  191.          if(hasEventListener(RendererEvent.RENDER_DONE))
  192.          {
  193.             dispatchEvent(this.renderDoneEvent);
  194.          }
  195.          return this.renderSessionData.renderStatistics;
  196.       }
  197.    }
  198. }
  199.  
  200.