// --------------------------------------------------------------------------- // 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; } } }
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; }