uiacceltk/hitchcock/coretoolkit/inc/HuiFxEngine.h
changeset 0 15bf7259bb7c
child 3 d8a3531bc6b8
--- /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 <uiacceltk/huilowmemoryobserver.h>
+#include <e32std.h>
+
+
+#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<CHuiFxEffect>  iActiveEffects;
+    THuiFxEngineType             iType;
+    TRect                        iExtRect;
+    CHuiFxEffectCache *iCache;
+    TInt iLowGraphicsMemoryMode;
+    RArray<TInt> iActiveEffectGroups;
+    };
+
+#endif /*HUIFXENGINE_H_*/