void WelcomeScene::OnButtonClicked(int id) { SceneManager *mgr = SceneManager::GetInstance(); if (id == mPlayButtonId) { mgr->RequestNewScene(new PlayScene()); } else if (id == mStoryButtonId) { mgr->RequestNewScene((new DialogScene())->SetText(BLURB_STORY)->SetSingleButton(S_OK, DialogScene::ACTION_RETURN)); } else if (id == mAboutButtonId) { mgr->RequestNewScene((new DialogScene())->SetText(BLURB_ABOUT)->SetSingleButton(S_OK, DialogScene::ACTION_RETURN)); } }
void NativeEngine::DoFrame() { // prepare to render (create context, surfaces, etc, if needed) if (!PrepareToRender()) { // not ready VLOGD("NativeEngine: preparation to render failed."); return; } SceneManager *mgr = SceneManager::GetInstance(); // how big is the surface? We query every frame because it's cheap, and some // strange devices out there change the surface size without calling any callbacks... int width, height; eglQuerySurface(mEglDisplay, mEglSurface, EGL_WIDTH, &width); eglQuerySurface(mEglDisplay, mEglSurface, EGL_HEIGHT, &height); if (width != mSurfWidth || height != mSurfHeight) { // notify scene manager that the surface has changed size LOGD("NativeEngine: surface changed size %dx%d --> %dx%d", mSurfWidth, mSurfHeight, width, height); mSurfWidth = width; mSurfHeight = height; mgr->SetScreenSize(mSurfWidth, mSurfHeight); glViewport(0, 0, mSurfWidth, mSurfHeight); } // if this is the first frame, install the welcome scene if (mIsFirstFrame) { mIsFirstFrame = false; mgr->RequestNewScene(new WelcomeScene()); } // render! mgr->DoFrame(); // swap buffers if (EGL_FALSE == eglSwapBuffers(mEglDisplay, mEglSurface)) { // failed to swap buffers... LOGW("NativeEngine: eglSwapBuffers failed, EGL error %d", eglGetError()); HandleEglError(eglGetError()); } // print out GL errors, if any GLenum e; static int errorsPrinted = 0; while ((e = glGetError()) != GL_NO_ERROR) { if (errorsPrinted < MAX_GL_ERRORS) { _log_opengl_error(e); ++errorsPrinted; if (errorsPrinted >= MAX_GL_ERRORS) { LOGE("*** NativeEngine: TOO MANY OPENGL ERRORS. NO LONGER PRINTING."); } } } }