Daniele Bartolini 4 месяцев назад
Родитель
Сommit
69612b564a

+ 48 - 51
src/device/device.cpp

@@ -39,27 +39,10 @@
 #include "device/pipeline.h"
 #include "lua/lua_environment.h"
 #include "lua/lua_stack.inl"
-#include "resource/config_resource.h"
-#include "resource/font_resource.h"
-#include "resource/level_resource.h"
-#include "resource/lua_resource.h"
-#include "resource/material_resource.h"
-#include "resource/mesh_resource.h"
-#include "resource/mesh_skeleton_resource.h"
-#include "resource/mesh_animation_resource.h"
-#include "resource/package_resource.h"
-#include "resource/physics_resource.h"
-#include "resource/render_config_resource.h"
 #include "resource/resource_id.inl"
 #include "resource/resource_loader.h"
 #include "resource/resource_manager.h"
 #include "resource/resource_package.h"
-#include "resource/shader_resource.h"
-#include "resource/sound_resource.h"
-#include "resource/sprite_resource.h"
-#include "resource/state_machine_resource.h"
-#include "resource/texture_resource.h"
-#include "resource/unit_resource.h"
 #include "world/material_manager.h"
 #include "world/physics.h"
 #include "world/shader_manager.h"
@@ -85,6 +68,36 @@ namespace crown
 {
 extern bool next_event(OsEvent &ev);
 
+#define RESOURCE_TYPE(type_name)                            \
+	namespace type_name##_resource_internal                 \
+	{                                                       \
+		extern void *load(File &, Allocator &);             \
+		extern void online(StringId64, ResourceManager &);  \
+		extern void offline(StringId64, ResourceManager &); \
+		extern void unload(Allocator &, void *);            \
+	}
+
+RESOURCE_TYPE(config)
+RESOURCE_TYPE(font)
+RESOURCE_TYPE(level)
+RESOURCE_TYPE(material)
+RESOURCE_TYPE(mesh)
+RESOURCE_TYPE(mesh_skeleton)
+RESOURCE_TYPE(mesh_animation)
+RESOURCE_TYPE(package)
+RESOURCE_TYPE(physics_config)
+RESOURCE_TYPE(render_config)
+RESOURCE_TYPE(lua)
+RESOURCE_TYPE(shader)
+RESOURCE_TYPE(sound)
+RESOURCE_TYPE(sprite)
+RESOURCE_TYPE(sprite_animation)
+RESOURCE_TYPE(state_machine)
+RESOURCE_TYPE(texture)
+RESOURCE_TYPE(unit)
+
+#undef RESOURCE_TYPE
+
 struct BgfxCallback : public bgfx::CallbackI
 {
 	DynamicString _screenshot_path;
@@ -561,46 +574,30 @@ int Device::main_loop()
 
 	_shader_manager   = CE_NEW(_allocator, ShaderManager)(default_allocator());
 
-	namespace smr = state_machine_internal;
-	namespace cor = config_resource_internal;
-	namespace ftr = font_resource_internal;
-	namespace lur = lua_resource_internal;
-	namespace lvr = level_resource_internal;
-	namespace mhr = mesh_resource_internal;
-	namespace mtr = material_resource_internal;
-	namespace pcr = physics_config_resource_internal;
-	namespace pkr = package_resource_internal;
-	namespace sar = sprite_animation_resource_internal;
-	namespace sdr = sound_resource_internal;
-	namespace shr = shader_resource_internal;
-	namespace spr = sprite_resource_internal;
-	namespace txr = texture_resource_internal;
-	namespace utr = unit_resource_internal;
-
 	_resource_loader  = CE_NEW(_allocator, ResourceLoader)(*_data_filesystem, is_bundle);
 	_resource_loader->register_fallback(RESOURCE_TYPE_TEXTURE,  STRING_ID_64("core/fallback/fallback", 0xd09058ae71962248));
 	_resource_loader->register_fallback(RESOURCE_TYPE_MATERIAL, STRING_ID_64("core/fallback/fallback", 0xd09058ae71962248));
 	_resource_loader->register_fallback(RESOURCE_TYPE_UNIT,     STRING_ID_64("core/fallback/fallback", 0xd09058ae71962248));
 
 	_resource_manager = CE_NEW(_allocator, ResourceManager)(*_resource_loader);
-	_resource_manager->register_type(RESOURCE_TYPE_CONFIG,           RESOURCE_VERSION_CONFIG,           cor::load, cor::unload, NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_FONT,             RESOURCE_VERSION_FONT,             NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_LEVEL,            RESOURCE_VERSION_LEVEL,            NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_MATERIAL,         RESOURCE_VERSION_MATERIAL,         NULL,      NULL,        mtr::online, mtr::offline);
-	_resource_manager->register_type(RESOURCE_TYPE_MESH,             RESOURCE_VERSION_MESH,             mhr::load, mhr::unload, mhr::online, mhr::offline);
-	_resource_manager->register_type(RESOURCE_TYPE_MESH_SKELETON,    RESOURCE_VERSION_MESH_SKELETON,    NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_MESH_ANIMATION,   RESOURCE_VERSION_MESH_ANIMATION,   NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_PACKAGE,          RESOURCE_VERSION_PACKAGE,          NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_PHYSICS_CONFIG,   RESOURCE_VERSION_PHYSICS_CONFIG,   NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_RENDER_CONFIG,    RESOURCE_VERSION_RENDER_CONFIG,    NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_SCRIPT,           RESOURCE_VERSION_SCRIPT,           NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_SHADER,           RESOURCE_VERSION_SHADER,           shr::load, shr::unload, shr::online, shr::offline);
-	_resource_manager->register_type(RESOURCE_TYPE_SOUND,            RESOURCE_VERSION_SOUND,            NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_SPRITE,           RESOURCE_VERSION_SPRITE,           NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_SPRITE_ANIMATION, RESOURCE_VERSION_SPRITE_ANIMATION, NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_STATE_MACHINE,    RESOURCE_VERSION_STATE_MACHINE,    NULL,      NULL,        NULL,        NULL);
-	_resource_manager->register_type(RESOURCE_TYPE_TEXTURE,          RESOURCE_VERSION_TEXTURE,          txr::load, txr::unload, txr::online, txr::offline);
-	_resource_manager->register_type(RESOURCE_TYPE_UNIT,             RESOURCE_VERSION_UNIT,             NULL,      NULL,        NULL,        NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_CONFIG,           RESOURCE_VERSION_CONFIG,           config_resource_internal::load,  config_resource_internal::unload,  NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_FONT,             RESOURCE_VERSION_FONT,             NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_LEVEL,            RESOURCE_VERSION_LEVEL,            NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_MATERIAL,         RESOURCE_VERSION_MATERIAL,         NULL,                            NULL,                              material_resource_internal::online, material_resource_internal::offline);
+	_resource_manager->register_type(RESOURCE_TYPE_MESH,             RESOURCE_VERSION_MESH,             mesh_resource_internal::load,    mesh_resource_internal::unload,    mesh_resource_internal::online,     mesh_resource_internal::offline);
+	_resource_manager->register_type(RESOURCE_TYPE_MESH_SKELETON,    RESOURCE_VERSION_MESH_SKELETON,    NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_MESH_ANIMATION,   RESOURCE_VERSION_MESH_ANIMATION,   NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_PACKAGE,          RESOURCE_VERSION_PACKAGE,          NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_PHYSICS_CONFIG,   RESOURCE_VERSION_PHYSICS_CONFIG,   NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_RENDER_CONFIG,    RESOURCE_VERSION_RENDER_CONFIG,    NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_SCRIPT,           RESOURCE_VERSION_SCRIPT,           NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_SHADER,           RESOURCE_VERSION_SHADER,           shader_resource_internal::load,  shader_resource_internal::unload,  shader_resource_internal::online,   shader_resource_internal::offline);
+	_resource_manager->register_type(RESOURCE_TYPE_SOUND,            RESOURCE_VERSION_SOUND,            NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_SPRITE,           RESOURCE_VERSION_SPRITE,           NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_SPRITE_ANIMATION, RESOURCE_VERSION_SPRITE_ANIMATION, NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_STATE_MACHINE,    RESOURCE_VERSION_STATE_MACHINE,    NULL,                            NULL,                              NULL,                               NULL);
+	_resource_manager->register_type(RESOURCE_TYPE_TEXTURE,          RESOURCE_VERSION_TEXTURE,          texture_resource_internal::load, texture_resource_internal::unload, texture_resource_internal::online,  texture_resource_internal::offline);
+	_resource_manager->register_type(RESOURCE_TYPE_UNIT,             RESOURCE_VERSION_UNIT,             NULL,                            NULL,                              NULL,                               NULL);
 
 	_material_manager = CE_NEW(_allocator, MaterialManager)(default_allocator(), *_resource_manager, *_shader_manager);
 

+ 0 - 1
src/resource/config_resource.cpp

@@ -12,7 +12,6 @@
 #include "core/memory/temp_allocator.inl"
 #include "core/strings/dynamic_string.inl"
 #include "resource/compile_options.inl"
-#include "resource/config_resource.h"
 #include "resource/types.h"
 
 namespace crown

+ 0 - 23
src/resource/config_resource.h

@@ -1,23 +0,0 @@
-/*
- * Copyright (c) 2012-2025 Daniele Bartolini et al.
- * SPDX-License-Identifier: MIT
- */
-
-#pragma once
-
-#include "core/filesystem/types.h"
-#include "core/memory/types.h"
-#include "core/types.h"
-#include "resource/types.h"
-
-namespace crown
-{
-namespace config_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-	void *load(File &file, Allocator &a);
-	void unload(Allocator &allocator, void *resource);
-
-} // namespace config_resource_internal
-
-} // namespace crown

+ 28 - 18
src/resource/data_compiler.cpp

@@ -30,26 +30,10 @@
 #include "device/device_options.h"
 #include "device/log.h"
 #include "resource/compile_options.inl"
-#include "resource/config_resource.h"
 #include "resource/data_compiler.h"
-#include "resource/font_resource.h"
-#include "resource/level_resource.h"
-#include "resource/lua_resource.h"
-#include "resource/material_resource.h"
-#include "resource/mesh_resource.h"
-#include "resource/mesh_skeleton_resource.h"
-#include "resource/mesh_animation_resource.h"
-#include "resource/package_resource.h"
-#include "resource/physics_resource.h"
-#include "resource/render_config_resource.h"
+#include "resource/mesh.h"
 #include "resource/resource_id.inl"
-#include "resource/shader_resource.h"
-#include "resource/sound_resource.h"
-#include "resource/sprite_resource.h"
-#include "resource/state_machine_resource.h"
-#include "resource/texture_resource.h"
 #include "resource/types.h"
-#include "resource/unit_resource.h"
 #include <algorithm>
 #include <inttypes.h>
 #if CROWN_PLATFORM_WINDOWS
@@ -1539,6 +1523,32 @@ void DataCompiler::file_monitor_callback(void *thiz, FileMonitorEvent::Enum fme,
 	((DataCompiler *)thiz)->file_monitor_callback(fme, is_dir, path_original, path_modified);
 }
 
+#define RESOURCE_TYPE(type_name)              \
+	namespace type_name##_resource_internal   \
+	{                                         \
+		extern s32 compile(CompileOptions &); \
+	}                                         \
+
+RESOURCE_TYPE(config)
+RESOURCE_TYPE(font)
+RESOURCE_TYPE(level)
+RESOURCE_TYPE(material)
+RESOURCE_TYPE(mesh)
+RESOURCE_TYPE(mesh_skeleton)
+RESOURCE_TYPE(mesh_animation)
+RESOURCE_TYPE(package)
+RESOURCE_TYPE(physics_config)
+RESOURCE_TYPE(render_config)
+RESOURCE_TYPE(lua)
+RESOURCE_TYPE(shader)
+RESOURCE_TYPE(sound)
+RESOURCE_TYPE(sprite)
+RESOURCE_TYPE(sprite_animation)
+RESOURCE_TYPE(state_machine)
+RESOURCE_TYPE(texture)
+RESOURCE_TYPE(unit)
+
+#undef RESOURCE_TYPE
 int main_data_compiler(const DeviceOptions &opts)
 {
 #if CROWN_PLATFORM_WINDOWS
@@ -1605,7 +1615,7 @@ int main_data_compiler(const DeviceOptions &opts)
 	dc->register_compiler("sound",            RESOURCE_VERSION_SOUND,            sound_resource_internal::compile);
 	dc->register_compiler("sprite",           RESOURCE_VERSION_SPRITE,           sprite_resource_internal::compile);
 	dc->register_compiler("sprite_animation", RESOURCE_VERSION_SPRITE_ANIMATION, sprite_animation_resource_internal::compile);
-	dc->register_compiler("state_machine",    RESOURCE_VERSION_STATE_MACHINE,    state_machine_internal::compile);
+	dc->register_compiler("state_machine",    RESOURCE_VERSION_STATE_MACHINE,    state_machine_resource_internal::compile);
 	dc->register_compiler("texture",          RESOURCE_VERSION_TEXTURE,          texture_resource_internal::compile);
 	dc->register_compiler("unit",             RESOURCE_VERSION_UNIT,             unit_resource_internal::compile);
 

+ 0 - 6
src/resource/font_resource.h

@@ -33,12 +33,6 @@ struct GlyphData
 
 typedef u32 CodePoint;
 
-namespace font_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace font_resource_internal
-
 namespace font_resource
 {
 	/// Returns the glyph for the code point @a cp.

+ 0 - 6
src/resource/level_resource.h

@@ -39,12 +39,6 @@ struct LevelSound
 	u8 _pad[4];
 };
 
-namespace level_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace level_resource_internal
-
 namespace level_resource
 {
 	/// Returns the unit names in the level.

+ 0 - 3
src/resource/lua_resource.h

@@ -24,9 +24,6 @@ namespace lua_resource_internal
 	///
 	void find_requirements(HashSet<StringView> &requirements, const char *lua);
 
-	///
-	s32 compile(CompileOptions &opts);
-
 } // namespace lua_resource_internal
 
 namespace lua_resource

+ 0 - 13
src/resource/material_resource.h

@@ -70,19 +70,6 @@ struct UniformHandle
 	// data
 };
 
-namespace material_resource_internal
-{
-	///
-	s32 compile(CompileOptions &opts);
-
-	///
-	void online(StringId64 id, ResourceManager &rm);
-
-	///
-	void offline(StringId64 id, ResourceManager &rm);
-
-} // namespace material_resource_internal
-
 namespace material_resource
 {
 	///

+ 0 - 23
src/resource/mesh_resource.h

@@ -65,29 +65,6 @@ namespace mesh
 	s32 parse(Mesh &m, Buffer &buf, CompileOptions &opts);
 
 } // namespace mesh
-
-namespace mesh_resource_internal
-{
-	///
-	s32 compile(CompileOptions &opts);
-
-} // namespace mesh_resource_internal
 #endif
 
-namespace mesh_resource_internal
-{
-	///
-	void *load(File &file, Allocator &a);
-
-	///
-	void online(StringId64 /*id*/, ResourceManager & /*rm*/);
-
-	///
-	void offline(StringId64 /*id*/, ResourceManager & /*rm*/);
-
-	///
-	void unload(Allocator &a, void *res);
-
-} // namespace mesh_resource_internal
-
 } // namespace crown

