Skip to content

Commit 5a49b11

Browse files
Fixing import model and serialization logic (#442)
* fixed import models * fixed platform backslash
1 parent a68edc7 commit 5a49b11

9 files changed

Lines changed: 115 additions & 117 deletions

File tree

Tetragrama/Components/DockspaceUIComponent.cpp

Lines changed: 11 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -46,29 +46,14 @@ namespace Tetragrama::Components
4646

4747
const auto& editor_config = *context->ConfigurationPtr;
4848

49-
auto o_model_fpath = fmt::format("{0}/{1}", editor_config.WorkingSpacePath, editor_config.SceneDataPath);
50-
auto o_mesh_fpath = fmt::format("{0}/{1}", editor_config.WorkingSpacePath, editor_config.SceneDataPath);
51-
auto o_texture_fpath = fmt::format("{0}/{1}", editor_config.WorkingSpacePath, editor_config.DefaultImportTexturePath);
52-
auto o_material_fpath = fmt::format("{0}/{1}", editor_config.WorkingSpacePath, editor_config.SceneDataPath);
53-
5449
m_default_import_configuration = {};
55-
m_default_import_configuration.OutputModelFilePath.init(&(parent->LayerArena), o_model_fpath.c_str());
56-
m_default_import_configuration.OutputMeshFilePath.init(&(parent->LayerArena), o_mesh_fpath.c_str());
57-
m_default_import_configuration.OutputTextureFilesPath.init(&(parent->LayerArena), o_texture_fpath.c_str());
58-
m_default_import_configuration.OutputMaterialsPath.init(&(parent->LayerArena), o_material_fpath.c_str());
59-
60-
#ifdef _WIN32
61-
std::replace(m_default_import_configuration.OutputModelFilePath.begin(), m_default_import_configuration.OutputModelFilePath.end(), '/', '\\');
62-
std::replace(m_default_import_configuration.OutputMeshFilePath.begin(), m_default_import_configuration.OutputMeshFilePath.end(), '/', '\\');
63-
std::replace(m_default_import_configuration.OutputTextureFilesPath.begin(), m_default_import_configuration.OutputTextureFilesPath.end(), '/', '\\');
64-
std::replace(m_default_import_configuration.OutputMaterialsPath.begin(), m_default_import_configuration.OutputMaterialsPath.end(), '/', '\\');
65-
#endif // _WIN32
66-
67-
auto editor_serializer_default_output = fmt::format("{0}/{1}", editor_config.WorkingSpacePath, editor_config.ScenePath);
50+
m_default_import_configuration.OutputWorkingSpacePath.init(&(parent->LayerArena), editor_config.WorkingSpacePath.c_str());
51+
m_default_import_configuration.OutputModelFilePath.init(&(parent->LayerArena), editor_config.SceneDataPath.c_str());
52+
m_default_import_configuration.OutputMeshFilePath.init(&(parent->LayerArena), editor_config.SceneDataPath.c_str());
53+
m_default_import_configuration.OutputMaterialsPath.init(&(parent->LayerArena), editor_config.SceneDataPath.c_str());
54+
m_default_import_configuration.OutputTextureFilesPath.init(&(parent->LayerArena), editor_config.DefaultImportTexturePath.c_str());
6855

69-
#ifdef _WIN32
70-
std::replace(editor_serializer_default_output.begin(), editor_serializer_default_output.end(), '/', '\\');
71-
#endif // _WIN32
56+
auto editor_serializer_default_output = fmt::format("{0}{1}{2}", editor_config.WorkingSpacePath.c_str(), PLATFORM_OS_BACKSLASH, editor_config.ScenePath.c_str());
7257

7358
m_editor_serializer->SetDefaultOutput(editor_serializer_default_output);
7459
m_editor_serializer->SetOnProgressCallback(OnEditorSceneSerializerProgress);
@@ -424,23 +409,7 @@ namespace Tetragrama::Components
424409
/*
425410
* Removing the WorkingSpace Path
426411
*/
427-
// auto ws = context_ptr->ConfigurationPtr->WorkingSpacePath + "\\";
428-
// if (data.SerializedMeshesPath.find(ws) != std::string::npos)
429-
//{
430-
// data.SerializedMeshesPath.replace(data.SerializedMeshesPath.find(ws), ws.size(), "");
431-
// }
432-
433-
// if (data.SerializedMaterialsPath.find(ws) != std::string::npos)
434-
//{
435-
// data.SerializedMaterialsPath.replace(data.SerializedMaterialsPath.find(ws), ws.size(), "");
436-
// }
437-
438-
// if (data.SerializedModelPath.find(ws) != std::string::npos)
439-
//{
440-
// data.SerializedModelPath.replace(data.SerializedModelPath.find(ws), ws.size(), "");
441-
// }
442-
//
443-
// context_ptr->CurrentScenePtr->Push(data.SerializedMeshesPath, data.SerializedModelPath, data.SerializedMaterialsPath);
412+
context_ptr->CurrentScenePtr->Push(&(context_ptr->Arena), data.SerializedMeshesPath.c_str(), data.SerializedModelPath.c_str(), data.SerializedMaterialsPath.c_str());
444413
}
445414

