//Write out a binary file void Serialize::writeXMLtagfile() { hkOstream stream("geometry_xml_tagfile.xml"); hkResult res = hkSerializeUtil::saveTagfile(geometry, hkGeometryClass, stream.getStreamWriter(), HK_NULL, hkSerializeUtil::SAVE_TEXT_FORMAT); if (res != HK_SUCCESS) { HK_ERROR(0x000FF, "Failed to save binary"); } else { HK_WARN_ALWAYS(0x111AA, "Saved successfully"); } }
//Read back a serialized file void Serialize::readBack() { hkIstream stream("geometry_xml_tagfile.xml"); hkResource* resource = hkSerializeUtil::load(stream.getStreamReader()); hkBool32 failed = true; if (resource) { //Get the contained Geometry hkGeometry* readGeometry = resource->getContents<hkGeometry>(); //Check to see if the last vertex is the same, as a simple check to //see if the serialization has worked correctly. failed = !readGeometry->m_vertices[7].equals3(readGeometry->m_vertices[7]); resource->removeReference(); } if (failed) { HK_ERROR(0x000FF, "Failed loading binary"); } else { HK_WARN_ALWAYS(0x111AA, "Loaded successfully"); } }
hkDefaultDemo::~hkDefaultDemo() { #if HK_CONFIG_THREAD == HK_CONFIG_MULTI_THREADED if (m_jobThreadPool) { m_jobThreadPool->removeReferenceLockUnchecked(); } delete m_jobQueue; if (m_spuUtil) { #if defined (HK_PLATFORM_PS3_PPU) // free resources if necessary int ret = cellSpursFinalize ( hkGetSpursInstance() ); if (ret) { HK_ERROR(0x73e432b3, "cellSpursFinalize failed :" << ret); } void* spurs = hkGetSpursInstance(); hkAlignedDeallocate<char>( (char*)spurs ); #endif } #endif for ( int i = 0; i < m_steppers.getSize(); ++i ) { m_steppers[i]->removeReference(); } if(m_mouseActive) { mouseUp(); } if ( m_lastProgress ) { delete m_lastProgress; } cleanupGraphics(); for( int i = 0; i < m_delayedCleanup.getSize(); ++i ) { m_delayedCleanup[i]->removeReference(); } if (m_forcedShadowsOn) { m_env->m_options->m_enableShadows = false; // reset } else if (m_forcedShadowsOff) { m_env->m_options->m_enableShadows = true;// reset } #if defined (HK_USE_CHARACTER_FACTORY) if (m_characterFactory) { delete m_characterFactory; } #endif }
int main(int argc, char* argv[]) { // initialize Havok internals { hkMemorySystem::FrameInfo frameInfo(0); #ifdef _DEBUG // (Use debug mem manager to detect mem leaks in Havok code) hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initChecking(hkMallocAllocator::m_defaultMallocAllocator, frameInfo); #else hkMemoryRouter* memoryRouter = hkMemoryInitUtil::initFreeListLargeBlock(hkMallocAllocator::m_defaultMallocAllocator, frameInfo); #endif hkBaseSystem::init( memoryRouter, havokErrorReport ); hkError& errorhandler = hkError::getInstance(); errorhandler.enableAll(); } if (argc != 2) { printf("Invalid number of input arguments\n"); printf("Usage: FBXImport <input_filename>\n"); return -1; } // Load FBX and save as HKX { const char* filename = argv[1]; FbxManager* fbxSdkManager = FbxManager::Create(); if( !fbxSdkManager ) { HK_ERROR(0x5213afed, "Unable to create FBX Manager!\n"); return -1; } FbxIOSettings* fbxIoSettings = FbxIOSettings::Create(fbxSdkManager, IOSROOT); fbxSdkManager->SetIOSettings(fbxIoSettings); FbxImporter* fbxImporter = FbxImporter::Create(fbxSdkManager,""); if (!fbxImporter->Initialize(filename, -1, fbxSdkManager->GetIOSettings())) { HK_WARN(0x5216afed, "Failed to initialize the importer! Please ensure file " << filename << " exists\n"); fbxSdkManager->Destroy(); return -1; } FbxScene* fbxScene = FbxScene::Create(fbxSdkManager,"tempScene"); if (!fbxScene) { HK_ERROR(0x5216afed, "Failed to create the scene!\n"); fbxImporter->Destroy(); fbxSdkManager->Destroy(); return -1; } fbxImporter->Import(fbxScene); fbxImporter->Destroy(); // Currently assume that the file is loaded from 3dsmax FbxAxisSystem::Max.ConvertScene(fbxScene); FbxToHkxConverter::Options options(fbxSdkManager); FbxToHkxConverter converter(options); if(converter.createScenes(fbxScene)) { int lastSlashIndex = hkString::lastIndexOf(filename,'\\') + 1; int extensionIndex = hkString::lastIndexOf(filename,'.'); hkStringBuf path; path.set(filename, lastSlashIndex); hkStringBuf name; name.set(filename + lastSlashIndex, extensionIndex - lastSlashIndex); converter.saveScenes(path, name); } else { HK_ERROR(0x0, "Failed to convert the scene!\n"); fbxSdkManager->Destroy(); return -1; } fbxSdkManager->Destroy(); } // quit Havok { hkBaseSystem::quit(); hkMemoryInitUtil::quit(); } return 0; }