+ 0 - 6
src/resource/package_resource.h

@@ -32,12 +32,6 @@ struct PackageResource
 	// Data (16-bytes aligned)
 };
 
-namespace package_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace package_resource_internal
-
 namespace package_resource
 {
 	///

+ 0 - 6
src/resource/physics_resource.h

@@ -65,12 +65,6 @@ struct PhysicsActor
 	u32 flags;
 };
 
-namespace physics_config_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace physics_config_resource_internal
-
 namespace physics_config_resource
 {
 	/// Returns the material at @a index.

+ 0 - 6
src/resource/render_config_resource.h

@@ -39,10 +39,4 @@ struct RenderConfigResource
 	RenderSettings render_settings;
 };
 
-namespace render_config_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace render_config_resource_internal
-
 } // namespace crown

+ 0 - 10
src/resource/shader_resource.h

@@ -51,14 +51,4 @@ struct ShaderData
 #endif
 };
 
-namespace shader_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-	void *load(File &file, Allocator &a);
-	void online(StringId64 id, ResourceManager &rm);
-	void offline(StringId64 id, ResourceManager &rm);
-	void unload(Allocator &a, void *res);
-
-} // namespace shader_resource_internal
-
 } // namespace crown

+ 0 - 6
src/resource/sound_resource.h

