// ---------------------------------------------------------------------------
 // CGpxConverterAO::RunL()
 // ---------------------------------------------------------------------------
void CGpxConverterAO::RunL()
	{
	switch( iState )
		{
		case( EIdle ):
			{
			LOG("CGpxConverterAO::RunL - EIdle");
			// nothing to do here
			break;
			}
		case( ENextFile ):
			{
			LOG("CGpxConverterAO::RunL - ENextFile");
			if( iFileQueue.Count() > 0 )
				{
				TInt err;
				iFixLost = ETrue;
                delete iTempFile;
                iTempFile = NULL;
                delete iBoundaries;
                iBoundaries = NULL;
				// get next temp-file from queue
				iTempFile = iFileQueue[0];
				iBoundaries = iBoundQueue[0];
				err = iReader.Open( iFs, *iTempFile, EFileRead );				
				// remove from queue				
				iFileQueue.Remove( 0 );
				iBoundQueue.Remove( 0 );
				if ( err != KErrNone )
					{
					SetState( ENextFile );
					}
				TRAP( err, ReadTagIdL() );
				
				if ( !iBoundaries )
					{
					SetState( ECrashRecovery );
					}
				else
					{
					SetState( EStartFile );
					}
				}
			else
				{
				// everything done
				SetState( EIdle );
				}
			
			break;
			}
		case( ECrashRecovery ):
			{
			LOG("CGpxConverterAO::RunL - ECrashRecovery");
			TRAPD( readErr, iReader >> iTempItem );
			if ( readErr == KErrNone )
				{
				CalculateBoundaries();
				SetState( ECrashRecovery );
				}
			else
				{
				TInt err;
				iReader.Close();
				err = iReader.Open( iFs, *iTempFile, EFileRead );
				if( err != KErrNone )
					{
					SetState( ENextFile );
					}
				TRAP( err, ReadTagIdL() );
				SetState( EStartFile );
				}
			
			break;
			}
		case( EStartFile ):
			{
			LOG("CGpxConverterAO::RunL - EStartFile");
			_LIT( KExtGPX, ".gpx" );
			TParsePtrC parse( *iTempFile );
			
			TRAPD(err, GetTrackLogPathL( iGpxPath ));
			
			iGpxFileName.Copy( parse.Name() );
			iGpxFileName.Append( KExtGPX );
			iGpxPath.Append( iGpxFileName );
			
			err = iFs.MkDirAll( iGpxPath );
			if ( err != KErrAlreadyExists && err != KErrNone )
				{
				User::Leave( err );
				}
			
			err = iGpxFile.Create(iFs, iGpxPath, EFileWrite);
			if ( err != KErrNone )
				{
				err = iGpxFile.Open(iFs, iGpxPath, EFileWrite);
				if ( err != KErrNone )
					{
					User::Leave( err );
					}
				}

			WriteStartingTags();
			iStartTime = 0;
			iEndTime = 0;
			
			SetState( EProcessing );
			break;
			}
		
		case( EProcessing ):
			{
			LOG("CGpxConverterAO::RunL - EProcessing");
			
			TRAPD( readError, iReader >> iTempItem );
			if ( readError == KErrNone )
				{
				if ( iStartTime == 0 )
					{
					iStartTime = iTempItem.iTimeStamp;
					}
				iEndTime = iTempItem.iTimeStamp;
				WriteItemToFile();				
				SetState( EProcessing );
				}
			else
				{
				// no items left in file
				iReader.Close();
				SetState( ECloseFile );
				}
			break;
			}
		case( ECloseFile ):
			{
			LOG("CGpxConverterAO::RunL - ECloseFile");
			WriteClosingTags();
			iGpxFile.Close();

			TReal distance( 0 );
			if( iBoundaries )
				{
				distance = iBoundaries->distance;
				}
			
			for( TInt i = iObservers.Count() - 1; i >=0; i-- )
				{
				iObservers[i]->GpxFileCreated( iGpxPath, iTagId, distance, iStartTime, iEndTime );
				}
			
			
			iFs.Delete( *iTempFile );
			
			delete iTempFile;
			iTempFile = NULL;
			
			delete iBoundaries;
			iBoundaries = NULL;
			
			SetState( ENextFile );
			break;
			}
		}
	}
