docs: update TEST_SPEC.md and README.md to reflect new directory structure

- TEST_SPEC.md: Updated test directory structure to reflect Core/Asset,
  Core/IO, and Resources/<Type> subdirectories
- TEST_SPEC.md: Updated module names and test counts (852 total)
- TEST_SPEC.md: Updated build commands for new Resources subdirectories
- README.md: Updated engine structure with Core/Asset/ and Core/IO/
- README.md: Updated Resources section with layered architecture
- README.md: Updated test coverage table with accurate counts
This commit is contained in:
2026-03-24 16:14:05 +08:00
parent 0b3423966d
commit d575532966
153 changed files with 13975 additions and 6085 deletions

View File

@@ -1,7 +1,7 @@
#pragma once
#include <XCEngine/Audio/AudioTypes.h>
#include <XCEngine/Math/Vector3.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <vector>
#include <map>
#include <string>

View File

@@ -3,8 +3,8 @@
#include "IAudioBackend.h"
#include "AudioConfig.h"
#include "AudioTypes.h"
#include <XCEngine/Math/Vector3.h>
#include <XCEngine/Math/Quaternion.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Math/Quaternion.h>
#include <map>
#include <vector>
#include <memory>

View File

@@ -1,8 +1,8 @@
#pragma once
#include "AudioTypes.h"
#include <XCEngine/Math/Vector3.h>
#include <XCEngine/Math/Quaternion.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Math/Quaternion.h>
#include <vector>
#include <array>

View File

@@ -1,6 +1,6 @@
#pragma once
#include "../IAudioBackend.h"
#include <XCEngine/Audio/IAudioBackend.h>
#include <string>
#include <vector>
#include <thread>

View File

@@ -3,9 +3,9 @@
#include <XCEngine/Components/Component.h>
#include <XCEngine/Components/TransformComponent.h>
#include <XCEngine/Audio/AudioTypes.h>
#include <XCEngine/Resources/AudioClip.h>
#include <XCEngine/Math/Vector3.h>
#include <XCEngine/Math/Quaternion.h>
#include <XCEngine/Resources/AudioClip/AudioClip.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Math/Quaternion.h>
#include <vector>
#include <deque>
#include <string>

View File

@@ -1,9 +1,9 @@
#pragma once
#include "Component.h"
#include <XCEngine/Math/Vector3.h>
#include <XCEngine/Math/Quaternion.h>
#include <XCEngine/Math/Matrix4.h>
#include <XCEngine/Core/Math/Vector3.h>
#include <XCEngine/Core/Math/Quaternion.h>
#include <XCEngine/Core/Math/Matrix4.h>
#include <vector>
#include <string>
#include <istream>

View File

@@ -1,11 +0,0 @@
#pragma once
#include "Containers/Array.h"
#include "Containers/String.h"
#include "Containers/HashMap.h"
namespace XCEngine {
namespace Containers {
} // namespace Containers
} // namespace XCEngine

View File

@@ -1,9 +1,9 @@
#pragma once
#include "IResourceLoader.h"
#include "ImportSettings.h"
#include "../Containers/Array.h"
#include "../Threading/Mutex.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Threading/Mutex.h>
#include <atomic>
#include <functional>

View File

