graphicsdeviceinterface/directgdi/src/directgdidrawablesource.cpp
author Gareth Stockwell <gareth.stockwell@accenture.com>
Fri, 05 Nov 2010 17:31:20 +0000
branchbug235_bringup_0
changeset 215 097e92a68d68
parent 0 5d03bc08d59c
permissions -rw-r--r--
Added GLES 1.x spinning cube-rendering code to eglbringuptest The coordinate, color and index data are uploaded to server-side buffers by the CGLES1Cube::KhrSetup function. CGLES1Cube::KhrPaint just sets the view matrix and issues a draw command. Which demo to display can be selected by passing its name on the command line, e.g. eglbringuptest vgline eglbringuptest gles1cube If no name is provided, the application defaults to vgline.

// 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 "directgdidriver.h"
#include "directgdipaniccodes.h"
#include <graphics/directgdidrawablesource.h>
#include <graphics/sgimage.h>

/**
Default constructor. 
Only for embedding instances of RDirectGdiDrawableSource into other classes as data members. 
Before a RDirectGdiDrawableSource can be used the other constructor must be called. 
*/
EXPORT_C RDirectGdiDrawableSource::RDirectGdiDrawableSource()
	: iDriver(NULL), iHandle(KNullHandle)
	{
	}

/**
Constructor.

@param 	aDriver The CDirectGdiDriver for this thread.

@pre 	The CDirectGdiDriver object has been initialised from the calling thread.
@post 	This handle has a pointer to the CDirectGdiDriver for this thread. 
		This handle is not associated with any DirectGDI adaptation-specific resource.
*/
EXPORT_C RDirectGdiDrawableSource::RDirectGdiDrawableSource(CDirectGdiDriver& aDriver)
	: iDriver(&aDriver), iHandle(KNullHandle)
	{
	}

/**
Creates a DirectGDI adaptation-specific resource that is bound to the specified
drawable resource so it can be drawn using the DirectGDI rendering API.

@param 	aDrawable The drawable resource.

@pre 	CDirectGdiDriver object for this handle has been set. The drawable
		resource has been fully constructed.
@post 	The DirectGDI adaptation-specific resource that is bound to the given
		non-pixel resource is created and this handle is now associated with it.
		The reference counter on the drawable resource is incremented.

@return KErrNone if successful, KErrArgument if the drawable resource is not
		valid, KErrAlreadyExists if this handle is already associated with a
		DirectGDI adaptation-specific resource, otherwise one of the system-wide
		error codes.
@panic  DGDI 18, if this drawable source has no pointer to its assosicated CDirectGdiDriver.
        This may occur if constructed using the default constructor, and has not yet been 
        assigned to another drawable source created with the constructor overload.
*/
EXPORT_C TInt RDirectGdiDrawableSource::Create(const RSgDrawable& aDrawable)
	{
	GRAPHICS_ASSERT_ALWAYS(iDriver, EDirectGdiPanicDrawableSourceWithoutDriver);
	return iDriver->CreateDrawableSource(*this, aDrawable);
	}

/**
Destroys the DirectGDI adaptation-specific resource associated with this handle.
Calling this method on a handle that is not associated with any DirectGDI 
adaptation-specific resource will do nothing. Once Close() is called, this handle can be reused.

@pre 	The CDirectGdiDriver object for this handle has been set.
@post 	The DirectGDI specific resource associated with this handle will be destroyed,
		at any time. This handle is no longer associated with a DirectGDI specific
		resource. The reference counter of the underlying drawable resource is
		decremented.
@panic  DGDI 18, if this drawable source has no pointer to its assosicated CDirectGdiDriver.
        This may occur if constructed using the default constructor, and has not yet been 
        assigned to another drawable source created with the constructor overload.
*/
EXPORT_C void RDirectGdiDrawableSource::Close()
	{
	if (iHandle != KNullHandle)
		{
		GRAPHICS_ASSERT_ALWAYS(iDriver, EDirectGdiPanicDrawableSourceWithoutDriver);
		iDriver->CloseDrawableSource(*this);
		}
	}