diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/rendervg10/src/HuiFxVg10FilterBase.cpp --- /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(&aSource))->AcquireSubImage(aSourceRect); + VGImage destImage = (reinterpret_cast(&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(&aSource))->ReleaseSubImage(srcImage); + (reinterpret_cast(&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; + }