diff -r b72c6db6890b -r 5dc02b23752f src/openvg/qpixmapdata_vg.cpp --- a/src/openvg/qpixmapdata_vg.cpp Wed Jun 23 19:07:03 2010 +0300 +++ b/src/openvg/qpixmapdata_vg.cpp Tue Jul 06 15:10:48 2010 +0300 @@ -42,6 +42,9 @@ #include "qpixmapdata_vg_p.h" #include "qpaintengine_vg_p.h" #include +#if !defined(QT_NO_EGL) +#include +#endif #include "qvg_p.h" #include "qvgimagepool_p.h" @@ -51,8 +54,6 @@ #endif #ifdef QT_SYMBIAN_SUPPORTS_SGIMAGE #include -typedef EGLImageKHR (*pfnEglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, EGLint*); -typedef EGLBoolean (*pfnEglDestroyImageKHR)(EGLDisplay, EGLImageKHR); typedef VGImage (*pfnVgCreateEGLImageTargetKHR)(VGeglImageKHR); #endif // QT_SYMBIAN_SUPPORTS_SGIMAGE @@ -233,14 +234,6 @@ return source.paintEngine(); } -// This function works around QImage::bits() making a deep copy if the -// QImage is not const. We force it to be const and then get the bits. -// XXX: Should add a QImage::constBits() in the future to replace this. -const uchar *qt_vg_imageBits(const QImage& image) -{ - return image.bits(); -} - VGImage QVGPixmapData::toVGImage() { if (!isValid()) @@ -273,7 +266,7 @@ if (!source.isNull() && recreate) { vgImageSubData (vgImage, - qt_vg_imageBits(source), source.bytesPerLine(), + source.constBits(), source.bytesPerLine(), VG_sARGB_8888_PRE, 0, 0, w, h); } @@ -496,18 +489,16 @@ return; } - pfnEglCreateImageKHR eglCreateImageKHR = (pfnEglCreateImageKHR) eglGetProcAddress("eglCreateImageKHR"); - pfnEglDestroyImageKHR eglDestroyImageKHR = (pfnEglDestroyImageKHR) eglGetProcAddress("eglDestroyImageKHR"); pfnVgCreateEGLImageTargetKHR vgCreateEGLImageTargetKHR = (pfnVgCreateEGLImageTargetKHR) eglGetProcAddress("vgCreateEGLImageTargetKHR"); - if (eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) { + if (eglGetError() != EGL_SUCCESS || !(QEgl::hasExtension("EGL_KHR_image") || QEgl::hasExtension("EGL_KHR_image_pixmap")) || !vgCreateEGLImageTargetKHR) { cleanup(); driver.Close(); return; } const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE}; - EGLImageKHR eglImage = eglCreateImageKHR(QEglContext::display(), + EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, (EGLClientBuffer)sgImage, @@ -522,7 +513,7 @@ vgImage = vgCreateEGLImageTargetKHR(eglImage); if (vgGetError() != VG_NO_ERROR) { cleanup(); - eglDestroyImageKHR(QEglContext::display(), eglImage); + QEgl::eglDestroyImageKHR(QEgl::display(), eglImage); driver.Close(); return; } @@ -536,7 +527,7 @@ prevSize = QSize(w, h); setSerialNumber(++qt_vg_pixmap_serial); // release stuff - eglDestroyImageKHR(QEglContext::display(), eglImage); + QEgl::eglDestroyImageKHR(QEgl::display(), eglImage); driver.Close(); #endif } else if (type == QPixmapData::FbsBitmap) { @@ -614,17 +605,15 @@ return 0; } - pfnEglCreateImageKHR eglCreateImageKHR = (pfnEglCreateImageKHR) eglGetProcAddress("eglCreateImageKHR"); - pfnEglDestroyImageKHR eglDestroyImageKHR = (pfnEglDestroyImageKHR) eglGetProcAddress("eglDestroyImageKHR"); pfnVgCreateEGLImageTargetKHR vgCreateEGLImageTargetKHR = (pfnVgCreateEGLImageTargetKHR) eglGetProcAddress("vgCreateEGLImageTargetKHR"); - if (eglGetError() != EGL_SUCCESS || !eglCreateImageKHR || !eglDestroyImageKHR || !vgCreateEGLImageTargetKHR) { + if (eglGetError() != EGL_SUCCESS || !(QEgl::hasExtension("EGL_KHR_image") || QEgl::hasExtension("EGL_KHR_image_pixmap")) || !vgCreateEGLImageTargetKHR) { driver.Close(); return 0; } const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE}; - EGLImageKHR eglImage = eglCreateImageKHR(QEglContext::display(), + EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR, (EGLClientBuffer)sgImage, @@ -637,7 +626,7 @@ VGImage dstVgImage = vgCreateEGLImageTargetKHR(eglImage); if (vgGetError() != VG_NO_ERROR) { - eglDestroyImageKHR(QEglContext::display(), eglImage); + QEgl::eglDestroyImageKHR(QEgl::display(), eglImage); sgImage->Close(); driver.Close(); return 0; @@ -653,7 +642,7 @@ } // release stuff vgDestroyImage(dstVgImage); - eglDestroyImageKHR(QEglContext::display(), eglImage); + QEgl::eglDestroyImageKHR(QEgl::display(), eglImage); driver.Close(); return reinterpret_cast(sgImage); #endif @@ -663,7 +652,7 @@ if (bitmap) { if (bitmap->Create(TSize(source.width(), source.height()), EColor16MAP) == KErrNone) { - const uchar *sptr = qt_vg_imageBits(source); + const uchar *sptr = source.constBits(); bitmap->BeginDataAccess(); uchar *dptr = (uchar*)bitmap->DataAddress();