void paintFramebuffer(QPainter *p) { if (!(lcd.control & 0x800)) { p->fillRect(p->window(), Qt::black); p->setPen(Qt::white); p->drawText(p->window(), Qt::AlignCenter, QObject::tr("LCD OFF")); } else { QImage img = renderFramebuffer(); p->drawImage(p->window(), img); } }
void MainWindow::screenshot() { QImage image = renderFramebuffer(); QString filename = QFileDialog::getSaveFileName(this, tr("Save Screenshot"), QString(), "PNG images (*.png)"); if(filename.isNull()) return; if(!image.save(filename, "PNG")) QMessageBox::critical(this, tr("Screenshot failed"), tr("Failed to save screenshot!")); }
void display() { glBindBuffer(GL_UNIFORM_BUFFER, BufferName[buffer::TRANSFORM]); glm::mat4* Pointer = (glm::mat4*)glMapBufferRange( GL_UNIFORM_BUFFER, 0, sizeof(glm::mat4) * 3, GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT); // Update of the MVP matrix for the render pass { glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.01f, 5.0f); glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Window.TranlationCurrent.y + 3.0f)); glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Window.RotationCurrent.y - 60.f, glm::vec3(1.f, 0.f, 0.f)); glm::mat4 View = glm::rotate(ViewRotateX, Window.RotationCurrent.x + 30.f, glm::vec3(0.f, 0.f, 1.f)); glm::mat4 Model = glm::mat4(1.0f); *(Pointer + 0) = Projection * View * Model; } // Update of the MVP matrix for the depth pass { glm::mat4 Projection = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f,-4.0f, 8.0f); glm::mat4 View = glm::lookAt(glm::vec3(0.5, 1.0, 2.0), glm::vec3(0), glm::vec3(0, 0, 1)); glm::mat4 Model = glm::mat4(1.0f); glm::mat4 DepthMVP = Projection * View * Model; *(Pointer + 1) = DepthMVP; glm::mat4 BiasMatrix( 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 1.0); *(Pointer + 2) = BiasMatrix * DepthMVP; } glUnmapBuffer(GL_UNIFORM_BUFFER); glBindBufferBase(GL_UNIFORM_BUFFER, glf::semantic::uniform::TRANSFORM0, BufferName[buffer::TRANSFORM]); renderShadow(); renderFramebuffer(); //renderSplash(); glf::swapBuffers(); }
static bool gif_write_frame(GifWriter *frameWriter, unsigned int delay) { return GifWriteFrame(frameWriter, renderFramebuffer(&lcd).convertToFormat(QImage::Format_RGBA8888).bits(), 320, 240, delay); }