--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10FilterBase.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,89 @@
+/*
+* 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:
+*
+*/
+
+
+
+#include "HuiFxVg10FilterBase.h"
+#include "uiacceltk/HuiUtil.h"
+
+
+//_LIT(KLitPanicMessage, "HuiFx");
+
+
+TBool CHuiFxVg10FilterBase::Draw(CHuiFxEngine& aEngine, CHuiGc& /* aGc */, CHuiFxRenderbuffer& aTarget, CHuiFxRenderbuffer& aSource,
+ const TRect& aTargetRect, const TRect& aSourceRect)
+ {
+ aTarget.BindAsTexture(ERenderbufferUsageWriteOnly);
+ aSource.BindAsTexture(ERenderbufferUsageReadOnly);
+ VGImage srcImage = (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aSource))->AcquireSubImage(aSourceRect);
+ VGImage destImage = (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aTarget))->AcquireSubImage(aTargetRect);
+
+ // take opacity into account
+ const VGfloat opacity = clamp(iOpacity, 0.0f, 1.0f);
+
+ if(opacity > EPSILON)
+ {
+ DrawEffect(aEngine, destImage, srcImage, aSourceRect.Width(), aSourceRect.Height());
+ }
+ else
+ {
+// VGint width = vgGetParameteri(srcImage, VG_IMAGE_WIDTH);
+// VGint height = vgGetParameteri(srcImage, VG_IMAGE_HEIGHT);
+ VGint width = aSourceRect.Width();
+ VGint height = aSourceRect.Height();
+ vgCopyImage(destImage, 0, 0, srcImage, 0, 0, width, height, VG_FALSE);
+ }
+
+ HUIFX_VG_INVARIANT();
+ (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aSource))->ReleaseSubImage(srcImage);
+ (reinterpret_cast<CHuiFxVg10RenderbufferBase*>(&aTarget))->ReleaseSubImage(destImage);
+ aTarget.UnbindAsTexture();
+ aSource.UnbindAsTexture();
+
+ return wasEnoughMemory();
+ }
+
+// any unexpected error results in panic
+TBool CHuiFxVg10FilterBase::wasEnoughMemory()
+ {
+#ifndef _DEBUG
+ // vgGetError() -call is REALLY SLOW on HW, remove for now at least,
+ // since nobody is really even checking this return value nor acting on it..
+ TBool success = ETrue;
+#else
+ TBool success = EFalse;
+ const VGErrorCode vgError = vgGetError();
+
+ switch(vgError)
+ {
+ case VG_NO_ERROR :
+ success = ETrue;
+ break;
+
+ case VG_OUT_OF_MEMORY_ERROR :
+ success = EFalse;
+ break;
+
+ default :
+ success = EFalse;
+ // should print an error instead of panicking
+ HUI_DEBUG1(_L("CHuiFxVg10FilterBase::wasEnoughMemory() vgError -- %04x"), vgError);
+// User::Panic(KLitPanicMessage, vgError);
+ }
+#endif
+ return success;
+ }