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 "tdirectgdioom.h"
#include <graphics/directgdicontext.h>
CTDirectGdiOom::CTDirectGdiOom()
{
SetTestStepName(KTDirectGdiOom);
}
CTDirectGdiOom::~CTDirectGdiOom()
{
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-OOM-0001
@SYMTestPriority
Medium
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Draw a line with many points to increase coverage of path drawing in OOM conditions.
@SYMTestActions
Create an array of 1000 points.
Draw it as a line.
@SYMTestExpectedResults
No image is produced by this test, it is purely for checking that no OOM errors occur.
*/
void CTDirectGdiOom::TestDrawLargePolyLineL()
{
_LIT(KTestName, "OOM_TestDrawLargePolyLine");
if(!iRunningOomTests)
{
INFO_PRINTF1(KTestName);
}
TInt err = CDirectGdiDriver::Open();
TESTNOERRORL(err);
CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();
TESTL(dgdiDriver != NULL);
CleanupClosePushL(*dgdiDriver);
CDirectGdiContext* gc = CDirectGdiContext::NewL(*dgdiDriver);
TESTL(gc != NULL);
CleanupStack::PushL(gc);
// Set the bitmap up...
RSgImage rsgImage;
TSgImageInfo imageInfo;
imageInfo.iSizeInPixels = TSize (320, 240);
imageInfo.iPixelFormat = iTestParams.iTargetPixelFormat;
imageInfo.iUsage = ESgUsageDirectGdiTarget;
err = rsgImage.Create(imageInfo, NULL,0);
TESTNOERRORL(err);
CleanupClosePushL(rsgImage);
RDirectGdiImageTarget dgdiImageTarget(*dgdiDriver);
err = dgdiImageTarget.Create(rsgImage);
TESTNOERRORL(err);
CleanupClosePushL(dgdiImageTarget);
err = gc->Activate(dgdiImageTarget);
TESTNOERRORL(err);
// Draw a polygon that had lots of points to attempt to make the AppendPathCommand
// methods in vgengine fail
const TInt pCount = 1000;
CArrayFixFlat<TPoint>* points = new (ELeave)CArrayFixFlat<TPoint>(pCount);
TESTL(points != NULL);
CleanupStack::PushL(points);
for(TInt i = pCount; i > 0; --i)
{
points->AppendL(TPoint(i, i));
}
gc->DrawPolyLine(points->Array());
TESTNOERRORL(dgdiDriver->GetError());
CleanupStack::PopAndDestroy(5, dgdiDriver);
FreeSgImagePixelFormatCache();
}
/**
@SYMTestCaseID
GRAPHICS-DIRECTGDI-OOM-0002
@SYMTestPriority
Medium
@SYMPREQ
PREQ39
@SYMREQ
REQ9195
REQ9201
REQ9202
REQ9222
REQ9223
REQ9236
REQ9237
@SYMTestCaseDesc
Set the pen size in OOM conditions.
@SYMTestActions
Create a graphics context.
Call SetPenSize().
@SYMTestExpectedResults
No memory leak should occur.
*/
void CTDirectGdiOom::TestSetPenSizeL()
{
_LIT(KTestName, "OOM_TestSetPenSize");
if(!iRunningOomTests)
{
INFO_PRINTF1(KTestName);
}
TInt err = CDirectGdiDriver::Open();
TESTNOERRORL(err);
CDirectGdiDriver* dgdiDriver = CDirectGdiDriver::Static();
TESTL(dgdiDriver != NULL);
CleanupClosePushL(*dgdiDriver);
CDirectGdiContext* gc = CDirectGdiContext::NewL(*dgdiDriver);
TESTL(gc != NULL);
CleanupStack::PushL(gc);
// Set the bitmap up...
RSgImage rsgImage;
TSgImageInfo imageInfo;
imageInfo.iSizeInPixels = TSize (320, 240);
imageInfo.iPixelFormat = iTestParams.iTargetPixelFormat;
imageInfo.iUsage = ESgUsageDirectGdiTarget;
err = rsgImage.Create(imageInfo, NULL,0);
TESTNOERRORL(err);
CleanupClosePushL(rsgImage);
RDirectGdiImageTarget dgdiImageTarget(*dgdiDriver);
err = dgdiImageTarget.Create(rsgImage);
TESTNOERRORL(err);
CleanupClosePushL(dgdiImageTarget);
err = gc->Activate(dgdiImageTarget);
TESTNOERRORL(err);
TRect rect(0, 0, 200, 1000);
TSize csize(300, 300);
for(TInt i = 0; i < 10; i++)
{
gc->SetPenSize(TSize(i,i));
gc->SetPenStyle(DirectGdi::ENullPen);
gc->SetBrushStyle(DirectGdi::ESolidBrush);
gc->DrawRoundRect(rect, csize);
gc->SetPenStyle(DirectGdi::ESolidPen);
gc->DrawRoundRect(rect, csize);
TESTNOERRORL(dgdiDriver->GetError());
}
CleanupStack::PopAndDestroy(4, dgdiDriver);
FreeSgImagePixelFormatCache();
}
/**
Helper function to force SgImage's internal cache of pixel formats to be emptied,
by asking it to lookup a configuration that will always return 0.
*/
void CTDirectGdiOom::FreeSgImagePixelFormatCache()
{
// This will force the SgImage's cached array of pixel formats to be freed.
TInt count;
TSgImageInfo info;
info.iSizeInPixels = TSize(10, 10);
info.iUsage = ESgUsageDirectGdiSource;
info.iShareable = EFalse;
info.iCpuAccess = ESgCpuAccessReadWrite;
info.iScreenId = 100;
TEST(KErrNone == RSgImage::GetPixelFormats(info, NULL, count));
TEST(count == 0);
}
/**
Override of base class pure virtual
Our implementation only gets called if the base class doTestStepPreambleL() did
not leave. That being the case, the current test result value will be EPass.
@leave Gets system wide error code
@return TVerdict code
*/
TVerdict CTDirectGdiOom::doTestStepL()
{
if (iUseDirectGdi)
{
// Just test for one pixel format to speed up testing
iTestParams.iTargetPixelFormat = iTargetPixelFormatArray[0];
RunOomTestsL();
}
SetOverallTestStepID(_L("GRAPHICS-DIRECTGDI-OOM-0001"));
RecordTestResultL();
SetOverallTestStepID(_L("GRAPHICS-DIRECTGDI-OOM-0002"));
RecordTestResultL();
CloseTMSGraphicsStep();
return TestStepResult();
}
/**
Override of base class virtual
@leave Gets system wide error code
@return - TVerdict code
*/
TVerdict CTDirectGdiOom::doTestStepPreambleL()
{
CTDirectGdiStepBase::doTestStepPreambleL();
return TestStepResult();
}
/**
Override of base class pure virtual
Lists the tests to be run
*/
void CTDirectGdiOom::RunTestsL()
{
TestDrawLargePolyLineL();
TestSetPenSizeL();
}