graphicsresourceservices/graphicsresource/src/sgdrawable.cpp
author Faisal Memon <faisal.memon@nokia.com>
Fri, 25 Jun 2010 17:49:58 +0100
branchEGL_MERGE
changeset 105 158b2308cc08
parent 0 5d03bc08d59c
permissions -rw-r--r--
Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.

// Copyright (c) 2007-2009 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 "sgdriver.h"
#include "sgresourceadapter.h"


/**
@publishedPartner
@prototype
@deprecated

Default constructor.

@pre None.
@post This RSgDrawable handle is null.
*/
EXPORT_C RSgDrawable::RSgDrawable()
	: iImpl(NULL)
	{
	iHandleType = KSgDrawableTypeUid;
	}


/**
@publishedPartner
@prototype
@deprecated

Opens a new handle to a drawable resource.

@param aId The unique identifier of the drawable resource.
@pre The Graphics Resource driver is initialised for use in the context of the
     calling process.
@pre This RSgDrawable handle is null.
@pre aId identifies an existing drawable resource.
@post This RSgDrawable handle references the drawable resource specified by
      its unique identifier. The reference count for the drawable resource is
      incremented by one.
@return KErrNone if successful.
@return KErrInUse if this RSgDrawable handle was not null.
@return KErrArgument if aId is the null drawable resource identifier.
@return KErrNotFound if aId cannot be found to refer to an existing drawable resource.
@return KErrPermissionDenied if this process is not permitted to access the drawable
        resource specified by aId.
@return KErrNoMemory if there is not enough system memory.
@panic SGRES 5 in debug builds if the Graphics Resource driver is not initialised
       for use in the context of the calling process.
*/
EXPORT_C TInt RSgDrawable::Open(const TSgDrawableId& aId)
	{
#ifdef _DEBUG
	gPls.iMutex.Wait();
	__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
#endif
	TInt err = gPls.iDriver->OpenDrawable(aId, KSgDefaultOpenMode, iHandleType, iImpl);
#ifdef _DEBUG
	gPls.iMutex.Signal();
#endif
	return err;
	}


/**
@internalTechnology
@prototype

Opens a new handle to a drawable resource. This overload of Open() is intended for
the adaptation layer of renderers to be able to request special options when opening
a drawable resource.

@param aId The unique identifier of the drawable resource.
@param aMode Flags controlling how the drawable resource is opened. The bits of this
       argument are defined by the enumeration TSgDrawableOpenModes.
@pre The Graphics Resource driver is initialised for use in the context of the
     calling process.
@pre This RSgDrawable handle is null.
@pre aId identifies an existing drawable resource.
@pre All of the requested opening options in aMode are supported.
@post This RSgDrawable handle references the drawable resource specified by
      its unique identifier. The reference count for the drawable resource is
      incremented by one.
@return KErrNone if successful.
@return KErrInUse if this RSgDrawable handle was not null.
@return KErrArgument if aId is the null drawable resource identifier.
@return KErrNotFound if aId cannot be found to refer to an existing drawable resource.
@return KErrPermissionDenied if this process is not permitted to access the drawable
        resource specified by aId.
@return KErrNotSupported if any of the requested opening options in aMode is not
        supported.
@return KErrNoMemory if there is not enough system memory.
@panic SGRES 5 in debug builds if the Graphics Resource driver is not initialised
       for use in the context of the calling process.
@see TSgDrawableOpenModes
*/
EXPORT_C TInt RSgDrawable::Open(const TSgDrawableId& aId, TUint32 aMode)
	{
#ifdef _DEBUG
	gPls.iMutex.Wait();
	__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
#endif
	TInt err = gPls.iDriver->OpenDrawable(aId, aMode, iHandleType, iImpl);
#ifdef _DEBUG
	gPls.iMutex.Signal();
#endif
	return err;
	}


/**
@publishedPartner
@prototype
@deprecated

Closes a handle to a drawable resource. If there are no remaining handles to the
drawable resource, then it can be destroyed by the Graphics Resource driver.
Calling Close() on a null handle is allowed but has no effect.

@pre If this RSgDrawable handle is not null then the Graphics Resource driver is
     initialised for use in the context of the calling process.
@pre This RSgDrawable handle is valid.
@post This RSgDrawable handle is null. The reference count for the previously
      referenced drawable resource, if any, is decremented by one.
@panic SGRES 2 in debug builds if this RSgDrawable handle is invalid.
@panic SGRES 5 in debug builds if this RSgDrawable handle is not null and the Graphics
       Resource driver is not initialised for use in the context of the calling process.
*/
EXPORT_C void RSgDrawable::Close()
	{
	if (iImpl)
		{
#ifdef _DEBUG
		gPls.iMutex.Wait();
		__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
		__ASSERT_DEBUG(gPls.iDriver->CheckDrawable(*iImpl), Panic(ESgPanicBadDrawableHandle));
#endif
		iImpl->Close();
		iImpl = NULL;
#ifdef _DEBUG
		gPls.iMutex.Signal();
#endif
		}
	}


