diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,191 @@ +/* +* Copyright (c) 2008 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: +* +*/ + + + +#ifndef HUIFXENGINE_H_ +#define HUIFXENGINE_H_ + +#include "HuiFxConstants.h" +#include "HuiFxParameter.h" +#include "huieffectable.h" +#include +#include + + +#define HUIFX_RBCACHE_ENABLED +#define HUIFX_EFFECTCACHE_ENABLED + +//FORWARD DECLARATIONS +class CHuiFxRenderbuffer; +class CHuiFxFilter; +class CHuiFxEffect; +class CHuiVisual; +class CHuiFxEffectCache; +class MAlfGfxEffectObserver; +class CHuiGc; + +class CHuiFxEngine : public CBase, public MHuiLowMemoryObserver, public MHuiMemoryLevelObserver + { + // important constant! Affects memory fragmentation in backend too small + // number forces lots of acquires/releases resulting in fragmented memory + // and finally panic. + + // CACHE_SIZE set to 20 to avoid buffer creation at worst case scenario (fading). + // Emulator cannot currently handle that much (out of memory) +#ifdef __WINS__ + static const TInt CACHE_SIZE = 1; +#else + static const TInt CACHE_SIZE = 20; +#endif + friend class CHuiFxEffect; +protected: + IMPORT_C void ConstructL(THuiFxEngineType aEngineType); +public: + IMPORT_C virtual ~CHuiFxEngine(); + // Engine management + IMPORT_C virtual void Release(); + IMPORT_C virtual void RestoreL(); + + // Render buffer management + IMPORT_C virtual CHuiFxRenderbuffer* AcquireRenderbuffer(const TSize& aDesiredSize); + CHuiFxRenderbuffer* AcquireRenderbuffer(const TSize& aDesiredSize, TBool aAlllowLarger); + + IMPORT_C virtual void ReleaseRenderbuffer(CHuiFxRenderbuffer* aBuffer); + virtual CHuiFxRenderbuffer* DefaultRenderbuffer() = 0; + + // Filter construction + virtual CHuiFxFilter* CreateFilterL(THuiFxFilterType aType) = 0; + + // Composition + // TODO: Coordinates + virtual void Composite(CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource, + const TRect& aTargetRect, const TRect& aSourceRect, + THuiFxBlendingMode aMode, TInt aAlpha) = 0; + + // Composition variant to compose directly to the screen. Uses always over blending with constant alpha. + IMPORT_C virtual void Composite(CHuiGc& aGc, CHuiFxRenderbuffer& aSource, const TPoint& aTargetPoint, TBool aOpaque, TInt aAlpha); + + // Effect construction + // TODO: Other needed effect parameters? + // Demarcation rectangele added. + + // Effect end observer and handle added + IMPORT_C void RegisterEffectL(const TDesC &aFileName); + IMPORT_C void UnRegisterEffectL(const TDesC &aFileName); + IMPORT_C void LoadEffectL( + const TDesC& aFileName, + CHuiFxEffect*& aEffect, + MHuiEffectable* aVisual = 0, + TRect* extRect = 0, + MAlfGfxEffectObserver* aEffectEndObserver = 0, + TInt aHandle = 0, + TInt aFlags = 0 ); + + IMPORT_C void LoadGroupEffectL( + const TDesC& aFileName, + CHuiFxEffect*& aEffect, + MHuiEffectable* aVisual = 0, + TInt aGroupHandle = 0, + TRect* extRect = 0, + MAlfGfxEffectObserver* aEffectEndObserver = 0, + TInt aHandle = 0, + TInt aFlags = 0 ); + + IMPORT_C TBool FxmlUsesInput1(const TDesC &aFileName); + + + IMPORT_C void AdvanceTime(TReal32 aElapsedTime); + + IMPORT_C TReal32 GetReferenceValue(THuiFxReferencePoint aPoint); + + IMPORT_C THuiFxEngineType EngineType(); + + //from MHuiLowMemoryObserver + // deprecated + IMPORT_C void EnableLowMemoryState(TBool aEnable); + + /* + * BeginGroupEffect + * + * Begins new group. start collecting effects, that should be set to motion at the same + * time. + */ + IMPORT_C void BeginGroupEffect(TInt aGroup); + + + IMPORT_C TInt ActiveGroupEffect(); + + /* + * StartGroupEffect + * + * Starts syncronously group of effects that have the same aGroup id. + */ + IMPORT_C void StartGroupEffect(TInt aGroup); + + TInt LowMemoryState(); + + TBool HasActiveEffects() const; + + void ClearCache(); + + void NotifyEffectEndObservers(); + + IMPORT_C void SetMemoryLevel(THuiMemoryLevel aLevel); + +protected: + IMPORT_C void AddEffectL(CHuiFxEffect* aEffect); + IMPORT_C void RemoveEffect(CHuiFxEffect* aEffect); + + TRequestStatus iParserStatus; + TInt iBuffersInUse; + +private: + // Render buffer management --- native implementations + virtual CHuiFxRenderbuffer* AcquireNativeRenderbuffer(const TSize& aDesiredSize) = 0; + virtual void ReleaseNativeRenderbuffer(CHuiFxRenderbuffer* aBuffer) = 0; + + // Render buffer cache +#ifdef HUIFX_RBCACHE_ENABLED + CHuiFxRenderbuffer* LookupFreeRenderbuffer(const TSize& aDesiredSize, TBool aAlllowLarger); + void InsertFreeRenderbuffer(CHuiFxRenderbuffer *aBuffer); + inline TBool IsCacheEmpty() const; + inline TBool IsCacheFull() const; + + // simple general renderbuffer cache + TInt iBuffersInCache; + CHuiFxRenderbuffer* iBufferCache[CACHE_SIZE]; +#endif + +#ifdef HUIFX_PERF_COUNTERS + // TODO! counters for performance evaluation?! + TInt iMaxAcquiredBuffers; + TInt iMaxFreeBuffers; + TSize iMaxBufferSize; + TInt iHit; + TInt iMiss; +#endif + + RPointerArray iActiveEffects; + THuiFxEngineType iType; + TRect iExtRect; + CHuiFxEffectCache *iCache; + TInt iLowGraphicsMemoryMode; + RArray iActiveEffectGroups; + }; + +#endif /*HUIFXENGINE_H_*/