Commit Graph

389 Commits

Author SHA1 Message Date
fae520854e refactor: reorganize unit tests into separate folder
- Move test_*.cpp and fixtures/ to tests/RHI/D3D12/unit/
- Create unit/CMakeLists.txt with proper test configuration
- Simplify parent CMakeLists.txt to use add_subdirectory
- Integration tests remain in integration/ folder
2026-03-20 02:58:33 +08:00
4c6e7af02e refactor: encapsulate frame fence synchronization in CommandQueue
- Add WaitForPreviousFrame() and GetCurrentFrame() to RHICommandQueue interface
- D3D12CommandQueue now manages frame fence internally
- ExecuteCommandLists automatically signals fence after command execution
- OpenGLCommandQueue provides stub implementations for interface compliance
- Minimal test now uses CommandQueue::WaitForPreviousFrame() instead of manual fence
2026-03-20 02:51:34 +08:00
b7d66a09de fix: replace Sleep with proper fence synchronization in minimal test 2026-03-20 02:49:19 +08:00
e01dcfe6ed chore: remove obsolete skill files 2026-03-20 02:38:13 +08:00
ad0c265c4c docs: add blueprint documentation 2026-03-20 02:36:29 +08:00
77ef74bec6 fix: D3D12 screenshot implementation and tests 2026-03-20 02:35:59 +08:00
070b444f8f docs: update RHI API docs 2026-03-20 02:35:45 +08:00
ea756c0177 docs: update resources API docs 2026-03-20 02:35:35 +08:00
fd792b7df1 docs: update memory and threading API docs 2026-03-20 02:35:24 +08:00
c5b17239ca docs: update math API docs 2026-03-20 02:35:15 +08:00
e165dbea1c docs: update core and debug API docs 2026-03-20 02:35:07 +08:00
0c073db4e8 docs: update containers API docs 2026-03-20 02:35:01 +08:00
a647f5e8ec 修复 D3D12 截图功能:修复 GPU 过载导致的设备移除问题
问题根因:
1. 渲染循环帧率过高导致 GPU 过载(TDR)
2. D3D12CommandList::Reset() 未正确调用底层 Reset()

修复内容:
1. 在 Present 后添加 Sleep(10) 延迟防止 GPU 过载
2. 修复 D3D12CommandList::Reset() 正确调用底层 m_commandList->Reset()
3. 在 D3D12CommandList 中存储 CommandAllocator 引用
4. 在 main_minimal.cpp 中添加截图调用逻辑(30帧后截图保存为 minimal.ppm)

修改文件:
- engine/include/XCEngine/RHI/D3D12/D3D12CommandList.h
- engine/src/RHI/D3D12/D3D12CommandList.cpp
- tests/RHI/D3D12/integration/main_minimal.cpp (新增)
2026-03-20 02:25:15 +08:00
7e1782e203 docs: 重写 api-skill.md,完善文档规范与生成流程 2026-03-19 12:41:53 +08:00
5257f3d75c docs: Fix SKILL.md规范 violations - Remove ## 方法列表 and flatten ### sub-headers in ## 公共方法 2026-03-19 02:01:18 +08:00
8e85fd98b8 docs: Remove sub-headers from 公共方法 sections to follow SKILL.md规范 2026-03-19 01:59:38 +08:00
b46d450429 Fix RHI documentation discrepancies
Fixed the following issues:
- command-list.md: Shutdown linked to threading/task-system instead of local shutdown.md
- fence.md: Wait linked to threading/task-group instead of local wait.md
- factory/create-rhi-device-string.md: Claimed Vulkan/Metal support but source doesn't support them
- opengl/buffer/buffer.md: GetType linked to command-queue/get-type (wrong type)
- d3d12/device/device.md: Initialize/Shutdown linked to threading/task-system
- d3d12/command-list/command-list.md: Initialize/Shutdown/Reset/Close/Clear linked to wrong docs
- d3d12/texture/texture.md: Initialize/Shutdown linked to threading/task-system
- opengl/command-list/command-list.md: Shutdown linked to threading/task-system
- opengl/device/device.md: GetNativeHandle incorrectly linked to get-window.md

