diff -r 000000000000 -r bde4ae8d615e os/graphics/graphicsaccelaration/vgi/src/vgi.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/graphicsaccelaration/vgi/src/vgi.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ +#include "vg_vgibridge.h" +#include +#include +#include + +#define VGI_API_CALL __declspec(dllexport) + +#define VGI_GET_BRIDGE VGIBridge *bridge = vgiGetBridge(); if(!bridge) return; +#define VGI_GET_BRIDGE_RET VGIBridge *bridge = vgiGetBridge(); if(!bridge) return 0; + + +#if defined __SYMBIAN32__ + +static void vgiSetCurrentBridge( VGIBridge* bridge ) +{ + Dll::SetTls( bridge ); +} + +static VGIBridge* vgiGetCurrentBridge() +{ + return (VGIBridge*)Dll::Tls(); +} + +#elif defined WIN32 + +#include + +VGIBridge *currBridge = NULL; + +static void vgiSetCurrentBridge( VGIBridge* bridge ) +{ + currBridge = bridge; +} + +static VGIBridge* vgiGetCurrentBridge() +{ + return currBridge; +} + +#endif + +static VGIBridge* vgiGetBridge() +{ + VGIBridge *bridge = vgiGetCurrentBridge(); + if( !bridge ) + { + VGIBridgeFunc vgiVGIBridge = NULL; + + bridge = (VGIBridge *)malloc( sizeof(VGIBridge) ); + if( !bridge ) + return NULL; + + memset( bridge, 0, sizeof(VGIBridge) ); + +#if defined __SYMBIAN32__ + { + RLibrary lib; +#ifdef OPENVG_VERSION_1_1 + if( lib.Load( _L("libOpenVG_SW.dll") ) == KErrNone ) + vgiVGIBridge = (VGIBridgeFunc)lib.Lookup( 89 ); // <- 89 is a hardcoded ordinal, refer to libopenvgu.def in bwins and eabi folders +#else // OPENVG_VERSION_1_0 and OPENVG_VERSION_1_0_1 + if( lib.Load( _L("libOpenVG.dll") ) == KErrNone ) + vgiVGIBridge = (VGIBridgeFunc)lib.Lookup( 1 ); // <- 1 is a hardcoded ordinal, refer to libopenvgu.def in bwins and eabi folders +#endif + bridge->libHandle = lib; + } +#elif defined WIN32 + { + HMODULE hModule = LoadLibrary( "libOpenVG.dll" ); + if( hModule ) + vgiVGIBridge = (VGIBridgeFunc)GetProcAddress( hModule, "vgiVGIBridge" ); + } +#endif + + if( !vgiVGIBridge ) + { + free( bridge ); + return NULL; + } + + vgiVGIBridge( bridge ); + vgiSetCurrentBridge( bridge ); + } + + return bridge; +} + +VGI_API_CALL int VGIInitialize( int width, int height, VGIColorSpace colorSpace ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGIInitialize( width, height, colorSpace ); +} + +VGI_API_CALL int VGIInitializeEx( int width, int height, VGIColorSpace colorSpace, int premultiplied, int conformant ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGIInitializeEx( width, height, colorSpace, premultiplied, conformant ); +} + +VGI_API_CALL int VGICopyToTarget( VGIColorBufferFormat format, int bufferStride, void *buffer, int maskStride, void *mask, VGICopyToTargetHint hint ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGICopyToTarget( format, bufferStride, buffer, maskStride, mask, hint ); +} + +VGI_API_CALL void VGITerminate( void ) +{ + VGI_GET_BRIDGE; + + bridge->VGITerminate(); + +#if defined __SYMBIAN32__ + bridge->libHandle.Close(); +#endif + + free( bridge ); + vgiSetCurrentBridge( NULL ); +} + +VGI_API_CALL int VGIResize( int width, int height ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGIResize( width, height ); +} + +VGI_API_CALL int VGIBindToImage( VGImage image ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGIBindToImage( image ); +} + +VGI_API_CALL int VGIUnBindImage( void ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGIUnBindImage(); +} + +#ifdef __SYMBIAN32__ + +EXPORT_C TInt VGISymbianInitialize( TSize aSize, VGIColorSpace aColorSpace ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianInitialize( aSize, aColorSpace ); +} + +EXPORT_C TInt VGISymbianInitializeEx( TSize aSize, VGIColorSpace aColorSpace, TBool aPremultiplied, TBool aConformant ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianInitializeEx( aSize, aColorSpace, aPremultiplied, aConformant ); +} + +EXPORT_C TInt VGISymbianCopyToBitmap( CFbsBitmap *aBitmap, CFbsBitmap *aMaskBitmap, VGICopyToTargetHint aHint ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianCopyToBitmap( aBitmap, aMaskBitmap, aHint ); +} + +EXPORT_C void VGISymbianTerminate() +{ + VGI_GET_BRIDGE; + + bridge->VGISymbianTerminate(); + + bridge->libHandle.Close(); + + free( bridge ); + vgiSetCurrentBridge( NULL ); +} + +EXPORT_C TInt VGISymbianResize( TSize aSize ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianResize( aSize ); +} + +EXPORT_C TInt VGISymbianBindToImage( VGImage aImage ) +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianBindToImage( aImage ); +} + +EXPORT_C TInt VGISymbianUnBindImage() +{ + VGI_GET_BRIDGE_RET; + + return bridge->VGISymbianUnBindImage(); +} + +#endif