First public contribution.
1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
23 #include "t_pseudoappeglbase.h"
25 const TInt KMaxConfigs = 1024;
27 CEglBase::CEglBase(const TDisplayMode& aMode,const TSize& aSurfaceSz, const TInt aHRate, const TInt aVRate)
28 : CTestAnimation(),iDispMode(aMode)
30 iSurfaceSize=aSurfaceSz;
31 iHorizontalRate=aHRate;
35 void CEglBase::BaseConstructL(RWindow* aWin)
38 iDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
39 TestL(iDisplay!=EGL_NO_DISPLAY, _L("eglGetDisplay failed"));
42 TInt ret = eglInitialize(iDisplay, NULL, NULL);
43 TestL(ret, _L("eglInitialize failed"));
47 EGLConfig configs[KMaxConfigs];
48 ret = eglGetConfigs(iDisplay, configs, KMaxConfigs, &numConfigs);
49 TestL(ret, _L("eglGetConfigs failed"));
50 TestL(numConfigs>0, _L("eglGetConfigs returned no configs"));
52 const EGLint* attribList = NULL;
54 // Select attribs based on current display mode
57 case EColor4K: attribList = KColor4KAttribList; break;
58 case EColor64K: attribList = KColor64KAttribList; break;
59 case EColor16M: attribList = KColor16MAttribList; break;
60 case EColor16MA:attribList = KColor16MAAttribList; break;
61 default: User::Panic(_L("CEglBase"), KErrArgument);
64 RDebug::Print(_L("Display Mode: %d"), iDispMode );
67 ret=eglChooseConfig(iDisplay, attribList, configs, KMaxConfigs, &numConfigs);
68 TestL(ret, _L("eglChooseConfig failed"));
69 TestL(numConfigs>0, _L("eglChooseConfig returned no configs"));
73 TInt configIndex = GetSuitableConfig(configs, numConfigs, attribList);
74 TestL(configIndex!=KErrNotFound, _L("No suitable configuration found") );
75 iUseConfig = configs[configIndex];
78 // eglCreateWindowSurface
79 iSurface = eglCreateWindowSurface(iDisplay, iUseConfig, aWin, NULL);
80 TestL(iSurface!=EGL_NO_SURFACE, _L("eglCreateWindowSurface failed") );
85 // Clean everything allocated.
86 eglMakeCurrent(iDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
87 eglDestroyContext(iDisplay, iContext);
88 eglDestroySurface(iDisplay, iSurface);
89 eglTerminate(iDisplay);
92 TInt CEglBase::GetSuitableConfig(const EGLConfig* aConfigs, EGLint aNumConfigs, const EGLint* attribs)
94 TInt configIndex = KErrNotFound;
95 for (TInt i=0; i<aNumConfigs; i++)
97 EGLConfig config = aConfigs[i];
100 TInt ret=eglGetConfigAttrib(iDisplay, config, attribs[0], &value);
101 RDebug::Print(_L("eglGetConfigAttrib returned %d"), ret );
102 if (ret && value != attribs[1])
106 ret=eglGetConfigAttrib(iDisplay, config, attribs[2], &value);
107 if (ret && value != attribs[3])
111 ret=eglGetConfigAttrib(iDisplay, config, attribs[4], &value);
112 if (ret && value != attribs[5])
116 ret=eglGetConfigAttrib(iDisplay, config, attribs[6], &value);
117 if (ret && value != attribs[7])
121 ret=eglGetConfigAttrib(iDisplay, config, attribs[8], &value);
122 if (ret && value != attribs[9])
135 void CEglBase::TestL(const TInt aRet, const TDesC& aMessage)
139 RDebug::Print(_L("Error: %d - %S"), aRet, &aMessage);
140 User::Leave(KErrUnknown);