All links validated with fix_links.py - no broken references remaining.
2026-03-19 01:23:10 +08:00
2076a484d4 Fix debug module documentation structure
- Create overview page for FileLogSink (filelogsink/filelogsink.md)
- Create constructor page for FileLogSink (filelogsink/construct.md)
- Create overview page for ConsoleLogSink (consolelogsink/overview.md)
- Fix self-referencing links in FileLogSink and ConsoleLogSink constructor pages

The constructor pages were incorrectly linking to themselves as 'overview' pages.
Created proper overview pages that list all public methods and link to their
individual documentation pages.
2026-03-19 01:22:11 +08:00
7e4c48d4f9 docs: Document stub/not-implemented methods in resources module
Fixed discrepancies between source code and documentation:
- AsyncLoader: Document Initialize() ignores workerThreadCount, Submit() doesn't do actual async loading, Update() is stub
- ResourceManager: Document UnloadUnused() and ReloadResource() are stubs
- ResourceCache: Document OnZeroRefCount() and Flush() are stubs
- ResourceDependencyGraph: Document TopologicalSort() returns empty (stub)
- ResourceFileSystem: Document GetResourceInfo() doesn't fill modifiedTime, EnumerateResources() is stub
- FileArchive: Document Enumerate() is stub
- ResourcePackageBuilder: Document AddDirectory() is stub
- ImportSettings: Document LoadFromJSON/SaveToJSON are stubs
- TextureImportSettings/MeshImportSettings: Document JSON methods are stubs
- TextureLoader/MeshLoader/MaterialLoader/ShaderLoader/AudioLoader: Document GetDefaultSettings() returns nullptr
- AudioLoader: Document ParseWAVData() is stub, Load() doesn't parse WAV headers
- ShaderLoader: Document DetectShaderType/ParseShaderSource are stubs
- MaterialLoader: Document ParseMaterialData() is stub
- Texture: Document Create() mipLevels=0 behavior, GenerateMipmaps() returns false
- Mesh: Document MeshLoader::Load() is example only
- IResourceLoader: Document GetDefaultSettings() returns nullptr for all loaders
2026-03-19 01:16:12 +08:00
8c719418d0 Add missing destructor documentation for PoolAllocator and ProxyAllocator
- Created docs/api/memory/pool-allocator/~pool-allocator.md documenting the destructor
- Created docs/api/memory/proxy-allocator/~proxy-allocator.md documenting the destructor
- Added ~ProxyAllocator entry to proxy-allocator.md overview table
- Verified link validation passes (no broken references)
2026-03-19 01:15:45 +08:00
94beec946b Fix documentation links and add missing destructor docs
- Add missing ~ProxyAllocator destructor entry to proxy-allocator.md
- Fix relative link paths in resources documentation
2026-03-19 01:14:36 +08:00
7332a2a592 Fix broken link in FileWriter documentation
- Removed broken [FileWriter](FileWriter.md) link from 方法列表 section since the constructor is already documented on the main page and FileWriter.md doesn't exist (file is named filewriter.md)

Also includes link fixes from fix_links.py:
- Fixed relative paths in containers documentation
2026-03-19 01:14:22 +08:00
12ae6f561a docs: Fix containers module documentation discrepancies
- Array::SetAllocator: Remove reference to non-existent PoolAllocator class
- HashMap::SetAllocator: Remove reference to non-existent GetDefaultAllocator()
- HashMap::Copy/Move: Fix move constructor complexity (O(m_bucketCount), not O(1))
- HashMap::iterator: Remove C++20 structured bindings example
- String: Add missing links for operator+ and operator==/!=
2026-03-19 01:14:20 +08:00
2141534995 docs: Fix RHI module documentation discrepancies
Fixed incorrect links in RHI documentation:
- Fixed OpenGL swap-chain docs with wrong references to threading/containers
- Fixed OpenGL texture docs with incorrect buffer/ texture links
- Fixed OpenGL vertex-array docs with wrong threading links
- Fixed OpenGL sampler docs with wrong threading links
- Fixed OpenGL device docs with incorrect swap-chain links
- Fixed fence docs with incorrect command-queue links
- Fixed command-list docs with missing shutdown link
- Fixed get-framebuffer-size.md title mismatch

