void SpriteTestApp::setup() { addAssetDirectory( getAssetPath("") / ".." / ".." / "shared_assets" ); mSpriteSheet = SpriteSheet::load( getAssetPath("sprite_sheet.json") ); auto sprites = mSpriteSheet->getSpriteNames(); for( const string &name : sprites ) { // hold for equivalent of 2 frames at 24fps mSpriteAnimation.addFrame( mSpriteSheet->getSpriteData(name), 2.0f / 24.0f ); } mSpriteAnimation.setFrameRate( 1.0f ); Vec2f left_center = Vec2f{ 0.25f, 0.5f } * Vec2f{ getWindowSize() }; mSpriteAnimation.getLocus().setLoc( left_center ); mSprite = mSpriteSheet->getSprite("wood_cracked"); mSprite.getLocus().setLoc( left_center + Vec2f{ 0, getWindowHeight() * 0.25f } ); mSprite.setLayer( 5 ); // mSimpleRenderer.add( &mSpriteAnimation ); mSimpleRenderer.add( &mSprite ); // mRenderer2dStrip.add( &mSprite ); mLastUpdate = getElapsedSeconds(); // sort by layer mSimpleRenderer.sort(); mRenderer2dStrip.sort(); }
void RendererTestApp::setup() { mRenderFunctions = { { "Batch 2d", [=](){ mRenderer2dStrip.update(); mRenderer2dStrip.render(); } }, { "VBO 2d", [=](){ mRenderer2dStripVbo.update(); mRenderer2dStripVbo.render(); } }, { "Simple", [=](){ mSimpleRenderer.render(); } }, { "Batch 2d (no updates)", [=](){ mRenderer2dStrip.render(); } }, { "VBO 2d (no updates)", [=](){ mRenderer2dStripVbo.render(); } }, }; mRenderFn = mRenderFunctions.begin(); gl::enableVerticalSync(); Rand r; for( auto &box : mBoxes ) { box.setColor( ColorA{ CM_HSV, r.nextFloat( 1.0f ), 0.9f, 0.9f, 1.0f } ); box.setPos( Vec2f{ r.nextFloat(getWindowWidth()), r.nextFloat(getWindowHeight()) } ); box.setRotation( r.nextFloat( M_PI * 2 ) ); mRenderer2dStrip.add( &box ); mSimpleRenderer.add( &box ); mRenderer2dStripVbo.add( &box ); } // We perform the cast since we know what type of things we stored in each renderer // A type-safe way could be to assign y to each objects layer and then sort by layer Vec2f center = getWindowCenter(); auto vortex_simple = [center]( const SimpleRenderer::Renderable *lhs, const SimpleRenderer::Renderable *rhs ) { return static_cast<const Box*>( lhs )->getPos().distance(center) < static_cast<const Box*>( rhs )->getPos().distance(center); }; auto vortex_triangle = [center]( const BatchRenderer2d::Renderable *lhs, const BatchRenderer2d::Renderable *rhs ) { return static_cast<const Box*>( lhs )->getPos().distance(center) < static_cast<const Box*>( rhs )->getPos().distance(center); }; mSimpleRenderer.sort( vortex_simple ); mRenderer2dStrip.sort( vortex_triangle ); mRenderer2dStripVbo.sort( vortex_triangle ); getWindow()->getSignalKeyUp().connect( [this](KeyEvent &event){ if( event.getCode() == KeyEvent::KEY_SPACE ){ swapRenderer(); } } ); getWindow()->getSignalTouchesEnded().connect( [this](TouchEvent &event){ swapRenderer(); } ); }