graphicsdeviceinterface/directgdi/test/tdirectgdieglcontent_server.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/directgdi/test/tdirectgdieglcontent_server.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,133 @@
+// 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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+#ifndef __TDIRECTGDIEGLCONTENT_SERVER_H__
+#define __TDIRECTGDIEGLCONTENT_SERVER_H__
+
+#include <e32base.h>
+#include <pixelformats.h>
+#include <graphics/sgimage.h>
+#include <graphics/sgimagecollection.h>
+#include <GLES/egl.h>
+
+/**
+Egl content panic codes
+*/
+enum TEglContentPanic
+	{
+	EPanicBadDescriptor,
+	EPanicIllegalFunction,
+	EPanicAlreadyReceiving
+	};
+
+void PanicClient(const RMessagePtr2& aMessage, TEglContentPanic aPanic);
+
+const TInt KEglContentDelay = 33333; // frame rate: 30 fps
+
+class CGLCube;
+
+/**
+This class contains the egl content renderer.
+CEglContent is a wrapper for CGLCube and works in two modes:
+	- Synchronous – when requested for a TsgDrawableId object CEglContent 
+		it returns it from CGLCube and the frame number is increased.  
+		Thus in the next request the next frame is obtained. 
+		Nothing is rendered until the new request occurs.
+	- Asynchronous – in this mode CEglContent forces GLCube to render 
+		frames at 30 fps frequency. On the request last rendered a frame is returned 
+		and generation is continued in the background.
+	- Asynchronous debug - start rendering the next frame (only one) immediately
+*/
+class CEglContent : public CTimer
+	{
+public:
+	/** Available rendering modes */
+	enum TMode
+		{
+		ESync, // Rendering is synchronised with client
+		EAsync, // Rendering is asynchronous with fixed rate
+		EAsyncDebug // Rendering is debug asynchronous with fixed rate
+		};
+public:
+	static CEglContent* NewL();
+	static CEglContent* NewLC();
+	virtual ~CEglContent();
+
+	void SetMode(TMode aMode);
+	TInt GetImage(TSgDrawableId& aId);
+
+private:
+	CEglContent();
+	void ConstructL();
+	void RenderNextFrame();
+
+private: // from CTimer
+	void RunL();
+
+private:
+	CGLCube* iCube;
+	/** Rendering mode (sync or async) */
+	TMode iMode;
+	/** Frame number to be rendered */
+	TInt iFrame;
+	/** Last rendered frame number */
+	TInt iLastFrame;
+	};
+
+/**
+This class contains egl content server.
+Implements server and manages CEglContent object.
+*/
+class CEglContentServer : public CServer2
+	{
+public:
+	static CServer2* NewLC();
+	void AddSession();
+	void DropSession();
+	void GetSyncImage(TSgDrawableId& aId);
+	TInt GetAsyncImage(TSgDrawableId& aId);
+	TInt GetAsyncImageDebug(TSgDrawableId& aId);
+private:
+	CEglContentServer();
+	~CEglContentServer();
+	void ConstructL();
+	CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+private:
+	TInt iSessionCount;
+	CEglContent* iContent;
+    };
+
+/**
+This class contains server side of egl content server session.
+*/
+class CEglContentSession : public CSession2
+	{
+public:
+	CEglContentSession();
+	void Create();
+private:
+	~CEglContentSession();
+	CEglContentServer& Server();
+	void ServiceL(const RMessage2& aMessage);
+	void ServiceError(const RMessage2& aMessage, TInt aError);
+	};
+
+#endif