Added missing documentation:
- Created fence/wait.md
- Created command-list/shutdown.md
- Created swap-chain/resize.md
- Created OpenGL sampler initialize.md, bind.md, unbind.md
2026-03-19 01:07:49 +08:00
452ccd4f8f docs: Add missing resources module documentation
Added documentation for undocumented classes:
- ResourcePath: Path manipulation and GUID conversion utilities
- FileArchive: Archive file reading support
- ResourcePackage/ResourcePackageBuilder: Resource packaging system

Updated resources.md overview to include new documentation modules
and added ImportSettings and ResourceFileSystem to core components.
2026-03-19 01:06:12 +08:00
f436280aa5 Fix math documentation discrepancies
- Vector4.md: Add index mapping (0=x, 1=y, 2=z, 3=w) to operator[] description
- Transform.md: Add proper '运算符' subsection header for operator* documentation

Found and fixed missing operator documentation:
- Vector4: operator[] index mapping was undocumented
- Transform: operator* was listed without proper section header
2026-03-19 01:05:17 +08:00
de4086dbfe docs: Fix core module documentation discrepancies
Fixed the following issues in XCEngine Core module documentation:
- Added 'using namespace XCEngine::Core;' to all code examples that use
  Core types (Event, FileWriter, etc.) without full namespace qualification
- Added missing '#include <XCEngine/Containers/String.h>' to FileWriter
  examples that use Containers::String
- Added '#include <string>' to Flush.md example using std::to_string

