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