/* Return the parameters of a drawable that are needed by the EGL layer */ static WSEGLError wseglGetDrawableParameters (WSEGLDrawableHandle _drawable, WSEGLDrawableParams *sourceParams, WSEGLDrawableParams *renderParams) { struct wl_egl_window *eglwindow = (struct wl_egl_window *) _drawable; PVR2DMEMINFO *source, *render; if (eglwindow->header.type == WWSEGL_DRAWABLE_TYPE_PIXMAP) { struct wl_egl_pixmap *pixmap = (struct wl_egl_pixmap *) _drawable; sourceParams->ui32Width = pixmap->width; sourceParams->ui32Height = pixmap->height; sourceParams->ui32Stride = pixmap->stride / 4; sourceParams->ePixelFormat = WSEGL_PIXELFORMAT_8888; sourceParams->pvLinearAddress = pixmap->pvrmem->pBase; sourceParams->ui32HWAddress = pixmap->pvrmem->ui32DevAddr; sourceParams->hPrivateData = pixmap->pvrmem->hPrivateData; renderParams->ui32Width = pixmap->width; renderParams->ui32Height = pixmap->height; renderParams->ui32Stride = pixmap->stride / 4; renderParams->ePixelFormat = WSEGL_PIXELFORMAT_8888; renderParams->pvLinearAddress = pixmap->pvrmem->pBase; renderParams->ui32HWAddress = pixmap->pvrmem->ui32DevAddr; renderParams->hPrivateData = pixmap->pvrmem->hPrivateData; return WSEGL_SUCCESS; } if (!wseglGetBuffers(eglwindow, &source, &render)) { return WSEGL_BAD_DRAWABLE; } sourceParams->ui32Width = eglwindow->width; sourceParams->ui32Height = eglwindow->height; sourceParams->ui32Stride = eglwindow->stridePixels; sourceParams->ePixelFormat = eglwindow->format; sourceParams->pvLinearAddress = source->pBase; sourceParams->ui32HWAddress = source->ui32DevAddr; sourceParams->hPrivateData = source->hPrivateData; renderParams->ui32Width = eglwindow->width; renderParams->ui32Height = eglwindow->height; renderParams->ui32Stride = eglwindow->stridePixels; renderParams->ePixelFormat = eglwindow->format; renderParams->pvLinearAddress = render->pBase; renderParams->ui32HWAddress = render->ui32DevAddr; renderParams->hPrivateData = render->hPrivateData; return WSEGL_SUCCESS; }
/* Return the parameters of a drawable that are needed by the EGL layer */ static WSEGLError wseglGetDrawableParameters (WSEGLDrawableHandle _drawable, WSEGLDrawableParams *sourceParams, WSEGLDrawableParams *renderParams) { /* * [22:26:17] <Stskeeps> note: you'll need this in future: * [22:26:19] <Stskeeps> if static WSEGLError wseglGetDrawableParameters * [22:26:19] <Stskeeps> 651 * [22:26:33] <Stskeeps> returns return WSEGL_BAD_DRAWABLE; * [22:26:38] <Stskeeps> it'll re-create the drawable * [22:26:50] <Stskeeps> do this when window format, height, width has changed */ struct wl_egl_window *eglwindow = (struct wl_egl_window *) _drawable; PVR2DMEMINFO *source, *render; if (eglwindow->header.type == WWSEGL_DRAWABLE_TYPE_PIXMAP) { struct wl_egl_pixmap *pixmap = (struct wl_egl_pixmap *) _drawable; int strideDiv = 0; switch (pixmap->format) { case WSEGL_PIXELFORMAT_565: strideDiv = 2; break; case WSEGL_PIXELFORMAT_8888: strideDiv = 4; break; } assert(strideDiv != 0); sourceParams->ui32Width = pixmap->width; sourceParams->ui32Height = pixmap->height; sourceParams->ui32Stride = pixmap->stride / strideDiv; sourceParams->ePixelFormat = pixmap->format; sourceParams->pvLinearAddress = pixmap->pvrmem->pBase; sourceParams->ui32HWAddress = pixmap->pvrmem->ui32DevAddr; sourceParams->hPrivateData = pixmap->pvrmem->hPrivateData; renderParams->ui32Width = pixmap->width; renderParams->ui32Height = pixmap->height; renderParams->ui32Stride = pixmap->stride / strideDiv; renderParams->ePixelFormat = pixmap->format; renderParams->pvLinearAddress = pixmap->pvrmem->pBase; renderParams->ui32HWAddress = pixmap->pvrmem->ui32DevAddr; renderParams->hPrivateData = pixmap->pvrmem->hPrivateData; return WSEGL_SUCCESS; } if (!wseglGetBuffers(eglwindow, &source, &render)) { return WSEGL_BAD_DRAWABLE; } sourceParams->ui32Width = eglwindow->width; sourceParams->ui32Height = eglwindow->height; sourceParams->ui32Stride = eglwindow->stridePixels; sourceParams->ePixelFormat = eglwindow->format; sourceParams->pvLinearAddress = source->pBase; sourceParams->ui32HWAddress = source->ui32DevAddr; sourceParams->hPrivateData = source->hPrivateData; renderParams->ui32Width = eglwindow->width; renderParams->ui32Height = eglwindow->height; renderParams->ui32Stride = eglwindow->stridePixels; renderParams->ePixelFormat = eglwindow->format; renderParams->pvLinearAddress = render->pBase; renderParams->ui32HWAddress = render->ui32DevAddr; renderParams->hPrivateData = render->hPrivateData; return WSEGL_SUCCESS; }