diff --git a/BaikalIO/CMakeLists.txt b/BaikalIO/CMakeLists.txt index a5ac46f0..942fe237 100644 --- a/BaikalIO/CMakeLists.txt +++ b/BaikalIO/CMakeLists.txt @@ -9,6 +9,7 @@ set(SOURCES scene_io.h scene_test_io.cpp scene_obj_io.cpp + filesystem.h ) if (UNIX AND NOT APPLE) @@ -25,13 +26,18 @@ endif (BAIKAL_ENABLE_FBX) add_library(BaikalIO SHARED ${SOURCES}) target_compile_definitions(BaikalIO PRIVATE BAIKAL_EXPORT_API) -target_compile_features(BaikalIO PRIVATE cxx_std_14) +target_compile_features(BaikalIO PRIVATE cxx_std_17) target_link_libraries(BaikalIO PUBLIC Baikal OpenImageIO::OpenImageIO) -if (UNIX AND NOT APPLE) +if (UNIX OR APPLE) target_link_libraries(BaikalIO PUBLIC stdc++fs) endif () +if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++fs -lc++experimental") + target_compile_options(BaikalIO PUBLIC -stdlib=libc++) +endif() + target_include_directories(BaikalIO PUBLIC "${Baikal_SOURCE_DIR}/BaikalIO" "${Baikal_SOURCE_DIR}/3rdparty/tinyobjloader/include") if (BAIKAL_ENABLE_FBX) diff --git a/BaikalDataGenerator/Source/filesystem.h b/BaikalIO/filesystem.h similarity index 75% rename from BaikalDataGenerator/Source/filesystem.h rename to BaikalIO/filesystem.h index 5a3612df..3355f6bc 100644 --- a/BaikalDataGenerator/Source/filesystem.h +++ b/BaikalIO/filesystem.h @@ -1,6 +1,6 @@ #pragma once -#if (defined(__GNUC__) && (__GNUC__ < 8)) +#if (defined(__GNUC__) && (__GNUC__ < 8)) || (defined(__clang__) && (__clang_major__ < 7)) #include #else #include @@ -16,4 +16,9 @@ namespace std { namespace filesystem = experimental::filesystem::v1; } +#elif (defined(__clang__)) +namespace std +{ + namespace filesystem = experimental::filesystem; +} #endif \ No newline at end of file diff --git a/BaikalIO/material_io.cpp b/BaikalIO/material_io.cpp index 0261299e..6901b463 100644 --- a/BaikalIO/material_io.cpp +++ b/BaikalIO/material_io.cpp @@ -8,6 +8,7 @@ #include "SceneGraph/uberv2material.h" #include "SceneGraph/inputmaps.h" +#include "filesystem.h" #include "image_io.h" #include "XML/tinyxml2.h" @@ -486,18 +487,18 @@ namespace Baikal } else { - std::string texture_name = texture->GetName(); + std::filesystem::path texture_name = texture->GetName(); if (texture_name.empty()) { std::ostringstream oss; oss << (std::uint64_t)texture.get() << ".jpg"; texture_name = oss.str(); - io.SaveImage(m_base_path + texture_name, texture); + io.SaveImage(m_base_path + texture_name.string(), texture); } - m_tex2name[texture] = texture_name; + m_tex2name[texture] = texture_name.filename().string(); - printer.PushAttribute("value", texture_name.c_str()); + printer.PushAttribute("value", m_tex2name[texture].c_str()); } printer.CloseElement(); break; diff --git a/BaikalStandalone/Application/application.cpp b/BaikalStandalone/Application/application.cpp index c0f7ef91..afaa4eed 100644 --- a/BaikalStandalone/Application/application.cpp +++ b/BaikalStandalone/Application/application.cpp @@ -918,6 +918,13 @@ namespace Baikal } } + if (ImGui::Button("Save materials")) + { + auto material_io = Baikal::MaterialIo::CreateMaterialIoXML(); + material_io->SaveMaterialsFromScene(m_settings.path + "/materials.xml", *m_cl->GetScene()); + material_io->SaveIdentityMapping(m_settings.path + "/mapping.xml", *m_cl->GetScene()); + } + if (m_settings.time_benchmark && m_settings.samplecount > 511) { m_settings.time_benchmark = false;