@@ -44,12 +44,6 @@ struct SoundResource
 };
 CE_STATIC_ASSERT(sizeof(SoundResource) % 16 == 0);
 
-namespace sound_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace	sound_resource_internal
-
 namespace sound_resource
 {
 	/// Returns the sound resource's stream metadata.

+ 0 - 12
src/resource/sprite_resource.h

@@ -24,12 +24,6 @@ struct SpriteResource
 	// verts[num_verts]
 };
 
-namespace sprite_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace sprite_resource_internal
-
 namespace sprite_resource
 {
 	/// Returns the frame data for the frame @a i.
@@ -44,12 +38,6 @@ struct SpriteAnimationResource
 	f32 total_time;
 };
 
-namespace sprite_animation_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace sprite_animation_resource_internal
-
 namespace sprite_animation_resource
 {
 	/// Returns the frames of the sprite animation @a sar.

+ 2 - 2
src/resource/state_machine_resource.cpp

@@ -108,7 +108,7 @@ namespace state_machine
 } // namespace state_machine
 
 #if CROWN_CAN_COMPILE
-namespace state_machine_internal
+namespace state_machine_resource_internal
 {
 	struct TransitionModeInfo
 	{
@@ -566,7 +566,7 @@ namespace state_machine_internal
 		return smc.write();
 	}
 
-} // namespace state_machine_internal
+} // namespace state_machine_resource_internal
 #endif // if CROWN_CAN_COMPILE
 
 } // namespace crown

+ 0 - 6
src/resource/state_machine_resource.h

@@ -74,12 +74,6 @@ struct TransitionMode
 	};
 };
 
-namespace state_machine_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace state_machine_internal
-
 namespace state_machine
 {
 	/// Returns the initial state.

+ 0 - 10
src/resource/texture_resource.h

@@ -20,14 +20,4 @@ struct TextureResource
 	bgfx::TextureHandle handle;
 };
 
-namespace texture_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-	void *load(File &file, Allocator &a);
-	void offline(StringId64 id, ResourceManager &rm);
-	void online(StringId64 id, ResourceManager &rm);
-	void unload(Allocator &a, void *resource);
-
-} // namespace texture_resource_internal
-
 } // namespace crown

+ 0 - 6
src/resource/unit_resource.h

@@ -31,12 +31,6 @@ struct ComponentData
 //	char data[size]
 };
 
-namespace unit_resource_internal
-{
-	s32 compile(CompileOptions &opts);
-
-} // namespace unit_resource_internal
-
 namespace unit_resource
 {
 	/// Returns the array of parents in the unit resource @ur.