void DisplayOzone::drawBuffer(Buffer *buffer) { if (!mDrawing) { // get buffer on which to draw window if (mUnused) { mDrawing = mUnused; mUnused = nullptr; } else { mDrawing = new Buffer(this, GBM_BO_USE_RENDERING | GBM_BO_USE_SCANOUT, GBM_FORMAT_ARGB8888, DRM_FORMAT_ARGB8888, DRM_FORMAT_XRGB8888, true, true); // XXX shouldn't need stencil if (!mDrawing || !mDrawing->initialize(mWidth, mHeight)) { return; } } StateManagerGL *sm = getRenderer()->getStateManager(); sm->bindFramebuffer(GL_DRAW_FRAMEBUFFER, mDrawing->getGLFB()); sm->setClearColor(gl::ColorF(0, 0, 0, 1)); sm->setClearDepth(1); sm->setScissorTestEnabled(false); sm->setColorMask(true, true, true, true); sm->setDepthMask(true); mFunctionsGL->clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } drawWithTexture(buffer); presentScreen(); }
void ScreenManager::loop() { // Do things common to all screens bool backButton = bit_is_set(PIND, 7); bool homeButton = bit_is_set(PINB, 2); if(backButton) { if(history_idx > 1) { LGUIScreen *screen = history[history_idx-2]; // -1 is ourself history_idx-=2; // Pop from the stack presentScreen(*screen); } } else if( homeButton && (currentScreen != &homeScreen) ) { presentScreen(homeScreen); } else { if(currentScreen) currentScreen->loop(); } }