/**
@publishedPartner
@prototype
@deprecated

Retrieves the unique identifier of a drawable resource. The unique identifier can be
used to share the drawable resource with another process.

@pre The Graphics Resource driver is initialised for use in the context of the
     calling process.
@pre This RSgDrawable handle is valid.
@post None.
@return The unique identifier of the drawable resource or the null drawable resource
        identifier if this RSgDrawable handle is null.
@panic SGRES 2 in debug builds if this RSgDrawable handle is invalid.
@panic SGRES 5 in debug builds if the Graphics Resource driver is not initialised
       for use in the context of the calling process.
*/
EXPORT_C const TSgDrawableId& RSgDrawable::Id() const
	{
	if (!iImpl)
		{
		return KSgNullDrawableId;
		}
#ifdef _DEBUG
	gPls.iMutex.Wait();
	__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
	__ASSERT_DEBUG(gPls.iDriver->CheckDrawable(*iImpl), Panic(ESgPanicBadDrawableHandle));
#endif
	const TSgDrawableId& id = iImpl->Id();
#ifdef _DEBUG
	gPls.iMutex.Signal();
#endif
	return id;
	}


/**
@publishedPartner
@prototype
@deprecated

Tests whether this RSgDrawable handle is null.

@pre None.
@post None.
@return ETrue, if this RSgDrawable handle is null, EFalse otherwise.
*/
EXPORT_C TBool RSgDrawable::IsNull() const
	{
	return iImpl == NULL;
	}


/**
@publishedPartner
@prototype
@deprecated

Retrieves the run-time type of a drawable resource as a globally unique identifier.

@pre The Graphics Resource driver is initialised for use in the context of the
     calling process.
@pre This RSgDrawable handle is valid.
@post None.
@return The run-time type of the drawable resource as a globally unique identifier
        or the null globally unique identifier if this RSgDrawable handle is null.
@panic SGRES 2 in debug builds if this RSgDrawable handle is invalid.
@panic SGRES 5 in debug builds if the Graphics Resource driver is not initialised
       for use in the context of the calling process.
@see RSgDrawable::HandleType()
*/
EXPORT_C TUid RSgDrawable::DrawableType() const
	{
	if (!iImpl)
		{
		return KNullUid;
		}
#ifdef _DEBUG
	gPls.iMutex.Wait();
	__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
	__ASSERT_DEBUG(gPls.iDriver->CheckDrawable(*iImpl), Panic(ESgPanicBadDrawableHandle));
#endif
	TUid type = iImpl->DrawableType();
#ifdef _DEBUG
	gPls.iMutex.Signal();
#endif
	return type;
	}


/**
@internalComponent

Makes an extension interface available on a drawable resource. The extension interface
is specified by globally unique identifier.

@param aInterfaceUid Globally unique identifier of the interface to be made available.
@param aInterfacePtr On return, a pointer to the specified interface.
@pre The Graphics Resource driver is initialised for use in the context of the
     calling process.
@pre This RSgDrawable handle is valid and not null.
@pre The specified interface is supported on the drawable resource.
@post The specified interface is available until this RSgDrawable handle is closed.
@return KErrNone if successful.
@return KErrBadHandle if this RSgDrawable handle is null.
@return KErrExtensionNotSupported if the specified interface is not supported on
        the drawable resource.
@return KErrNoMemory if there is not enough system memory.
@panic SGRES 2 in debug builds if this RSgDrawable handle is invalid.
@panic SGRES 5 in debug builds if the Graphics Resource driver is not initialised
       for use in the context of the calling process.
@see RSgDrawable::GetInterface<M>(M*&)
@see RSgDrawable::GetInterface<M>(const M*&) const
*/
EXPORT_C TInt RSgDrawable::GetInterface(TUid aInterfaceUid, TAny*& aInterfacePtr) const
	{
	if (!iImpl)
		{
		return KErrBadHandle;
		}
#ifdef _DEBUG
	gPls.iMutex.Wait();
	__ASSERT_DEBUG(gPls.iDriver, Panic(ESgPanicNoDriver));
	__ASSERT_DEBUG(gPls.iDriver->CheckDrawable(*iImpl), Panic(ESgPanicBadDrawableHandle));
#endif
	TInt err = iImpl->GetInterface(aInterfaceUid, aInterfacePtr);
#ifdef _DEBUG
	gPls.iMutex.Signal();
#endif
	return err;
	}