Affected files:
- core/core.md: Added using directive and Containers include
- event/*.md: Added using namespace to all 8 event doc files
- filewriter/*.md: Added using namespace and proper includes to all 6 files
2026-03-19 01:04:30 +08:00
3ac93ba2e8 Fix containers documentation discrepancies
- Remove Size() from String docs (does not exist in source, use Length())
- Remove broken links to operator+ and operator==/!= (inline functions)
- Fix string.md to correctly reference Length/Capacity/Empty instead of Size
- Add proper documentation for inline operators in string.md
2026-03-19 01:04:10 +08:00
7dd7858ef2 docs: fix threading module documentation discrepancies
- Fix SpinLock docs: clarify lock()/unlock()/try_lock() are non-const
  (matching source implementation in SpinLock.h)
- Add missing LambdaTask::Execute() method to inherited methods table
- Update TaskGroup::Wait() docs: clarify m_pendingCount never decrements
  causing indefinite block even after all tasks complete (not just
  unexecuted tasks)
- Update TaskGroup::IsComplete() docs: document same m_pendingCount
  issue causing incorrect return values
2026-03-19 01:03:14 +08:00
71413381af docs: fix debug module documentation discrepancies
- Changed include path in debug.md from Logger.h to Debug.h (umbrella header)
- Added XE_ASSERT example in debug.md usage section
- Added documentation for Profiler private types (ProfileNode, ProfileSample)
- Added documentation for Profiler member variables (m_profileStack, m_samples, m_frameStartTime, m_initialized)
- Verified MarkEvent, SetMarker, ExportChromeTracing are correctly marked as stubs
2026-03-19 01:02:15 +08:00
a669ec819d Fix RHI documentation discrepancies and add missing doc files
Fixed incorrect links in OpenGL documentation:
- Fixed wrong links to threading/task-system docs for Initialize/Shutdown methods
- Fixed wrong links to buffer docs for GetNativeHandle methods
- Fixed wrong links to shader docs for Bind/Unbind methods
- Fixed wrong links to command-list docs for Clear/Reset/Close methods
- Fixed wrong links to buffer/get-size.md for width/height methods

Added missing documentation files:
- OpenGL buffer: bind.md, unbind.md, get-type.md, initialize.md
- OpenGL fence: initialize.md, reset.md
- OpenGL swap-chain: get-size.md, initialize.md
- OpenGL render-target-view: initialize.md, shutdown.md, bind.md, unbind.md, clear.md, get-size.md
- OpenGL depth-stencil-view: initialize.md, shutdown.md, bind.md, unbind.md, get-size.md
- OpenGL command-list: clear.md

All links validated with fix_links.py - no broken references.
2026-03-19 00:54:54 +08:00
086eb877b5 docs: fix resources module documentation discrepancies
- Add missing MakeResourceGUID helper function to resourcetypes.md
- Add note about GetResourceType<T>() template specializations
- Merge duplicate '缓存控制' section into '内存管理' in resourcecache.md
- Verify all methods documented match source code implementations

Fixed documentation to match:
- ResourceTypes.h: MakeResourceGUID function now documented
- ResourceCache.h: OnZeroRefCount and Clear methods now properly listed
- AsyncLoader.md: Removed duplicate progress query section
2026-03-19 00:52:46 +08:00
bd530dc8b1 Fix Box documentation to accurately reflect AABB vs OBB behavior
- Updated box.md to clarify that Box uses OBB semantics for Contains
  but currently uses AABB for Intersects(Box)
- Updated intersects-box.md to document that it uses AABB algorithm
  instead of SAT, since the current implementation ignores transform
- Added notes explaining the current limitations of the Box implementation
2026-03-19 00:52:04 +08:00
6a952473ce docs: fix threading module documentation discrepancies
- Fix include paths: use #include "Threading/..." instead of <XCEngine/Threading/...>
- Document protected ITask constructors (ITask(), ITask(TaskPriority))
- Document Callback typedef in TaskGroup
- Clarify Mutex STL-compatible methods are const
- Note GetProgress() implementation limitation (returns 0.0f)
2026-03-19 00:49:08 +08:00
98c764bab9 docs: Fix memory module documentation discrepancies
- Add missing PoolAllocator class overview with methods table
- Add missing LinearAllocator class overview with methods table
- Add missing ProxyAllocator class overview with methods table
- Fix PoolAllocator::Allocate example code and comments
- Clarify ProxyAllocator::Free totalFreed calculation behavior
- Fix CreateLinearAllocator complexity from O(size) to O(1)
- Add note about Reallocate thread safety in ProxyAllocator
2026-03-19 00:48:44 +08:00
5fc18eac6f docs: Fix SmartPtr docs linking to Core Types instead of RHI Types 2026-03-19 00:47:57 +08:00
dae1a63a90 Fix debug module documentation discrepancies
- Fix XE_LOG macro parameter order in debug.md (category, level) was reversed
- Add 'Implementation Status' section to profiler.md listing stub methods
  (MarkEvent, SetMarker, ExportChromeTracing) that are not yet implemented
2026-03-19 00:47:29 +08:00
82cf147817 docs: 修正 API 文档准确性 (第四轮检查)
修复问题:
- containers: HashMap 实现描述修正
- debug: XE_LOG 宏参数顺序修正
- memory: ProxyAllocator 统计示例修正, PoolAllocator allocate size 检查描述
- resources: ResourceManager 缺失 UnloadGroup 方法
- rhi: D3D12 格式枚举名称修正, Texture Format 枚举补全, ResourceStates 补充
- threading: TaskGroup GetProgress/Wait/Cancel 实现限制说明
2026-03-19 00:43:16 +08:00
870cb3116e docs: 修正 API 文档准确性 (第三轮检查)
修复问题:
- containers: HashMap include 路径修复
- core: RefCounted 析构函数访问级别, Event::begin/end 返回值说明
- memory: LinearAllocator::GetMarker 返回偏移量非指针
- resources: LoadAsync 示例使用不存在的模板方法
- rhi: OpenGL 链接错误, ShaderType 枚举缺失8个类型, 链接修复
- threading: SpinLock STL 兼容方法说明, Mutex const 方法说明
2026-03-19 00:35:26 +08:00
a9f882f233 docs: 修正 API 文档准确性 (第二轮检查)
修复的问题:
- math: 修复 Quaternion::Normalize 链接错误
- containers: HashMap 迭代器示例使用不存在的 cbegin/cend,删除冗余构造函数声明
- core: RefCounted 析构函数访问级别修正 (protected)
- debug: LogLevelToString 示例返回值大小写修正
- memory: 修正 LinearAllocator::Reallocate 返回 nullptr,ProxyAllocator 统计描述,头文件路径 IAllocator.h -> Allocator.h
- resources: Texture::Create mipLevels 参数描述修正
- rhi: 修复多处链接错误,新增缺失的方法文档
- threading: TaskSystem 配置项未实现状态标注,Wait 方法空实现标注
2026-03-19 00:31:14 +08:00
dc850d7739 docs: 重构 API 文档结构并修正源码准确性
- 重组文档目录结构: 每个模块的概述页移动到模块子目录
- 重命名 index.md 为 main.md
- 修正所有模块文档中的错误:
  - math: FromEuler→FromEulerAngles, TransformDirection 包含缩放, Box 是 OBB, Color::ToRGBA 格式
  - containers: 新增 operator==/!= 文档, 补充 std::hash DJB 算法细节
  - core: 修复 types 链接错误
  - debug: LogLevelToString 返回大写, timestamp 是秒, Profiler 空实现标注, Windows API vs ANSI
  - memory: 修复头文件路径, malloc vs operator new, 新增方法文档
  - resources: 修复 Shader/Texture 链接错误
  - threading: TaskSystem::Wait 空实现标注, ReadWriteLock 重入描述, LambdaTask 链接
- 验证: fix_links.py 确认 0 个断裂引用
2026-03-19 00:22:30 +08:00
d0e16962c8 docs: update README and project docs to reflect game engine scope 2026-03-18 17:58:01 +08:00
9bad996ecf refactor: reorganize docs into plan/ and add skills/ 2026-03-18 17:49:22 +08:00
fc7c8f6797 feat: 完成资源系统导入设置类实现
- 新增 ImportSettings 基类
- 新增 TextureImportSettings 纹理导入设置类
- 新增 MeshImportSettings 网格导入设置类
- 新增 ResourcePath 资源路径类
- 完善 CMakeLists.txt 配置
- 新增对应单元测试 (45个测试用例)
2026-03-18 13:39:32 +08:00
3196261e9b fix(RHI): 添加 OpenGL 源文件到 CMakeLists 并修复编译错误
- 添加 OpenGL RHI 所有源文件到 engine/CMakeLists.txt
- 修复 OpenGLPipelineState 结构体重定义问题
- 修复 BufferDesc/TextureDesc/ShaderCompileDesc API 不匹配
- 添加 OpenGLShader 缺少的基类纯虚函数实现
- 修复 HashMap 迭代器支持和 ResourceManager API 调用
2026-03-18 03:37:34 +08:00
8344057886 feat(resources): add LoadGroup and UnloadGroup for batch resource loading 2026-03-18 03:20:18 +08:00
87835c5f7a Add build2/ to gitignore 2026-03-18 03:07:29 +08:00
508d8b165b feat(RHI): 添加 RHIPipelineLayout 抽象类 2026-03-18 03:04:13 +08:00
17e71218e7 feat(OpenGL): 初始化 RHICapabilities
- 在 OpenGLDevice 初始化时查询 GL 扩展和硬件限制
- 设置 majorVersion、minorVersion
- 设置几何着色器、计算着色器、细分着色器支持标志
- 设置最大纹理尺寸、最大渲染目标数、最大视口数、各向异性最大值、顶点属性最大数
2026-03-18 02:36:40 +08:00
65ce9c84c6 feat(RHI): 在 RHIBuffer 基类中添加资源状态接口
- 添加 GetState() 和 SetState() 纯虚函数到 RHIBuffer 抽象基类
- D3D12Buffer 已有实现,现在通过基类接口可用
- OpenGLBuffer 添加空实现(OpenGL 无资源状态概念)
2026-03-18 02:34:17 +08:00