--- a/guestrendering/guestopenvg/inc/vgstate.h Thu Sep 16 12:43:44 2010 +0100
+++ b/guestrendering/guestopenvg/inc/vgstate.h Mon Sep 20 14:29:05 2010 +0100
@@ -1,639 +1,639 @@
-// Copyright (c) 2010 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:
-// Header file defining Open VG client-side state classes.
-
-#ifndef VGSTATE_H
-#define VGSTATE_H
-
-#include <EGL/egl.h>
-#include <VG/openvg.h>
-#include <e32hashtab.h>
-#include "vghwutils.h"
-
-
-
-// tracing
-#include <e32debug.h>
-#ifdef _DEBUG
- #define OPENVG_TRACE(fmt, args...) RDebug::Printf(fmt, ##args)
- #define VGPANIC_ASSERT(condition, panic) if (!(condition)) { VgPanic(panic, #panic, #condition, __FILE__, __LINE__); }
- #define VGPANIC_ASSERT_DEBUG(condition, panic) if (!(condition)) { VgPanic(panic, #panic, #condition, __FILE__, __LINE__); }
- #define VGPANIC_ALWAYS(panic) { VgPanic(panic, #panic, NULL, __FILE__, __LINE__); }
-#else
- #define OPENVG_TRACE(fmt, args...)
- #define VGPANIC_ASSERT(condition, panic) if (!(condition)) { VgPanic(panic, NULL, NULL, NULL, __LINE__); }
- #define VGPANIC_ASSERT_DEBUG(condition, panic)
- #define VGPANIC_ALWAYS(panic) { VgPanic(panic, NULL, NULL, NULL, __LINE__); }
-#endif
-
-
-// Guest Open VG panic codes
-typedef enum
- {
- EVgPanicTemp = 1, // note: for development, references should be replaced with a more specific panic
- EVgPanicNullPixmapPointer,
- EVgPanicPixmapSizeError,
- EVgPanicSingletonAlreadyInitialised,
- EVgPanicSingletonNotInitialised,
- EVgPanicNullPointer,
- EVgPanicBadLastBitsParam,
- EVgPanicBadRowLengthParam,
- EVgPanicBadRowCountParam,
- EVgPanicStrideSmallerThanRowLength, // 10
- EVgPanicNotReplyOpcode,
- EVgPanicDeleteInUseVgImageInfo,
- EVgPanicUidGeneratorZeroSeed,
- EVgPanicMissingEglInterface,
- EVgPanicNullCVgHandlePointer,
- EVgPanicWrongVgHandleType,
- EVgPanicHandleAlreadyMarkedDestroyed,
- EVgPanicUnknownVgHandleType,
- EVgPanicHostHandleIsInvalid,
- EVgPanicImageParentIsInvalid, // 20
- EVgPanicFunctionParameterIsNull,
- EVgPanicValueFromHostVgIsInvalid,
- EVgPanicHostHandleAlreadySet,
- EVgPanicParentImageAlreadyDestroyed,
- EVgPanicStateLockMutexNotHeld,
- } TVgPanic;
-
-void VgPanic(TVgPanic aPanicCode, char* aPanicName, char* aCondition, char* aFile, TInt aLine);
-
-
-// state singleton, in Writeable Static Data memory
-class XOpenVgState;
-extern XOpenVgState OpenVgState;
-
-// classes declared in this header
-class CVgHandleBase;
-class CVgImageBase;
-class CVgMaskLayerInfo;
-class CVgFontInfo;
-class CVgImageInfo;
-class CVgPaintInfo;
-class CVgPathInfo;
-class THandleGen;
-class TVgLockHolder;
-
-extern const float KFloatMinusOne;
-
-
-class THandleGen
- {
-public:
- inline void Init(TUint aInit);
- TUint NextUid();
-private:
- TUint iValue;
- };
-
-typedef enum
- {
- EVgHandleAny = -1, // match any valid handle type, e.g. for vgSetParameteri
- EVgHandleForFont = 0, // specific types ...
- EVgHandleForImage,
- EVgHandleForPaint,
- EVgHandleForPath,
- EVgHandleForMaskLayer,
- } TVgHandleType;
-
-
-// state structures for VG objects (i.e. anything that is a VGHandle): VGImage, VGPath, VGMaskLayer, VGPaint, VGFont
-// ToDo review how to handle thread locking these objects whilst they are in use
-NONSHARABLE_CLASS(CVgHandleBase) : public CBase // Base Class
- {
-public:
- static void InitStatics();
-
- // public inline methods
- inline VGHandle HostHandle() const;
- inline TVgHandleType HandleType() const;
- inline TBool IsDestroyed() const;
- inline void SetHostHandle(VGHandle aHostHandle);
- inline TUint ClientHandle() const;
-
- // general & specific portions of derived object destruction
- void Destroy(MVgContext& aVgContext);
- virtual TBool DestroyObject(MVgContext& aVgContext) = 0;
-
- // Each VGHandle object type must implement GetParameterVectorSize
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType) = 0;
- // Base version of GetParameter* uses GetParameterVectorSize to validate aParamType then calls Host VG
- virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
- virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
- // For details of Base versions of GetParameter*v see vghandle.cpp
- virtual void GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues);
- virtual void GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues);
- // Base versions of SetParameter* assume parameters are read-only, and give an error return
- virtual void SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
- virtual void SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
- virtual void SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
- virtual void SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
-
-protected:
- inline CVgHandleBase(TVgHandleType aHandleType);
- inline ~CVgHandleBase();
-
- VGint HostVgGetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
- VGint HostVgGetParameteri(MVgContext& aVgContext, VGint aParamType);
- VGfloat HostVgGetParameterf(MVgContext& aVgContext, VGint aParamType);
- void HostVgGetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
- void HostVgGetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
- void HostVgSetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
- void HostVgSetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
- void HostVgSetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
- void HostVgSetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
-
-protected:
- TUint iClientHandle;
- TVgHandleType iHandleType;
- VGHandle iHostHandle;
- TBool iIsDestroyed;
-
-private:
- static THandleGen iHandleGen; // generator for unique client side handles
- };
-
-
-NONSHARABLE_CLASS(CVgImageBase) : public CVgHandleBase
- {
-public:
- inline VGint Width() const;
- inline VGint Height() const;
-
- TBool DestroyObject(MVgContext& aVgContext) = 0;
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType) = 0;
-
-protected:
- inline CVgImageBase(TVgHandleType aHandleType, VGint aWidth, VGint aHeight);
-
-protected:
- VGint const iWidth;
- VGint const iHeight;
- };
-
-
-NONSHARABLE_CLASS(CVgMaskLayerInfo) : public CVgImageBase
- {
-public:
- static CVgMaskLayerInfo* New(VGint aWidth, VGint aHeight);
- virtual TBool DestroyObject(MVgContext& aVgContext);
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
-
- // Mask specific operations
- void FillMaskLayer(MVgContext& aVgContext, VGint aX, VGint aY, VGint aWidth, VGint aHeight, VGfloat aValue);
- void CopyMask(MVgContext& aVgContext, VGint aSx, VGint aSy, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
-
-private:
- inline CVgMaskLayerInfo(VGint aWidth, VGint aHeight);
- inline ~CVgMaskLayerInfo();
- };
-
-
-NONSHARABLE_CLASS(CVgImageInfo) : public CVgImageBase
- {
-public:
- static CVgImageInfo* New(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
- static CVgImageInfo* New(VGImageFormat aFormat, VGint aWidth, VGint aHeight, EGLImageKHR aEglImage, TUint64& aSgImageId);
- static CVgImageInfo* New(VGint aWidth, VGint aHeight, CVgImageInfo* aParent);
- virtual TBool DestroyObject(MVgContext& aVgContext);
-
- TInt ChildCount() const;
- CVgImageInfo* Parent() const;
- VGbitfield AllowedQuality() const;
- TBool IsEglSibling() const;
- TUint64 SgImageId() const;
- EGLImageKHR EglImage() const;
-
- static TInt BitsPerPixelForVgImageFormat(VGImageFormat aFormat);
- static void PixmapBlit(TUint8* aDest, const TUint8* aSource, TInt aDestStride, TInt aSourceStride, TInt aRowCount,
- size_t aRowLength, TInt aLastBits=0);
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
- virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
- virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
-
- void ClearImage(MVgContext& aVgContext, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- void ImageSubData(MVgContext& aVgContext, const void * aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aX, VGint aY,
- VGint aWidth, VGint aHeight);
- void GetImageSubData(MVgContext& aVgContext, void * aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aX, VGint aY,
- VGint aWidth, VGint aHeight);
- void CopyImage(MVgContext& aVgContext, VGint aDx, VGint aDy, CVgImageInfo& aSrcImageInfo, VGint aSx, VGint aSy, VGint aWidth,
- VGint aHeight, VGboolean aDither);
- void DrawImage(MVgContext& aVgContext);
- void SetPixels(MVgContext& aVgContext, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- void GetPixels(MVgContext& aVgContext, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- void ColorMatrix(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGfloat * aMatrix);
- void Convolve(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGint aKernelWidth, VGint aKernelHeight,
- VGint aShiftX, VGint aShiftY, const VGshort * aKernel, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
- void SeparableConvolve(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGint aKernelWidth, VGint aKernelHeight,
- VGint aShiftX, VGint aShiftY, const VGshort * aKernelX, const VGshort * aKernelY,
- VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
- void GaussianBlur(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGfloat aStdDeviationX, VGfloat aStdDeviationY, VGTilingMode aTilingMode);
- void Lookup(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGubyte * aRedLUT, const VGubyte * aGreenLUT, const VGubyte * aBlueLUT,
- const VGubyte * aAlphaLUT, VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
- void LookupSingle(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGuint * aLookupTable, VGImageChannel aSourceChannel,
- VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
-
-private:
- inline CVgImageInfo(VGImageFormat aFormat, VGint aWidth, VGint aHeight, CVgImageInfo* aParent, VGbitfield aAllowedQuality,
- EGLImageKHR aEglImage, TUint64 aSgImageId);
- inline ~CVgImageInfo();
- inline void IncChildCount();
- inline void DecChildCount();
- void HostVgGetImageSubData(MVgContext& aVgContext, void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
- VGImageFormat aDataFormat, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- void HostVgImageSubData(MVgContext& aVgContext, const void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
- VGImageFormat aDataFormat, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
-
-
- /* **** desireable: expand CVgImageInfo to include and use for validating for various appropriate:
- (TBool iIsRenderTarget; - VgImage is a surface currently being rendered, blocks some operations)
- (TUint iUsedAsPaintPattern; - non-zero stops use as a render target)
- (TUint iUsedAsGlyph; - count of how many places the VgImage is being used as a font glyph)
- */
-private:
- VGImageFormat iFormat; // not const because this is not currently initialised at creation for EglImages
- CVgImageInfo* const iParent; // immediate parent VgImage, NULL if not a child
- VGbitfield const iAllowedQuality;
- // EglImage / SgImage info ...
- TBool const iIsEglSibling;
- EGLImageKHR const iEglImage;
- TUint64 const iSgImageId; // Set or copied from parent for Egl Sibling - used to prompt Cmd Scheduler to sync pbuffer & vgimage
- // non-const state
- TInt iChildCount; // count of direct child images
- };
-
-
-NONSHARABLE_CLASS(CVgFontInfo) : public CVgHandleBase
- {
-public:
- static CVgFontInfo* New();
- virtual TBool DestroyObject(MVgContext& aVgContext);
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
-
- void SetGlyphToPath(MVgContext& aVgContext, VGuint aGlyphIndex, CVgPathInfo* aPathInfo, VGboolean aIsHinted,
- const VGfloat aGlyphOrigin [2], const VGfloat aEscapement[2]);
- void SetGlyphToImage(MVgContext& aVgContext, VGuint aGlyphIndex, CVgImageInfo* aImageInfo, const VGfloat aGlyphOrigin [2],
- const VGfloat aEscapement[2]);
- void ClearGlyph(MVgContext& aVgContext, VGuint aGlyphIndex);
- void DrawGlyph(MVgContext& aVgContext, VGuint aGlyphIndex, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
- void DrawGlyphs(MVgContext& aVgContext, VGint aGlyphCount, const VGuint * aGlyphIndices, const VGfloat * aAdjustmentsX,
- const VGfloat * aAdjustmentsY, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
-
-private:
- inline CVgFontInfo();
- inline ~CVgFontInfo();
- };
-
-
-NONSHARABLE_CLASS(CVgPaintInfo) : public CVgHandleBase
- {
-public:
- static CVgPaintInfo* New();
- virtual TBool DestroyObject(MVgContext& aVgContext);
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
- virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
- virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
- virtual void GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues);
- virtual void GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues);
-
- virtual void SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
- virtual void SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
- virtual void SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
- virtual void SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
-
- static void ResetPaint(MVgContext& aVgContext);
- void SetPaint(MVgContext& aVgContext, VGbitfield aPaintModes);
- void SetColor(MVgContext& aVgContext, VGuint aRgba);
- VGuint GetColor(MVgContext& aVgContext);
- void PaintPattern(MVgContext& aVgContext, CVgImageInfo* aPatternInfo);
-
-private:
- inline CVgPaintInfo();
- inline ~CVgPaintInfo();
-
-private:
- // cached parameters
- VGPaintType iPaintType;
- VGColorRampSpreadMode iColorRampSpreadMode;
- VGboolean iColorRampPremultiplied;
- VGTilingMode iPatternTilingMode;
- // VGfloat vector parameters are not currently cached in client
- };
-
-
-NONSHARABLE_CLASS(CVgPathInfo) : public CVgHandleBase
- {
-public:
- static CVgPathInfo* CVgPathInfo::New(VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias, VGbitfield aCapabilities);
- virtual TBool DestroyObject(MVgContext& aVgContext);
-
- void ClearPath(MVgContext& aVgContext, VGbitfield aCapabilities);
- void RemovePathCapabilities(MVgContext& aVgContext, VGbitfield aCapabilities);
- VGbitfield GetPathCapabilities(MVgContext& aVgContext);
-
- void AppendPath(MVgContext& aVgContext, CVgPathInfo& aSrcPathInfo);
- void AppendPathData(MVgContext& aVgContext, VGint aNumSegments, const VGubyte * aPathSegments, const void* aPathData);
- void ModifyPathCoords(MVgContext& aVgContext, VGint aStartIndex, VGint aNumSegments, const void* aPathData);
- void TransformPath(MVgContext& aVgContext, CVgPathInfo& aSrcPathInfo);
- VGboolean InterpolatePath(MVgContext& aVgContext, CVgPathInfo& aStartPathInfo, CVgPathInfo& aEndPathInfo, VGfloat aAmount);
- VGfloat PathLength(MVgContext& aVgContext, VGint aStartSegment, VGint aNumSegments);
- void PointAlongPath(MVgContext& aVgContext, VGint aStartSegment, VGint aNumSegments, VGfloat aDistance,
- VGfloat* aX, VGfloat* aY, VGfloat* aTangentX, VGfloat* aTangentY);
- void PathBounds(MVgContext& aVgContext, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
- void PathTransformedBounds(MVgContext& aVgContext, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
- void DrawPath(MVgContext& aVgContext, VGbitfield aPaintModes);
- void RenderToMask(MVgContext& aVgContext, VGbitfield aPaintModes, VGMaskOperation aOperation);
-
- inline VGPathDatatype PathDatatype() const;
-
- TBool CheckHasPathCapabilities(MVgContext& aVgContext, VGbitfield aCapabilities);
-
- virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
- virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
- virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
-
-private:
- inline CVgPathInfo(VGPathDatatype aPathDatatype, VGfloat aScale, VGfloat aBias, VGbitfield aCapabilities);
- inline ~CVgPathInfo();
- TBool CheckAppendPathData(MVgContext& aVgContext, VGint aNumSegments, const VGubyte* aPathSegments, const void* aPathData,
- VGint* aPathDataSize);
- TBool CheckPathDataAlignment(MVgContext& aVgContext, const void* aPathData);
- TBool CheckPathDataSize(MVgContext& aVgContext, const VGubyte* aPathSegments, VGint aNumSegments, VGint* aPathDataSize);
- VGint HostVgeGetPathCoordsSizeInBytes(MVgContext& aVgContext, VGint aStartIndex, VGint aNumSegments);
-
-private:
- VGPathDatatype const iDatatype;
- VGfloat const iScale;
- VGfloat const iBias;
- VGbitfield iCapabilities;
- };
-
-
-// Collection of static parameter checking functions - all "Chk" functions set the appropriate last VG Error on failure
-class TCheck
- {
-public:
- inline static TBool Chk16bitPtr(MVgContext& aVgContext, const void* aDataPtr);
- inline static TBool Chk2x16bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
- inline static TBool Chk32bitPtr(MVgContext& aVgContext, const void* aDataPtr);
- inline static TBool Chk2x32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
- inline static TBool Chk4x32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2, const void* aDataPtr3, const void* aDataPtr4);
- inline static TBool Chk2xOptional32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
- inline static TBool ChkVGMaskOperation(MVgContext& aVgContext, VGMaskOperation aOperation);
- inline static TBool ChkVGPaintMode(MVgContext& aVgContext, VGPaintMode aPaintMode);
- inline static TBool ChkVGPathDataType(MVgContext& aVgContext, VGPathDatatype aDatatype);
- inline static TBool ChkVGTilingMode(MVgContext& aVgContext, VGTilingMode aTilingMode);
- inline static TBool ChkVgImageFormat(MVgContext& aVgContext, VGImageFormat aFormat);
- inline static TBool ChkImageAlignment(MVgContext& aVgContext, VGImageFormat aImageFormat, const void* aData);
- inline static TBool ChkPositiveImageSize(MVgContext& aVgContext, VGint aWidth, VGint aHeight);
- inline static TBool ChkNewImageSize(MVgContext& aVgContext, VGint aWidth, VGint aHeight);
- inline static TBool ChkVGPaintModesCombination(MVgContext& aVgContext, VGbitfield aPaintModes);
- inline static TBool ChkVGPathFormat(MVgContext& aVgContext, VGint aPathFormat);
- static TBool ChkAreaIsWithinImage(MVgContext& aVgContext, CVgImageBase* aImageInfo, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static TBool ChkParamCountAndValuesPtr(MVgContext& aVgContext, VGint aCount, const void* aValues);
- static VGint ImageFormatByteDepth(VGImageFormat aImageFormat);
- };
-
-
-/*
- Class holds mutex for Open VG client side state on construction, & releases it on destruction.
-
- Placing methods here ensures the procedural requirement that the Mutex is held before these methods are called.
- */
-class TCleanupVgLocks
- {
-public:
- // having functions here forces the caller to hold the Open VG Mutex before they are called (when the lock object is constructed)
- TCleanupVgLocks(MVgContext& aVgContext);
- ~TCleanupVgLocks();
- void WaitForMutex(RMutex& aMutex);
- void SignalMutex();
-
- inline TBool CheckVGFont(VGFont aFont, CVgFontInfo** aFontInfo);
- inline TBool CheckVGImage(VGImage aImage, CVgImageInfo** aImageInfo);
- inline TBool CheckOptionalVGImage(VGImage aImage, CVgImageInfo** aImageInfo);
- inline TBool Check2VGImages(VGImage aImage1, CVgImageInfo** aImageInfo1, VGImage aImage2, CVgImageInfo** aImageInfo2);
- inline TBool CheckVGMaskLayer(VGMaskLayer aMaskLayer, CVgMaskLayerInfo** aHandleInfo);
- inline TBool CheckVGPaint(VGPaint aPaint, CVgPaintInfo** aPaintInfo);
- inline TBool CheckOptionalVGPaint(VGPaint aPaint, CVgPaintInfo** aPaintInfo);
- // ToDo maybe add a version that checks Start Segment & Segment Count
- inline TBool CheckVGPath(VGPath aPath, CVgPathInfo** aPathInfo, VGbitfield aReqdCapabilities=0);
- inline TBool CheckOptionalVGPath(VGPath aPath, CVgPathInfo** aPathInfo);
- inline TBool CheckVGAnyHandle(VGHandle aHandle, CVgHandleBase** aHandleInfo);
- TBool CheckVGMaskOperationAndHandle(VGMaskOperation aOperation, VGHandle aMask, CVgImageBase** aImageInfo);
- inline TBool CheckKernelWidthAndHeight(VGint aKernelWidth, VGint aKernelHeight, VGParamType aLimitType);
-
- VGFont CreateFont(VGint aGlyphCapacityHint);
- VGImage ChildImage(CVgImageInfo& aParentInfo, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- VGImage CreateImage(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
- VGMaskLayer CreateMaskLayer(VGint aWidth, VGint aHeight);
- VGPaint CreatePaint();
- VGPaint GetPaint(VGPaintMode aPaintMode);
- VGPath CreatePath(VGint aPathFormat, VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias,
- VGint aSegmentCapacityHint, VGint aCoordCapacityHint, VGbitfield aCapabilities);
- VGImage CreateEGLImageTargetKHR(VGeglImageKHR aImage);
-
-private:
- MVgContext& const iVgContext;
- RMutex& iMutex;
- TBool iIsHeld;
- };
-
-
-
-// per VG client state
-NONSHARABLE_CLASS(XOpenVgState) : public MEglManagementApi, public MVgApiForEgl
- {
- friend class TCleanupVgLocks;
-public:
- XOpenVgState();
- ~XOpenVgState();
-
- // functions using/maintaining Open Vg Handle Map
- TBool AddToHashMap(MVgContext& aVgContext, CVgHandleBase* aHandleInfo, VGHandle aHostHandle);
- void UnMapHandle(TUint32 aClientHandle);
-
- // MEglManagementApi - redirects via CVghwUtils to the EGL implementation
- virtual TBool EglImageOpenForVgImage(EGLImageKHR aImage, TSize& aSize, VGHandle& aVgHandle, TUint64& aSgImageId);
- virtual void EglImageClose(EGLImageKHR aImage);
-
- // MVgApiForEgl - exported via CvghwUtils to the Guest EGL implementation
- virtual ExtensionProcPointer guestGetVgProcAddress (const char *aProcName);
-
-protected: // fns only visible to TVgLockHolder class
- inline RMutex& MutexWait();
- TBool CheckVGHandle(MVgContext& aVgContext, VGHandle aHandle, CVgHandleBase** aHandleInfo, TVgHandleType aMatchType);
- // functions using cached values from Host Open VG implementation
- TBool CheckKernelWidthAndHeight(MVgContext& aVgContext, VGint aKernelWidth, VGint aKernelHeight, VGParamType aLimitType);
-
-private:
- RMutex iStateLock;
-
- // Map holds info about VG Handle based objects
- RMutex iMapLock;
- RHashMap<TUint, CVgHandleBase*> iHandleHashMap;
- MEglManagementApi* iEglManagementApi;
-
- // 'constants' initialised from x86 VG implementation the first time they are required
- VGint iKVgMaxKernelSize;
- VGint iKVgMaxSeparableKernelSize;
- // ToDo: more values to cache: VG_MAX_IMAGE_WIDTH, VG_MAX_IMAGE_HEIGHT, VG_MAX_IMAGE_PIXELS
-
- // ToDo Record when VG fonts use glyphs based on SgImages, required for Ref counting
- };
-
-
-
-
-// class of static methods to implement Open VG APIs
-class TGuestOpenVg
- {
-public:
- // VG APIs
- static VGPaint vgGetPaint(VGPaintMode aPaintMode);
- static VGPaint vgCreatePaint();
- static VGboolean vgInterpolatePath(VGPath aDstPath, VGPath aStartPath, VGPath aEndPath, VGfloat aAmount);
- static VGfloat vgPathLength(VGPath aPath, VGint aStartSegment, VGint aNumSegments);
- static VGbitfield vgGetPathCapabilities(VGPath aPath);
- static VGPath vgCreatePath(VGint aPathFormat, VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias,
- VGint aSegmentCapacityHint, VGint aCoordCapacityHint, VGbitfield aCapabilities);
- static VGfloat vgGetf(VGParamType aType);
- static VGint vgGeti(VGParamType aType);
- static VGfloat vgGetParameterf(VGHandle aObject, VGint aParamType);
- static VGint vgGetParameteri(VGHandle aObject, VGint aParamType);
- static VGint vgGetParameterVectorSize(VGHandle aObject, VGint aParamType);
- static VGMaskLayer vgCreateMaskLayer(VGint aWidth, VGint aHeight);
- static VGuint vgGetColor(VGPaint aPaint);
- static VGImage vgCreateImage(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
- static VGImage vgChildImage(VGImage aParent, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static VGImage vgGetParent(VGImage aImage);
- static VGImage vgCreateEGLImageTargetKHR(VGeglImageKHR aImage);
- static VGFont vgCreateFont(VGint aGlyphCapacityHint);
- static VGHardwareQueryResult vgHardwareQuery(VGHardwareQueryType key, VGint setting);
- static void vgGetParameterfv(VGHandle aObject, VGint aParamType, VGint aCount, VGfloat * aValues);
- static void vgGetParameteriv(VGHandle aObject, VGint aParamType, VGint aCount, VGint * aValues);
- static VGint vgGetVectorSize(VGParamType type);
- static void vgGetfv(VGParamType aType, VGint aCount, const VGfloat * aValues);
- static void vgGetiv(VGParamType aType, VGint aCount, const VGint * aValues);
- static void vgGetMatrix(VGfloat* aM);
- static void vgGetImageSubData(VGImage aImage, void* aData, VGint aDataStride, VGImageFormat aDataFormat,
- VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static void vgReadPixels(void* aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aSx, VGint aSy,
- VGint aWidth, VGint aHeight);
- static void vgPathBounds(VGPath aPath, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
- static void vgPathTransformedBounds(VGPath aPath, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
- static void vgSetf(VGParamType aType, VGfloat aValue);
- static void vgSeti(VGParamType aType, VGint aVvalue);
- static void vgSetfv(VGParamType aType, VGint aCount, const VGfloat * aValues);
- static void vgSetiv(VGParamType aType, VGint aCount, const VGint * aValues);
- static void vgSetParameterf(VGHandle aObject, VGint aParamType, VGfloat aValue);
- static void vgSetParameteri(VGHandle aObject, VGint aParamType, VGint aValue);
- static void vgSetParameterfv(VGHandle aObject, VGint aParamType, VGint aCount, const VGfloat * aValues);
- static void vgSetParameteriv(VGHandle aObject, VGint aParamType, VGint aCount, const VGint * aValues);
- static void vgLoadIdentity();
- static void vgLoadMatrix(const VGfloat* aM);
- static void vgMultMatrix(const VGfloat* aM);
- static void vgTranslate(VGfloat aTx, VGfloat aTy);
- static void vgScale(VGfloat aSx, VGfloat aSy);
- static void vgShear(VGfloat aShx, VGfloat aShy);
- static void vgRotate(VGfloat aAngle);
- static void vgMask(VGHandle aMask, VGMaskOperation aOperation, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static void vgRenderToMask(VGPath aPath, VGbitfield aPaintModes, VGMaskOperation aOperation);
- static void vgDestroyMaskLayer(VGMaskLayer maskLayer);
- static void vgFillMaskLayer(VGMaskLayer aMaskLayer, VGint aX, VGint aY, VGint aWidth, VGint aHeight, VGfloat aValue);
- static void vgCopyMask(VGMaskLayer aMaskLayer, VGint aSx, VGint aSy, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
- static void vgClear(VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static void vgClearPath(VGPath aPath, VGbitfield aCapabilities);
- static void vgDestroyPath(VGPath aPath);
- static void vgRemovePathCapabilities(VGPath aPath, VGbitfield aCapabilities);
- static void vgAppendPath(VGPath aDstPath, VGPath aSrcPath);
- static void vgAppendPathData(VGPath aDstPath, VGint aNumSegments, const VGubyte* aPathSegments, const void* aPathData);
- static void vgModifyPathCoords(VGPath aDstPath, VGint aStartIndex, VGint aNumSegments, const void* aPathData);
- static void vgTransformPath(VGPath aDstPath, VGPath aSrcPath);
- static void vgPointAlongPath(VGPath aPath, VGint aStartSegment, VGint aNumSegments, VGfloat aDistance,
- VGfloat* aX, VGfloat* aY, VGfloat* aTangentX, VGfloat* aTangentY);
- static void vgDrawPath(VGPath aPath, VGbitfield aPaintModes);
- static void vgDestroyPaint(VGPaint aPaint);
- static void vgSetPaint(VGPaint aPaint, VGbitfield aPaintModes);
- static void vgSetColor(VGPaint aPaint, VGuint aRgba);
- static void vgPaintPattern(VGPaint aPaint, VGImage aPattern);
- static void vgDestroyImage(VGImage aImage);
- static void vgClearImage(VGImage aImage, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static void vgImageSubData(VGImage aImage, const void* aData, VGint aDataStride, VGImageFormat aDataFormat,
- VGint aX, VGint aY, VGint aWidth, VGint aHeight);
- static void vgCopyImage(VGImage aDst, VGint aDx, VGint aDy, VGImage aSrc, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight,
- VGboolean aDither);
- static void vgDrawImage(VGImage aImage);
- static void vgSetPixels(VGint aDx, VGint aDy, VGImage aSrc, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- static void vgWritePixels(const void* data, VGint aDataStride, VGImageFormat aDataFormat, VGint aDx, VGint aDy,
- VGint aWidth, VGint aHeight);
- static void vgGetPixels(VGImage aDst, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- static void vgCopyPixels(VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- static void vgDestroyFont(VGFont aFont);
- static void vgSetGlyphToPath(VGFont aFont, VGuint aGlyphIndex, VGPath aPath, VGboolean aIsHinted, const VGfloat aGlyphOrigin [2],
- const VGfloat aEscapement[2]);
- static void vgSetGlyphToImage(VGFont aFont, VGuint aGlyphIndex, VGImage aImage, const VGfloat aGlyphOrigin [2],
- const VGfloat aEscapement[2]);
- static void vgClearGlyph(VGFont aFont, VGuint aGlyphIndex);
- static void vgDrawGlyph(VGFont aFont, VGuint aGlyphIndex, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
- static void vgDrawGlyphs(VGFont aFont, VGint aGlyphCount, const VGuint* aGlyphIndices, const VGfloat* aAdjustmentsX,
- const VGfloat* aAdjustmentsY, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
- static void vgColorMatrix(VGImage aDst, VGImage aSrc, const VGfloat* aMatrix);
- static void vgConvolve(VGImage aDst, VGImage aSrc, VGint aKernelWidth, VGint aKernelHeight, VGint aShiftX, VGint aShiftY,
- const VGshort* aKernel, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
- static void vgSeparableConvolve(VGImage aDst, VGImage aSrc, VGint aKernelWidth, VGint aKernelHeight, VGint aShiftX, VGint aShiftY,
- const VGshort* aKernelX, const VGshort* aKernelY, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
- static void vgGaussianBlur(VGImage aDst, VGImage aSrc, VGfloat aStdDeviationX, VGfloat aStdDeviationY, VGTilingMode aTilingMode);
- static void vgLookup(VGImage aDst, VGImage aSrc, const VGubyte* aRedLUT, const VGubyte* aGreenLUT, const VGubyte* aBlueLUT,
- const VGubyte* aAlphaLUT, VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
- static void vgLookupSingle(VGImage aDst, VGImage aSrc, const VGuint* aLookupTable, VGImageChannel aSourceChannel,
- VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
-
-private:
- // fns that directly talk to Host Open VG (no parameter checking)
- static void HostVgReadPixels(MVgContext& aVgContext, void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
- VGImageFormat aDataFormat, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
- static void HostVgWritePixels(MVgContext& aVgContext, const void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
- VGImageFormat aDataFormat, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
-
- static VGint HostGetVectorSize(MVgContext& aVgContext, VGParamType aType);
-
-public: // ToDo find a more elegant way of calling this from XOpenVgState
- static VGint HostGeti(MVgContext& aVgContext, VGParamType type);
-private:
- static inline VGfloat HostGetf(MVgContext& aVgContext, VGParamType type);
- };
-
-
-// C api extensions
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-VGImage vgCreateEGLImageTargetKHR(VGeglImageKHR image);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#include "openvg.inl"
-
-#endif // VGSTATE_H
+// Copyright (c) 2010 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:
+// Header file defining Open VG client-side state classes.
+
+#ifndef VGSTATE_H
+#define VGSTATE_H
+
+#include <EGL/egl.h>
+#include <VG/openvg.h>
+#include <e32hashtab.h>
+#include "vghwutils.h"
+
+
+
+// tracing
+#include <e32debug.h>
+#ifdef _DEBUG
+ #define OPENVG_TRACE(fmt, args...) RDebug::Printf(fmt, ##args)
+ #define VGPANIC_ASSERT(condition, panic) if (!(condition)) { VgPanic(panic, #panic, #condition, __FILE__, __LINE__); }
+ #define VGPANIC_ASSERT_DEBUG(condition, panic) if (!(condition)) { VgPanic(panic, #panic, #condition, __FILE__, __LINE__); }
+ #define VGPANIC_ALWAYS(panic) { VgPanic(panic, #panic, NULL, __FILE__, __LINE__); }
+#else
+ #define OPENVG_TRACE(fmt, args...)
+ #define VGPANIC_ASSERT(condition, panic) if (!(condition)) { VgPanic(panic, NULL, NULL, NULL, __LINE__); }
+ #define VGPANIC_ASSERT_DEBUG(condition, panic)
+ #define VGPANIC_ALWAYS(panic) { VgPanic(panic, NULL, NULL, NULL, __LINE__); }
+#endif
+
+
+// Guest Open VG panic codes
+typedef enum
+ {
+ EVgPanicTemp = 1, // note: for development, references should be replaced with a more specific panic
+ EVgPanicNullPixmapPointer,
+ EVgPanicPixmapSizeError,
+ EVgPanicSingletonAlreadyInitialised,
+ EVgPanicSingletonNotInitialised,
+ EVgPanicNullPointer,
+ EVgPanicBadLastBitsParam,
+ EVgPanicBadRowLengthParam,
+ EVgPanicBadRowCountParam,
+ EVgPanicStrideSmallerThanRowLength, // 10
+ EVgPanicNotReplyOpcode,
+ EVgPanicDeleteInUseVgImageInfo,
+ EVgPanicUidGeneratorZeroSeed,
+ EVgPanicMissingEglInterface,
+ EVgPanicNullCVgHandlePointer,
+ EVgPanicWrongVgHandleType,
+ EVgPanicHandleAlreadyMarkedDestroyed,
+ EVgPanicUnknownVgHandleType,
+ EVgPanicHostHandleIsInvalid,
+ EVgPanicImageParentIsInvalid, // 20
+ EVgPanicFunctionParameterIsNull,
+ EVgPanicValueFromHostVgIsInvalid,
+ EVgPanicHostHandleAlreadySet,
+ EVgPanicParentImageAlreadyDestroyed,
+ EVgPanicStateLockMutexNotHeld,
+ } TVgPanic;
+
+void VgPanic(TVgPanic aPanicCode, char* aPanicName, char* aCondition, char* aFile, TInt aLine);
+
+
+// state singleton, in Writeable Static Data memory
+class XOpenVgState;
+extern XOpenVgState OpenVgState;
+
+// classes declared in this header
+class CVgHandleBase;
+class CVgImageBase;
+class CVgMaskLayerInfo;
+class CVgFontInfo;
+class CVgImageInfo;
+class CVgPaintInfo;
+class CVgPathInfo;
+class THandleGen;
+class TVgLockHolder;
+
+extern const float KFloatMinusOne;
+
+
+class THandleGen
+ {
+public:
+ inline void Init(TUint aInit);
+ TUint NextUid();
+private:
+ TUint iValue;
+ };
+
+typedef enum
+ {
+ EVgHandleAny = -1, // match any valid handle type, e.g. for vgSetParameteri
+ EVgHandleForFont = 0, // specific types ...
+ EVgHandleForImage,
+ EVgHandleForPaint,
+ EVgHandleForPath,
+ EVgHandleForMaskLayer,
+ } TVgHandleType;
+
+
+// state structures for VG objects (i.e. anything that is a VGHandle): VGImage, VGPath, VGMaskLayer, VGPaint, VGFont
+// ToDo review how to handle thread locking these objects whilst they are in use
+NONSHARABLE_CLASS(CVgHandleBase) : public CBase // Base Class
+ {
+public:
+ static void InitStatics();
+
+ // public inline methods
+ inline VGHandle HostHandle() const;
+ inline TVgHandleType HandleType() const;
+ inline TBool IsDestroyed() const;
+ inline void SetHostHandle(VGHandle aHostHandle);
+ inline TUint ClientHandle() const;
+
+ // general & specific portions of derived object destruction
+ void Destroy(MVgContext& aVgContext);
+ virtual TBool DestroyObject(MVgContext& aVgContext) = 0;
+
+ // Each VGHandle object type must implement GetParameterVectorSize
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType) = 0;
+ // Base version of GetParameter* uses GetParameterVectorSize to validate aParamType then calls Host VG
+ virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
+ virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
+ // For details of Base versions of GetParameter*v see vghandle.cpp
+ virtual void GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues);
+ virtual void GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues);
+ // Base versions of SetParameter* assume parameters are read-only, and give an error return
+ virtual void SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
+ virtual void SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
+ virtual void SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
+ virtual void SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
+
+protected:
+ inline CVgHandleBase(TVgHandleType aHandleType);
+ inline ~CVgHandleBase();
+
+ VGint HostVgGetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+ VGint HostVgGetParameteri(MVgContext& aVgContext, VGint aParamType);
+ VGfloat HostVgGetParameterf(MVgContext& aVgContext, VGint aParamType);
+ void HostVgGetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
+ void HostVgGetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
+ void HostVgSetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
+ void HostVgSetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
+ void HostVgSetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
+ void HostVgSetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
+
+protected:
+ TUint iClientHandle;
+ TVgHandleType iHandleType;
+ VGHandle iHostHandle;
+ TBool iIsDestroyed;
+
+private:
+ static THandleGen iHandleGen; // generator for unique client side handles
+ };
+
+
+NONSHARABLE_CLASS(CVgImageBase) : public CVgHandleBase
+ {
+public:
+ inline VGint Width() const;
+ inline VGint Height() const;
+
+ TBool DestroyObject(MVgContext& aVgContext) = 0;
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType) = 0;
+
+protected:
+ inline CVgImageBase(TVgHandleType aHandleType, VGint aWidth, VGint aHeight);
+
+protected:
+ VGint const iWidth;
+ VGint const iHeight;
+ };
+
+
+NONSHARABLE_CLASS(CVgMaskLayerInfo) : public CVgImageBase
+ {
+public:
+ static CVgMaskLayerInfo* New(VGint aWidth, VGint aHeight);
+ virtual TBool DestroyObject(MVgContext& aVgContext);
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+
+ // Mask specific operations
+ void FillMaskLayer(MVgContext& aVgContext, VGint aX, VGint aY, VGint aWidth, VGint aHeight, VGfloat aValue);
+ void CopyMask(MVgContext& aVgContext, VGint aSx, VGint aSy, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
+
+private:
+ inline CVgMaskLayerInfo(VGint aWidth, VGint aHeight);
+ inline ~CVgMaskLayerInfo();
+ };
+
+
+NONSHARABLE_CLASS(CVgImageInfo) : public CVgImageBase
+ {
+public:
+ static CVgImageInfo* New(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
+ static CVgImageInfo* New(VGImageFormat aFormat, VGint aWidth, VGint aHeight, EGLImageKHR aEglImage, TUint64& aSgImageId);
+ static CVgImageInfo* New(VGint aWidth, VGint aHeight, CVgImageInfo* aParent);
+ virtual TBool DestroyObject(MVgContext& aVgContext);
+
+ TInt ChildCount() const;
+ CVgImageInfo* Parent() const;
+ VGbitfield AllowedQuality() const;
+ TBool IsEglSibling() const;
+ TUint64 SgImageId() const;
+ EGLImageKHR EglImage() const;
+
+ static TInt BitsPerPixelForVgImageFormat(VGImageFormat aFormat);
+ static void PixmapBlit(TUint8* aDest, const TUint8* aSource, TInt aDestStride, TInt aSourceStride, TInt aRowCount,
+ size_t aRowLength, TInt aLastBits=0);
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+ virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
+ virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
+
+ void ClearImage(MVgContext& aVgContext, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ void ImageSubData(MVgContext& aVgContext, const void * aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aX, VGint aY,
+ VGint aWidth, VGint aHeight);
+ void GetImageSubData(MVgContext& aVgContext, void * aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aX, VGint aY,
+ VGint aWidth, VGint aHeight);
+ void CopyImage(MVgContext& aVgContext, VGint aDx, VGint aDy, CVgImageInfo& aSrcImageInfo, VGint aSx, VGint aSy, VGint aWidth,
+ VGint aHeight, VGboolean aDither);
+ void DrawImage(MVgContext& aVgContext);
+ void SetPixels(MVgContext& aVgContext, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ void GetPixels(MVgContext& aVgContext, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ void ColorMatrix(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGfloat * aMatrix);
+ void Convolve(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGint aKernelWidth, VGint aKernelHeight,
+ VGint aShiftX, VGint aShiftY, const VGshort * aKernel, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
+ void SeparableConvolve(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGint aKernelWidth, VGint aKernelHeight,
+ VGint aShiftX, VGint aShiftY, const VGshort * aKernelX, const VGshort * aKernelY,
+ VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
+ void GaussianBlur(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, VGfloat aStdDeviationX, VGfloat aStdDeviationY, VGTilingMode aTilingMode);
+ void Lookup(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGubyte * aRedLUT, const VGubyte * aGreenLUT, const VGubyte * aBlueLUT,
+ const VGubyte * aAlphaLUT, VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
+ void LookupSingle(MVgContext& aVgContext, CVgImageInfo& aSrcImageInfo, const VGuint * aLookupTable, VGImageChannel aSourceChannel,
+ VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
+
+private:
+ inline CVgImageInfo(VGImageFormat aFormat, VGint aWidth, VGint aHeight, CVgImageInfo* aParent, VGbitfield aAllowedQuality,
+ EGLImageKHR aEglImage, TUint64 aSgImageId);
+ inline ~CVgImageInfo();
+ inline void IncChildCount();
+ inline void DecChildCount();
+ void HostVgGetImageSubData(MVgContext& aVgContext, void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
+ VGImageFormat aDataFormat, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ void HostVgImageSubData(MVgContext& aVgContext, const void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
+ VGImageFormat aDataFormat, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+
+
+ /* **** desireable: expand CVgImageInfo to include and use for validating for various appropriate:
+ (TBool iIsRenderTarget; - VgImage is a surface currently being rendered, blocks some operations)
+ (TUint iUsedAsPaintPattern; - non-zero stops use as a render target)
+ (TUint iUsedAsGlyph; - count of how many places the VgImage is being used as a font glyph)
+ */
+private:
+ VGImageFormat iFormat; // not const because this is not currently initialised at creation for EglImages
+ CVgImageInfo* const iParent; // immediate parent VgImage, NULL if not a child
+ VGbitfield const iAllowedQuality;
+ // EglImage / SgImage info ...
+ TBool const iIsEglSibling;
+ EGLImageKHR const iEglImage;
+ TUint64 const iSgImageId; // Set or copied from parent for Egl Sibling - used to prompt Cmd Scheduler to sync pbuffer & vgimage
+ // non-const state
+ TInt iChildCount; // count of direct child images
+ };
+
+
+NONSHARABLE_CLASS(CVgFontInfo) : public CVgHandleBase
+ {
+public:
+ static CVgFontInfo* New();
+ virtual TBool DestroyObject(MVgContext& aVgContext);
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+
+ void SetGlyphToPath(MVgContext& aVgContext, VGuint aGlyphIndex, CVgPathInfo* aPathInfo, VGboolean aIsHinted,
+ const VGfloat aGlyphOrigin [2], const VGfloat aEscapement[2]);
+ void SetGlyphToImage(MVgContext& aVgContext, VGuint aGlyphIndex, CVgImageInfo* aImageInfo, const VGfloat aGlyphOrigin [2],
+ const VGfloat aEscapement[2]);
+ void ClearGlyph(MVgContext& aVgContext, VGuint aGlyphIndex);
+ void DrawGlyph(MVgContext& aVgContext, VGuint aGlyphIndex, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
+ void DrawGlyphs(MVgContext& aVgContext, VGint aGlyphCount, const VGuint * aGlyphIndices, const VGfloat * aAdjustmentsX,
+ const VGfloat * aAdjustmentsY, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
+
+private:
+ inline CVgFontInfo();
+ inline ~CVgFontInfo();
+ };
+
+
+NONSHARABLE_CLASS(CVgPaintInfo) : public CVgHandleBase
+ {
+public:
+ static CVgPaintInfo* New();
+ virtual TBool DestroyObject(MVgContext& aVgContext);
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+ virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
+ virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
+ virtual void GetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGfloat * aValues);
+ virtual void GetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, VGint * aValues);
+
+ virtual void SetParameterf(MVgContext& aVgContext, VGint aParamType, VGfloat aValue);
+ virtual void SetParameteri(MVgContext& aVgContext, VGint aParamType, VGint aValue);
+ virtual void SetParameterfv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGfloat * aValues);
+ virtual void SetParameteriv(MVgContext& aVgContext, VGint aParamType, VGint aCount, const VGint * aValues);
+
+ static void ResetPaint(MVgContext& aVgContext);
+ void SetPaint(MVgContext& aVgContext, VGbitfield aPaintModes);
+ void SetColor(MVgContext& aVgContext, VGuint aRgba);
+ VGuint GetColor(MVgContext& aVgContext);
+ void PaintPattern(MVgContext& aVgContext, CVgImageInfo* aPatternInfo);
+
+private:
+ inline CVgPaintInfo();
+ inline ~CVgPaintInfo();
+
+private:
+ // cached parameters
+ VGPaintType iPaintType;
+ VGColorRampSpreadMode iColorRampSpreadMode;
+ VGboolean iColorRampPremultiplied;
+ VGTilingMode iPatternTilingMode;
+ // VGfloat vector parameters are not currently cached in client
+ };
+
+
+NONSHARABLE_CLASS(CVgPathInfo) : public CVgHandleBase
+ {
+public:
+ static CVgPathInfo* CVgPathInfo::New(VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias, VGbitfield aCapabilities);
+ virtual TBool DestroyObject(MVgContext& aVgContext);
+
+ void ClearPath(MVgContext& aVgContext, VGbitfield aCapabilities);
+ void RemovePathCapabilities(MVgContext& aVgContext, VGbitfield aCapabilities);
+ VGbitfield GetPathCapabilities(MVgContext& aVgContext);
+
+ void AppendPath(MVgContext& aVgContext, CVgPathInfo& aSrcPathInfo);
+ void AppendPathData(MVgContext& aVgContext, VGint aNumSegments, const VGubyte * aPathSegments, const void* aPathData);
+ void ModifyPathCoords(MVgContext& aVgContext, VGint aStartIndex, VGint aNumSegments, const void* aPathData);
+ void TransformPath(MVgContext& aVgContext, CVgPathInfo& aSrcPathInfo);
+ VGboolean InterpolatePath(MVgContext& aVgContext, CVgPathInfo& aStartPathInfo, CVgPathInfo& aEndPathInfo, VGfloat aAmount);
+ VGfloat PathLength(MVgContext& aVgContext, VGint aStartSegment, VGint aNumSegments);
+ void PointAlongPath(MVgContext& aVgContext, VGint aStartSegment, VGint aNumSegments, VGfloat aDistance,
+ VGfloat* aX, VGfloat* aY, VGfloat* aTangentX, VGfloat* aTangentY);
+ void PathBounds(MVgContext& aVgContext, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
+ void PathTransformedBounds(MVgContext& aVgContext, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
+ void DrawPath(MVgContext& aVgContext, VGbitfield aPaintModes);
+ void RenderToMask(MVgContext& aVgContext, VGbitfield aPaintModes, VGMaskOperation aOperation);
+
+ inline VGPathDatatype PathDatatype() const;
+
+ TBool CheckHasPathCapabilities(MVgContext& aVgContext, VGbitfield aCapabilities);
+
+ virtual VGint GetParameterVectorSize(MVgContext& aVgContext, VGint aParamType);
+ virtual VGfloat GetParameterf(MVgContext& aVgContext, VGint aParamType);
+ virtual VGint GetParameteri(MVgContext& aVgContext, VGint aParamType);
+
+private:
+ inline CVgPathInfo(VGPathDatatype aPathDatatype, VGfloat aScale, VGfloat aBias, VGbitfield aCapabilities);
+ inline ~CVgPathInfo();
+ TBool CheckAppendPathData(MVgContext& aVgContext, VGint aNumSegments, const VGubyte* aPathSegments, const void* aPathData,
+ VGint* aPathDataSize);
+ TBool CheckPathDataAlignment(MVgContext& aVgContext, const void* aPathData);
+ TBool CheckPathDataSize(MVgContext& aVgContext, const VGubyte* aPathSegments, VGint aNumSegments, VGint* aPathDataSize);
+ VGint HostVgeGetPathCoordsSizeInBytes(MVgContext& aVgContext, VGint aStartIndex, VGint aNumSegments);
+
+private:
+ VGPathDatatype const iDatatype;
+ VGfloat const iScale;
+ VGfloat const iBias;
+ VGbitfield iCapabilities;
+ };
+
+
+// Collection of static parameter checking functions - all "Chk" functions set the appropriate last VG Error on failure
+class TCheck
+ {
+public:
+ inline static TBool Chk16bitPtr(MVgContext& aVgContext, const void* aDataPtr);
+ inline static TBool Chk2x16bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
+ inline static TBool Chk32bitPtr(MVgContext& aVgContext, const void* aDataPtr);
+ inline static TBool Chk2x32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
+ inline static TBool Chk4x32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2, const void* aDataPtr3, const void* aDataPtr4);
+ inline static TBool Chk2xOptional32bitPtr(MVgContext& aVgContext, const void* aDataPtr1, const void* aDataPtr2);
+ inline static TBool ChkVGMaskOperation(MVgContext& aVgContext, VGMaskOperation aOperation);
+ inline static TBool ChkVGPaintMode(MVgContext& aVgContext, VGPaintMode aPaintMode);
+ inline static TBool ChkVGPathDataType(MVgContext& aVgContext, VGPathDatatype aDatatype);
+ inline static TBool ChkVGTilingMode(MVgContext& aVgContext, VGTilingMode aTilingMode);
+ inline static TBool ChkVgImageFormat(MVgContext& aVgContext, VGImageFormat aFormat);
+ inline static TBool ChkImageAlignment(MVgContext& aVgContext, VGImageFormat aImageFormat, const void* aData);
+ inline static TBool ChkPositiveImageSize(MVgContext& aVgContext, VGint aWidth, VGint aHeight);
+ inline static TBool ChkNewImageSize(MVgContext& aVgContext, VGint aWidth, VGint aHeight);
+ inline static TBool ChkVGPaintModesCombination(MVgContext& aVgContext, VGbitfield aPaintModes);
+ inline static TBool ChkVGPathFormat(MVgContext& aVgContext, VGint aPathFormat);
+ static TBool ChkAreaIsWithinImage(MVgContext& aVgContext, CVgImageBase* aImageInfo, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static TBool ChkParamCountAndValuesPtr(MVgContext& aVgContext, VGint aCount, const void* aValues);
+ static VGint ImageFormatByteDepth(VGImageFormat aImageFormat);
+ };
+
+
+/*
+ Class holds mutex for Open VG client side state on construction, & releases it on destruction.
+
+ Placing methods here ensures the procedural requirement that the Mutex is held before these methods are called.
+ */
+class TCleanupVgLocks
+ {
+public:
+ // having functions here forces the caller to hold the Open VG Mutex before they are called (when the lock object is constructed)
+ TCleanupVgLocks(MVgContext& aVgContext);
+ ~TCleanupVgLocks();
+ void WaitForMutex(RMutex& aMutex);
+ void SignalMutex();
+
+ inline TBool CheckVGFont(VGFont aFont, CVgFontInfo** aFontInfo);
+ inline TBool CheckVGImage(VGImage aImage, CVgImageInfo** aImageInfo);
+ inline TBool CheckOptionalVGImage(VGImage aImage, CVgImageInfo** aImageInfo);
+ inline TBool Check2VGImages(VGImage aImage1, CVgImageInfo** aImageInfo1, VGImage aImage2, CVgImageInfo** aImageInfo2);
+ inline TBool CheckVGMaskLayer(VGMaskLayer aMaskLayer, CVgMaskLayerInfo** aHandleInfo);
+ inline TBool CheckVGPaint(VGPaint aPaint, CVgPaintInfo** aPaintInfo);
+ inline TBool CheckOptionalVGPaint(VGPaint aPaint, CVgPaintInfo** aPaintInfo);
+ // ToDo maybe add a version that checks Start Segment & Segment Count
+ inline TBool CheckVGPath(VGPath aPath, CVgPathInfo** aPathInfo, VGbitfield aReqdCapabilities=0);
+ inline TBool CheckOptionalVGPath(VGPath aPath, CVgPathInfo** aPathInfo);
+ inline TBool CheckVGAnyHandle(VGHandle aHandle, CVgHandleBase** aHandleInfo);
+ TBool CheckVGMaskOperationAndHandle(VGMaskOperation aOperation, VGHandle aMask, CVgImageBase** aImageInfo);
+ inline TBool CheckKernelWidthAndHeight(VGint aKernelWidth, VGint aKernelHeight, VGParamType aLimitType);
+
+ VGFont CreateFont(VGint aGlyphCapacityHint);
+ VGImage ChildImage(CVgImageInfo& aParentInfo, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ VGImage CreateImage(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
+ VGMaskLayer CreateMaskLayer(VGint aWidth, VGint aHeight);
+ VGPaint CreatePaint();
+ VGPaint GetPaint(VGPaintMode aPaintMode);
+ VGPath CreatePath(VGint aPathFormat, VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias,
+ VGint aSegmentCapacityHint, VGint aCoordCapacityHint, VGbitfield aCapabilities);
+ VGImage CreateEGLImageTargetKHR(VGeglImageKHR aImage);
+
+private:
+ MVgContext& const iVgContext;
+ RMutex& iMutex;
+ TBool iIsHeld;
+ };
+
+
+
+// per VG client state
+NONSHARABLE_CLASS(XOpenVgState) : public MEglManagementApi, public MVgApiForEgl
+ {
+ friend class TCleanupVgLocks;
+public:
+ XOpenVgState();
+ ~XOpenVgState();
+
+ // functions using/maintaining Open Vg Handle Map
+ TBool AddToHashMap(MVgContext& aVgContext, CVgHandleBase* aHandleInfo, VGHandle aHostHandle);
+ void UnMapHandle(TUint32 aClientHandle);
+
+ // MEglManagementApi - redirects via CVghwUtils to the EGL implementation
+ virtual TBool EglImageOpenForVgImage(EGLImageKHR aImage, TSize& aSize, VGHandle& aVgHandle, TUint64& aSgImageId);
+ virtual void EglImageClose(EGLImageKHR aImage);
+
+ // MVgApiForEgl - exported via CvghwUtils to the Guest EGL implementation
+ virtual ExtensionProcPointer guestGetVgProcAddress (const char *aProcName);
+
+protected: // fns only visible to TVgLockHolder class
+ inline RMutex& MutexWait();
+ TBool CheckVGHandle(MVgContext& aVgContext, VGHandle aHandle, CVgHandleBase** aHandleInfo, TVgHandleType aMatchType);
+ // functions using cached values from Host Open VG implementation
+ TBool CheckKernelWidthAndHeight(MVgContext& aVgContext, VGint aKernelWidth, VGint aKernelHeight, VGParamType aLimitType);
+
+private:
+ RMutex iStateLock;
+
+ // Map holds info about VG Handle based objects
+ RMutex iMapLock;
+ RHashMap<TUint, CVgHandleBase*> iHandleHashMap;
+ MEglManagementApi* iEglManagementApi;
+
+ // 'constants' initialised from x86 VG implementation the first time they are required
+ VGint iKVgMaxKernelSize;
+ VGint iKVgMaxSeparableKernelSize;
+ // ToDo: more values to cache: VG_MAX_IMAGE_WIDTH, VG_MAX_IMAGE_HEIGHT, VG_MAX_IMAGE_PIXELS
+
+ // ToDo Record when VG fonts use glyphs based on SgImages, required for Ref counting
+ };
+
+
+
+
+// class of static methods to implement Open VG APIs
+class TGuestOpenVg
+ {
+public:
+ // VG APIs
+ static VGPaint vgGetPaint(VGPaintMode aPaintMode);
+ static VGPaint vgCreatePaint();
+ static VGboolean vgInterpolatePath(VGPath aDstPath, VGPath aStartPath, VGPath aEndPath, VGfloat aAmount);
+ static VGfloat vgPathLength(VGPath aPath, VGint aStartSegment, VGint aNumSegments);
+ static VGbitfield vgGetPathCapabilities(VGPath aPath);
+ static VGPath vgCreatePath(VGint aPathFormat, VGPathDatatype aDatatype, VGfloat aScale, VGfloat aBias,
+ VGint aSegmentCapacityHint, VGint aCoordCapacityHint, VGbitfield aCapabilities);
+ static VGfloat vgGetf(VGParamType aType);
+ static VGint vgGeti(VGParamType aType);
+ static VGfloat vgGetParameterf(VGHandle aObject, VGint aParamType);
+ static VGint vgGetParameteri(VGHandle aObject, VGint aParamType);
+ static VGint vgGetParameterVectorSize(VGHandle aObject, VGint aParamType);
+ static VGMaskLayer vgCreateMaskLayer(VGint aWidth, VGint aHeight);
+ static VGuint vgGetColor(VGPaint aPaint);
+ static VGImage vgCreateImage(VGImageFormat aFormat, VGint aWidth, VGint aHeight, VGbitfield aAllowedQuality);
+ static VGImage vgChildImage(VGImage aParent, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static VGImage vgGetParent(VGImage aImage);
+ static VGImage vgCreateEGLImageTargetKHR(VGeglImageKHR aImage);
+ static VGFont vgCreateFont(VGint aGlyphCapacityHint);
+ static VGHardwareQueryResult vgHardwareQuery(VGHardwareQueryType key, VGint setting);
+ static void vgGetParameterfv(VGHandle aObject, VGint aParamType, VGint aCount, VGfloat * aValues);
+ static void vgGetParameteriv(VGHandle aObject, VGint aParamType, VGint aCount, VGint * aValues);
+ static VGint vgGetVectorSize(VGParamType type);
+ static void vgGetfv(VGParamType aType, VGint aCount, const VGfloat * aValues);
+ static void vgGetiv(VGParamType aType, VGint aCount, const VGint * aValues);
+ static void vgGetMatrix(VGfloat* aM);
+ static void vgGetImageSubData(VGImage aImage, void* aData, VGint aDataStride, VGImageFormat aDataFormat,
+ VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static void vgReadPixels(void* aData, VGint aDataStride, VGImageFormat aDataFormat, VGint aSx, VGint aSy,
+ VGint aWidth, VGint aHeight);
+ static void vgPathBounds(VGPath aPath, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
+ static void vgPathTransformedBounds(VGPath aPath, VGfloat* aMinX, VGfloat* aMinY, VGfloat* aWidth, VGfloat* aHeight);
+ static void vgSetf(VGParamType aType, VGfloat aValue);
+ static void vgSeti(VGParamType aType, VGint aVvalue);
+ static void vgSetfv(VGParamType aType, VGint aCount, const VGfloat * aValues);
+ static void vgSetiv(VGParamType aType, VGint aCount, const VGint * aValues);
+ static void vgSetParameterf(VGHandle aObject, VGint aParamType, VGfloat aValue);
+ static void vgSetParameteri(VGHandle aObject, VGint aParamType, VGint aValue);
+ static void vgSetParameterfv(VGHandle aObject, VGint aParamType, VGint aCount, const VGfloat * aValues);
+ static void vgSetParameteriv(VGHandle aObject, VGint aParamType, VGint aCount, const VGint * aValues);
+ static void vgLoadIdentity();
+ static void vgLoadMatrix(const VGfloat* aM);
+ static void vgMultMatrix(const VGfloat* aM);
+ static void vgTranslate(VGfloat aTx, VGfloat aTy);
+ static void vgScale(VGfloat aSx, VGfloat aSy);
+ static void vgShear(VGfloat aShx, VGfloat aShy);
+ static void vgRotate(VGfloat aAngle);
+ static void vgMask(VGHandle aMask, VGMaskOperation aOperation, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static void vgRenderToMask(VGPath aPath, VGbitfield aPaintModes, VGMaskOperation aOperation);
+ static void vgDestroyMaskLayer(VGMaskLayer maskLayer);
+ static void vgFillMaskLayer(VGMaskLayer aMaskLayer, VGint aX, VGint aY, VGint aWidth, VGint aHeight, VGfloat aValue);
+ static void vgCopyMask(VGMaskLayer aMaskLayer, VGint aSx, VGint aSy, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
+ static void vgClear(VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static void vgClearPath(VGPath aPath, VGbitfield aCapabilities);
+ static void vgDestroyPath(VGPath aPath);
+ static void vgRemovePathCapabilities(VGPath aPath, VGbitfield aCapabilities);
+ static void vgAppendPath(VGPath aDstPath, VGPath aSrcPath);
+ static void vgAppendPathData(VGPath aDstPath, VGint aNumSegments, const VGubyte* aPathSegments, const void* aPathData);
+ static void vgModifyPathCoords(VGPath aDstPath, VGint aStartIndex, VGint aNumSegments, const void* aPathData);
+ static void vgTransformPath(VGPath aDstPath, VGPath aSrcPath);
+ static void vgPointAlongPath(VGPath aPath, VGint aStartSegment, VGint aNumSegments, VGfloat aDistance,
+ VGfloat* aX, VGfloat* aY, VGfloat* aTangentX, VGfloat* aTangentY);
+ static void vgDrawPath(VGPath aPath, VGbitfield aPaintModes);
+ static void vgDestroyPaint(VGPaint aPaint);
+ static void vgSetPaint(VGPaint aPaint, VGbitfield aPaintModes);
+ static void vgSetColor(VGPaint aPaint, VGuint aRgba);
+ static void vgPaintPattern(VGPaint aPaint, VGImage aPattern);
+ static void vgDestroyImage(VGImage aImage);
+ static void vgClearImage(VGImage aImage, VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static void vgImageSubData(VGImage aImage, const void* aData, VGint aDataStride, VGImageFormat aDataFormat,
+ VGint aX, VGint aY, VGint aWidth, VGint aHeight);
+ static void vgCopyImage(VGImage aDst, VGint aDx, VGint aDy, VGImage aSrc, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight,
+ VGboolean aDither);
+ static void vgDrawImage(VGImage aImage);
+ static void vgSetPixels(VGint aDx, VGint aDy, VGImage aSrc, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ static void vgWritePixels(const void* data, VGint aDataStride, VGImageFormat aDataFormat, VGint aDx, VGint aDy,
+ VGint aWidth, VGint aHeight);
+ static void vgGetPixels(VGImage aDst, VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ static void vgCopyPixels(VGint aDx, VGint aDy, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ static void vgDestroyFont(VGFont aFont);
+ static void vgSetGlyphToPath(VGFont aFont, VGuint aGlyphIndex, VGPath aPath, VGboolean aIsHinted, const VGfloat aGlyphOrigin [2],
+ const VGfloat aEscapement[2]);
+ static void vgSetGlyphToImage(VGFont aFont, VGuint aGlyphIndex, VGImage aImage, const VGfloat aGlyphOrigin [2],
+ const VGfloat aEscapement[2]);
+ static void vgClearGlyph(VGFont aFont, VGuint aGlyphIndex);
+ static void vgDrawGlyph(VGFont aFont, VGuint aGlyphIndex, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
+ static void vgDrawGlyphs(VGFont aFont, VGint aGlyphCount, const VGuint* aGlyphIndices, const VGfloat* aAdjustmentsX,
+ const VGfloat* aAdjustmentsY, VGbitfield aPaintModes, VGboolean aAllowAutoHinting);
+ static void vgColorMatrix(VGImage aDst, VGImage aSrc, const VGfloat* aMatrix);
+ static void vgConvolve(VGImage aDst, VGImage aSrc, VGint aKernelWidth, VGint aKernelHeight, VGint aShiftX, VGint aShiftY,
+ const VGshort* aKernel, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
+ static void vgSeparableConvolve(VGImage aDst, VGImage aSrc, VGint aKernelWidth, VGint aKernelHeight, VGint aShiftX, VGint aShiftY,
+ const VGshort* aKernelX, const VGshort* aKernelY, VGfloat aScale, VGfloat aBias, VGTilingMode aTilingMode);
+ static void vgGaussianBlur(VGImage aDst, VGImage aSrc, VGfloat aStdDeviationX, VGfloat aStdDeviationY, VGTilingMode aTilingMode);
+ static void vgLookup(VGImage aDst, VGImage aSrc, const VGubyte* aRedLUT, const VGubyte* aGreenLUT, const VGubyte* aBlueLUT,
+ const VGubyte* aAlphaLUT, VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
+ static void vgLookupSingle(VGImage aDst, VGImage aSrc, const VGuint* aLookupTable, VGImageChannel aSourceChannel,
+ VGboolean aOutputLinear, VGboolean aOutputPremultiplied);
+
+private:
+ // fns that directly talk to Host Open VG (no parameter checking)
+ static void HostVgReadPixels(MVgContext& aVgContext, void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
+ VGImageFormat aDataFormat, VGint aSx, VGint aSy, VGint aWidth, VGint aHeight);
+ static void HostVgWritePixels(MVgContext& aVgContext, const void* aPixmap, size_t aPixmapSize, VGint aHostDataStride,
+ VGImageFormat aDataFormat, VGint aDx, VGint aDy, VGint aWidth, VGint aHeight);
+
+ static VGint HostGetVectorSize(MVgContext& aVgContext, VGParamType aType);
+
+public: // ToDo find a more elegant way of calling this from XOpenVgState
+ static VGint HostGeti(MVgContext& aVgContext, VGParamType type);
+private:
+ static inline VGfloat HostGetf(MVgContext& aVgContext, VGParamType type);
+ };
+
+
+// C api extensions
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+VGImage vgCreateEGLImageTargetKHR(VGeglImageKHR image);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#include "openvg.inl"
+
+#endif // VGSTATE_H