package starling_integration.example3 { import flare.basic.*; import flare.core.*; import flare.flsl.FLSLMaterial; import flash.display.*; import flash.display3D.*; import flash.events.*; import flash.geom.Point; import starling.core.*; [SWF(width = 550, height = 350, frameRate = 60)] /** * Flare3D + Starling integration. * * @author Ariel Nehmad */ public class StarlingTest extends Sprite { [Embed(source = "vaca.zf3d", mimeType = "application/octet-stream")] private var Model:Class; [Embed(source = "../../../bin/dream.flsl.compiled", mimeType = "application/octet-stream")] private var Dream:Class; private var scene:Scene3D; private var model:Pivot3D; private var starlingTop:Starling; private var target:Texture3D; private var dream:FLSLMaterial; public function StarlingTest() { scene = new Viewer3D( this ); scene.autoResize = true; scene.clearColor.setTo( 1, 1, 1 ); scene.addEventListener( Event.CONTEXT3D_CREATE, contextCreateEvent ); scene.addEventListener( Scene3D.RENDER_EVENT, renderEvent ); target = new Texture3D( new Point( 1024, 512 ) ); target.mipMode = Texture3D.MIP_NONE; target.upload( scene ); FLSLMaterial.semantics["TARGET_TEXTURE"].value = target; dream = new FLSLMaterial( "dream", new Dream ); dream.upload( scene ); model = scene.addChildFromFile( new Model ); } private function contextCreateEvent(e:Event):void { starlingTop = new Starling( StarlingTop, stage, null, stage.stage3Ds[ scene.stageIndex ] ); starlingTop.start(); } private function renderEvent(e:Event):void { // prevents the 3d scene to render. // we'll handle the render by our own. e.preventDefault(); scene.context.setRenderToTexture( target.texture, true ); scene.context.clear(); scene.render(); scene.context.setRenderToBackBuffer(); scene.drawQuadTexture( null, 0, 0, scene.viewPort.width, scene.viewPort.height, dream ); scene.endFrame(); // draw starling ui. starlingTop.nextFrame(); } } }