Пример #1
0
//-*****************************************************************************
HDF5HierarchyWriter::HDF5HierarchyWriter( hid_t iFile, HDF5Hierarchy& iH5H )
    : m_H5H( iH5H )
{
    m_H5H.build( iFile );

    writeHierarchy( iFile );

    // Hierarchy info is succcessfully saved.
    // Let's set a flag.
    //
    int enabled = 1;
    H5LTset_attribute_int( iFile, ".", "abc_ref_hierarchy", &enabled, 1 );
}
Пример #2
0
	bool ModelConverter::startConversionJob( ConversionResult& result, const ConversionParameters& parameters ) const
	{
		for( uint fileIndex = 0u; fileIndex < parameters.inputFiles.getCount(); ++fileIndex )
		{
			const ConversionParameters::InputFile& file = parameters.inputFiles[ fileIndex ];

			const string material	= parameters.arguments.getOptionalString( "material", "" );
			const float scale		= parameters.arguments.getOptionalFloat( "scale", 1.0f );
			const bool calcTangents	= parameters.arguments.getOptionalBool( "calculate_tangents", true );

			ToolModel model;
			model.create( file.fileName, scale );
			model.parseGeometies( calcTangents );

			ResourceWriter writer;
			openResourceWriter( writer, result, parameters.outputName, "model" );

			for (const ResourceDefinition& definition : getResourceDefinitions())
			{
				writer.openResource( parameters.outputName + ".model", TIKI_FOURCC( 'M', 'O', 'D', 'L' ), definition, getConverterRevision( s_typeCrc ) );

				// write hierarchy
				const ReferenceKey* pHierarchyKey = nullptr;
				ReferenceKey hierarchyKey;
				if ( model.getHierarchy().isCreated() )
				{
					hierarchyKey = writeHierarchy( writer, model.getHierarchy() );
					pHierarchyKey = &hierarchyKey;
				}

				// write vertex data
				List< ReferenceKey > geometryKeys;

				bool wrongSkinned = false;
				for (uint geometryIndex = 0u; geometryIndex < model.getGeometyCount(); ++geometryIndex )
				{
					const ReferenceKey key = writeGeometry( writer, model.getGeometryByIndex( geometryIndex ) );
					geometryKeys.add( key );

					for (uint k = 0u; k < model.getGeometyCount(); ++k)
					{
						if ( model.getGeometryByIndex( geometryIndex ).getDesc().isSkinned != model.getGeometryByIndex( k ).getDesc().isSkinned )
						{
							wrongSkinned = true;
						}
					}
				}

				if ( wrongSkinned )
				{
					TIKI_TRACE_ERROR( "[modelconverter] Not every Mesh is skinned.\n" );
				}

				writer.openDataSection( 0u, AllocatorType_InitializaionMemory );
				writeResourceReference( writer, material );
				writer.writeReference( pHierarchyKey );
				writer.writeUInt32( uint32( model.getGeometyCount() ) );
				for( uint geometryIndex = 0u; geometryIndex < geometryKeys.getCount(); ++geometryIndex )
				{
					writer.writeReference( &geometryKeys[ geometryIndex ] );
				}			
				writer.closeDataSection();

				writer.closeResource();
			}
			
			closeResourceWriter( writer );

			model.dispose();
		}

		return true;
	}