446415
void DockspaceUIComponent::OnAssetImporterProgress(void* const context, float value)
@@ -530,9 +499,11 @@ namespace Tetragrama::Components
530499
auto ctx = reinterpret_cast<EditorContext*>(context);
531500

532501
// Todo : Ensure no data race on CurrentScenePtr
533-
ZEngine::Helpers::secure_strcpy(ctx->ConfigurationPtr->ActiveSceneName, ZEngine::Helpers::secure_strlen(scene.Name), scene.Name);
502+
ctx->ConfigurationPtr->ActiveSceneName.reserve(ZEngine::Helpers::secure_strlen(scene.Name));
503+
ctx->ConfigurationPtr->ActiveSceneName.clear();
504+
ctx->ConfigurationPtr->ActiveSceneName.append(scene.Name);
534505

535-
ctx->CurrentScenePtr->Name = ctx->ConfigurationPtr->ActiveSceneName;
506+
ctx->CurrentScenePtr->Name = ctx->ConfigurationPtr->ActiveSceneName.c_str();
536507
ctx->CurrentScenePtr->Data = scene.Data;
537508
ctx->CurrentScenePtr->MeshFiles = scene.MeshFiles;
538509
ctx->CurrentScenePtr->ModelFiles = scene.ModelFiles;
@@ -557,9 +528,6 @@ namespace Tetragrama::Components
557528

558529
if (!scene_filename.empty())
559530
{
560-
#ifdef _WIN32
561-
std::replace(scene_filename.begin(), scene_filename.end(), '/', '\\'); // Todo : Move this replace into an helper function....
562-
#endif
563531
m_editor_serializer->Deserialize(scene_filename);
564532
}
565533
}

Tetragrama/Components/ProjectViewUIComponent.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace Tetragrama::Components
1616
{
1717
UIComponent::Initialize(parent, name, visibility, closed);
1818
auto context = reinterpret_cast<EditorContext*>(ParentLayer->ParentContext);
19-
m_assets_directory = context->ConfigurationPtr->WorkingSpacePath;
19+
m_assets_directory = context->ConfigurationPtr->WorkingSpacePath.c_str();
2020
m_current_directory = m_assets_directory;
2121
}
2222

Tetragrama/Editor.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ namespace Tetragrama
3030

3131
if (Helpers::secure_strlen(file))
3232
{
33-
Context->ConfigurationPtr->ReadConfig(file);
33+
Context->ConfigurationPtr->ReadConfig(arena, file);
3434

35-
if (Helpers::secure_strlen(Context->ConfigurationPtr->ActiveSceneName))
35+
if (!Context->ConfigurationPtr->ActiveSceneName.empty())
3636
{
37-
Context->CurrentScenePtr->Initialize(&(Context->Arena), Context->ConfigurationPtr->ActiveSceneName);
37+
Context->CurrentScenePtr->Initialize(&(Context->Arena), Context->ConfigurationPtr->ActiveSceneName.c_str());
3838
}
3939
}
4040

4141
UILayer->ParentContext = reinterpret_cast<void*>(Context);
4242
CanvasLayer->ParentContext = reinterpret_cast<void*>(Context);
4343

44-
std::string title = fmt::format("{0} - Active Scene : {1}", Context->ConfigurationPtr->ProjectName, Context->CurrentScenePtr->Name);
44+
std::string title = fmt::format("{0} - Active Scene : {1}", Context->ConfigurationPtr->ProjectName.c_str(), Context->CurrentScenePtr->Name);
4545
Windows::WindowConfiguration window_conf = {.EnableVsync = true};
4646
window_conf.Title.init(&(Context->Arena), title.c_str());
4747
window_conf.RenderingLayerCollection.init(&(Context->Arena), 1);
@@ -116,9 +116,9 @@ namespace Tetragrama
116116
return m_has_pending_change;
117117
}
118118

119-
void EditorConfiguration::ReadConfig(std::string_view file)
119+
void EditorConfiguration::ReadConfig(ZEngine::Core::Memory::ArenaAllocator* arena, const char* file)
120120
{
121-
std::ifstream f(file.data());
121+
std::ifstream f(file);
122122
nlohmann::json config = nlohmann::json::parse(f);
123123
std::string root_project_dir = std::filesystem::path(file).parent_path().string();
124124

@@ -156,13 +156,12 @@ namespace Tetragrama
156156
config["workingSpace"] = root_project_dir;
157157
}
158158

