diff -r 19ce5231ffe4 -r 6356de74619b egl/sfopenvg/symbian/riEGLOS.cpp --- a/egl/sfopenvg/symbian/riEGLOS.cpp Fri Sep 24 16:48:05 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/*------------------------------------------------------------------------ - * - * EGL 1.3 - * ------- - * - * Copyright (c) 2007 The Khronos Group Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and /or associated documentation files - * (the "Materials "), to deal in the Materials without restriction, - * including without limitation the rights to use, copy, modify, merge, - * publish, distribute, sublicense, and/or sell copies of the Materials, - * and to permit persons to whom the Materials are furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included - * in all copies or substantial portions of the Materials. - * - * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR - * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR - * THE USE OR OTHER DEALINGS IN THE MATERIALS. - * - *//** - * \file - * \brief Generic OS EGL functionality (not thread safe, no window rendering) - * \note - *//*-------------------------------------------------------------------*/ - -#include "egl.h" -#include "riImage.h" -#include "riDefs.h" - -#include -#include -#include - -namespace OpenVGRI -{ -//internal fucntions -VGImageFormat MapSymbianDisplayModeToVG(TDisplayMode aMode); -void ReadPixelsToCFbsBitmap(CFbsBitmap& aBitmap, TUint aW, TUint aH); - - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -void* OSGetCurrentThreadID(void) -{ - int g_threadid = RThread().Id(); - return (void*)g_threadid; -} - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -void OSDeinitMutex(void) -{ -} - -void OSAcquireMutex(void) -{ -} - -void OSReleaseMutex(void) -{ -} - -/*-------------------------------------------------------------------*//*! -* \brief -* \param -* \return -* \note -*//*-------------------------------------------------------------------*/ - -struct OSWindowContext -{ - //RDrawableWindow* iDrawWindow; - TNativeWindowType iNativeWindowType; - -}; - -void* OSCreateWindowContext(EGLNativeWindowType window) -{ - OSWindowContext* ctx = NULL; - try - { - ctx = RI_NEW(OSWindowContext, ()); - } - catch(std::bad_alloc) - { - return NULL; - } - //ctx->iNativeWindowType = (TNativeWindowType*)window; - - RDrawableWindow* drawbleWindow = (RDrawableWindow*)window; - ctx->iNativeWindowType.iSize.iHeight = drawbleWindow->Size().iHeight; - ctx->iNativeWindowType.iSize.iWidth = drawbleWindow->Size().iWidth; - - return ctx; -} - -void OSDestroyWindowContext(void* context) -{ - OSWindowContext* ctx = (OSWindowContext*)context; - if(ctx) - { - RI_DELETE(ctx); - } -} - -bool OSIsWindow(const void* context) -{ - OSWindowContext* ctx = (OSWindowContext*)context; - if(ctx) - { - return true; - } - return false; -} - -void OSGetWindowSize(const void* context, int& width, int& height) -{ - OSWindowContext* ctx = (OSWindowContext*)context; - - - if(ctx) - { - width=ctx->iNativeWindowType.iSize.iWidth; - height=ctx->iNativeWindowType.iSize.iHeight; - } - else - { - width = 0; - height = 0; - } -} - - -EGLDisplay OSGetDisplay(EGLNativeDisplayType display_id) -{ - RI_UNREF(display_id); - return (EGLDisplay)1; //support only a single display -} - - -void OSBlitToWindow(void* context, const Drawable* drawable) -{ - TUint w = drawable->getWidth(); - TUint h = drawable->getHeight(); - - OSWindowContext* ctx = (OSWindowContext*)context; - //blit if either of iBitmap or iMaskBitmap exist - if(ctx && ctx->iNativeWindowType.iBitmap) - { - - //these should be same as bitmap - if(ctx->iNativeWindowType.iBitmap) - { - CFbsBitmap* bitmap = ctx->iNativeWindowType.iBitmap; - ReadPixelsToCFbsBitmap(*bitmap, w, h); - } - } -} - -void ReadPixelsToCFbsBitmap(CFbsBitmap& aBitmap, TUint aW, TUint aH) - { - TSize sz = aBitmap.SizeInPixels(); - RI_ASSERT(aW==sz.iWidth); - RI_ASSERT(aH==sz.iHeight); - - VGImageFormat f = MapSymbianDisplayModeToVG(aBitmap.DisplayMode()); - - TInt bitmapDataStride = aBitmap.DataStride(); - - //copy from source OpenVG model to target(CFbsBitmap) buffer - aBitmap.BeginDataAccess(); - //openvg returns pixels in cartesian coordinates (y+) where as CFbsBitmap - //wants screen coordinates (y-) so we read pixels out starting at top left corner - TUint8* ptarget = (TUint8*)aBitmap.DataAddress()+(aH-1)*bitmapDataStride; - - #ifdef BUILD_WITH_PRIVATE_OPENVG - // do_vgReadPixels(ptarget, -bitmapDataStride, f, 0, 0, aW, aH); //added by Jose.Need to remove the comments - #else - vgReadPixels(ptarget, -bitmapDataStride, f, 0, 0, aW, aH); - #endif - - aBitmap.EndDataAccess(EFalse); - } - -VGImageFormat MapSymbianDisplayModeToVG(TDisplayMode aMode) - { - VGImageFormat f; - switch(aMode) - { - case EColor16MA: - f = VG_sARGB_8888; - break; - case EColor16MU: - f = VG_sRGBX_8888; - break; - case EColor64K: - f = VG_sRGB_565; - break; - case EGray256: - f = VG_A_8; - break; - case EGray2: - f = VG_BW_1; - break; - default: - RI_ASSERT(0); - } - return f; - } -EGLBoolean OSGetNativePixmapInfo(NativePixmapType pixmap, int* width, int* height, int* stride, VGImageFormat* format, int** data) -{ - TSize size = ((CFbsBitmap*)pixmap)->SizeInPixels(); - *width = size.iWidth; - *height = size.iHeight; - *stride = ((CFbsBitmap*)pixmap)->DataStride(); - - *data = (int*)(((CFbsBitmap*)pixmap)->DataAddress()); - TDisplayMode mode = ((CFbsBitmap*)pixmap)->DisplayMode(); - switch(mode) - { - case EColor16MA: - *format = VG_sRGBA_8888; - break; - case EColor16MU: - *format = VG_sRGBX_8888; - break; - case EColor64K: - *format = VG_sRGB_565; - break; - case EGray256: - *format = VG_A_8; - break; - case EGray2: - *format = VG_BW_1; - break; - default: - RI_ASSERT(0); - } - return EGL_TRUE; -} -} //namespace OpenVGRI