- // helper actor to create a off-screen image using shader effect
- mEmptyImage = ImageActor::New( placeHolder );
- mEmptyImage.SetRelayoutEnabled( false );
- mEmptyImage.SetSize(Stage::GetCurrent().GetSize());
- mEmptyImage.SetParentOrigin( ParentOrigin::CENTER );
- mEmptyImage.SetAnchorPoint( AnchorPoint::CENTER );
- mFullImageCreator = FullAreaImageCreator::New();
- mEmptyImage.SetShaderEffect( mFullImageCreator );
- Stage::GetCurrent().Add(mEmptyImage);
-
- // set up off-screen render task
- RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList();
- mOffScreenTask = taskList.CreateTask();
- mOffScreenTask.SetSourceActor(mEmptyImage);
- mOffScreenTask.SetExclusive(true);
- mOffScreenBuffer[0] = FrameBufferImage::New(mViewAreaSize.x, mViewAreaSize.y);
- mOffScreenBuffer[1] = FrameBufferImage::New(mViewAreaSize.x, mViewAreaSize.y);
- mOffScreenTask.SetTargetFrameBuffer(mOffScreenBuffer[mBufferIndex]);
- mOffScreenTask.SetRefreshRate(RenderTask::REFRESH_ONCE);
+ for( ActorArray::iterator it = mCurrentTiles.begin(); it != mCurrentTiles.end(); ++it )
+ {
+ it->SetProperty( Actor::Property::SIZE_WIDTH, mTileSize.x );
+ it->SetProperty( Actor::Property::SIZE_HEIGHT, mTileSize.y );
+ }
+ for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it )
+ {
+ it->SetProperty( Actor::Property::SIZE_WIDTH, mTileSize.x );
+ it->SetProperty( Actor::Property::SIZE_HEIGHT, mTileSize.y );
+ }
+}
+
+void CubeTransitionEffect::Initialize()
+{
+ Self().RegisterProperty( "uTextureRect", Vector4( 0.0f, 0.0f, 1.0f, 1.0f ) );
+
+ mBoxType.Resize(mColumns * mRows);
+
+ //create the box parents
+ mBoxRoot = Actor::New();
+ mBoxRoot.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mBoxRoot.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+
+ mCurrentTiles.clear();
+ mTargetTiles.clear();
+
+ mCurrentTiles.reserve( mColumns * mRows );
+ mTargetTiles.reserve( mColumns * mRows );
+
+ Vector2 gridSizeInv( 1.0f / mColumns, 1.0f / mRows );
+ Vector3 offset( 0.5f * gridSizeInv.x, 0.5f * gridSizeInv.y, 0.0f );
+
+ Vector3 anchor;
+ for( unsigned int y = 0; y < mRows; ++y, anchor.y += 1.0f / mRows )
+ {
+ anchor.x = 0.0f;
+ for( unsigned int x = 0; x <mColumns; ++x, anchor.x += 1.0f / mColumns )
+ {
+ Vector4 textureRect( anchor.x, anchor.y, anchor.x + gridSizeInv.x, anchor.y + gridSizeInv.y );
+
+ Actor currentTile = CreateTile( textureRect );
+ currentTile.SetProperty( Actor::Property::COLOR, FULL_BRIGHTNESS );
+ currentTile.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mCurrentTiles.push_back( currentTile );
+
+ Actor targetTile = CreateTile( textureRect );
+ targetTile.SetProperty( Actor::Property::COLOR, HALF_BRIGHTNESS );
+ mTargetTiles.push_back( targetTile );
+
+ Actor box = Actor::New();
+ box.SetProperty( Actor::Property::PARENT_ORIGIN, anchor + offset );
+ box.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
+
+ box.Add( currentTile );
+ box.Add( targetTile );
+
+ mBoxRoot.Add( box );
+
+ mBoxes.push_back( box );
+ }
+ }