示例#1
0
//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");
	}
}
示例#2
0
//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");
	}
}
示例#3
0
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
}
示例#4
0
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;
}