Maybe someone has achieved this already and could even provide some kind of minimal example?
Thanks :)
I know I could do that by hand but I think GCaneraControler should be able to do it for me. However all my approaches result into a
"Sampler 0 binds a texture that is also bound for render to texture" error (3604)
Build c8246234d8631dcba680df86f3507402
Version 1.1
Date 2015-05-10 14:29:03
I thought it would work like this
var renderTex = GTextureManager.createRenderTexture(...);
genome.onPreRender.add(function(){
cameraControler.renderTargent = renderTex;
cameraControler.render();
cameraControler.renderTargent = null;
}
But it seems I must trigger the Context to render first and I don't see how. I appended a minimal example here.
//Full source
package
{
import com.genome2d.components.GCameraController;
import com.genome2d.components.renderable.GSprite;
import com.genome2d.context.GCamera;
import com.genome2d.context.GContextConfig;
import com.genome2d.Genome2D;
import com.genome2d.node.GNode;
import com.genome2d.textures.GTexture;
import com.genome2d.textures.GTextureManager;
import com.luketramps.shells.engine.data.PointVX;
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
/**
* ...
* @author Lukas Damian Opacki
*/
[SWF(width="800",height="800",frameRate="60")]
public class TestGenome2DRenderTextureMinimal extends MovieClip
{
private var genome:Genome2D;
private var camNode:GNode;
public function TestGenome2DRenderTextureMinimal()
{
haxe.initSwc (this);
var genomeConfig:GContextConfig = new GContextConfig (stage);
genomeConfig.enableDepthAndStencil = true;
genome = Genome2D.getInstance ();
genome.onInitialized.addOnce (onGenome2dReady);
genome.init (genomeConfig);
}
private function onGenome2dReady():void
{
addSecondaryCam ();
addTestAnimation ();
addRenderTexture ();
}
private function addSecondaryCam():void
{
camNode = GNode.createWithComponent (GCameraController, "renderTexCameraNode").node;
}
// Render and display renderTexture.
private function addRenderTexture():void
{
var renderTex:GTexture= GTextureManager.createRenderTexture ("renderTexture", 500, 500);
var camCtrl:GCameraController = camNode.getComponent (GCameraController);
// Render each frame of sprite animation into renderTexture.
genome.onPreRender.add (function():void
{
camCtrl.renderTarget = renderTex;
camCtrl.render ();
camCtrl.renderTarget = null;
});
// Display renderTexture.
var renderTexSprite:GSprite = GNode.createWithComponent (GSprite);
renderTexSprite.texture = renderTex;
genome.root.addChild (renderTexSprite.node);
// Move renderable to distinguish it
stage.addEventListener (Event.ENTER_FRAME, function(e:*):void
{
renderTexSprite.node.x = stage.mouseX;
renderTexSprite.node.y = stage.mouseY;
});
}
// Adds a mvoing sprite that should be captured onto a renderTexture.
private var sprite:GSprite;
private var spritePos:Point;
private var spriteSpeed:Number;
private var spriteTravelDistance:Number = 100;
private function addTestAnimation():void
{
sprite = GNode.createWithComponent (GSprite);
sprite.texture = GTextureManager.createTexture ("greenTexture", new BitmapData (32, 32, false, 0x00ff00));
spritePos = new Point (200, 200);
sprite.node.x = spritePos.x;
sprite.node.y = spritePos.y;
camNode.addChild (sprite.node);
stage.addEventListener (Event.ENTER_FRAME, animateSprite);
}
private function animateSprite(e:Event):void
{
if (sprite.node.x <= spritePos.x)
spriteSpeed = 5;
else if (sprite.node.x >= spritePos.x + spriteTravelDistance)
spriteSpeed = -5;
sprite.node.x += spriteSpeed;
}
}
}