diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/Client/src/alfm3gmesh.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/Client/src/alfm3gmesh.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2007 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: M3G 3D Mesh +* +*/ + + + +#include "alf/alfm3gmesh.h" +#include "alf/alfenv.h" +#include "alf/alfgencomponent.h" +#include "alf/alfconstants.h" +#include "alflogger.h" + +struct CAlfM3GMesh::TM3GMeshPrivateData + { + CAlfEnv* iEnv; // Not owned + CAlfGenComponent* iComms; // Not owned + }; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Exposed constructor +// --------------------------------------------------------------------------- +// +CAlfM3GMesh* CAlfM3GMesh::NewL( CAlfGenComponent& aComms, CAlfEnv& aEnv ) + { + CAlfM3GMesh* self = new( ELeave ) CAlfM3GMesh; + CleanupStack::PushL( self ); + self->ConstructL( aComms, aEnv ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// First phase constructor +// --------------------------------------------------------------------------- +// +CAlfM3GMesh::CAlfM3GMesh() + { + } + +// --------------------------------------------------------------------------- +// Second phase constructor +// --------------------------------------------------------------------------- +// +void CAlfM3GMesh::ConstructL( CAlfGenComponent& aComms, CAlfEnv& aEnv ) + { + // Construct the base class + CAlfMesh::ConstructL(aComms, EAlfMeshTypeM3G); + + // Create object data. + iData = new (ELeave) TM3GMeshPrivateData; + + // Zero all object data + iData->iEnv = NULL; + iData->iComms = NULL; + + // Fill data + iData->iEnv = &aEnv; + iData->iComms = &aComms; + + // Create input and output buffers for inter-process communication + TBuf8<1> outDummy; + TInt param = EAlfMeshTypeM3G; + TPckgC buf(param); + + // Call a synchronous command to create an associated server-side M3G mesh. + TInt err = iData->iComms->DoSynchronousCmd(EAlfMeshVisualCreateMesh, buf, outDummy); + if (err) + { + __ALFLOGSTRING1( "CAlfM3GMesh::ConstructL leave error %d", err ) + User::Leave( err ); + } + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CAlfM3GMesh::~CAlfM3GMesh() + { + delete iData; + iData = NULL; + } + + +// --------------------------------------------------------------------------- +// Loads a new M3G Mesh scene into this M3G mesh +// --------------------------------------------------------------------------- +// +EXPORT_C void CAlfM3GMesh::LoadSceneL(const TDesC& aFileName) + { + ASSERT(iData != NULL); + + TFileName filename = aFileName; + + // Prepend the image file path to the filename. + iData->iEnv->TextureManager().PrependImagePath(filename); + + // Create input and output buffers for inter-process communication + TBuf8<1> outDummy; + TAlfMeshLoadM3GSceneParams params; + params.iFilename = filename; + + TPckg paramsPckg(params); + + // Call a synchronous command to load the M3G scene graph + TInt err = iData->iComms->DoSynchronousCmd(EAlfMeshLoadM3GScene, paramsPckg, outDummy); + if (err) + { + __ALFLOGSTRING1( "CAlfM3GMesh::LoadSceneL leave error %d", err ) + User::Leave( err ); + } + }