@@ -1,7 +1,7 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "../Core/SmartPtr.h"
#include <XCEngine/Core/SmartPtr.h>
#include "ResourceTypes.h"
namespace XCEngine {

View File

@@ -1,9 +1,9 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/HashMap.h"
#include "../Containers/Array.h"
#include "../Threading/Mutex.h"
#include <XCEngine/Core/Containers/HashMap.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Threading/Mutex.h>
#include <algorithm>
namespace XCEngine {

View File

@@ -1,9 +1,9 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/HashMap.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Containers/HashMap.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,15 +1,15 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "ResourceCache.h"
#include "AsyncLoader.h"
#include "ResourceHandle.h"
#include "ImportSettings.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include "../Containers/HashMap.h"
#include "../Threading/Mutex.h"
#include "../Debug/Logger.h"
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Containers/HashMap.h>
#include <XCEngine/Threading/Mutex.h>
#include <XCEngine/Debug/Logger.h>
#include <type_traits>
namespace XCEngine {

View File

@@ -1,9 +1,9 @@
#pragma once
#include "../Core/Types.h"
#include "../Core/SmartPtr.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include <XCEngine/Core/Types.h>
#include <XCEngine/Core/SmartPtr.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <cstdint>
namespace XCEngine {

View File

@@ -4,7 +4,7 @@
#include <initializer_list>
#include <algorithm>
#include <stdexcept>
#include "../Memory/Allocator.h"
#include <XCEngine/Memory/Allocator.h>
namespace XCEngine {
namespace Containers {

View File

@@ -0,0 +1,11 @@
#pragma once
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/HashMap.h>
namespace XCEngine {
namespace Containers {
} // namespace Containers
} // namespace XCEngine

View File

@@ -3,7 +3,7 @@
#include <cstddef>
#include <utility>
#include <functional>
#include "../Memory/Allocator.h"
#include <XCEngine/Memory/Allocator.h>
#include "Array.h"
namespace XCEngine {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
#include <cstdio>
namespace XCEngine {

View File

@@ -1,10 +1,10 @@
#pragma once
#include "IResource.h"
#include "ResourceTypes.h"
#include "ImportSettings.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Asset/ResourceTypes.h>
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <functional>
namespace XCEngine {

View File

@@ -1,11 +1,11 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include "../Containers/HashMap.h"
#include "../Core/SmartPtr.h"
#include "../Threading/Mutex.h"
#include <XCEngine/Core/Asset/ResourceTypes.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Containers/HashMap.h>
#include <XCEngine/Core/SmartPtr.h>
#include <XCEngine/Threading/Mutex.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,9 +1,9 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/ResourceTypes.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,9 +1,9 @@
#pragma once
#include "ResourceTypes.h"
#include "../Containers/String.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/ResourceTypes.h>
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -2,7 +2,7 @@
#include "ILogSink.h"
#include "LogEntry.h"
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
#include "../Core/FileWriter.h"
namespace XCEngine {

View File

@@ -2,7 +2,7 @@
#include "LogLevel.h"
#include "LogCategory.h"
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Debug {

View File

@@ -3,7 +3,7 @@
#include "LogLevel.h"
#include "LogCategory.h"
#include "ILogSink.h"
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
#include "../Threading/Mutex.h"
#include <vector>

View File

@@ -1,7 +1,7 @@
#pragma once
#include "LogLevel.h"
#include "../Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
#include <vector>
#include <chrono>

View File

@@ -1,6 +1,6 @@
#pragma once
#include "InputTypes.h"
#include "Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Input {

View File

@@ -1,7 +1,7 @@
#pragma once
#include "InputTypes.h"
#include "Math/Vector2.h"
#include "Containers/String.h"
#include <XCEngine/Core/Math/Vector2.h>
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Input {

View File

@@ -3,7 +3,7 @@
#include "InputTypes.h"
#include "InputEvent.h"
#include "InputAxis.h"
#include "Math/Vector2.h"
#include <XCEngine/Core/Math/Vector2.h>
#include <vector>
#include <unordered_map>

View File

@@ -0,0 +1,15 @@
#pragma once
#include "PlatformTypes.h"
namespace XCEngine {
struct GameTime {
float deltaTime;
float totalTime;
Core::uint64_t frameCount;
float GetFPS() const { return deltaTime > 0.0f ? 1.0f / deltaTime : 0.0f; }
float GetSPF() const { return deltaTime; }
};
} // namespace XCEngine

View File

@@ -0,0 +1,17 @@
#pragma once
namespace XCEngine {
namespace Platform {
class IClock {
public:
virtual ~IClock() = default;
virtual double GetAbsoluteTime() const = 0;
virtual double GetTimeSinceInit() const = 0;
virtual float GetDeltaTime() const = 0;
virtual void Update() = 0;
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -0,0 +1,31 @@
#pragma once
#include "PlatformTypes.h"
#include <vector>
namespace XCEngine {
namespace Platform {
struct DisplayInfo {
Containers::String name;
Core::uint32_t width;
Core::uint32_t height;
Core::uint32_t refreshRate;
bool isPrimary;
std::vector<std::pair<Core::uint32_t, Core::uint32_t>> supportedResolutions;
};
class IDisplayEnumerator {
public:
virtual ~IDisplayEnumerator() = default;
virtual Core::uint32_t GetDisplayCount() const = 0;
virtual DisplayInfo GetDisplayInfo(Core::uint32_t index) const = 0;
virtual DisplayInfo GetPrimaryDisplay() const = 0;
virtual float GetDPIForDisplay(Core::uint32_t index) const = 0;
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -0,0 +1,24 @@
#pragma once
namespace XCEngine {
namespace Platform {
class IDynamicLibrary {
public:
virtual ~IDynamicLibrary() = default;
virtual bool Load(const char* path) = 0;
virtual void Unload() = 0;
virtual bool IsLoaded() const = 0;
virtual void* GetSymbol(const char* symbolName) = 0;
template<typename T>
T GetSymbol(const char* symbolName) {
return reinterpret_cast<T>(GetSymbol(symbolName));
}
virtual const char* GetPath() const = 0;
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -0,0 +1,30 @@
#pragma once
#include "PlatformTypes.h"
namespace XCEngine {
namespace Platform {
class IFileSystem {
public:
virtual ~IFileSystem() = default;
virtual bool FileExists(const char* path) const = 0;
virtual bool DirectoryExists(const char* path) const = 0;
virtual int64_t GetFileSize(const char* path) const = 0;
virtual bool DeleteFile(const char* path) = 0;
virtual bool CreateDirectory(const char* path) = 0;
virtual std::unique_ptr<uint8_t[]> ReadFile(const char* path, size_t* outSize) const = 0;
virtual bool WriteFile(const char* path, const void* data, size_t size) = 0;
virtual Containers::String GetExecutablePath() const = 0;
virtual Containers::String GetWorkingDirectory() const = 0;
virtual Containers::String GetUserDirectory() const = 0;
virtual Containers::String GetTempDirectory() const = 0;
virtual Containers::String NormalizePath(const Containers::String& path) const = 0;
virtual Containers::String CombinePaths(const Containers::String& base, const Containers::String& relative) const = 0;
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -0,0 +1,33 @@
#pragma once
#include "PlatformTypes.h"
#include <memory>
namespace XCEngine {
namespace Platform {
class IWindow;
class IFileSystem;
class IClock;
class IDynamicLibrary;
class IDisplayEnumerator;
class IPlatform {
public:
virtual ~IPlatform() = default;
virtual const char* GetName() const = 0;
virtual PlatformType GetType() const = 0;
virtual std::unique_ptr<IWindow> CreateWindow(const WindowDesc& desc) = 0;
virtual std::unique_ptr<IFileSystem> CreateFileSystem() = 0;
virtual std::unique_ptr<IClock> CreateClock() = 0;
virtual std::unique_ptr<IDynamicLibrary> LoadDynamicLibrary(const char* path) = 0;
virtual std::unique_ptr<IDisplayEnumerator> CreateDisplayEnumerator() = 0;
virtual void PumpPlatformMessages() = 0;
static IPlatform& Get();
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -0,0 +1,43 @@
#pragma once
#include "PlatformTypes.h"
#include <functional>
namespace XCEngine {
namespace Platform {
class IWindow {
public:
virtual ~IWindow() = default;
virtual bool Create(const WindowDesc& desc) = 0;
virtual void Destroy() = 0;
virtual bool IsValid() const = 0;
virtual WindowHandle GetNativeHandle() const = 0;
virtual void PumpEvents() = 0;
virtual void SetTitle(const Containers::String& title) = 0;
virtual void SetFullscreen(bool fullscreen) = 0;
virtual bool IsFullscreen() const = 0;
virtual void Minimize() = 0;
virtual void Maximize() = 0;
virtual void Restore() = 0;
virtual void SetVSync(bool enabled) = 0;
virtual bool IsVSync() const = 0;
virtual Core::uint32_t GetWidth() const = 0;
virtual Core::uint32_t GetHeight() const = 0;
virtual bool ShouldClose() const = 0;
virtual void SetShouldClose(bool shouldClose) = 0;
using CloseCallback = std::function<void()>;
using ResizeCallback = std::function<void(Core::uint32_t, Core::uint32_t)>;
virtual void SetCloseCallback(CloseCallback callback) = 0;
virtual void SetResizeCallback(ResizeCallback callback) = 0;
};
} // namespace Platform
} // namespace XCEngine

View File

@@ -1,6 +1,6 @@
#pragma once
#include "Core/Types.h"
#include "Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Platform {

View File

@@ -1,7 +1,7 @@
#pragma once
#include "Input/InputModule.h"
#include "Input/InputTypes.h"
#include "Math/Vector2.h"
#include <XCEngine/Input/InputModule.h>
#include <XCEngine/Input/InputTypes.h>
#include <XCEngine/Core/Math/Vector2.h>
#include <Windows.h>
namespace XCEngine {

View File

@@ -1,8 +1,8 @@
#pragma once
#include "IResource.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "AudioClip.h"
namespace XCEngine {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "Material.h"
namespace XCEngine {

View File

@@ -1,8 +1,8 @@
#pragma once
#include "IResource.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,8 +1,8 @@
#pragma once
#include "ImportSettings.h"
#include "Mesh.h"
#include "../Math/Vector3.h"
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Resources/Mesh/Mesh.h>
#include <XCEngine/Core/Math/Vector3.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "Mesh.h"
namespace XCEngine {

View File

@@ -1,34 +1,33 @@
#pragma once
#include "ResourceTypes.h"
#include "ImportSettings.h"
#include "IResource.h"
#include "ResourceHandle.h"
#include "ResourceManager.h"
#include "IResourceLoader.h"
#include "ResourceCache.h"
#include "AsyncLoader.h"
#include "ResourceDependencyGraph.h"
#include <XCEngine/Core/Asset/ResourceTypes.h>
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Asset/ResourceHandle.h>
#include <XCEngine/Core/Asset/ResourceManager.h>
#include <XCEngine/Core/IO/IResourceLoader.h>
#include <XCEngine/Core/Asset/ResourceCache.h>
#include <XCEngine/Core/Asset/AsyncLoader.h>
#include <XCEngine/Core/Asset/ResourceDependencyGraph.h>
#include "Texture.h"
#include "TextureLoader.h"
#include "TextureImportSettings.h"
#include "Mesh.h"
#include "MeshLoader.h"
#include "MeshImportSettings.h"
#include "Material.h"
#include "MaterialLoader.h"
#include "Shader.h"
#include "ShaderLoader.h"
#include "AudioClip.h"
#include "AudioLoader.h"
#include <XCEngine/Resources/Texture/Texture.h>
#include <XCEngine/Resources/Texture/TextureLoader.h>
#include <XCEngine/Resources/Texture/TextureImportSettings.h>
#include <XCEngine/Resources/Mesh/Mesh.h>
#include <XCEngine/Resources/Mesh/MeshLoader.h>
#include <XCEngine/Resources/Mesh/MeshImportSettings.h>
#include <XCEngine/Resources/Material/Material.h>
#include <XCEngine/Resources/Material/MaterialLoader.h>
#include <XCEngine/Resources/Shader/Shader.h>
#include <XCEngine/Resources/Shader/ShaderLoader.h>
#include <XCEngine/Resources/AudioClip/AudioClip.h>
#include <XCEngine/Resources/AudioClip/AudioLoader.h>
#include "ResourceFileSystem.h"
#include "FileArchive.h"
#include "ResourcePackage.h"
#include "ResourcePath.h"
#include <XCEngine/Core/IO/ResourceFileSystem.h>
#include <XCEngine/Core/IO/FileArchive.h>
#include <XCEngine/Core/IO/ResourcePackage.h>
#include <XCEngine/Core/IO/ResourcePath.h>
// Forward declarations for concrete resource types
namespace XCEngine {
namespace Resources {

View File

@@ -1,8 +1,8 @@
#pragma once
#include "IResource.h"
#include "../Containers/Array.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Containers/Array.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "Shader.h"
namespace XCEngine {

View File

@@ -1,7 +1,7 @@
#pragma once
#include "IResource.h"
#include "../Core/Types.h"
#include <XCEngine/Core/Asset/IResource.h>
#include <XCEngine/Core/Types.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,8 +1,8 @@
#pragma once
#include "ImportSettings.h"
#include "Texture.h"
#include "../Math/Vector3.h"
#include <XCEngine/Core/Asset/ImportSettings.h>
#include <XCEngine/Resources/Texture/Texture.h>
#include <XCEngine/Core/Math/Vector3.h>
namespace XCEngine {
namespace Resources {

View File

@@ -1,6 +1,6 @@
#pragma once
#include "IResourceLoader.h"
#include <XCEngine/Core/IO/IResourceLoader.h>
#include "Texture.h"
namespace XCEngine {

View File

@@ -2,7 +2,7 @@
#include <thread>
#include <atomic>
#include "Containers/String.h"
#include <XCEngine/Core/Containers/String.h>
namespace XCEngine {
namespace Threading {