Esempio n. 2
0
bool Shadows::InitGL()
{
	GLResourceManager &loader = GLResourceManager::Instance();

	// Load Shaders
	if (!LoadShaders())
		return false;

	if (!loader.LoadTextureFromFile("data/textures/crate-base.bmp",
		uiBGTexture, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR))
		return false;
	
	unsigned int handle3DSFile[2];
	if (!loader.Load3DSFile("data/scenes/primitives.3ds", handle3DSFile[0]))
		return false;

	if (!loader.Load3DSFile("data/scenes/sphere-cube.3ds", handle3DSFile[1]))
		return false;

	//if (!loader.Load3DSFile("data/scenes/monkey.3ds", handle3DSFile[2]))
	//	return false;

	// Load outer room
	pRoomMesh = new Mesh(loader.FindMesh(handle3DSFile[0], "Box"));
	
	// Load Object Meshes and generate Shadow Volumes
	pSVMesh[MESH_TORUS] = new ShadowVolumeMesh(
		loader.FindMesh(handle3DSFile[0], meshes[MESH_TORUS]));
	pSVMesh[MESH_TORUS_KNOT] = new ShadowVolumeMesh(
		loader.FindMesh(handle3DSFile[0], meshes[MESH_TORUS_KNOT]));
	
	pSVMesh[MESH_CUBE] = new ShadowVolumeMesh(
		loader.FindMesh(handle3DSFile[1], meshes[MESH_CUBE]));
	pSVMesh[MESH_SPHERE] = new ShadowVolumeMesh(
		loader.FindMesh(handle3DSFile[1], meshes[MESH_SPHERE]));

	//pSVMesh[MESH_MONKEY] = new ShadowVolumeMesh(
	//	loader.FindMesh(handle3DSFile[2], meshes[MESH_MONKEY]), 60.0f);

	aaiMeshGroup[0].push_back(MESH_TORUS_KNOT);
	aaiMeshGroup[1].push_back(MESH_TORUS);
	aaiMeshGroup[2].push_back(MESH_SPHERE);
	aaiMeshGroup[2].push_back(MESH_CUBE);


	CalculateBoundaries(handle3DSFile[0]);

	fMinShadowExtent = 0.0f;
	fMaxShadowExtent = 2.0f * fMaxDistance;
	fShadowExtent = fMaxShadowExtent;

	pTetraVBO = new IndexedVBO((void *)TetraVertices, sizeof(float) * 3, 4,
	                           (void *)TetraIndices, 12);


	pFont = auto_ptr<FontManager>(new FontTechno("data/textures/FontB.bmp"));
	if (!pFont->Init())
		return false;

	// Initialize FPS graph
	pFPSGraph = auto_ptr<TextGraph>(new TextGraph());
	//if (!pFPSGraph->Init(true, true, true, true, "%.1f", 0.075f, 4.0f, 3000, 0.6f, 0.55f, 0.98f, 0.90f, false))
	if (!pFPSGraph->Init(true, true, true, true, "%.1f", 0.08f, 4.0f, 7000, 0.45f, 0.55f, 0.98f, 0.90f, false))
		return false;

	glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

	Resize(ShellGet(SHELL_WIDTH), ShellGet(SHELL_HEIGHT));

	glDisable(GL_DEPTH_TEST);

	// Hack
	fMaxDistance *= 3.0f;

	fpsCamera.Init(fDefDistance, -20.0f);

	glEnable(GL_TEXTURE_2D);
	glEnableClientState(GL_VERTEX_ARRAY);	
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
	glEnableClientState(GL_NORMAL_ARRAY);	
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

	timer.Start();
	return true;
}