159-
Helpers::secure_strcpy(ProjectName, 50, config["projectName"].get<std::string>().c_str());
160-
161-
Helpers::secure_strcpy(WorkingSpacePath, MAX_FILE_PATH_COUNT, config["workingSpace"].get<std::string>().c_str());
162-
Helpers::secure_strcpy(DefaultImportTexturePath, MAX_FILE_PATH_COUNT, config["defaultImportDir"]["textureDir"].get<std::string>().c_str());
163-
Helpers::secure_strcpy(DefaultImportSoundPath, MAX_FILE_PATH_COUNT, config["defaultImportDir"]["soundDir"].get<std::string>().c_str());
164-
Helpers::secure_strcpy(ScenePath, MAX_FILE_PATH_COUNT, config["sceneDir"].get<std::string>().c_str());
165-
Helpers::secure_strcpy(SceneDataPath, MAX_FILE_PATH_COUNT, config["sceneDataDir"].get<std::string>().c_str());
159+
ProjectName.init(arena, config["projectName"].get<std::string>().c_str());
160+
WorkingSpacePath.init(arena, config["workingSpace"].get<std::string>().c_str());
161+
DefaultImportTexturePath.init(arena, config["defaultImportDir"]["textureDir"].get<std::string>().c_str());
162+
DefaultImportSoundPath.init(arena, config["defaultImportDir"]["soundDir"].get<std::string>().c_str());
163+
ScenePath.init(arena, config["sceneDir"].get<std::string>().c_str());
164+
SceneDataPath.init(arena, config["sceneDataDir"].get<std::string>().c_str());
166165

167166
/*
168167
* Retreiving the Active Scene
@@ -174,7 +173,7 @@ namespace Tetragrama
174173
{
175174
continue;
176175
}
177-
Helpers::secure_strcpy(ActiveSceneName, 50, scene["name"].get<std::string>().c_str());
176+
ActiveSceneName.init(arena, scene["name"].get<std::string>().c_str());
178177
break;
179178
}
180179
}

Tetragrama/Editor.h

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ namespace Tetragrama
5151

5252
struct EditorConfiguration
5353
{
54-
char WorkingSpacePath[MAX_FILE_PATH_COUNT] = {0};
55-
char DefaultImportTexturePath[MAX_FILE_PATH_COUNT] = {0};
56-
char DefaultImportSoundPath[MAX_FILE_PATH_COUNT] = {0};
57-
char ScenePath[MAX_FILE_PATH_COUNT] = {0};
58-
char SceneDataPath[MAX_FILE_PATH_COUNT] = {0};
59-
char ProjectName[50] = {0};
60-
char ActiveSceneName[50] = {0};
61-
62-
void ReadConfig(std::string_view file);
54+
ZEngine::Core::Containers::String WorkingSpacePath = {};
55+
ZEngine::Core::Containers::String DefaultImportTexturePath = {};
56+
ZEngine::Core::Containers::String DefaultImportSoundPath = {};
57+
ZEngine::Core::Containers::String ScenePath = {};
58+
ZEngine::Core::Containers::String SceneDataPath = {};
59+
ZEngine::Core::Containers::String ProjectName = {};
60+
ZEngine::Core::Containers::String ActiveSceneName = {};
61+
62+
void ReadConfig(ZEngine::Core::Memory::ArenaAllocator* arena, const char* file);
6363
};
6464

6565
struct EditorContext

Tetragrama/Helpers/SerializerCommonHelper.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <SerializerCommonHelper.h>
33
#include <ZEngine/Helpers/MemoryOperations.h>
44

5+
#define DEFAULT_STR_BUFFER 256
6+
57
using namespace ZEngine::Core::Containers;
68

79
namespace Tetragrama::Helpers
@@ -16,10 +18,11 @@ namespace Tetragrama::Helpers
1618
void DeserializeStringData(ZEngine::Core::Memory::ArenaAllocator* Arena, std::istream& in, ZEngine::Core::Containers::String& d)
1719
{
1820
size_t v_count;
21+
char buf[DEFAULT_STR_BUFFER] = {0};
1922
in.read(reinterpret_cast<char*>(&v_count), sizeof(size_t));
23+
in.read(buf, v_count + 1);
2024

21-
d.init(Arena, v_count + 2);
22-
in.read(d.data(), v_count + 1);
25+
d.init(Arena, buf);
2326
}
2427

2528
void SerializeStringArrayData(std::ostream& os, ZEngine::Core::Containers::ArrayView<ZEngine::Core::Containers::String> str_view)
@@ -58,11 +61,12 @@ namespace Tetragrama::Helpers
5861
for (int i = 0; i < data_count; ++i)
5962
{
6063
size_t v_count;
64+
char buf[DEFAULT_STR_BUFFER] = {0};
6165
in.read(reinterpret_cast<char*>(&v_count), sizeof(size_t));
66+
in.read(buf, v_count + 1);
6267

6368
String v;
64-
v.init(Arena, v_count + 2);
65-
in.read(v.data(), v_count + 1);
69+
v.init(Arena, buf);
6670
data.push(v);
6771
}
6872
}

0 commit comments

Comments
 (0)