void QVGEGLWindowSurfaceDirect::beginPaint(QWidget *widget) { QEglContext *context = ensureContext(widget); if (context) { context->makeCurrent(windowSurface); isPaintingActive = true; } }
void QVGEGLWindowSurfaceVGImage::beginPaint(QWidget *widget) { QEglContext *context = ensureContext(widget); if (context) { if (recreateBackBuffer || backBufferSurface == EGL_NO_SURFACE) { // Create a VGImage object to act as the back buffer // for this window. We have to create the VGImage with a // current context, so activate the main surface for the window. context->makeCurrent(mainSurface()); recreateBackBuffer = false; if (backBufferSurface != EGL_NO_SURFACE) { eglDestroySurface(QEgl::display(), backBufferSurface); backBufferSurface = EGL_NO_SURFACE; } if (backBuffer != VG_INVALID_HANDLE) { vgDestroyImage(backBuffer); } VGImageFormat format = qt_vg_config_to_vg_format(context); backBuffer = vgCreateImage (format, size.width(), size.height(), VG_IMAGE_QUALITY_FASTER); if (backBuffer != VG_INVALID_HANDLE) { // Create an EGL surface for rendering into the VGImage. backBufferSurface = eglCreatePbufferFromClientBuffer (QEgl::display(), EGL_OPENVG_IMAGE, (EGLClientBuffer)(backBuffer), context->config(), NULL); if (backBufferSurface == EGL_NO_SURFACE) { vgDestroyImage(backBuffer); backBuffer = VG_INVALID_HANDLE; } } } if (backBufferSurface != EGL_NO_SURFACE) context->makeCurrent(backBufferSurface); else context->makeCurrent(mainSurface()); isPaintingActive = true; } }
bool QVGEGLWindowSurfaceDirect::scroll(QWidget *widget, const QRegion& area, int dx, int dy) { #ifdef QVG_BUFFER_SCROLLING QEglContext *context = ensureContext(widget); if (context) { context->makeCurrent(windowSurface); QRect scrollRect = area.boundingRect(); int sx = scrollRect.x(); int sy = size.height() - scrollRect.y() - scrollRect.height(); vgSeti(VG_SCISSORING, VG_FALSE); vgCopyPixels(sx + dx, sy - dy, sx, sy, scrollRect.width(), scrollRect.height()); context->lazyDoneCurrent(); return true; } #endif return false; }
void QVGEGLWindowSurfaceDirect::endPaint (QWidget *widget, const QRegion& region, QImage *image) { Q_UNUSED(region); Q_UNUSED(image); QEglContext *context = ensureContext(widget); if (context) { if (needToSwap) { if (!isPaintingActive) context->makeCurrent(windowSurface); context->swapBuffers(windowSurface); context->lazyDoneCurrent(); } else if (isPaintingActive) { vgFlush(); context->lazyDoneCurrent(); } isPaintingActive = false; } }