Mercurial > hg > dmlib
view edview.cpp @ 400:f44a89a25c97
Fix waveform display from going over buffer limit.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Fri, 19 Oct 2012 15:56:59 +0300 |
parents | 8660c6005032 |
children | d34922e6a244 |
line wrap: on
line source
#include "edview.h" #include <QtGui> GLDemoView::GLDemoView(QWidget *parent) : QGLWidget(QGLFormat(QGL::SampleBuffers|QGL::AlphaChannel), parent) { makeCurrent(); if (QGLFramebufferObject::hasOpenGLFramebufferBlit()) { QGLFramebufferObjectFormat format; format.setSamples(4); format.setAttachment(QGLFramebufferObject::CombinedDepthStencil); // render_fbo = new QGLFramebufferObject(512, 512, format); // texture_fbo = new QGLFramebufferObject(512, 512); } else { // render_fbo = new QGLFramebufferObject(1024, 1024); // texture_fbo = render_fbo; } setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } GLDemoView::~GLDemoView() { } QSize GLDemoView::minimumSizeHint() const { return QSize(320, 240); } QSize GLDemoView::sizeHint() const { return QSize(640, 480); } void GLDemoView::setEngineData(DMEngineData *mengine) { engine = mengine; } void GLDemoView::render(int frameTime) { if (engine != NULL) { engine->frameTime = frameTime; if (engine->demoRender != NULL) { engine->demoRender(engine); } else { dmExecuteTimeline(engine->ptl, engine->screen, engineGetTick(engine)); } engine->frameCount++; } } void GLDemoView::paintEvent(QPaintEvent *) { // save the GL state set for QPainter saveGLState(); // restore the GL state that QPainter expects restoreGLState(); } void GLDemoView::saveGLState() { glPushAttrib(GL_ALL_ATTRIB_BITS); glMatrixMode(GL_PROJECTION); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); } void GLDemoView::restoreGLState() { glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glPopAttrib(); } SWDemoView::SWDemoView(QWidget *parent) : GLDemoView(parent) { img = NULL; } SWDemoView::~SWDemoView() { delete img; } void SWDemoView::setEngineData(DMEngineData *mengine) { engine = mengine; delete img; img = new QImage((const uchar *)mengine->screen->pixels, mengine->screen->w, mengine->screen->h, mengine->screen->pitch, QImage::Format_RGB32); } void SWDemoView::paintEvent(QPaintEvent *) { if (img != NULL) { QPainter painter(this); painter.drawImage(QPoint(0, 0), *img); } } void SWDemoView::render(int frameTime) { if (SDL_MUSTLOCK(engine->screen) != 0 && SDL_LockSurface(engine->screen) != 0) return; GLDemoView::render(frameTime); if (SDL_MUSTLOCK(engine->screen) != 0) SDL_UnlockSurface(engine->screen); update(); }