From 58a83f445a5d1be8a9d0fb6d0f0332e168966875 Mon Sep 17 00:00:00 2001
From: ssdfasd <2156608475@qq.com>
Date: Thu, 19 Mar 2026 12:44:08 +0800
Subject: [PATCH] fix: improve doc link navigation and tree display
- Fix link resolution with proper relative/absolute path handling
- Improve link styling with underline decoration
- Hide leaf nodes from tree, only show directories
- Fix log file path for packaged app
---
.trae/documents/fix_doc_link_matching_plan.md | 82 +
.trae/documents/fix_link_color_plan.md | 68 +
.trae/documents/fix_link_navigation_plan.md | 57 +
.trae/documents/hide_leaf_nodes_plan.md | 39 +
docs/api/containers/array/array.md | 67 +
docs/api/containers/array/clear.md | 36 +
docs/api/containers/array/constructor.md | 44 +
.../containers/array/copy-move-constructor.md | 44 +
docs/api/containers/array/data.md | 30 +
docs/api/containers/array/destructor.md | 28 +
docs/api/containers/array/emplaceback.md | 47 +
docs/api/containers/array/front-back.md | 38 +
docs/api/containers/array/iterator.md | 45 +
docs/api/containers/array/operator-assign.md | 44 +
.../containers/array/operator-subscript.md | 39 +
docs/api/containers/array/popback.md | 38 +
docs/api/containers/array/pushback.md | 43 +
docs/api/containers/array/reserve.md | 39 +
docs/api/containers/array/resize.md | 46 +
docs/api/containers/array/setallocator.md | 38 +
docs/api/containers/array/size.md | 47 +
docs/api/containers/containers.md | 57 +
docs/api/containers/hashmap/clear.md | 34 +
docs/api/containers/hashmap/constructor.md | 31 +
docs/api/containers/hashmap/contains.md | 35 +
docs/api/containers/hashmap/copy-move.md | 34 +
docs/api/containers/hashmap/destructor.md | 27 +
docs/api/containers/hashmap/erase.md | 37 +
docs/api/containers/hashmap/find.md | 39 +
docs/api/containers/hashmap/hashmap.md | 80 +
docs/api/containers/hashmap/insert.md | 38 +
docs/api/containers/hashmap/iterator.md | 34 +
.../api/containers/hashmap/operator-assign.md | 36 +
.../containers/hashmap/operator-subscript.md | 33 +
docs/api/containers/hashmap/setallocator.md | 28 +
docs/api/containers/hashmap/size.md | 35 +
docs/api/containers/string/clear.md | 39 +
docs/api/containers/string/constructor.md | 48 +
docs/api/containers/string/cstr.md | 36 +
docs/api/containers/string/destructor.md | 31 +
docs/api/containers/string/ends-with.md | 39 +
docs/api/containers/string/find.md | 47 +
docs/api/containers/string/operator-assign.md | 47 +
docs/api/containers/string/operator-equal.md | 43 +
.../containers/string/operator-plus-assign.md | 43 +
docs/api/containers/string/operator-plus.md | 39 +
.../containers/string/operator-subscript.md | 51 +
docs/api/containers/string/reserve-resize.md | 51 +
docs/api/containers/string/size.md | 44 +
docs/api/containers/string/starts-with.md | 39 +
docs/api/containers/string/string.md | 105 +
docs/api/containers/string/substring.md | 43 +
docs/api/containers/string/to-lower-upper.md | 36 +
docs/api/containers/string/trim.md | 35 +
docs/api/core/core.md | 97 +
docs/api/core/event/Clear.md | 39 +
docs/api/core/event/Invoke.md | 45 +
docs/api/core/event/ProcessUnsubscribes.md | 39 +
docs/api/core/event/Subscribe.md | 50 +
docs/api/core/event/Unsubscribe.md | 43 +
docs/api/core/event/begin.md | 37 +
docs/api/core/event/end.md | 36 +
docs/api/core/event/event.md | 69 +
docs/api/core/filewriter/Close.md | 40 +
docs/api/core/filewriter/Flush.md | 45 +
docs/api/core/filewriter/IsOpen.md | 43 +
docs/api/core/filewriter/Open.md | 53 +
docs/api/core/filewriter/Write.md | 48 +
docs/api/core/filewriter/filewriter.md | 66 +
docs/api/core/refcounted/AddRef.md | 40 +
docs/api/core/refcounted/GetRefCount.md | 43 +
docs/api/core/refcounted/Release.md | 39 +
docs/api/core/refcounted/refcounted.md | 44 +
docs/api/core/smartptr/MakeRef.md | 51 +
docs/api/core/smartptr/MakeUnique.md | 49 +
docs/api/core/smartptr/Ref.md | 40 +
docs/api/core/smartptr/UniqueRef.md | 46 +
docs/api/core/smartptr/smartptr.md | 64 +
docs/api/core/types/byte.md | 30 +
docs/api/core/types/int16.md | 27 +
docs/api/core/types/int32.md | 30 +
docs/api/core/types/int64.md | 30 +
docs/api/core/types/int8.md | 28 +
docs/api/core/types/types.md | 63 +
docs/api/core/types/uint16.md | 30 +
docs/api/core/types/uint32.md | 30 +
docs/api/core/types/uint64.md | 30 +
docs/api/core/types/uint8.md | 30 +
.../debug/consolelogsink/consolelogsink.md | 21 +
docs/api/debug/consolelogsink/flush.md | 22 +
docs/api/debug/consolelogsink/log.md | 25 +
docs/api/debug/consolelogsink/overview.md | 41 +
.../debug/consolelogsink/setcoloroutput.md | 24 +
.../debug/consolelogsink/setminimumlevel.md | 24 +
.../debug/consolelogsink/~consolelogsink.md | 13 +
docs/api/debug/debug.md | 86 +
docs/api/debug/filelogsink/construct.md | 24 +
docs/api/debug/filelogsink/filelogsink.md | 37 +
docs/api/debug/filelogsink/flush.md | 24 +
docs/api/debug/filelogsink/log.md | 25 +
docs/api/debug/filelogsink/~filelogsink.md | 13 +
docs/api/debug/ilogsink/flush.md | 32 +
docs/api/debug/ilogsink/ilogsink.md | 45 +
docs/api/debug/ilogsink/log.md | 29 +
docs/api/debug/logcategory/logcategory.md | 44 +
.../debug/logcategory/logcategorytostring.md | 28 +
docs/api/debug/logentry/logentry.md | 47 +
docs/api/debug/logger/addsink.md | 27 +
docs/api/debug/logger/debug.md | 30 +
docs/api/debug/logger/error.md | 30 +
docs/api/debug/logger/fatal.md | 30 +
docs/api/debug/logger/get.md | 22 +
docs/api/debug/logger/info.md | 30 +
docs/api/debug/logger/initialize.md | 28 +
docs/api/debug/logger/log.md | 45 +
docs/api/debug/logger/logger.md | 92 +
docs/api/debug/logger/removesink.md | 29 +
docs/api/debug/logger/setcategoryenabled.md | 36 +
docs/api/debug/logger/setminimumlevel.md | 30 +
docs/api/debug/logger/shutdown.md | 26 +
docs/api/debug/logger/verbose.md | 30 +
docs/api/debug/logger/warning.md | 30 +
docs/api/debug/loglevel/loglevel.md | 40 +
docs/api/debug/loglevel/logleveltostring.md | 28 +
docs/api/debug/profiler/beginframe.md | 26 +
docs/api/debug/profiler/beginprofile.md | 36 +
docs/api/debug/profiler/endframe.md | 26 +
docs/api/debug/profiler/endprofile.md | 25 +
.../api/debug/profiler/exportchrometracing.md | 45 +
docs/api/debug/profiler/get.md | 22 +
docs/api/debug/profiler/initialize.md | 30 +
docs/api/debug/profiler/markevent.md | 36 +
docs/api/debug/profiler/profiler.md | 136 +
docs/api/debug/profiler/setmarker.md | 33 +
docs/api/debug/profiler/shutdown.md | 22 +
docs/api/fix_links.py | 238 +
docs/api/main.md | 94 +
docs/api/math/aabb/aabb.md | 43 +
docs/api/math/aabb/getaxis.md | 23 +
docs/api/math/aabb/intersects-obb.md | 24 +
docs/api/math/aabb/intersects-sphere.md | 24 +
docs/api/math/aabb/obb-contains.md | 20 +
docs/api/math/aabb/obb-getaxis.md | 20 +
docs/api/math/aabb/obb-getmax.md | 17 +
docs/api/math/aabb/obb-getmin.md | 17 +
docs/api/math/aabb/obb-intersects-obb.md | 25 +
docs/api/math/aabb/obb-intersects-sphere.md | 28 +
docs/api/math/bounds/bounds.md | 40 +
docs/api/math/bounds/contains.md | 20 +
docs/api/math/bounds/encapsulate-bounds.md | 18 +
docs/api/math/bounds/encapsulate.md | 21 +
docs/api/math/bounds/expand.md | 19 +
docs/api/math/bounds/getclosestpoint.md | 20 +
docs/api/math/bounds/getmax.md | 17 +
docs/api/math/bounds/getmin.md | 17 +
docs/api/math/bounds/getvolume.md | 17 +
docs/api/math/bounds/intersects.md | 20 +
docs/api/math/bounds/setminmax.md | 19 +
docs/api/math/box/box.md | 44 +
docs/api/math/box/contains.md | 20 +
docs/api/math/box/getmax.md | 17 +
docs/api/math/box/getmin.md | 17 +
docs/api/math/box/intersects-box.md | 22 +
docs/api/math/box/intersects-ray.md | 24 +
docs/api/math/box/intersects.md | 20 +
docs/api/math/color/black.md | 11 +
docs/api/math/color/blue.md | 11 +
docs/api/math/color/clear.md | 11 +
docs/api/math/color/color.md | 64 +
docs/api/math/color/cyan.md | 11 +
docs/api/math/color/green.md | 11 +
docs/api/math/color/lerp.md | 22 +
docs/api/math/color/magenta.md | 11 +
docs/api/math/color/red.md | 11 +
docs/api/math/color/torgba.md | 18 +
docs/api/math/color/tovector3.md | 17 +
docs/api/math/color/tovector4.md | 17 +
docs/api/math/color/white.md | 11 +
docs/api/math/color/yellow.md | 11 +
docs/api/math/frustum/contains-bounds.md | 25 +
docs/api/math/frustum/contains-point.md | 24 +
docs/api/math/frustum/contains-sphere.md | 24 +
docs/api/math/frustum/frustum.md | 45 +
docs/api/math/frustum/intersects-bounds.md | 26 +
docs/api/math/frustum/intersects-sphere.md | 25 +
docs/api/math/h/deg-to-rad.md | 20 +
docs/api/math/h/degrees.md | 20 +
docs/api/math/h/epsilon.md | 23 +
docs/api/math/h/float-max.md | 19 +
docs/api/math/h/h.md | 54 +
docs/api/math/h/half-pi.md | 19 +
docs/api/math/h/pi.md | 22 +
docs/api/math/h/rad-to-deg.md | 20 +
docs/api/math/h/radians.md | 20 +
docs/api/math/h/two-pi.md | 19 +
docs/api/math/math.md | 100 +
docs/api/math/matrix3/determinant.md | 18 +
docs/api/math/matrix3/identity.md | 17 +
docs/api/math/matrix3/inverse.md | 18 +
docs/api/math/matrix3/matrix3.md | 57 +
docs/api/math/matrix3/rotationx.md | 20 +
docs/api/math/matrix3/rotationy.md | 20 +
docs/api/math/matrix3/rotationz.md | 20 +
docs/api/math/matrix3/scale.md | 20 +
docs/api/math/matrix3/transpose.md | 18 +
docs/api/math/matrix3/zero.md | 17 +
docs/api/math/matrix4/decompose.md | 24 +
docs/api/math/matrix4/determinant.md | 18 +
docs/api/math/matrix4/getrotation.md | 18 +
docs/api/math/matrix4/getscale.md | 18 +
docs/api/math/matrix4/gettranslation.md | 18 +
docs/api/math/matrix4/identity.md | 17 +
docs/api/math/matrix4/inverse.md | 18 +
docs/api/math/matrix4/lookat.md | 22 +
docs/api/math/matrix4/matrix4.md | 79 +
docs/api/math/matrix4/multiplypoint.md | 21 +
docs/api/math/matrix4/multiplyvector.md | 21 +
docs/api/math/matrix4/orthographic.md | 25 +
docs/api/math/matrix4/perspective.md | 23 +
docs/api/math/matrix4/rotation.md | 21 +
docs/api/math/matrix4/rotationx.md | 20 +
docs/api/math/matrix4/rotationy.md | 20 +
docs/api/math/matrix4/rotationz.md | 20 +
docs/api/math/matrix4/scale.md | 20 +
docs/api/math/matrix4/translation.md | 20 +
docs/api/math/matrix4/transpose.md | 18 +
docs/api/math/matrix4/trs.md | 22 +
docs/api/math/matrix4/zero.md | 17 +
docs/api/math/plane/frompoints.md | 22 +
docs/api/math/plane/getclosestpoint.md | 20 +
docs/api/math/plane/getdistancetopoint.md | 20 +
docs/api/math/plane/getside.md | 20 +
docs/api/math/plane/intersects.md | 20 +
docs/api/math/plane/plane.md | 40 +
docs/api/math/quaternion/dot.md | 20 +
docs/api/math/quaternion/fromaxisangle.md | 21 +
docs/api/math/quaternion/fromeulerangles.md | 25 +
.../api/math/quaternion/fromrotationmatrix.md | 21 +
docs/api/math/quaternion/identity.md | 17 +
docs/api/math/quaternion/inverse.md | 17 +
docs/api/math/quaternion/lookrotation.md | 21 +
docs/api/math/quaternion/magnitude.md | 17 +
docs/api/math/quaternion/normalized.md | 40 +
.../math/quaternion/quaternion-multiply.md | 23 +
docs/api/math/quaternion/quaternion.md | 61 +
docs/api/math/quaternion/slerp.md | 22 +
docs/api/math/quaternion/toeulerangles.md | 18 +
docs/api/math/quaternion/tomatrix4x4.md | 18 +
docs/api/math/ray/getpoint.md | 22 +
docs/api/math/ray/intersects-box.md | 27 +
docs/api/math/ray/intersects-plane.md | 27 +
docs/api/math/ray/intersects-sphere.md | 26 +
docs/api/math/ray/ray.md | 44 +
docs/api/math/rect/contains-float.md | 24 +
docs/api/math/rect/contains-vector2.md | 24 +
docs/api/math/rect/getbottom.md | 18 +
docs/api/math/rect/getcenter.md | 18 +
docs/api/math/rect/getleft.md | 18 +
docs/api/math/rect/getposition.md | 18 +
docs/api/math/rect/getright.md | 18 +
docs/api/math/rect/getsize.md | 18 +
docs/api/math/rect/gettop.md | 18 +
docs/api/math/rect/intersect.md | 23 +
docs/api/math/rect/intersects.md | 24 +
docs/api/math/rect/rect-overview.md | 69 +
docs/api/math/rect/rect.md | 17 +
docs/api/math/rect/rectint-contains.md | 24 +
docs/api/math/rect/rectint-getbottom.md | 18 +
docs/api/math/rect/rectint-getcenter.md | 18 +
docs/api/math/rect/rectint-getleft.md | 18 +
docs/api/math/rect/rectint-getposition.md | 18 +
docs/api/math/rect/rectint-getright.md | 18 +
docs/api/math/rect/rectint-getsize.md | 18 +
docs/api/math/rect/rectint-gettop.md | 18 +
docs/api/math/rect/rectint-intersects.md | 24 +
docs/api/math/rect/rectint.md | 53 +
docs/api/math/rect/set.md | 24 +
docs/api/math/rect/setposition-float.md | 22 +
docs/api/math/rect/setposition-vector2.md | 21 +
docs/api/math/rect/union.md | 23 +
docs/api/math/rect/viewport-getaspectratio.md | 18 +
docs/api/math/rect/viewport-getrect.md | 18 +
docs/api/math/rect/viewport.md | 45 +
docs/api/math/sphere/contains.md | 20 +
docs/api/math/sphere/intersects.md | 20 +
docs/api/math/sphere/sphere.md | 32 +
docs/api/math/transform/inverse.md | 17 +
.../transform/inversetransformdirection.md | 21 +
.../math/transform/inversetransformpoint.md | 21 +
docs/api/math/transform/tomatrix.md | 19 +
docs/api/math/transform/transform.md | 39 +
docs/api/math/transform/transformdirection.md | 22 +
docs/api/math/transform/transformpoint.md | 22 +
docs/api/math/vector2/cross.md | 23 +
docs/api/math/vector2/dot.md | 23 +
docs/api/math/vector2/down.md | 17 +
docs/api/math/vector2/left.md | 17 +
docs/api/math/vector2/lerp.md | 24 +
docs/api/math/vector2/magnitude.md | 25 +
docs/api/math/vector2/movetowards.md | 24 +
docs/api/math/vector2/normalize.md | 20 +
docs/api/math/vector2/normalized.md | 18 +
docs/api/math/vector2/one.md | 17 +
docs/api/math/vector2/right.md | 17 +
docs/api/math/vector2/sqrmagnitude.md | 25 +
docs/api/math/vector2/up.md | 17 +
docs/api/math/vector2/vector2.md | 57 +
docs/api/math/vector2/zero.md | 17 +
docs/api/math/vector3/angle.md | 23 +
docs/api/math/vector3/back.md | 17 +
docs/api/math/vector3/cross.md | 23 +
docs/api/math/vector3/dot.md | 23 +
docs/api/math/vector3/down.md | 17 +
docs/api/math/vector3/forward.md | 17 +
docs/api/math/vector3/left.md | 17 +
docs/api/math/vector3/lerp.md | 24 +
docs/api/math/vector3/magnitude.md | 25 +
docs/api/math/vector3/movetowards.md | 24 +
docs/api/math/vector3/normalize.md | 20 +
docs/api/math/vector3/normalized.md | 18 +
docs/api/math/vector3/one.md | 17 +
docs/api/math/vector3/project.md | 23 +
docs/api/math/vector3/projectonplane.md | 23 +
docs/api/math/vector3/quaternion-multiply.md | 23 +
docs/api/math/vector3/reflect.md | 23 +
docs/api/math/vector3/right.md | 17 +
docs/api/math/vector3/sqrmagnitude.md | 25 +
docs/api/math/vector3/up.md | 17 +
docs/api/math/vector3/vector3.md | 69 +
docs/api/math/vector3/zero.md | 17 +
docs/api/math/vector4/dot.md | 23 +
docs/api/math/vector4/one.md | 17 +
docs/api/math/vector4/project.md | 23 +
docs/api/math/vector4/tovector3.md | 18 +
docs/api/math/vector4/vector4.md | 53 +
docs/api/math/vector4/zero.md | 17 +
docs/api/memory/allocator/allocate.md | 38 +
docs/api/memory/allocator/allocator.md | 72 +
docs/api/memory/allocator/free.md | 40 +
.../memory/allocator/get-allocation-count.md | 52 +
docs/api/memory/allocator/get-name.md | 40 +
.../memory/allocator/get-peak-allocated.md | 57 +
.../memory/allocator/get-total-allocated.md | 50 +
docs/api/memory/allocator/get-total-freed.md | 50 +
docs/api/memory/allocator/reallocate.md | 55 +
docs/api/memory/linear-allocator/allocate.md | 41 +
docs/api/memory/linear-allocator/clear.md | 37 +
docs/api/memory/linear-allocator/free.md | 35 +
.../memory/linear-allocator/get-capacity.md | 33 +
.../api/memory/linear-allocator/get-marker.md | 43 +
.../memory/linear-allocator/get-used-size.md | 39 +
.../linear-allocator/linear-allocator.md | 66 +
.../api/memory/linear-allocator/reallocate.md | 35 +
.../api/memory/linear-allocator/set-marker.md | 41 +
.../linear-allocator/~linear-allocator.md | 29 +
.../memory/manager/create-linear-allocator.md | 32 +
.../memory/manager/create-pool-allocator.md | 37 +
.../memory/manager/create-proxy-allocator.md | 36 +
docs/api/memory/manager/dump-memory-leaks.md | 31 +
.../memory/manager/generate-memory-report.md | 37 +
.../memory/manager/get-system-allocator.md | 27 +
docs/api/memory/manager/get.md | 39 +
docs/api/memory/manager/initialize.md | 33 +
docs/api/memory/manager/manager.md | 85 +
.../memory/manager/set-track-allocations.md | 35 +
docs/api/memory/manager/shutdown.md | 35 +
docs/api/memory/memory.md | 72 +
docs/api/memory/pool-allocator/allocate.md | 38 +
docs/api/memory/pool-allocator/contains.md | 38 +
docs/api/memory/pool-allocator/free.md | 38 +
.../memory/pool-allocator/get-block-size.md | 31 +
.../pool-allocator/get-free-block-count.md | 40 +
.../pool-allocator/get-total-block-count.md | 34 +
.../memory/pool-allocator/pool-allocator.md | 73 +
docs/api/memory/pool-allocator/reallocate.md | 35 +
.../memory/pool-allocator/~pool-allocator.md | 31 +
docs/api/memory/proxy-allocator/allocate.md | 37 +
docs/api/memory/proxy-allocator/free.md | 42 +
docs/api/memory/proxy-allocator/get-stats.md | 40 +
.../memory/proxy-allocator/proxy-allocator.md | 61 +
docs/api/memory/proxy-allocator/reallocate.md | 38 +
.../proxy-allocator/~proxy-allocator.md | 37 +
docs/api/resources/asyncloader/asyncloader.md | 107 +
docs/api/resources/asyncloader/cancelall.md | 26 +
docs/api/resources/asyncloader/getprogress.md | 24 +
docs/api/resources/asyncloader/submit.md | 35 +
docs/api/resources/asyncloader/update.md | 27 +
docs/api/resources/audioclip/audioclip.md | 139 +
docs/api/resources/audioclip/setaudiodata.md | 29 +
.../dependencygraph/adddependency.md | 27 +
docs/api/resources/dependencygraph/addnode.md | 27 +
.../dependencygraph/dependencygraph.md | 88 +
.../dependencygraph/getdependencies.md | 25 +
.../dependencygraph/hascirculardependency.md | 31 +
.../dependencygraph/topologicalsort.md | 28 +
docs/api/resources/filearchive/filearchive.md | 84 +
docs/api/resources/filesystem/exists.md | 26 +
docs/api/resources/filesystem/filesystem.md | 104 +
docs/api/resources/filesystem/initialize.md | 24 +
docs/api/resources/filesystem/readresource.md | 27 +
docs/api/resources/iloader/canload.md | 31 +
.../resources/iloader/getdefaultsettings.md | 25 +
.../iloader/getsupportedextensions.md | 25 +
docs/api/resources/iloader/iloader.md | 119 +
docs/api/resources/iloader/load.md | 42 +
docs/api/resources/iloader/loadasync.md | 34 +
.../importsettings/importsettings.md | 173 +
docs/api/resources/iresource/initialize.md | 34 +
docs/api/resources/iresource/iresource.md | 57 +
docs/api/resources/iresource/release.md | 33 +
docs/api/resources/iresource/setinvalid.md | 28 +
docs/api/resources/material/material.md | 151 +
docs/api/resources/material/setfloat.md | 27 +
docs/api/resources/material/setshader.md | 26 +
docs/api/resources/material/settexture.md | 28 +
.../material/updateconstantbuffer.md | 26 +
docs/api/resources/mesh/addsection.md | 30 +
docs/api/resources/mesh/mesh.md | 150 +
docs/api/resources/mesh/setindexdata.md | 30 +
docs/api/resources/mesh/setvertexdata.md | 37 +
docs/api/resources/resourcecache/add.md | 25 +
docs/api/resources/resourcecache/flush.md | 23 +
.../api/resources/resourcecache/getlrulist.md | 27 +
.../resourcecache/onmemorypressure.md | 25 +
.../resources/resourcecache/resourcecache.md | 79 +
docs/api/resources/resourcecache/touch.md | 27 +
docs/api/resources/resourcehandle/get.md | 27 +
docs/api/resources/resourcehandle/getguid.md | 27 +
docs/api/resources/resourcehandle/isvalid.md | 29 +
docs/api/resources/resourcehandle/reset.md | 31 +
.../resourcehandle/resourcehandle.md | 74 +
docs/api/resources/resourcehandle/swap.md | 30 +
docs/api/resources/resourcemanager/exists.md | 28 +
docs/api/resources/resourcemanager/find.md | 29 +
.../resources/resourcemanager/getloader.md | 27 +
docs/api/resources/resourcemanager/load.md | 32 +
.../resources/resourcemanager/loadasync.md | 44 +
.../resources/resourcemanager/loadgroup.md | 35 +
.../resourcemanager/registerloader.md | 26 +
.../resourcemanager/resourcemanager.md | 101 +
.../resourcemanager/setmemorybudget.md | 24 +
docs/api/resources/resourcemanager/unload.md | 31 +
.../resources/resourcemanager/unloadunused.md | 26 +
.../resourcepackage/resourcepackage.md | 161 +
.../resources/resourcepath/resourcepath.md | 87 +
docs/api/resources/resources.md | 95 +
docs/api/resources/resourcetypes/generate.md | 26 +
.../resourcetypes/getresourcetypename.md | 25 +
.../resources/resourcetypes/resourcetypes.md | 130 +
docs/api/resources/shader/addattribute.md | 29 +
docs/api/resources/shader/adduniform.md | 29 +
docs/api/resources/shader/shader.md | 154 +
docs/api/resources/texture/create.md | 39 +
docs/api/resources/texture/generatemipmaps.md | 24 +
docs/api/resources/texture/texture.md | 161 +
docs/api/rhi/buffer/buffer.md | 86 +
docs/api/rhi/buffer/get-buffer-type.md | 15 +
docs/api/rhi/buffer/get-name.md | 15 +
docs/api/rhi/buffer/get-native-handle.md | 17 +
docs/api/rhi/buffer/get-size.md | 15 +
docs/api/rhi/buffer/get-state.md | 15 +
docs/api/rhi/buffer/get-stride.md | 15 +
docs/api/rhi/buffer/map.md | 25 +
docs/api/rhi/buffer/set-buffer-type.md | 16 +
docs/api/rhi/buffer/set-data.md | 29 +
docs/api/rhi/buffer/set-name.md | 22 +
docs/api/rhi/buffer/set-state.md | 22 +
docs/api/rhi/buffer/set-stride.md | 16 +
docs/api/rhi/buffer/shutdown.md | 13 +
docs/api/rhi/buffer/unmap.md | 21 +
docs/api/rhi/capabilities/capabilities.md | 82 +
.../rhi/command-list/clear-depth-stencil.md | 22 +
.../rhi/command-list/clear-render-target.md | 22 +
docs/api/rhi/command-list/clear.md | 20 +
docs/api/rhi/command-list/close.md | 13 +
docs/api/rhi/command-list/command-list.md | 55 +
docs/api/rhi/command-list/copy-resource.md | 21 +
docs/api/rhi/command-list/dispatch.md | 22 +
docs/api/rhi/command-list/draw-indexed.md | 24 +
docs/api/rhi/command-list/draw.md | 23 +
docs/api/rhi/command-list/methods.md | 201 +
docs/api/rhi/command-list/reset.md | 13 +
docs/api/rhi/command-list/set-blend-factor.md | 21 +
docs/api/rhi/command-list/set-blend-state.md | 23 +
.../command-list/set-depth-stencil-state.md | 24 +
docs/api/rhi/command-list/set-index-buffer.md | 22 +
.../rhi/command-list/set-pipeline-state.md | 20 +
.../command-list/set-primitive-topology.md | 20 +
.../rhi/command-list/set-render-targets.md | 23 +
docs/api/rhi/command-list/set-scissor-rect.md | 25 +
.../api/rhi/command-list/set-scissor-rects.md | 24 +
docs/api/rhi/command-list/set-stencil-ref.md | 20 +
.../api/rhi/command-list/set-vertex-buffer.md | 23 +
.../rhi/command-list/set-vertex-buffers.md | 27 +
docs/api/rhi/command-list/set-viewport.md | 27 +
docs/api/rhi/command-list/set-viewports.md | 24 +
docs/api/rhi/command-list/shutdown.md | 13 +
.../rhi/command-list/transition-barrier.md | 23 +
docs/api/rhi/command-queue/command-queue.md | 50 +
.../command-queue/execute-command-lists.md | 22 +
.../rhi/command-queue/get-completed-value.md | 19 +
.../rhi/command-queue/get-native-handle.md | 15 +
.../command-queue/get-timestamp-frequency.md | 19 +
docs/api/rhi/command-queue/get-type.md | 15 +
docs/api/rhi/command-queue/methods.md | 73 +
docs/api/rhi/command-queue/shutdown.md | 13 +
docs/api/rhi/command-queue/signal.md | 21 +
docs/api/rhi/command-queue/wait-for-idle.md | 17 +
docs/api/rhi/d3d12/buffer/buffer.md | 37 +
docs/api/rhi/d3d12/buffer/get-buffer-type.md | 16 +
docs/api/rhi/d3d12/buffer/get-desc.md | 19 +
docs/api/rhi/d3d12/buffer/get-gpu-address.md | 19 +
.../d3d12/buffer/get-gpu-virtual-address.md | 19 +
docs/api/rhi/d3d12/buffer/get-name.md | 16 +
.../api/rhi/d3d12/buffer/get-native-handle.md | 19 +
docs/api/rhi/d3d12/buffer/get-resource.md | 19 +
docs/api/rhi/d3d12/buffer/get-size.md | 19 +
docs/api/rhi/d3d12/buffer/get-state.md | 16 +
docs/api/rhi/d3d12/buffer/get-stride.md | 16 +
.../d3d12/buffer/initialize-from-existing.md | 35 +
.../rhi/d3d12/buffer/initialize-with-data.md | 42 +
docs/api/rhi/d3d12/buffer/initialize.md | 39 +
docs/api/rhi/d3d12/buffer/map.md | 27 +
docs/api/rhi/d3d12/buffer/set-data.md | 23 +
docs/api/rhi/d3d12/buffer/shutdown.md | 15 +
docs/api/rhi/d3d12/buffer/unmap.md | 15 +
docs/api/rhi/d3d12/buffer/update-data.md | 28 +
.../command-allocator/command-allocator.md | 19 +
.../get-command-allocator.md | 15 +
.../rhi/d3d12/command-allocator/is-ready.md | 15 +
.../rhi/d3d12/command-list/alias-barrier.md | 17 +
.../api/rhi/d3d12/command-list/begin-query.md | 18 +
.../d3d12/command-list/clear-depth-stencil.md | 18 +
.../d3d12/command-list/clear-render-target.md | 17 +
.../rhi/d3d12/command-list/command-list.md | 65 +
.../api/rhi/d3d12/command-list/copy-buffer.md | 20 +
.../rhi/d3d12/command-list/copy-resource.md | 17 +
.../rhi/d3d12/command-list/copy-texture.md | 19 +
.../d3d12/command-list/dispatch-indirect.md | 17 +
docs/api/rhi/d3d12/command-list/dispatch.md | 18 +
.../draw-indexed-instanced-indirect.md | 17 +
.../rhi/d3d12/command-list/draw-indexed.md | 20 +
.../command-list/draw-instanced-indirect.md | 17 +
docs/api/rhi/d3d12/command-list/draw.md | 19 +
docs/api/rhi/d3d12/command-list/end-query.md | 18 +
.../rhi/d3d12/command-list/execute-bundle.md | 16 +
.../d3d12/command-list/get-command-list.md | 15 +
.../d3d12/command-list/get-resource-state.md | 18 +
.../d3d12/command-list/resolve-query-data.md | 21 +
.../d3d12/command-list/set-blend-factor.md | 16 +
.../set-compute-descriptor-table.md | 17 +
.../rhi/d3d12/command-list/set-depth-bias.md | 18 +
.../d3d12/command-list/set-descriptor-heap.md | 16 +
.../command-list/set-descriptor-heaps.md | 17 +
.../set-graphics-descriptor-table.md | 17 +
.../set-graphics-root-32bit-constants.md | 19 +
.../set-graphics-root-constant-buffer-view.md | 17 +
.../set-graphics-root-descriptor-table.md | 17 +
.../set-graphics-root-shader-resource-view.md | 17 +
.../d3d12/command-list/set-index-buffer.md | 18 +
.../d3d12/command-list/set-pipeline-state.md | 16 +
.../command-list/set-primitive-topology.md | 16 +
.../command-list/set-render-targets-handle.md | 18 +
.../set-render-targets-internal.md | 18 +
.../d3d12/command-list/set-render-targets.md | 18 +
.../d3d12/command-list/set-root-signature.md | 16 +
.../d3d12/command-list/set-scissor-rect.md | 16 +
.../d3d12/command-list/set-scissor-rects.md | 17 +
.../rhi/d3d12/command-list/set-stencil-ref.md | 16 +
.../d3d12/command-list/set-vertex-buffer.md | 19 +
.../d3d12/command-list/set-vertex-buffers.md | 20 +
.../rhi/d3d12/command-list/set-viewport.md | 16 +
.../rhi/d3d12/command-list/set-viewports.md | 17 +
.../rhi/d3d12/command-list/track-resource.md | 16 +
.../transition-barrier-internal.md | 19 +
.../d3d12/command-list/transition-barrier.md | 18 +
.../api/rhi/d3d12/command-list/uav-barrier.md | 16 +
.../rhi/d3d12/command-queue/command-queue.md | 26 +
.../command-queue/execute-command-lists.md | 17 +
.../d3d12/command-queue/get-command-queue.md | 15 +
.../command-queue/get-completed-value.md | 15 +
.../command-queue/get-timestamp-frequency.md | 15 +
docs/api/rhi/d3d12/command-queue/signal.md | 17 +
.../rhi/d3d12/command-queue/wait-for-idle.md | 13 +
docs/api/rhi/d3d12/common/common.md | 67 +
.../constant-buffer-view.md | 17 +
.../get-cpu-descriptor-handle.md | 15 +
docs/api/rhi/d3d12/d3d12.md | 77 +
.../d3d12/depth-stencil-view/create-desc.md | 19 +
.../depth-stencil-view/depth-stencil-view.md | 19 +
.../get-cpu-descriptor-handle.md | 15 +
.../d3d12/depth-stencil-view/initialize-at.md | 19 +
.../rhi/d3d12/descriptor-heap/create-desc.md | 20 +
.../d3d12/descriptor-heap/descriptor-heap.md | 27 +
...et-cpu-descriptor-handle-for-heap-start.md | 15 +
.../get-cpu-descriptor-handle.md | 18 +
.../descriptor-heap/get-descriptor-count.md | 15 +
.../descriptor-heap/get-descriptor-heap.md | 15 +
.../descriptor-heap/get-descriptor-size.md | 15 +
...et-gpu-descriptor-handle-for-heap-start.md | 15 +
.../get-gpu-descriptor-handle.md | 18 +
.../descriptor-heap/initialize-from-desc.md | 18 +
.../rhi/d3d12/device/check-feature-support.md | 25 +
docs/api/rhi/d3d12/device/device.md | 35 +
.../rhi/d3d12/device/enumerate-adapters.md | 22 +
docs/api/rhi/d3d12/device/get-adapter-info.md | 20 +
.../get-descriptor-handle-increment-size.md | 22 +
docs/api/rhi/d3d12/device/get-device.md | 19 +
docs/api/rhi/d3d12/device/get-factory.md | 19 +
docs/api/rhi/d3d12/device/methods.md | 165 +
docs/api/rhi/d3d12/enums/enums.md | 37 +
docs/api/rhi/d3d12/fence/fence.md | 24 +
.../rhi/d3d12/fence/get-completed-value.md | 34 +
docs/api/rhi/d3d12/fence/get-event-handle.md | 31 +
docs/api/rhi/d3d12/fence/get-fence.md | 30 +
docs/api/rhi/d3d12/fence/is-signaled.md | 33 +
docs/api/rhi/d3d12/fence/signal.md | 46 +
.../rhi/d3d12/pipeline-state/create-desc.md | 53 +
.../pipeline-state/create-input-element.md | 54 +
.../pipeline-state/get-pipeline-state.md | 29 +
.../d3d12/pipeline-state/pipeline-state.md | 24 +
docs/api/rhi/d3d12/query-heap/get-count.md | 29 +
.../rhi/d3d12/query-heap/get-query-heap.md | 29 +
docs/api/rhi/d3d12/query-heap/query-heap.md | 20 +
.../d3d12/render-target-view/create-desc.md | 36 +
.../get-cpu-descriptor-handle.md | 29 +
.../d3d12/render-target-view/initialize-at.md | 40 +
.../render-target-view/render-target-view.md | 19 +
.../root-signature/create-32bit-constants.md | 38 +
.../rhi/d3d12/root-signature/create-cbv.md | 39 +
.../rhi/d3d12/root-signature/create-desc.md | 48 +
.../root-signature/create-descriptor-range.md | 39 +
.../root-signature/create-descriptor-table.md | 40 +
.../root-signature/create-sampler-desc.md | 38 +
.../rhi/d3d12/root-signature/create-srv.md | 39 +
.../root-signature/create-static-sampler.md | 39 +
.../rhi/d3d12/root-signature/create-uav.md | 39 +
.../root-signature/get-parameter-count.md | 29 +
.../root-signature/get-root-signature.md | 29 +
.../d3d12/root-signature/root-signature.md | 28 +
docs/api/rhi/d3d12/sampler/get-id.md | 29 +
docs/api/rhi/d3d12/sampler/sampler.md | 22 +
docs/api/rhi/d3d12/screenshot/capture.md | 46 +
.../screenshot/copy-to-readback-and-save.md | 46 +
docs/api/rhi/d3d12/screenshot/screenshot.md | 16 +
.../d3d12/shader-resource-view/create-desc.md | 37 +
.../get-cpu-descriptor-handle.md | 29 +
.../shader-resource-view/initialize-at.md | 39 +
.../shader-resource-view.md | 19 +
.../api/rhi/d3d12/shader/get-bytecode-size.md | 30 +
docs/api/rhi/d3d12/shader/get-bytecode.md | 30 +
.../rhi/d3d12/shader/get-d3d12-bytecode.md | 29 +
docs/api/rhi/d3d12/shader/get-input-layout.md | 29 +
docs/api/rhi/d3d12/shader/set-uniforms.md | 46 +
docs/api/rhi/d3d12/shader/shader.md | 28 +
.../rhi/d3d12/swap-chain/get-back-buffer.md | 35 +
.../get-current-back-buffer-index.md | 30 +
.../swap-chain/get-current-back-buffer.md | 30 +
.../rhi/d3d12/swap-chain/get-swap-chain.md | 29 +
.../swap-chain/initialize-from-swapchain.md | 40 +
.../api/rhi/d3d12/swap-chain/is-fullscreen.md | 32 +
docs/api/rhi/d3d12/swap-chain/poll-events.md | 29 +
docs/api/rhi/d3d12/swap-chain/present.md | 36 +
.../rhi/d3d12/swap-chain/set-fullscreen.md | 36 +
.../rhi/d3d12/swap-chain/set-should-close.md | 36 +
docs/api/rhi/d3d12/swap-chain/should-close.md | 32 +
docs/api/rhi/d3d12/swap-chain/swap-chain.md | 29 +
docs/api/rhi/d3d12/texture/get-array-size.md | 29 +
.../d3d12/texture/initialize-depth-stencil.md | 38 +
.../rhi/d3d12/texture/initialize-from-data.md | 42 +
docs/api/rhi/d3d12/texture/texture.md | 35 +
.../rhi/d3d12/types/to-d3d12-buffer-desc.md | 36 +
.../rhi/d3d12/types/to-d3d12-clear-value.md | 37 +
.../types/to-d3d12-command-queue-desc.md | 36 +
.../rhi/d3d12/types/to-d3d12-depth-stencil.md | 37 +
.../types/to-d3d12-descriptor-heap-desc.md | 36 +
.../d3d12/types/to-d3d12-heap-properties.md | 36 +
docs/api/rhi/d3d12/types/to-d3d12-rect.md | 36 +
.../rhi/d3d12/types/to-d3d12-texture-desc.md | 36 +
docs/api/rhi/d3d12/types/to-d3d12-viewport.md | 36 +
docs/api/rhi/d3d12/types/types.md | 24 +
.../get-cpu-descriptor-handle.md | 29 +
.../unordered-access-view.md | 15 +
.../rhi/descriptor-pool/descriptor-pool.md | 22 +
.../descriptor-pool/get-descriptor-count.md | 19 +
docs/api/rhi/descriptor-pool/methods.md | 41 +
docs/api/rhi/device/compile-shader.md | 35 +
docs/api/rhi/device/create-buffer.md | 32 +
docs/api/rhi/device/create-command-list.md | 29 +
docs/api/rhi/device/create-command-queue.md | 31 +
docs/api/rhi/device/create-fence.md | 29 +
docs/api/rhi/device/create-pipeline-state.md | 29 +
docs/api/rhi/device/create-sampler.md | 34 +
docs/api/rhi/device/create-swap-chain.md | 34 +
docs/api/rhi/device/create-texture.md | 38 +
docs/api/rhi/device/device.md | 73 +
docs/api/rhi/device/get-capabilities.md | 32 +
docs/api/rhi/device/get-device-info.md | 27 +
docs/api/rhi/device/get-native-device.md | 29 +
docs/api/rhi/device/initialize.md | 39 +
docs/api/rhi/device/shutdown.md | 20 +
docs/api/rhi/enums/enums.md | 46 +
.../rhi/factory/create-rhi-device-string.md | 31 +
.../api/rhi/factory/create-rhi-device-type.md | 28 +
docs/api/rhi/factory/factory.md | 47 +
docs/api/rhi/fence/fence.md | 34 +
docs/api/rhi/fence/get-completed-value.md | 19 +
docs/api/rhi/fence/get-native-handle.md | 15 +
docs/api/rhi/fence/is-signaled.md | 21 +
docs/api/rhi/fence/methods.md | 50 +
docs/api/rhi/fence/shutdown.md | 13 +
docs/api/rhi/fence/signal.md | 22 +
docs/api/rhi/fence/wait.md | 20 +
docs/api/rhi/opengl/README.md | 26 +
docs/api/rhi/opengl/buffer/bind-base.md | 21 +
docs/api/rhi/opengl/buffer/bind.md | 17 +
docs/api/rhi/opengl/buffer/buffer.md | 38 +
docs/api/rhi/opengl/buffer/get-id.md | 20 +
docs/api/rhi/opengl/buffer/get-type.md | 19 +
.../opengl/buffer/initialize-index-buffer.md | 25 +
.../opengl/buffer/initialize-vertex-buffer.md | 25 +
docs/api/rhi/opengl/buffer/initialize.md | 26 +
docs/api/rhi/opengl/buffer/is-dynamic.md | 24 +
docs/api/rhi/opengl/buffer/unbind.md | 17 +
.../rhi/opengl/command-list/clear-color.md | 23 +
.../command-list/clear-depth-stencil.md | 22 +
.../rhi/opengl/command-list/clear-depth.md | 20 +
.../command-list/clear-render-target.md | 22 +
.../rhi/opengl/command-list/clear-stencil.md | 20 +
docs/api/rhi/opengl/command-list/clear.md | 24 +
.../rhi/opengl/command-list/command-list.md | 44 +
.../rhi/opengl/command-list/copy-resource.md | 21 +
docs/api/rhi/opengl/command-list/dispatch.md | 22 +
.../rhi/opengl/command-list/draw-indexed.md | 24 +
docs/api/rhi/opengl/command-list/draw.md | 23 +
.../rhi/opengl/command-list/opengl-methods.md | 545 ++
.../opengl/command-list/set-blend-factor.md | 21 +
.../opengl/command-list/set-blend-state.md | 24 +
.../command-list/set-depth-stencil-state.md | 24 +
.../opengl/command-list/set-index-buffer.md | 22 +
.../opengl/command-list/set-pipeline-state.md | 20 +
.../command-list/set-primitive-topology.md | 20 +
.../opengl/command-list/set-render-targets.md | 23 +
.../opengl/command-list/set-scissor-rect.md | 23 +
.../opengl/command-list/set-scissor-rects.md | 22 +
.../opengl/command-list/set-stencil-ref.md | 20 +
.../opengl/command-list/set-vertex-buffer.md | 23 +
.../opengl/command-list/set-vertex-buffers.md | 24 +
.../rhi/opengl/command-list/set-viewport.md | 24 +
.../rhi/opengl/command-list/set-viewports.md | 22 +
.../opengl/command-list/transition-barrier.md | 22 +
.../rhi/opengl/command-queue/command-queue.md | 24 +
.../command-queue/execute-command-lists.md | 22 +
.../command-queue/get-completed-value.md | 19 +
.../command-queue/get-timestamp-frequency.md | 19 +
docs/api/rhi/opengl/command-queue/signal.md | 21 +
.../rhi/opengl/command-queue/wait-for-idle.md | 17 +
.../depth-stencil-view/bind-framebuffer.md | 20 +
.../api/rhi/opengl/depth-stencil-view/bind.md | 11 +
.../depth-stencil-view/clear-depth-stencil.md | 21 +
.../opengl/depth-stencil-view/clear-depth.md | 20 +
.../depth-stencil-view/clear-stencil.md | 20 +
.../depth-stencil-view/depth-stencil-view.md | 29 +
.../depth-stencil-view/get-framebuffer.md | 19 +
.../depth-stencil-view/get-mip-level.md | 19 +
.../rhi/opengl/depth-stencil-view/get-size.md | 14 +
.../opengl/depth-stencil-view/get-texture.md | 19 +
.../depth-stencil-view/initialize-cubemap.md | 25 +
.../opengl/depth-stencil-view/initialize.md | 18 +
.../rhi/opengl/depth-stencil-view/shutdown.md | 11 +
.../depth-stencil-view/unbind-framebuffer.md | 17 +
.../rhi/opengl/depth-stencil-view/unbind.md | 11 +
.../rhi/opengl/device/create-render-window.md | 28 +
docs/api/rhi/opengl/device/device.md | 37 +
docs/api/rhi/opengl/device/get-window.md | 22 +
.../device/initialize-with-existing-window.md | 26 +
docs/api/rhi/opengl/device/poll-events.md | 23 +
.../api/rhi/opengl/device/set-should-close.md | 20 +
docs/api/rhi/opengl/device/should-close.md | 23 +
docs/api/rhi/opengl/device/swap-buffers.md | 19 +
docs/api/rhi/opengl/fence/fence.md | 25 +
.../rhi/opengl/fence/get-completed-value.md | 19 +
.../api/rhi/opengl/fence/get-current-value.md | 19 +
docs/api/rhi/opengl/fence/get-status.md | 25 +
docs/api/rhi/opengl/fence/initialize.md | 23 +
docs/api/rhi/opengl/fence/is-signaled.md | 21 +
docs/api/rhi/opengl/fence/reset.md | 17 +
docs/api/rhi/opengl/fence/signal.md | 20 +
docs/api/rhi/opengl/overview.md | 41 +
.../rhi/opengl/pipeline-state/apply-blend.md | 21 +
.../pipeline-state/apply-depth-stencil.md | 21 +
.../opengl/pipeline-state/apply-rasterizer.md | 21 +
.../opengl/pipeline-state/apply-scissor.md | 21 +
.../opengl/pipeline-state/apply-viewport.md | 21 +
docs/api/rhi/opengl/pipeline-state/apply.md | 27 +
.../opengl/pipeline-state/attach-shader.md | 23 +
.../opengl/pipeline-state/detach-shader.md | 20 +
.../opengl/pipeline-state/get-blend-state.md | 25 +
.../pipeline-state/get-depth-stencil-state.md | 25 +
.../pipeline-state/get-rasterizer-state.md | 25 +
.../opengl/pipeline-state/pipeline-state.md | 39 +
.../opengl/pipeline-state/set-blend-state.md | 27 +
.../opengl/pipeline-state/set-clear-color.md | 26 +
.../pipeline-state/set-depth-stencil-state.md | 27 +
.../pipeline-state/set-logical-operation.md | 25 +
.../pipeline-state/set-rasterizer-state.md | 27 +
.../rhi/opengl/pipeline-state/set-scissor.md | 29 +
.../rhi/opengl/pipeline-state/set-viewport.md | 30 +
.../render-target-view/bind-framebuffer.md | 20 +
.../api/rhi/opengl/render-target-view/bind.md | 11 +
.../rhi/opengl/render-target-view/clear.md | 17 +
.../render-target-view/get-framebuffer.md | 19 +
.../render-target-view/get-mip-level.md | 19 +
.../rhi/opengl/render-target-view/get-size.md | 14 +
.../opengl/render-target-view/get-texture.md | 19 +
.../render-target-view/initialize-cubemap.md | 25 +
.../opengl/render-target-view/initialize.md | 18 +
.../render-target-view/render-target-view.md | 27 +
.../rhi/opengl/render-target-view/shutdown.md | 11 +
.../render-target-view/unbind-framebuffer.md | 17 +
.../rhi/opengl/render-target-view/unbind.md | 11 +
docs/api/rhi/opengl/sampler/bind.md | 22 +
docs/api/rhi/opengl/sampler/get-id.md | 21 +
docs/api/rhi/opengl/sampler/initialize.md | 29 +
docs/api/rhi/opengl/sampler/sampler.md | 21 +
docs/api/rhi/opengl/sampler/unbind.md | 22 +
docs/api/rhi/opengl/shader/compile-compute.md | 30 +
.../opengl/shader/compile-from-file-vs-fs.md | 25 +
.../shader/compile-from-file-vs-gs-fs.md | 26 +
docs/api/rhi/opengl/shader/compile-vs-fs.md | 34 +
docs/api/rhi/opengl/shader/get-id.md | 23 +
.../rhi/opengl/shader/get-uniform-location.md | 27 +
docs/api/rhi/opengl/shader/set-float-array.md | 26 +
docs/api/rhi/opengl/shader/set-int-array.md | 26 +
docs/api/rhi/opengl/shader/shader.md | 33 +
docs/api/rhi/opengl/shader/use.md | 21 +
.../opengl/swap-chain/get-framebuffer-size.md | 23 +
docs/api/rhi/opengl/swap-chain/get-size.md | 21 +
docs/api/rhi/opengl/swap-chain/get-window.md | 22 +
.../rhi/opengl/swap-chain/initialize-mode.md | 25 +
docs/api/rhi/opengl/swap-chain/initialize.md | 24 +
.../rhi/opengl/swap-chain/is-fullscreen.md | 24 +
docs/api/rhi/opengl/swap-chain/is-vsync.md | 24 +
docs/api/rhi/opengl/swap-chain/poll-events.md | 22 +
docs/api/rhi/opengl/swap-chain/present.md | 24 +
.../rhi/opengl/swap-chain/set-fullscreen.md | 23 +
.../rhi/opengl/swap-chain/set-should-close.md | 23 +
docs/api/rhi/opengl/swap-chain/set-vsync.md | 23 +
.../api/rhi/opengl/swap-chain/should-close.md | 25 +
.../api/rhi/opengl/swap-chain/swap-buffers.md | 20 +
docs/api/rhi/opengl/swap-chain/swap-chain.md | 36 +
docs/api/rhi/opengl/texture/bind-image.md | 22 +
.../api/rhi/opengl/texture/generate-mipmap.md | 18 +
docs/api/rhi/opengl/texture/get-id.md | 20 +
.../api/rhi/opengl/texture/get-opengl-type.md | 23 +
docs/api/rhi/opengl/texture/initialize-2d.md | 28 +
.../rhi/opengl/texture/initialize-cube-map.md | 26 +
docs/api/rhi/opengl/texture/load-from-file.md | 26 +
docs/api/rhi/opengl/texture/set-filtering.md | 21 +
docs/api/rhi/opengl/texture/set-wrapping.md | 22 +
docs/api/rhi/opengl/texture/texture.md | 39 +
.../opengl/vertex-array/add-vertex-buffer.md | 28 +
docs/api/rhi/opengl/vertex-array/get-id.md | 20 +
.../opengl/vertex-array/get-index-buffer.md | 19 +
.../opengl/vertex-array/get-index-count.md | 20 +
.../opengl/vertex-array/set-index-buffer.md | 21 +
.../rhi/opengl/vertex-array/vertex-array.md | 23 +
.../rhi/pipeline-layout/get-native-handle.md | 15 +
docs/api/rhi/pipeline-layout/initialize.md | 18 +
docs/api/rhi/pipeline-layout/methods.md | 25 +
.../rhi/pipeline-layout/pipeline-layout.md | 20 +
docs/api/rhi/pipeline-layout/shutdown.md | 13 +
.../rhi/pipeline-state/get-native-handle.md | 15 +
docs/api/rhi/pipeline-state/get-type.md | 15 +
docs/api/rhi/pipeline-state/methods.md | 41 +
docs/api/rhi/pipeline-state/pipeline-state.md | 30 +
docs/api/rhi/pipeline-state/shutdown.md | 13 +
docs/api/rhi/rhi.md | 121 +
docs/api/rhi/sampler/get-id.md | 19 +
docs/api/rhi/sampler/get-native-handle.md | 15 +
docs/api/rhi/sampler/methods.md | 41 +
docs/api/rhi/sampler/sampler.md | 22 +
docs/api/rhi/sampler/shutdown.md | 13 +
docs/api/rhi/shader/bind.md | 20 +
docs/api/rhi/shader/compile-from-file.md | 26 +
docs/api/rhi/shader/compile.md | 21 +
docs/api/rhi/shader/get-native-handle.md | 15 +
docs/api/rhi/shader/get-type.md | 15 +
docs/api/rhi/shader/is-valid.md | 15 +
docs/api/rhi/shader/set-float.md | 17 +
docs/api/rhi/shader/set-int.md | 17 +
docs/api/rhi/shader/set-mat4.md | 17 +
docs/api/rhi/shader/set-vec3.md | 17 +
docs/api/rhi/shader/set-vec4.md | 17 +
docs/api/rhi/shader/shader.md | 55 +
docs/api/rhi/shader/shutdown.md | 13 +
docs/api/rhi/shader/unbind.md | 13 +
.../get-current-back-buffer-index.md | 19 +
.../rhi/swap-chain/get-current-back-buffer.md | 19 +
docs/api/rhi/swap-chain/get-native-handle.md | 15 +
docs/api/rhi/swap-chain/is-fullscreen.md | 21 +
docs/api/rhi/swap-chain/methods.md | 89 +
docs/api/rhi/swap-chain/poll-events.md | 17 +
docs/api/rhi/swap-chain/present.md | 21 +
docs/api/rhi/swap-chain/resize.md | 27 +
docs/api/rhi/swap-chain/set-fullscreen.md | 20 +
docs/api/rhi/swap-chain/set-should-close.md | 20 +
docs/api/rhi/swap-chain/should-close.md | 21 +
docs/api/rhi/swap-chain/shutdown.md | 13 +
docs/api/rhi/swap-chain/swap-chain.md | 43 +
docs/api/rhi/texture/get-depth.md | 15 +
docs/api/rhi/texture/get-format.md | 15 +
docs/api/rhi/texture/get-height.md | 15 +
docs/api/rhi/texture/get-mip-levels.md | 15 +
docs/api/rhi/texture/get-name.md | 20 +
docs/api/rhi/texture/get-native-handle.md | 15 +
docs/api/rhi/texture/get-state.md | 15 +
docs/api/rhi/texture/get-texture-type.md | 15 +
docs/api/rhi/texture/get-width.md | 15 +
docs/api/rhi/texture/set-name.md | 22 +
docs/api/rhi/texture/set-state.md | 22 +
docs/api/rhi/texture/shutdown.md | 13 +
docs/api/rhi/texture/texture.md | 80 +
docs/api/rhi/types/types.md | 81 +
docs/api/threading/lambdatask/constructor.md | 41 +
docs/api/threading/lambdatask/lambdatask.md | 57 +
docs/api/threading/mutex/lock.md | 34 +
docs/api/threading/mutex/mutex.md | 54 +
docs/api/threading/mutex/trylock.md | 36 +
docs/api/threading/mutex/unlock.md | 32 +
docs/api/threading/readwritelock/readlock.md | 36 +
.../api/threading/readwritelock/readunlock.md | 33 +
.../threading/readwritelock/readwritelock.md | 57 +
docs/api/threading/readwritelock/writelock.md | 35 +
.../threading/readwritelock/writeunlock.md | 32 +
docs/api/threading/spinlock/lock.md | 35 +
docs/api/threading/spinlock/spinlock.md | 53 +
docs/api/threading/spinlock/trylock.md | 31 +
docs/api/threading/spinlock/unlock.md | 32 +
.../api/threading/task-group/adddependency.md | 44 +
docs/api/threading/task-group/addtask.md | 60 +
docs/api/threading/task-group/cancel.md | 45 +
docs/api/threading/task-group/getprogress.md | 40 +
docs/api/threading/task-group/iscomplete.md | 38 +
.../task-group/setcompletecallback.md | 36 +
docs/api/threading/task-group/task-group.md | 66 +
docs/api/threading/task-group/wait.md | 46 +
docs/api/threading/task-group/waitfor.md | 39 +
.../threading/task-system/createtaskgroup.md | 39 +
.../threading/task-system/destroytaskgroup.md | 32 +
docs/api/threading/task-system/get.md | 26 +
.../task-system/getworkerthreadcount.md | 25 +
docs/api/threading/task-system/initialize.md | 37 +
docs/api/threading/task-system/parallelfor.md | 46 +
.../threading/task-system/runonmainthread.md | 43 +
docs/api/threading/task-system/shutdown.md | 33 +
docs/api/threading/task-system/submit.md | 63 +
docs/api/threading/task-system/task-system.md | 82 +
docs/api/threading/task-system/update.md | 36 +
docs/api/threading/task-system/wait.md | 37 +
docs/api/threading/task/addref.md | 27 +
docs/api/threading/task/execute.md | 43 +
docs/api/threading/task/getid.md | 25 +
docs/api/threading/task/getpriority.md | 27 +
docs/api/threading/task/getstatus.md | 32 +
docs/api/threading/task/oncancel.md | 38 +
docs/api/threading/task/oncomplete.md | 39 +
docs/api/threading/task/release.md | 32 +
docs/api/threading/task/setid.md | 28 +
docs/api/threading/task/setpriority.md | 28 +
docs/api/threading/task/setstatus.md | 35 +
docs/api/threading/task/task.md | 88 +
.../tasksystemconfig/enabletaskprofiling.md | 29 +
.../tasksystemconfig/maxtaskqueuesize.md | 24 +
.../threading/tasksystemconfig/stealtasks.md | 25 +
.../tasksystemconfig/tasksystemconfig.md | 36 +
.../tasksystemconfig/threadstacksize.md | 28 +
.../tasksystemconfig/workerthreadcount.md | 25 +
docs/api/threading/thread/detach.md | 38 +
docs/api/threading/thread/getcurrentid.md | 30 +
docs/api/threading/thread/getid.md | 30 +
docs/api/threading/thread/getname.md | 28 +
docs/api/threading/thread/join.md | 37 +
docs/api/threading/thread/sleep.md | 30 +
docs/api/threading/thread/start.md | 37 +
docs/api/threading/thread/thread.md | 60 +
docs/api/threading/thread/yield.md | 40 +
docs/api/threading/threading.md | 74 +
docs/plan/D3D12后端测试设计.md | 1612 +++++
docs/plan/OpenGL后端测试设计.md | 1186 ++++
docs/plan/OpenGL测试实施计划.md | 410 ++
docs/plan/RHI抽象层设计与实现.md | 1069 +++
docs/plan/TESTING.md | 285 +
docs/plan/Unity SRP API参考文档.md | 621 ++
docs/plan/XCEngine渲染引擎架构设计.md | 4564 +++++++++++++
docs/plan/XCGameEngine架构设计.md | 6025 +++++++++++++++++
docs/plan/仿Unity RHI架构设计.md | 1325 ++++
.../DXR_Volumetric_Rendering_Research_Report.md | 297 +
docs/plan/开题报告和任务书/任务书-王子文.docx | Bin 0 -> 17641 bytes
docs/plan/开题报告和任务书/完整开题报告.md | 131 +
.../plan/开题报告和任务书/开题报告-王子文.doc | 3 +
docs/plan/旧版题目/开题报告-王子文.doc | 3 +
docs/plan/旧版题目/开题报告-王子文.md | 180 +
docs/plan/深入方向规划.md | 1309 ++++
docs/plan/第一阶段计划.md | 151 +
docs/plan/第三阶段计划.md | 335 +
docs/plan/第二阶段计划.md | 829 +++
docs/plan/第四阶段计划_资源系统.md | 5199 ++++++++++++++
electron/main.mjs | 4 +-
src/components/ApiDocViewer.tsx | 53 +-
src/components/DocContent.tsx | 23 +-
src/components/DocTree.tsx | 16 +-
1012 files changed, 56880 insertions(+), 22 deletions(-)
create mode 100644 .trae/documents/fix_doc_link_matching_plan.md
create mode 100644 .trae/documents/fix_link_color_plan.md
create mode 100644 .trae/documents/fix_link_navigation_plan.md
create mode 100644 .trae/documents/hide_leaf_nodes_plan.md
create mode 100644 docs/api/containers/array/array.md
create mode 100644 docs/api/containers/array/clear.md
create mode 100644 docs/api/containers/array/constructor.md
create mode 100644 docs/api/containers/array/copy-move-constructor.md
create mode 100644 docs/api/containers/array/data.md
create mode 100644 docs/api/containers/array/destructor.md
create mode 100644 docs/api/containers/array/emplaceback.md
create mode 100644 docs/api/containers/array/front-back.md
create mode 100644 docs/api/containers/array/iterator.md
create mode 100644 docs/api/containers/array/operator-assign.md
create mode 100644 docs/api/containers/array/operator-subscript.md
create mode 100644 docs/api/containers/array/popback.md
create mode 100644 docs/api/containers/array/pushback.md
create mode 100644 docs/api/containers/array/reserve.md
create mode 100644 docs/api/containers/array/resize.md
create mode 100644 docs/api/containers/array/setallocator.md
create mode 100644 docs/api/containers/array/size.md
create mode 100644 docs/api/containers/containers.md
create mode 100644 docs/api/containers/hashmap/clear.md
create mode 100644 docs/api/containers/hashmap/constructor.md
create mode 100644 docs/api/containers/hashmap/contains.md
create mode 100644 docs/api/containers/hashmap/copy-move.md
create mode 100644 docs/api/containers/hashmap/destructor.md
create mode 100644 docs/api/containers/hashmap/erase.md
create mode 100644 docs/api/containers/hashmap/find.md
create mode 100644 docs/api/containers/hashmap/hashmap.md
create mode 100644 docs/api/containers/hashmap/insert.md
create mode 100644 docs/api/containers/hashmap/iterator.md
create mode 100644 docs/api/containers/hashmap/operator-assign.md
create mode 100644 docs/api/containers/hashmap/operator-subscript.md
create mode 100644 docs/api/containers/hashmap/setallocator.md
create mode 100644 docs/api/containers/hashmap/size.md
create mode 100644 docs/api/containers/string/clear.md
create mode 100644 docs/api/containers/string/constructor.md
create mode 100644 docs/api/containers/string/cstr.md
create mode 100644 docs/api/containers/string/destructor.md
create mode 100644 docs/api/containers/string/ends-with.md
create mode 100644 docs/api/containers/string/find.md
create mode 100644 docs/api/containers/string/operator-assign.md
create mode 100644 docs/api/containers/string/operator-equal.md
create mode 100644 docs/api/containers/string/operator-plus-assign.md
create mode 100644 docs/api/containers/string/operator-plus.md
create mode 100644 docs/api/containers/string/operator-subscript.md
create mode 100644 docs/api/containers/string/reserve-resize.md
create mode 100644 docs/api/containers/string/size.md
create mode 100644 docs/api/containers/string/starts-with.md
create mode 100644 docs/api/containers/string/string.md
create mode 100644 docs/api/containers/string/substring.md
create mode 100644 docs/api/containers/string/to-lower-upper.md
create mode 100644 docs/api/containers/string/trim.md
create mode 100644 docs/api/core/core.md
create mode 100644 docs/api/core/event/Clear.md
create mode 100644 docs/api/core/event/Invoke.md
create mode 100644 docs/api/core/event/ProcessUnsubscribes.md
create mode 100644 docs/api/core/event/Subscribe.md
create mode 100644 docs/api/core/event/Unsubscribe.md
create mode 100644 docs/api/core/event/begin.md
create mode 100644 docs/api/core/event/end.md
create mode 100644 docs/api/core/event/event.md
create mode 100644 docs/api/core/filewriter/Close.md
create mode 100644 docs/api/core/filewriter/Flush.md
create mode 100644 docs/api/core/filewriter/IsOpen.md
create mode 100644 docs/api/core/filewriter/Open.md
create mode 100644 docs/api/core/filewriter/Write.md
create mode 100644 docs/api/core/filewriter/filewriter.md
create mode 100644 docs/api/core/refcounted/AddRef.md
create mode 100644 docs/api/core/refcounted/GetRefCount.md
create mode 100644 docs/api/core/refcounted/Release.md
create mode 100644 docs/api/core/refcounted/refcounted.md
create mode 100644 docs/api/core/smartptr/MakeRef.md
create mode 100644 docs/api/core/smartptr/MakeUnique.md
create mode 100644 docs/api/core/smartptr/Ref.md
create mode 100644 docs/api/core/smartptr/UniqueRef.md
create mode 100644 docs/api/core/smartptr/smartptr.md
create mode 100644 docs/api/core/types/byte.md
create mode 100644 docs/api/core/types/int16.md
create mode 100644 docs/api/core/types/int32.md
create mode 100644 docs/api/core/types/int64.md
create mode 100644 docs/api/core/types/int8.md
create mode 100644 docs/api/core/types/types.md
create mode 100644 docs/api/core/types/uint16.md
create mode 100644 docs/api/core/types/uint32.md
create mode 100644 docs/api/core/types/uint64.md
create mode 100644 docs/api/core/types/uint8.md
create mode 100644 docs/api/debug/consolelogsink/consolelogsink.md
create mode 100644 docs/api/debug/consolelogsink/flush.md
create mode 100644 docs/api/debug/consolelogsink/log.md
create mode 100644 docs/api/debug/consolelogsink/overview.md
create mode 100644 docs/api/debug/consolelogsink/setcoloroutput.md
create mode 100644 docs/api/debug/consolelogsink/setminimumlevel.md
create mode 100644 docs/api/debug/consolelogsink/~consolelogsink.md
create mode 100644 docs/api/debug/debug.md
create mode 100644 docs/api/debug/filelogsink/construct.md
create mode 100644 docs/api/debug/filelogsink/filelogsink.md
create mode 100644 docs/api/debug/filelogsink/flush.md
create mode 100644 docs/api/debug/filelogsink/log.md
create mode 100644 docs/api/debug/filelogsink/~filelogsink.md
create mode 100644 docs/api/debug/ilogsink/flush.md
create mode 100644 docs/api/debug/ilogsink/ilogsink.md
create mode 100644 docs/api/debug/ilogsink/log.md
create mode 100644 docs/api/debug/logcategory/logcategory.md
create mode 100644 docs/api/debug/logcategory/logcategorytostring.md
create mode 100644 docs/api/debug/logentry/logentry.md
create mode 100644 docs/api/debug/logger/addsink.md
create mode 100644 docs/api/debug/logger/debug.md
create mode 100644 docs/api/debug/logger/error.md
create mode 100644 docs/api/debug/logger/fatal.md
create mode 100644 docs/api/debug/logger/get.md
create mode 100644 docs/api/debug/logger/info.md
create mode 100644 docs/api/debug/logger/initialize.md
create mode 100644 docs/api/debug/logger/log.md
create mode 100644 docs/api/debug/logger/logger.md
create mode 100644 docs/api/debug/logger/removesink.md
create mode 100644 docs/api/debug/logger/setcategoryenabled.md
create mode 100644 docs/api/debug/logger/setminimumlevel.md
create mode 100644 docs/api/debug/logger/shutdown.md
create mode 100644 docs/api/debug/logger/verbose.md
create mode 100644 docs/api/debug/logger/warning.md
create mode 100644 docs/api/debug/loglevel/loglevel.md
create mode 100644 docs/api/debug/loglevel/logleveltostring.md
create mode 100644 docs/api/debug/profiler/beginframe.md
create mode 100644 docs/api/debug/profiler/beginprofile.md
create mode 100644 docs/api/debug/profiler/endframe.md
create mode 100644 docs/api/debug/profiler/endprofile.md
create mode 100644 docs/api/debug/profiler/exportchrometracing.md
create mode 100644 docs/api/debug/profiler/get.md
create mode 100644 docs/api/debug/profiler/initialize.md
create mode 100644 docs/api/debug/profiler/markevent.md
create mode 100644 docs/api/debug/profiler/profiler.md
create mode 100644 docs/api/debug/profiler/setmarker.md
create mode 100644 docs/api/debug/profiler/shutdown.md
create mode 100644 docs/api/fix_links.py
create mode 100644 docs/api/main.md
create mode 100644 docs/api/math/aabb/aabb.md
create mode 100644 docs/api/math/aabb/getaxis.md
create mode 100644 docs/api/math/aabb/intersects-obb.md
create mode 100644 docs/api/math/aabb/intersects-sphere.md
create mode 100644 docs/api/math/aabb/obb-contains.md
create mode 100644 docs/api/math/aabb/obb-getaxis.md
create mode 100644 docs/api/math/aabb/obb-getmax.md
create mode 100644 docs/api/math/aabb/obb-getmin.md
create mode 100644 docs/api/math/aabb/obb-intersects-obb.md
create mode 100644 docs/api/math/aabb/obb-intersects-sphere.md
create mode 100644 docs/api/math/bounds/bounds.md
create mode 100644 docs/api/math/bounds/contains.md
create mode 100644 docs/api/math/bounds/encapsulate-bounds.md
create mode 100644 docs/api/math/bounds/encapsulate.md
create mode 100644 docs/api/math/bounds/expand.md
create mode 100644 docs/api/math/bounds/getclosestpoint.md
create mode 100644 docs/api/math/bounds/getmax.md
create mode 100644 docs/api/math/bounds/getmin.md
create mode 100644 docs/api/math/bounds/getvolume.md
create mode 100644 docs/api/math/bounds/intersects.md
create mode 100644 docs/api/math/bounds/setminmax.md
create mode 100644 docs/api/math/box/box.md
create mode 100644 docs/api/math/box/contains.md
create mode 100644 docs/api/math/box/getmax.md
create mode 100644 docs/api/math/box/getmin.md
create mode 100644 docs/api/math/box/intersects-box.md
create mode 100644 docs/api/math/box/intersects-ray.md
create mode 100644 docs/api/math/box/intersects.md
create mode 100644 docs/api/math/color/black.md
create mode 100644 docs/api/math/color/blue.md
create mode 100644 docs/api/math/color/clear.md
create mode 100644 docs/api/math/color/color.md
create mode 100644 docs/api/math/color/cyan.md
create mode 100644 docs/api/math/color/green.md
create mode 100644 docs/api/math/color/lerp.md
create mode 100644 docs/api/math/color/magenta.md
create mode 100644 docs/api/math/color/red.md
create mode 100644 docs/api/math/color/torgba.md
create mode 100644 docs/api/math/color/tovector3.md
create mode 100644 docs/api/math/color/tovector4.md
create mode 100644 docs/api/math/color/white.md
create mode 100644 docs/api/math/color/yellow.md
create mode 100644 docs/api/math/frustum/contains-bounds.md
create mode 100644 docs/api/math/frustum/contains-point.md
create mode 100644 docs/api/math/frustum/contains-sphere.md
create mode 100644 docs/api/math/frustum/frustum.md
create mode 100644 docs/api/math/frustum/intersects-bounds.md
create mode 100644 docs/api/math/frustum/intersects-sphere.md
create mode 100644 docs/api/math/h/deg-to-rad.md
create mode 100644 docs/api/math/h/degrees.md
create mode 100644 docs/api/math/h/epsilon.md
create mode 100644 docs/api/math/h/float-max.md
create mode 100644 docs/api/math/h/h.md
create mode 100644 docs/api/math/h/half-pi.md
create mode 100644 docs/api/math/h/pi.md
create mode 100644 docs/api/math/h/rad-to-deg.md
create mode 100644 docs/api/math/h/radians.md
create mode 100644 docs/api/math/h/two-pi.md
create mode 100644 docs/api/math/math.md
create mode 100644 docs/api/math/matrix3/determinant.md
create mode 100644 docs/api/math/matrix3/identity.md
create mode 100644 docs/api/math/matrix3/inverse.md
create mode 100644 docs/api/math/matrix3/matrix3.md
create mode 100644 docs/api/math/matrix3/rotationx.md
create mode 100644 docs/api/math/matrix3/rotationy.md
create mode 100644 docs/api/math/matrix3/rotationz.md
create mode 100644 docs/api/math/matrix3/scale.md
create mode 100644 docs/api/math/matrix3/transpose.md
create mode 100644 docs/api/math/matrix3/zero.md
create mode 100644 docs/api/math/matrix4/decompose.md
create mode 100644 docs/api/math/matrix4/determinant.md
create mode 100644 docs/api/math/matrix4/getrotation.md
create mode 100644 docs/api/math/matrix4/getscale.md
create mode 100644 docs/api/math/matrix4/gettranslation.md
create mode 100644 docs/api/math/matrix4/identity.md
create mode 100644 docs/api/math/matrix4/inverse.md
create mode 100644 docs/api/math/matrix4/lookat.md
create mode 100644 docs/api/math/matrix4/matrix4.md
create mode 100644 docs/api/math/matrix4/multiplypoint.md
create mode 100644 docs/api/math/matrix4/multiplyvector.md
create mode 100644 docs/api/math/matrix4/orthographic.md
create mode 100644 docs/api/math/matrix4/perspective.md
create mode 100644 docs/api/math/matrix4/rotation.md
create mode 100644 docs/api/math/matrix4/rotationx.md
create mode 100644 docs/api/math/matrix4/rotationy.md
create mode 100644 docs/api/math/matrix4/rotationz.md
create mode 100644 docs/api/math/matrix4/scale.md
create mode 100644 docs/api/math/matrix4/translation.md
create mode 100644 docs/api/math/matrix4/transpose.md
create mode 100644 docs/api/math/matrix4/trs.md
create mode 100644 docs/api/math/matrix4/zero.md
create mode 100644 docs/api/math/plane/frompoints.md
create mode 100644 docs/api/math/plane/getclosestpoint.md
create mode 100644 docs/api/math/plane/getdistancetopoint.md
create mode 100644 docs/api/math/plane/getside.md
create mode 100644 docs/api/math/plane/intersects.md
create mode 100644 docs/api/math/plane/plane.md
create mode 100644 docs/api/math/quaternion/dot.md
create mode 100644 docs/api/math/quaternion/fromaxisangle.md
create mode 100644 docs/api/math/quaternion/fromeulerangles.md
create mode 100644 docs/api/math/quaternion/fromrotationmatrix.md
create mode 100644 docs/api/math/quaternion/identity.md
create mode 100644 docs/api/math/quaternion/inverse.md
create mode 100644 docs/api/math/quaternion/lookrotation.md
create mode 100644 docs/api/math/quaternion/magnitude.md
create mode 100644 docs/api/math/quaternion/normalized.md
create mode 100644 docs/api/math/quaternion/quaternion-multiply.md
create mode 100644 docs/api/math/quaternion/quaternion.md
create mode 100644 docs/api/math/quaternion/slerp.md
create mode 100644 docs/api/math/quaternion/toeulerangles.md
create mode 100644 docs/api/math/quaternion/tomatrix4x4.md
create mode 100644 docs/api/math/ray/getpoint.md
create mode 100644 docs/api/math/ray/intersects-box.md
create mode 100644 docs/api/math/ray/intersects-plane.md
create mode 100644 docs/api/math/ray/intersects-sphere.md
create mode 100644 docs/api/math/ray/ray.md
create mode 100644 docs/api/math/rect/contains-float.md
create mode 100644 docs/api/math/rect/contains-vector2.md
create mode 100644 docs/api/math/rect/getbottom.md
create mode 100644 docs/api/math/rect/getcenter.md
create mode 100644 docs/api/math/rect/getleft.md
create mode 100644 docs/api/math/rect/getposition.md
create mode 100644 docs/api/math/rect/getright.md
create mode 100644 docs/api/math/rect/getsize.md
create mode 100644 docs/api/math/rect/gettop.md
create mode 100644 docs/api/math/rect/intersect.md
create mode 100644 docs/api/math/rect/intersects.md
create mode 100644 docs/api/math/rect/rect-overview.md
create mode 100644 docs/api/math/rect/rect.md
create mode 100644 docs/api/math/rect/rectint-contains.md
create mode 100644 docs/api/math/rect/rectint-getbottom.md
create mode 100644 docs/api/math/rect/rectint-getcenter.md
create mode 100644 docs/api/math/rect/rectint-getleft.md
create mode 100644 docs/api/math/rect/rectint-getposition.md
create mode 100644 docs/api/math/rect/rectint-getright.md
create mode 100644 docs/api/math/rect/rectint-getsize.md
create mode 100644 docs/api/math/rect/rectint-gettop.md
create mode 100644 docs/api/math/rect/rectint-intersects.md
create mode 100644 docs/api/math/rect/rectint.md
create mode 100644 docs/api/math/rect/set.md
create mode 100644 docs/api/math/rect/setposition-float.md
create mode 100644 docs/api/math/rect/setposition-vector2.md
create mode 100644 docs/api/math/rect/union.md
create mode 100644 docs/api/math/rect/viewport-getaspectratio.md
create mode 100644 docs/api/math/rect/viewport-getrect.md
create mode 100644 docs/api/math/rect/viewport.md
create mode 100644 docs/api/math/sphere/contains.md
create mode 100644 docs/api/math/sphere/intersects.md
create mode 100644 docs/api/math/sphere/sphere.md
create mode 100644 docs/api/math/transform/inverse.md
create mode 100644 docs/api/math/transform/inversetransformdirection.md
create mode 100644 docs/api/math/transform/inversetransformpoint.md
create mode 100644 docs/api/math/transform/tomatrix.md
create mode 100644 docs/api/math/transform/transform.md
create mode 100644 docs/api/math/transform/transformdirection.md
create mode 100644 docs/api/math/transform/transformpoint.md
create mode 100644 docs/api/math/vector2/cross.md
create mode 100644 docs/api/math/vector2/dot.md
create mode 100644 docs/api/math/vector2/down.md
create mode 100644 docs/api/math/vector2/left.md
create mode 100644 docs/api/math/vector2/lerp.md
create mode 100644 docs/api/math/vector2/magnitude.md
create mode 100644 docs/api/math/vector2/movetowards.md
create mode 100644 docs/api/math/vector2/normalize.md
create mode 100644 docs/api/math/vector2/normalized.md
create mode 100644 docs/api/math/vector2/one.md
create mode 100644 docs/api/math/vector2/right.md
create mode 100644 docs/api/math/vector2/sqrmagnitude.md
create mode 100644 docs/api/math/vector2/up.md
create mode 100644 docs/api/math/vector2/vector2.md
create mode 100644 docs/api/math/vector2/zero.md
create mode 100644 docs/api/math/vector3/angle.md
create mode 100644 docs/api/math/vector3/back.md
create mode 100644 docs/api/math/vector3/cross.md
create mode 100644 docs/api/math/vector3/dot.md
create mode 100644 docs/api/math/vector3/down.md
create mode 100644 docs/api/math/vector3/forward.md
create mode 100644 docs/api/math/vector3/left.md
create mode 100644 docs/api/math/vector3/lerp.md
create mode 100644 docs/api/math/vector3/magnitude.md
create mode 100644 docs/api/math/vector3/movetowards.md
create mode 100644 docs/api/math/vector3/normalize.md
create mode 100644 docs/api/math/vector3/normalized.md
create mode 100644 docs/api/math/vector3/one.md
create mode 100644 docs/api/math/vector3/project.md
create mode 100644 docs/api/math/vector3/projectonplane.md
create mode 100644 docs/api/math/vector3/quaternion-multiply.md
create mode 100644 docs/api/math/vector3/reflect.md
create mode 100644 docs/api/math/vector3/right.md
create mode 100644 docs/api/math/vector3/sqrmagnitude.md
create mode 100644 docs/api/math/vector3/up.md
create mode 100644 docs/api/math/vector3/vector3.md
create mode 100644 docs/api/math/vector3/zero.md
create mode 100644 docs/api/math/vector4/dot.md
create mode 100644 docs/api/math/vector4/one.md
create mode 100644 docs/api/math/vector4/project.md
create mode 100644 docs/api/math/vector4/tovector3.md
create mode 100644 docs/api/math/vector4/vector4.md
create mode 100644 docs/api/math/vector4/zero.md
create mode 100644 docs/api/memory/allocator/allocate.md
create mode 100644 docs/api/memory/allocator/allocator.md
create mode 100644 docs/api/memory/allocator/free.md
create mode 100644 docs/api/memory/allocator/get-allocation-count.md
create mode 100644 docs/api/memory/allocator/get-name.md
create mode 100644 docs/api/memory/allocator/get-peak-allocated.md
create mode 100644 docs/api/memory/allocator/get-total-allocated.md
create mode 100644 docs/api/memory/allocator/get-total-freed.md
create mode 100644 docs/api/memory/allocator/reallocate.md
create mode 100644 docs/api/memory/linear-allocator/allocate.md
create mode 100644 docs/api/memory/linear-allocator/clear.md
create mode 100644 docs/api/memory/linear-allocator/free.md
create mode 100644 docs/api/memory/linear-allocator/get-capacity.md
create mode 100644 docs/api/memory/linear-allocator/get-marker.md
create mode 100644 docs/api/memory/linear-allocator/get-used-size.md
create mode 100644 docs/api/memory/linear-allocator/linear-allocator.md
create mode 100644 docs/api/memory/linear-allocator/reallocate.md
create mode 100644 docs/api/memory/linear-allocator/set-marker.md
create mode 100644 docs/api/memory/linear-allocator/~linear-allocator.md
create mode 100644 docs/api/memory/manager/create-linear-allocator.md
create mode 100644 docs/api/memory/manager/create-pool-allocator.md
create mode 100644 docs/api/memory/manager/create-proxy-allocator.md
create mode 100644 docs/api/memory/manager/dump-memory-leaks.md
create mode 100644 docs/api/memory/manager/generate-memory-report.md
create mode 100644 docs/api/memory/manager/get-system-allocator.md
create mode 100644 docs/api/memory/manager/get.md
create mode 100644 docs/api/memory/manager/initialize.md
create mode 100644 docs/api/memory/manager/manager.md
create mode 100644 docs/api/memory/manager/set-track-allocations.md
create mode 100644 docs/api/memory/manager/shutdown.md
create mode 100644 docs/api/memory/memory.md
create mode 100644 docs/api/memory/pool-allocator/allocate.md
create mode 100644 docs/api/memory/pool-allocator/contains.md
create mode 100644 docs/api/memory/pool-allocator/free.md
create mode 100644 docs/api/memory/pool-allocator/get-block-size.md
create mode 100644 docs/api/memory/pool-allocator/get-free-block-count.md
create mode 100644 docs/api/memory/pool-allocator/get-total-block-count.md
create mode 100644 docs/api/memory/pool-allocator/pool-allocator.md
create mode 100644 docs/api/memory/pool-allocator/reallocate.md
create mode 100644 docs/api/memory/pool-allocator/~pool-allocator.md
create mode 100644 docs/api/memory/proxy-allocator/allocate.md
create mode 100644 docs/api/memory/proxy-allocator/free.md
create mode 100644 docs/api/memory/proxy-allocator/get-stats.md
create mode 100644 docs/api/memory/proxy-allocator/proxy-allocator.md
create mode 100644 docs/api/memory/proxy-allocator/reallocate.md
create mode 100644 docs/api/memory/proxy-allocator/~proxy-allocator.md
create mode 100644 docs/api/resources/asyncloader/asyncloader.md
create mode 100644 docs/api/resources/asyncloader/cancelall.md
create mode 100644 docs/api/resources/asyncloader/getprogress.md
create mode 100644 docs/api/resources/asyncloader/submit.md
create mode 100644 docs/api/resources/asyncloader/update.md
create mode 100644 docs/api/resources/audioclip/audioclip.md
create mode 100644 docs/api/resources/audioclip/setaudiodata.md
create mode 100644 docs/api/resources/dependencygraph/adddependency.md
create mode 100644 docs/api/resources/dependencygraph/addnode.md
create mode 100644 docs/api/resources/dependencygraph/dependencygraph.md
create mode 100644 docs/api/resources/dependencygraph/getdependencies.md
create mode 100644 docs/api/resources/dependencygraph/hascirculardependency.md
create mode 100644 docs/api/resources/dependencygraph/topologicalsort.md
create mode 100644 docs/api/resources/filearchive/filearchive.md
create mode 100644 docs/api/resources/filesystem/exists.md
create mode 100644 docs/api/resources/filesystem/filesystem.md
create mode 100644 docs/api/resources/filesystem/initialize.md
create mode 100644 docs/api/resources/filesystem/readresource.md
create mode 100644 docs/api/resources/iloader/canload.md
create mode 100644 docs/api/resources/iloader/getdefaultsettings.md
create mode 100644 docs/api/resources/iloader/getsupportedextensions.md
create mode 100644 docs/api/resources/iloader/iloader.md
create mode 100644 docs/api/resources/iloader/load.md
create mode 100644 docs/api/resources/iloader/loadasync.md
create mode 100644 docs/api/resources/importsettings/importsettings.md
create mode 100644 docs/api/resources/iresource/initialize.md
create mode 100644 docs/api/resources/iresource/iresource.md
create mode 100644 docs/api/resources/iresource/release.md
create mode 100644 docs/api/resources/iresource/setinvalid.md
create mode 100644 docs/api/resources/material/material.md
create mode 100644 docs/api/resources/material/setfloat.md
create mode 100644 docs/api/resources/material/setshader.md
create mode 100644 docs/api/resources/material/settexture.md
create mode 100644 docs/api/resources/material/updateconstantbuffer.md
create mode 100644 docs/api/resources/mesh/addsection.md
create mode 100644 docs/api/resources/mesh/mesh.md
create mode 100644 docs/api/resources/mesh/setindexdata.md
create mode 100644 docs/api/resources/mesh/setvertexdata.md
create mode 100644 docs/api/resources/resourcecache/add.md
create mode 100644 docs/api/resources/resourcecache/flush.md
create mode 100644 docs/api/resources/resourcecache/getlrulist.md
create mode 100644 docs/api/resources/resourcecache/onmemorypressure.md
create mode 100644 docs/api/resources/resourcecache/resourcecache.md
create mode 100644 docs/api/resources/resourcecache/touch.md
create mode 100644 docs/api/resources/resourcehandle/get.md
create mode 100644 docs/api/resources/resourcehandle/getguid.md
create mode 100644 docs/api/resources/resourcehandle/isvalid.md
create mode 100644 docs/api/resources/resourcehandle/reset.md
create mode 100644 docs/api/resources/resourcehandle/resourcehandle.md
create mode 100644 docs/api/resources/resourcehandle/swap.md
create mode 100644 docs/api/resources/resourcemanager/exists.md
create mode 100644 docs/api/resources/resourcemanager/find.md
create mode 100644 docs/api/resources/resourcemanager/getloader.md
create mode 100644 docs/api/resources/resourcemanager/load.md
create mode 100644 docs/api/resources/resourcemanager/loadasync.md
create mode 100644 docs/api/resources/resourcemanager/loadgroup.md
create mode 100644 docs/api/resources/resourcemanager/registerloader.md
create mode 100644 docs/api/resources/resourcemanager/resourcemanager.md
create mode 100644 docs/api/resources/resourcemanager/setmemorybudget.md
create mode 100644 docs/api/resources/resourcemanager/unload.md
create mode 100644 docs/api/resources/resourcemanager/unloadunused.md
create mode 100644 docs/api/resources/resourcepackage/resourcepackage.md
create mode 100644 docs/api/resources/resourcepath/resourcepath.md
create mode 100644 docs/api/resources/resources.md
create mode 100644 docs/api/resources/resourcetypes/generate.md
create mode 100644 docs/api/resources/resourcetypes/getresourcetypename.md
create mode 100644 docs/api/resources/resourcetypes/resourcetypes.md
create mode 100644 docs/api/resources/shader/addattribute.md
create mode 100644 docs/api/resources/shader/adduniform.md
create mode 100644 docs/api/resources/shader/shader.md
create mode 100644 docs/api/resources/texture/create.md
create mode 100644 docs/api/resources/texture/generatemipmaps.md
create mode 100644 docs/api/resources/texture/texture.md
create mode 100644 docs/api/rhi/buffer/buffer.md
create mode 100644 docs/api/rhi/buffer/get-buffer-type.md
create mode 100644 docs/api/rhi/buffer/get-name.md
create mode 100644 docs/api/rhi/buffer/get-native-handle.md
create mode 100644 docs/api/rhi/buffer/get-size.md
create mode 100644 docs/api/rhi/buffer/get-state.md
create mode 100644 docs/api/rhi/buffer/get-stride.md
create mode 100644 docs/api/rhi/buffer/map.md
create mode 100644 docs/api/rhi/buffer/set-buffer-type.md
create mode 100644 docs/api/rhi/buffer/set-data.md
create mode 100644 docs/api/rhi/buffer/set-name.md
create mode 100644 docs/api/rhi/buffer/set-state.md
create mode 100644 docs/api/rhi/buffer/set-stride.md
create mode 100644 docs/api/rhi/buffer/shutdown.md
create mode 100644 docs/api/rhi/buffer/unmap.md
create mode 100644 docs/api/rhi/capabilities/capabilities.md
create mode 100644 docs/api/rhi/command-list/clear-depth-stencil.md
create mode 100644 docs/api/rhi/command-list/clear-render-target.md
create mode 100644 docs/api/rhi/command-list/clear.md
create mode 100644 docs/api/rhi/command-list/close.md
create mode 100644 docs/api/rhi/command-list/command-list.md
create mode 100644 docs/api/rhi/command-list/copy-resource.md
create mode 100644 docs/api/rhi/command-list/dispatch.md
create mode 100644 docs/api/rhi/command-list/draw-indexed.md
create mode 100644 docs/api/rhi/command-list/draw.md
create mode 100644 docs/api/rhi/command-list/methods.md
create mode 100644 docs/api/rhi/command-list/reset.md
create mode 100644 docs/api/rhi/command-list/set-blend-factor.md
create mode 100644 docs/api/rhi/command-list/set-blend-state.md
create mode 100644 docs/api/rhi/command-list/set-depth-stencil-state.md
create mode 100644 docs/api/rhi/command-list/set-index-buffer.md
create mode 100644 docs/api/rhi/command-list/set-pipeline-state.md
create mode 100644 docs/api/rhi/command-list/set-primitive-topology.md
create mode 100644 docs/api/rhi/command-list/set-render-targets.md
create mode 100644 docs/api/rhi/command-list/set-scissor-rect.md
create mode 100644 docs/api/rhi/command-list/set-scissor-rects.md
create mode 100644 docs/api/rhi/command-list/set-stencil-ref.md
create mode 100644 docs/api/rhi/command-list/set-vertex-buffer.md
create mode 100644 docs/api/rhi/command-list/set-vertex-buffers.md
create mode 100644 docs/api/rhi/command-list/set-viewport.md
create mode 100644 docs/api/rhi/command-list/set-viewports.md
create mode 100644 docs/api/rhi/command-list/shutdown.md
create mode 100644 docs/api/rhi/command-list/transition-barrier.md
create mode 100644 docs/api/rhi/command-queue/command-queue.md
create mode 100644 docs/api/rhi/command-queue/execute-command-lists.md
create mode 100644 docs/api/rhi/command-queue/get-completed-value.md
create mode 100644 docs/api/rhi/command-queue/get-native-handle.md
create mode 100644 docs/api/rhi/command-queue/get-timestamp-frequency.md
create mode 100644 docs/api/rhi/command-queue/get-type.md
create mode 100644 docs/api/rhi/command-queue/methods.md
create mode 100644 docs/api/rhi/command-queue/shutdown.md
create mode 100644 docs/api/rhi/command-queue/signal.md
create mode 100644 docs/api/rhi/command-queue/wait-for-idle.md
create mode 100644 docs/api/rhi/d3d12/buffer/buffer.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-buffer-type.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-desc.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-gpu-address.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-gpu-virtual-address.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-name.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-native-handle.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-resource.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-size.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-state.md
create mode 100644 docs/api/rhi/d3d12/buffer/get-stride.md
create mode 100644 docs/api/rhi/d3d12/buffer/initialize-from-existing.md
create mode 100644 docs/api/rhi/d3d12/buffer/initialize-with-data.md
create mode 100644 docs/api/rhi/d3d12/buffer/initialize.md
create mode 100644 docs/api/rhi/d3d12/buffer/map.md
create mode 100644 docs/api/rhi/d3d12/buffer/set-data.md
create mode 100644 docs/api/rhi/d3d12/buffer/shutdown.md
create mode 100644 docs/api/rhi/d3d12/buffer/unmap.md
create mode 100644 docs/api/rhi/d3d12/buffer/update-data.md
create mode 100644 docs/api/rhi/d3d12/command-allocator/command-allocator.md
create mode 100644 docs/api/rhi/d3d12/command-allocator/get-command-allocator.md
create mode 100644 docs/api/rhi/d3d12/command-allocator/is-ready.md
create mode 100644 docs/api/rhi/d3d12/command-list/alias-barrier.md
create mode 100644 docs/api/rhi/d3d12/command-list/begin-query.md
create mode 100644 docs/api/rhi/d3d12/command-list/clear-depth-stencil.md
create mode 100644 docs/api/rhi/d3d12/command-list/clear-render-target.md
create mode 100644 docs/api/rhi/d3d12/command-list/command-list.md
create mode 100644 docs/api/rhi/d3d12/command-list/copy-buffer.md
create mode 100644 docs/api/rhi/d3d12/command-list/copy-resource.md
create mode 100644 docs/api/rhi/d3d12/command-list/copy-texture.md
create mode 100644 docs/api/rhi/d3d12/command-list/dispatch-indirect.md
create mode 100644 docs/api/rhi/d3d12/command-list/dispatch.md
create mode 100644 docs/api/rhi/d3d12/command-list/draw-indexed-instanced-indirect.md
create mode 100644 docs/api/rhi/d3d12/command-list/draw-indexed.md
create mode 100644 docs/api/rhi/d3d12/command-list/draw-instanced-indirect.md
create mode 100644 docs/api/rhi/d3d12/command-list/draw.md
create mode 100644 docs/api/rhi/d3d12/command-list/end-query.md
create mode 100644 docs/api/rhi/d3d12/command-list/execute-bundle.md
create mode 100644 docs/api/rhi/d3d12/command-list/get-command-list.md
create mode 100644 docs/api/rhi/d3d12/command-list/get-resource-state.md
create mode 100644 docs/api/rhi/d3d12/command-list/resolve-query-data.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-blend-factor.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-compute-descriptor-table.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-depth-bias.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-descriptor-heap.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-descriptor-heaps.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-graphics-descriptor-table.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-graphics-root-32bit-constants.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-graphics-root-constant-buffer-view.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-graphics-root-descriptor-table.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-graphics-root-shader-resource-view.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-index-buffer.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-pipeline-state.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-primitive-topology.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-render-targets-handle.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-render-targets-internal.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-render-targets.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-root-signature.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-scissor-rect.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-scissor-rects.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-stencil-ref.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-vertex-buffer.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-vertex-buffers.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-viewport.md
create mode 100644 docs/api/rhi/d3d12/command-list/set-viewports.md
create mode 100644 docs/api/rhi/d3d12/command-list/track-resource.md
create mode 100644 docs/api/rhi/d3d12/command-list/transition-barrier-internal.md
create mode 100644 docs/api/rhi/d3d12/command-list/transition-barrier.md
create mode 100644 docs/api/rhi/d3d12/command-list/uav-barrier.md
create mode 100644 docs/api/rhi/d3d12/command-queue/command-queue.md
create mode 100644 docs/api/rhi/d3d12/command-queue/execute-command-lists.md
create mode 100644 docs/api/rhi/d3d12/command-queue/get-command-queue.md
create mode 100644 docs/api/rhi/d3d12/command-queue/get-completed-value.md
create mode 100644 docs/api/rhi/d3d12/command-queue/get-timestamp-frequency.md
create mode 100644 docs/api/rhi/d3d12/command-queue/signal.md
create mode 100644 docs/api/rhi/d3d12/command-queue/wait-for-idle.md
create mode 100644 docs/api/rhi/d3d12/common/common.md
create mode 100644 docs/api/rhi/d3d12/constant-buffer-view/constant-buffer-view.md
create mode 100644 docs/api/rhi/d3d12/constant-buffer-view/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/d3d12.md
create mode 100644 docs/api/rhi/d3d12/depth-stencil-view/create-desc.md
create mode 100644 docs/api/rhi/d3d12/depth-stencil-view/depth-stencil-view.md
create mode 100644 docs/api/rhi/d3d12/depth-stencil-view/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/depth-stencil-view/initialize-at.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/create-desc.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/descriptor-heap.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-cpu-descriptor-handle-for-heap-start.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-descriptor-count.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-descriptor-heap.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-descriptor-size.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-gpu-descriptor-handle-for-heap-start.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/get-gpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/descriptor-heap/initialize-from-desc.md
create mode 100644 docs/api/rhi/d3d12/device/check-feature-support.md
create mode 100644 docs/api/rhi/d3d12/device/device.md
create mode 100644 docs/api/rhi/d3d12/device/enumerate-adapters.md
create mode 100644 docs/api/rhi/d3d12/device/get-adapter-info.md
create mode 100644 docs/api/rhi/d3d12/device/get-descriptor-handle-increment-size.md
create mode 100644 docs/api/rhi/d3d12/device/get-device.md
create mode 100644 docs/api/rhi/d3d12/device/get-factory.md
create mode 100644 docs/api/rhi/d3d12/device/methods.md
create mode 100644 docs/api/rhi/d3d12/enums/enums.md
create mode 100644 docs/api/rhi/d3d12/fence/fence.md
create mode 100644 docs/api/rhi/d3d12/fence/get-completed-value.md
create mode 100644 docs/api/rhi/d3d12/fence/get-event-handle.md
create mode 100644 docs/api/rhi/d3d12/fence/get-fence.md
create mode 100644 docs/api/rhi/d3d12/fence/is-signaled.md
create mode 100644 docs/api/rhi/d3d12/fence/signal.md
create mode 100644 docs/api/rhi/d3d12/pipeline-state/create-desc.md
create mode 100644 docs/api/rhi/d3d12/pipeline-state/create-input-element.md
create mode 100644 docs/api/rhi/d3d12/pipeline-state/get-pipeline-state.md
create mode 100644 docs/api/rhi/d3d12/pipeline-state/pipeline-state.md
create mode 100644 docs/api/rhi/d3d12/query-heap/get-count.md
create mode 100644 docs/api/rhi/d3d12/query-heap/get-query-heap.md
create mode 100644 docs/api/rhi/d3d12/query-heap/query-heap.md
create mode 100644 docs/api/rhi/d3d12/render-target-view/create-desc.md
create mode 100644 docs/api/rhi/d3d12/render-target-view/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/render-target-view/initialize-at.md
create mode 100644 docs/api/rhi/d3d12/render-target-view/render-target-view.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-32bit-constants.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-cbv.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-desc.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-descriptor-range.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-descriptor-table.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-sampler-desc.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-srv.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-static-sampler.md
create mode 100644 docs/api/rhi/d3d12/root-signature/create-uav.md
create mode 100644 docs/api/rhi/d3d12/root-signature/get-parameter-count.md
create mode 100644 docs/api/rhi/d3d12/root-signature/get-root-signature.md
create mode 100644 docs/api/rhi/d3d12/root-signature/root-signature.md
create mode 100644 docs/api/rhi/d3d12/sampler/get-id.md
create mode 100644 docs/api/rhi/d3d12/sampler/sampler.md
create mode 100644 docs/api/rhi/d3d12/screenshot/capture.md
create mode 100644 docs/api/rhi/d3d12/screenshot/copy-to-readback-and-save.md
create mode 100644 docs/api/rhi/d3d12/screenshot/screenshot.md
create mode 100644 docs/api/rhi/d3d12/shader-resource-view/create-desc.md
create mode 100644 docs/api/rhi/d3d12/shader-resource-view/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/shader-resource-view/initialize-at.md
create mode 100644 docs/api/rhi/d3d12/shader-resource-view/shader-resource-view.md
create mode 100644 docs/api/rhi/d3d12/shader/get-bytecode-size.md
create mode 100644 docs/api/rhi/d3d12/shader/get-bytecode.md
create mode 100644 docs/api/rhi/d3d12/shader/get-d3d12-bytecode.md
create mode 100644 docs/api/rhi/d3d12/shader/get-input-layout.md
create mode 100644 docs/api/rhi/d3d12/shader/set-uniforms.md
create mode 100644 docs/api/rhi/d3d12/shader/shader.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/get-back-buffer.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/get-current-back-buffer-index.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/get-current-back-buffer.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/get-swap-chain.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/initialize-from-swapchain.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/is-fullscreen.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/poll-events.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/present.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/set-fullscreen.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/set-should-close.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/should-close.md
create mode 100644 docs/api/rhi/d3d12/swap-chain/swap-chain.md
create mode 100644 docs/api/rhi/d3d12/texture/get-array-size.md
create mode 100644 docs/api/rhi/d3d12/texture/initialize-depth-stencil.md
create mode 100644 docs/api/rhi/d3d12/texture/initialize-from-data.md
create mode 100644 docs/api/rhi/d3d12/texture/texture.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-buffer-desc.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-clear-value.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-command-queue-desc.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-depth-stencil.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-descriptor-heap-desc.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-heap-properties.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-rect.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-texture-desc.md
create mode 100644 docs/api/rhi/d3d12/types/to-d3d12-viewport.md
create mode 100644 docs/api/rhi/d3d12/types/types.md
create mode 100644 docs/api/rhi/d3d12/unordered-access-view/get-cpu-descriptor-handle.md
create mode 100644 docs/api/rhi/d3d12/unordered-access-view/unordered-access-view.md
create mode 100644 docs/api/rhi/descriptor-pool/descriptor-pool.md
create mode 100644 docs/api/rhi/descriptor-pool/get-descriptor-count.md
create mode 100644 docs/api/rhi/descriptor-pool/methods.md
create mode 100644 docs/api/rhi/device/compile-shader.md
create mode 100644 docs/api/rhi/device/create-buffer.md
create mode 100644 docs/api/rhi/device/create-command-list.md
create mode 100644 docs/api/rhi/device/create-command-queue.md
create mode 100644 docs/api/rhi/device/create-fence.md
create mode 100644 docs/api/rhi/device/create-pipeline-state.md
create mode 100644 docs/api/rhi/device/create-sampler.md
create mode 100644 docs/api/rhi/device/create-swap-chain.md
create mode 100644 docs/api/rhi/device/create-texture.md
create mode 100644 docs/api/rhi/device/device.md
create mode 100644 docs/api/rhi/device/get-capabilities.md
create mode 100644 docs/api/rhi/device/get-device-info.md
create mode 100644 docs/api/rhi/device/get-native-device.md
create mode 100644 docs/api/rhi/device/initialize.md
create mode 100644 docs/api/rhi/device/shutdown.md
create mode 100644 docs/api/rhi/enums/enums.md
create mode 100644 docs/api/rhi/factory/create-rhi-device-string.md
create mode 100644 docs/api/rhi/factory/create-rhi-device-type.md
create mode 100644 docs/api/rhi/factory/factory.md
create mode 100644 docs/api/rhi/fence/fence.md
create mode 100644 docs/api/rhi/fence/get-completed-value.md
create mode 100644 docs/api/rhi/fence/get-native-handle.md
create mode 100644 docs/api/rhi/fence/is-signaled.md
create mode 100644 docs/api/rhi/fence/methods.md
create mode 100644 docs/api/rhi/fence/shutdown.md
create mode 100644 docs/api/rhi/fence/signal.md
create mode 100644 docs/api/rhi/fence/wait.md
create mode 100644 docs/api/rhi/opengl/README.md
create mode 100644 docs/api/rhi/opengl/buffer/bind-base.md
create mode 100644 docs/api/rhi/opengl/buffer/bind.md
create mode 100644 docs/api/rhi/opengl/buffer/buffer.md
create mode 100644 docs/api/rhi/opengl/buffer/get-id.md
create mode 100644 docs/api/rhi/opengl/buffer/get-type.md
create mode 100644 docs/api/rhi/opengl/buffer/initialize-index-buffer.md
create mode 100644 docs/api/rhi/opengl/buffer/initialize-vertex-buffer.md
create mode 100644 docs/api/rhi/opengl/buffer/initialize.md
create mode 100644 docs/api/rhi/opengl/buffer/is-dynamic.md
create mode 100644 docs/api/rhi/opengl/buffer/unbind.md
create mode 100644 docs/api/rhi/opengl/command-list/clear-color.md
create mode 100644 docs/api/rhi/opengl/command-list/clear-depth-stencil.md
create mode 100644 docs/api/rhi/opengl/command-list/clear-depth.md
create mode 100644 docs/api/rhi/opengl/command-list/clear-render-target.md
create mode 100644 docs/api/rhi/opengl/command-list/clear-stencil.md
create mode 100644 docs/api/rhi/opengl/command-list/clear.md
create mode 100644 docs/api/rhi/opengl/command-list/command-list.md
create mode 100644 docs/api/rhi/opengl/command-list/copy-resource.md
create mode 100644 docs/api/rhi/opengl/command-list/dispatch.md
create mode 100644 docs/api/rhi/opengl/command-list/draw-indexed.md
create mode 100644 docs/api/rhi/opengl/command-list/draw.md
create mode 100644 docs/api/rhi/opengl/command-list/opengl-methods.md
create mode 100644 docs/api/rhi/opengl/command-list/set-blend-factor.md
create mode 100644 docs/api/rhi/opengl/command-list/set-blend-state.md
create mode 100644 docs/api/rhi/opengl/command-list/set-depth-stencil-state.md
create mode 100644 docs/api/rhi/opengl/command-list/set-index-buffer.md
create mode 100644 docs/api/rhi/opengl/command-list/set-pipeline-state.md
create mode 100644 docs/api/rhi/opengl/command-list/set-primitive-topology.md
create mode 100644 docs/api/rhi/opengl/command-list/set-render-targets.md
create mode 100644 docs/api/rhi/opengl/command-list/set-scissor-rect.md
create mode 100644 docs/api/rhi/opengl/command-list/set-scissor-rects.md
create mode 100644 docs/api/rhi/opengl/command-list/set-stencil-ref.md
create mode 100644 docs/api/rhi/opengl/command-list/set-vertex-buffer.md
create mode 100644 docs/api/rhi/opengl/command-list/set-vertex-buffers.md
create mode 100644 docs/api/rhi/opengl/command-list/set-viewport.md
create mode 100644 docs/api/rhi/opengl/command-list/set-viewports.md
create mode 100644 docs/api/rhi/opengl/command-list/transition-barrier.md
create mode 100644 docs/api/rhi/opengl/command-queue/command-queue.md
create mode 100644 docs/api/rhi/opengl/command-queue/execute-command-lists.md
create mode 100644 docs/api/rhi/opengl/command-queue/get-completed-value.md
create mode 100644 docs/api/rhi/opengl/command-queue/get-timestamp-frequency.md
create mode 100644 docs/api/rhi/opengl/command-queue/signal.md
create mode 100644 docs/api/rhi/opengl/command-queue/wait-for-idle.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/bind-framebuffer.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/bind.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/clear-depth-stencil.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/clear-depth.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/clear-stencil.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/depth-stencil-view.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/get-framebuffer.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/get-mip-level.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/get-size.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/get-texture.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/initialize-cubemap.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/initialize.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/shutdown.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/unbind-framebuffer.md
create mode 100644 docs/api/rhi/opengl/depth-stencil-view/unbind.md
create mode 100644 docs/api/rhi/opengl/device/create-render-window.md
create mode 100644 docs/api/rhi/opengl/device/device.md
create mode 100644 docs/api/rhi/opengl/device/get-window.md
create mode 100644 docs/api/rhi/opengl/device/initialize-with-existing-window.md
create mode 100644 docs/api/rhi/opengl/device/poll-events.md
create mode 100644 docs/api/rhi/opengl/device/set-should-close.md
create mode 100644 docs/api/rhi/opengl/device/should-close.md
create mode 100644 docs/api/rhi/opengl/device/swap-buffers.md
create mode 100644 docs/api/rhi/opengl/fence/fence.md
create mode 100644 docs/api/rhi/opengl/fence/get-completed-value.md
create mode 100644 docs/api/rhi/opengl/fence/get-current-value.md
create mode 100644 docs/api/rhi/opengl/fence/get-status.md
create mode 100644 docs/api/rhi/opengl/fence/initialize.md
create mode 100644 docs/api/rhi/opengl/fence/is-signaled.md
create mode 100644 docs/api/rhi/opengl/fence/reset.md
create mode 100644 docs/api/rhi/opengl/fence/signal.md
create mode 100644 docs/api/rhi/opengl/overview.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply-blend.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply-depth-stencil.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply-rasterizer.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply-scissor.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply-viewport.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/apply.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/attach-shader.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/detach-shader.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/get-blend-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/get-depth-stencil-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/get-rasterizer-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/pipeline-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-blend-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-clear-color.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-depth-stencil-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-logical-operation.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-rasterizer-state.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-scissor.md
create mode 100644 docs/api/rhi/opengl/pipeline-state/set-viewport.md
create mode 100644 docs/api/rhi/opengl/render-target-view/bind-framebuffer.md
create mode 100644 docs/api/rhi/opengl/render-target-view/bind.md
create mode 100644 docs/api/rhi/opengl/render-target-view/clear.md
create mode 100644 docs/api/rhi/opengl/render-target-view/get-framebuffer.md
create mode 100644 docs/api/rhi/opengl/render-target-view/get-mip-level.md
create mode 100644 docs/api/rhi/opengl/render-target-view/get-size.md
create mode 100644 docs/api/rhi/opengl/render-target-view/get-texture.md
create mode 100644 docs/api/rhi/opengl/render-target-view/initialize-cubemap.md
create mode 100644 docs/api/rhi/opengl/render-target-view/initialize.md
create mode 100644 docs/api/rhi/opengl/render-target-view/render-target-view.md
create mode 100644 docs/api/rhi/opengl/render-target-view/shutdown.md
create mode 100644 docs/api/rhi/opengl/render-target-view/unbind-framebuffer.md
create mode 100644 docs/api/rhi/opengl/render-target-view/unbind.md
create mode 100644 docs/api/rhi/opengl/sampler/bind.md
create mode 100644 docs/api/rhi/opengl/sampler/get-id.md
create mode 100644 docs/api/rhi/opengl/sampler/initialize.md
create mode 100644 docs/api/rhi/opengl/sampler/sampler.md
create mode 100644 docs/api/rhi/opengl/sampler/unbind.md
create mode 100644 docs/api/rhi/opengl/shader/compile-compute.md
create mode 100644 docs/api/rhi/opengl/shader/compile-from-file-vs-fs.md
create mode 100644 docs/api/rhi/opengl/shader/compile-from-file-vs-gs-fs.md
create mode 100644 docs/api/rhi/opengl/shader/compile-vs-fs.md
create mode 100644 docs/api/rhi/opengl/shader/get-id.md
create mode 100644 docs/api/rhi/opengl/shader/get-uniform-location.md
create mode 100644 docs/api/rhi/opengl/shader/set-float-array.md
create mode 100644 docs/api/rhi/opengl/shader/set-int-array.md
create mode 100644 docs/api/rhi/opengl/shader/shader.md
create mode 100644 docs/api/rhi/opengl/shader/use.md
create mode 100644 docs/api/rhi/opengl/swap-chain/get-framebuffer-size.md
create mode 100644 docs/api/rhi/opengl/swap-chain/get-size.md
create mode 100644 docs/api/rhi/opengl/swap-chain/get-window.md
create mode 100644 docs/api/rhi/opengl/swap-chain/initialize-mode.md
create mode 100644 docs/api/rhi/opengl/swap-chain/initialize.md
create mode 100644 docs/api/rhi/opengl/swap-chain/is-fullscreen.md
create mode 100644 docs/api/rhi/opengl/swap-chain/is-vsync.md
create mode 100644 docs/api/rhi/opengl/swap-chain/poll-events.md
create mode 100644 docs/api/rhi/opengl/swap-chain/present.md
create mode 100644 docs/api/rhi/opengl/swap-chain/set-fullscreen.md
create mode 100644 docs/api/rhi/opengl/swap-chain/set-should-close.md
create mode 100644 docs/api/rhi/opengl/swap-chain/set-vsync.md
create mode 100644 docs/api/rhi/opengl/swap-chain/should-close.md
create mode 100644 docs/api/rhi/opengl/swap-chain/swap-buffers.md
create mode 100644 docs/api/rhi/opengl/swap-chain/swap-chain.md
create mode 100644 docs/api/rhi/opengl/texture/bind-image.md
create mode 100644 docs/api/rhi/opengl/texture/generate-mipmap.md
create mode 100644 docs/api/rhi/opengl/texture/get-id.md
create mode 100644 docs/api/rhi/opengl/texture/get-opengl-type.md
create mode 100644 docs/api/rhi/opengl/texture/initialize-2d.md
create mode 100644 docs/api/rhi/opengl/texture/initialize-cube-map.md
create mode 100644 docs/api/rhi/opengl/texture/load-from-file.md
create mode 100644 docs/api/rhi/opengl/texture/set-filtering.md
create mode 100644 docs/api/rhi/opengl/texture/set-wrapping.md
create mode 100644 docs/api/rhi/opengl/texture/texture.md
create mode 100644 docs/api/rhi/opengl/vertex-array/add-vertex-buffer.md
create mode 100644 docs/api/rhi/opengl/vertex-array/get-id.md
create mode 100644 docs/api/rhi/opengl/vertex-array/get-index-buffer.md
create mode 100644 docs/api/rhi/opengl/vertex-array/get-index-count.md
create mode 100644 docs/api/rhi/opengl/vertex-array/set-index-buffer.md
create mode 100644 docs/api/rhi/opengl/vertex-array/vertex-array.md
create mode 100644 docs/api/rhi/pipeline-layout/get-native-handle.md
create mode 100644 docs/api/rhi/pipeline-layout/initialize.md
create mode 100644 docs/api/rhi/pipeline-layout/methods.md
create mode 100644 docs/api/rhi/pipeline-layout/pipeline-layout.md
create mode 100644 docs/api/rhi/pipeline-layout/shutdown.md
create mode 100644 docs/api/rhi/pipeline-state/get-native-handle.md
create mode 100644 docs/api/rhi/pipeline-state/get-type.md
create mode 100644 docs/api/rhi/pipeline-state/methods.md
create mode 100644 docs/api/rhi/pipeline-state/pipeline-state.md
create mode 100644 docs/api/rhi/pipeline-state/shutdown.md
create mode 100644 docs/api/rhi/rhi.md
create mode 100644 docs/api/rhi/sampler/get-id.md
create mode 100644 docs/api/rhi/sampler/get-native-handle.md
create mode 100644 docs/api/rhi/sampler/methods.md
create mode 100644 docs/api/rhi/sampler/sampler.md
create mode 100644 docs/api/rhi/sampler/shutdown.md
create mode 100644 docs/api/rhi/shader/bind.md
create mode 100644 docs/api/rhi/shader/compile-from-file.md
create mode 100644 docs/api/rhi/shader/compile.md
create mode 100644 docs/api/rhi/shader/get-native-handle.md
create mode 100644 docs/api/rhi/shader/get-type.md
create mode 100644 docs/api/rhi/shader/is-valid.md
create mode 100644 docs/api/rhi/shader/set-float.md
create mode 100644 docs/api/rhi/shader/set-int.md
create mode 100644 docs/api/rhi/shader/set-mat4.md
create mode 100644 docs/api/rhi/shader/set-vec3.md
create mode 100644 docs/api/rhi/shader/set-vec4.md
create mode 100644 docs/api/rhi/shader/shader.md
create mode 100644 docs/api/rhi/shader/shutdown.md
create mode 100644 docs/api/rhi/shader/unbind.md
create mode 100644 docs/api/rhi/swap-chain/get-current-back-buffer-index.md
create mode 100644 docs/api/rhi/swap-chain/get-current-back-buffer.md
create mode 100644 docs/api/rhi/swap-chain/get-native-handle.md
create mode 100644 docs/api/rhi/swap-chain/is-fullscreen.md
create mode 100644 docs/api/rhi/swap-chain/methods.md
create mode 100644 docs/api/rhi/swap-chain/poll-events.md
create mode 100644 docs/api/rhi/swap-chain/present.md
create mode 100644 docs/api/rhi/swap-chain/resize.md
create mode 100644 docs/api/rhi/swap-chain/set-fullscreen.md
create mode 100644 docs/api/rhi/swap-chain/set-should-close.md
create mode 100644 docs/api/rhi/swap-chain/should-close.md
create mode 100644 docs/api/rhi/swap-chain/shutdown.md
create mode 100644 docs/api/rhi/swap-chain/swap-chain.md
create mode 100644 docs/api/rhi/texture/get-depth.md
create mode 100644 docs/api/rhi/texture/get-format.md
create mode 100644 docs/api/rhi/texture/get-height.md
create mode 100644 docs/api/rhi/texture/get-mip-levels.md
create mode 100644 docs/api/rhi/texture/get-name.md
create mode 100644 docs/api/rhi/texture/get-native-handle.md
create mode 100644 docs/api/rhi/texture/get-state.md
create mode 100644 docs/api/rhi/texture/get-texture-type.md
create mode 100644 docs/api/rhi/texture/get-width.md
create mode 100644 docs/api/rhi/texture/set-name.md
create mode 100644 docs/api/rhi/texture/set-state.md
create mode 100644 docs/api/rhi/texture/shutdown.md
create mode 100644 docs/api/rhi/texture/texture.md
create mode 100644 docs/api/rhi/types/types.md
create mode 100644 docs/api/threading/lambdatask/constructor.md
create mode 100644 docs/api/threading/lambdatask/lambdatask.md
create mode 100644 docs/api/threading/mutex/lock.md
create mode 100644 docs/api/threading/mutex/mutex.md
create mode 100644 docs/api/threading/mutex/trylock.md
create mode 100644 docs/api/threading/mutex/unlock.md
create mode 100644 docs/api/threading/readwritelock/readlock.md
create mode 100644 docs/api/threading/readwritelock/readunlock.md
create mode 100644 docs/api/threading/readwritelock/readwritelock.md
create mode 100644 docs/api/threading/readwritelock/writelock.md
create mode 100644 docs/api/threading/readwritelock/writeunlock.md
create mode 100644 docs/api/threading/spinlock/lock.md
create mode 100644 docs/api/threading/spinlock/spinlock.md
create mode 100644 docs/api/threading/spinlock/trylock.md
create mode 100644 docs/api/threading/spinlock/unlock.md
create mode 100644 docs/api/threading/task-group/adddependency.md
create mode 100644 docs/api/threading/task-group/addtask.md
create mode 100644 docs/api/threading/task-group/cancel.md
create mode 100644 docs/api/threading/task-group/getprogress.md
create mode 100644 docs/api/threading/task-group/iscomplete.md
create mode 100644 docs/api/threading/task-group/setcompletecallback.md
create mode 100644 docs/api/threading/task-group/task-group.md
create mode 100644 docs/api/threading/task-group/wait.md
create mode 100644 docs/api/threading/task-group/waitfor.md
create mode 100644 docs/api/threading/task-system/createtaskgroup.md
create mode 100644 docs/api/threading/task-system/destroytaskgroup.md
create mode 100644 docs/api/threading/task-system/get.md
create mode 100644 docs/api/threading/task-system/getworkerthreadcount.md
create mode 100644 docs/api/threading/task-system/initialize.md
create mode 100644 docs/api/threading/task-system/parallelfor.md
create mode 100644 docs/api/threading/task-system/runonmainthread.md
create mode 100644 docs/api/threading/task-system/shutdown.md
create mode 100644 docs/api/threading/task-system/submit.md
create mode 100644 docs/api/threading/task-system/task-system.md
create mode 100644 docs/api/threading/task-system/update.md
create mode 100644 docs/api/threading/task-system/wait.md
create mode 100644 docs/api/threading/task/addref.md
create mode 100644 docs/api/threading/task/execute.md
create mode 100644 docs/api/threading/task/getid.md
create mode 100644 docs/api/threading/task/getpriority.md
create mode 100644 docs/api/threading/task/getstatus.md
create mode 100644 docs/api/threading/task/oncancel.md
create mode 100644 docs/api/threading/task/oncomplete.md
create mode 100644 docs/api/threading/task/release.md
create mode 100644 docs/api/threading/task/setid.md
create mode 100644 docs/api/threading/task/setpriority.md
create mode 100644 docs/api/threading/task/setstatus.md
create mode 100644 docs/api/threading/task/task.md
create mode 100644 docs/api/threading/tasksystemconfig/enabletaskprofiling.md
create mode 100644 docs/api/threading/tasksystemconfig/maxtaskqueuesize.md
create mode 100644 docs/api/threading/tasksystemconfig/stealtasks.md
create mode 100644 docs/api/threading/tasksystemconfig/tasksystemconfig.md
create mode 100644 docs/api/threading/tasksystemconfig/threadstacksize.md
create mode 100644 docs/api/threading/tasksystemconfig/workerthreadcount.md
create mode 100644 docs/api/threading/thread/detach.md
create mode 100644 docs/api/threading/thread/getcurrentid.md
create mode 100644 docs/api/threading/thread/getid.md
create mode 100644 docs/api/threading/thread/getname.md
create mode 100644 docs/api/threading/thread/join.md
create mode 100644 docs/api/threading/thread/sleep.md
create mode 100644 docs/api/threading/thread/start.md
create mode 100644 docs/api/threading/thread/thread.md
create mode 100644 docs/api/threading/thread/yield.md
create mode 100644 docs/api/threading/threading.md
create mode 100644 docs/plan/D3D12后端测试设计.md
create mode 100644 docs/plan/OpenGL后端测试设计.md
create mode 100644 docs/plan/OpenGL测试实施计划.md
create mode 100644 docs/plan/RHI抽象层设计与实现.md
create mode 100644 docs/plan/TESTING.md
create mode 100644 docs/plan/Unity SRP API参考文档.md
create mode 100644 docs/plan/XCEngine渲染引擎架构设计.md
create mode 100644 docs/plan/XCGameEngine架构设计.md
create mode 100644 docs/plan/仿Unity RHI架构设计.md
create mode 100644 docs/plan/开题报告和任务书/DXR_Volumetric_Rendering_Research_Report.md
create mode 100644 docs/plan/开题报告和任务书/任务书-王子文.docx
create mode 100644 docs/plan/开题报告和任务书/完整开题报告.md
create mode 100644 docs/plan/开题报告和任务书/开题报告-王子文.doc
create mode 100644 docs/plan/旧版题目/开题报告-王子文.doc
create mode 100644 docs/plan/旧版题目/开题报告-王子文.md
create mode 100644 docs/plan/深入方向规划.md
create mode 100644 docs/plan/第一阶段计划.md
create mode 100644 docs/plan/第三阶段计划.md
create mode 100644 docs/plan/第二阶段计划.md
create mode 100644 docs/plan/第四阶段计划_资源系统.md
diff --git a/.trae/documents/fix_doc_link_matching_plan.md b/.trae/documents/fix_doc_link_matching_plan.md
new file mode 100644
index 0000000..027f524
--- /dev/null
+++ b/.trae/documents/fix_doc_link_matching_plan.md
@@ -0,0 +1,82 @@
+# 修复文档链接匹配逻辑计划
+
+## 1. 问题分析
+用户反馈点击 `rhi/buffer/d3d12/buffer.md` 中的 `[Initialize](initialize.md)` 链接时,错误跳转到了 `Logger::Initialize`(可能位于其他目录)。
+经过检查 `src/components/ApiDocViewer.tsx` 中的 `handleReferenceClick` 方法:
+
+```typescript
+ const handleReferenceClick = useCallback((href: string) => {
+ const ref = href.replace(/\.md$/, '')
+ const match = externalDocs.find(d => {
+ const docPath = d.relativePath.replace(/\.md$/, '')
+ return docPath === ref || docPath.endsWith('/' + ref.split('/').pop())
+ })
+ if (match) {
+ setSelectedPath(match.relativePath)
+ setCurrentContent(match.content)
+ }
+ }, [externalDocs])
+```
+
+当前的匹配逻辑非常危险:`docPath.endsWith('/' + ref.split('/').pop())` 这一行意味着只要文件名匹配(例如 `initialize.md`),不管它在哪个目录下,都可能被匹配到。这导致了跨目录的同名文件匹配错误。
+
+## 2. 修复方案
+
+### 修改文件: `src/components/ApiDocViewer.tsx`
+
+我们需要实现基于当前文档路径的相对路径解析逻辑。由于 `handleReferenceClick` 目前只接收 `href`,我们需要让它知道当前所在的文档路径(`selectedPath`),以便正确解析相对路径。
+
+1. **依赖当前路径**:确保 `handleReferenceClick` 能访问到 `selectedPath`。
+2. **实现相对路径解析**:
+ - 如果链接以 `/` 开头,视为基于文档根目录的绝对路径。
+ - 如果是相对路径(`./`、`../` 或直接文件名),则基于当前文档的目录进行解析。
+ - 解析出目标文件的完整 `relativePath` 后,再在 `externalDocs` 中查找精确匹配。
+
+**修改后的逻辑伪代码**:
+```typescript
+ const handleReferenceClick = useCallback((href: string) => {
+ // 1. 获取当前文档所在的目录
+ const currentDir = selectedPath ? selectedPath.split('/').slice(0, -1).join('/') : '';
+
+ // 2. 解析目标路径
+ let targetPath = '';
+ if (href.startsWith('/')) {
+ // 绝对路径(相对于文档根目录)
+ targetPath = href.slice(1);
+ } else {
+ // 相对路径处理
+ const parts = currentDir ? currentDir.split('/') : [];
+ const hrefParts = href.split('/');
+
+ for (const part of hrefParts) {
+ if (part === '.') continue;
+ if (part === '..') {
+ parts.pop();
+ } else {
+ parts.push(part);
+ }
+ }
+ targetPath = parts.join('/');
+ }
+
+ // 3. 规范化目标路径(移除 .md 后缀以便对比,或者直接对比全名)
+ // 考虑到 externalDocs 中的 relativePath 包含 .md,我们也应该构造包含 .md 的路径
+ if (!targetPath.endsWith('.md')) {
+ targetPath += '.md';
+ }
+
+ // 4. 精确查找
+ const match = externalDocs.find(d => d.relativePath === targetPath);
+
+ if (match) {
+ setSelectedPath(match.relativePath)
+ setCurrentContent(match.content)
+ } else {
+ console.warn(`Document not found: ${targetPath}`);
+ }
+ }, [externalDocs, selectedPath]) // 添加 selectedPath 依赖
+```
+
+## 3. 影响与验证
+- **影响**:修复了所有相对路径链接的跳转逻辑,不再会出现跨目录同名文件乱跳的情况。
+- **验证**:点击 `rhi/buffer/d3d12/buffer.md` 中的 `initialize.md`,应该正确跳转到同目录下的 `rhi/buffer/d3d12/initialize.md`。
\ No newline at end of file
diff --git a/.trae/documents/fix_link_color_plan.md b/.trae/documents/fix_link_color_plan.md
new file mode 100644
index 0000000..a81f4a7
--- /dev/null
+++ b/.trae/documents/fix_link_color_plan.md
@@ -0,0 +1,68 @@
+# 修复文档内代码块中链接样式失效问题
+
+## 1. 问题分析
+用户反馈“有的是蓝色,有的没有颜色(普通文本)”。
+在 Markdown 文档(特别是 API 文档)中,链接经常出现在代码块或表格内。例如:
+`[`Initialize`](initialize.md)`
+
+在 `DocContent.tsx` 中,我们对 `code` 标签有自定义渲染逻辑:
+```typescript
+ code: ({ className, children, ...props }) => {
+ const match = /language-(\w+)/.exec(className || '')
+ if (match) {
+ // ... 代码高亮块 ...
+ }
+ // 行内代码
+ return (
+
+ {children}
+
+ )
+ },
+```
+
+当 Markdown 解析器遇到 `[`Initialize`](initialize.md)` 时,它会生成:
+```html
+Initialize
+```
+或者(取决于解析器行为)
+```html
+Initialize
+```
+但在 `react-markdown` 中,通常链接包裹内容。如果链接内部包含 `code` 标签,`code` 标签的样式(`text-zinc-300`)可能会覆盖外层 `a` 标签的颜色样式(`text-blue-500`)。
+CSS 中,子元素的 `color` 属性通常会覆盖父元素的 `color`。这里 `code` 组件显式设置了 `text-zinc-300`(灰色),导致包裹在链接里的代码块显示为灰色,看起来像没有颜色的普通文本。
+
+## 2. 修复方案
+
+### 修改文件: `src/components/DocContent.tsx`
+
+我们需要调整 `code` 组件的样式逻辑。如果 `code` 标签被包裹在 `a` 标签中,它应该继承父元素的颜色,而不是强制使用 `text-zinc-300`。
+但在 `react-markdown` 的组件渲染中,子组件很难直接知道父组件是谁。
+
+**替代方案**:利用 CSS 的 `inherit` 特性或移除显式的颜色类。
+更稳妥的方法是:修改 `code` 组件的 `className`,让它不强制设置颜色,或者仅在非链接环境下设置颜色。
+或者,我们可以给 `a` 标签内的内容强制应用蓝色。
+
+**最佳实践**:
+修改 `code` 组件的渲染,不再强制 `text-zinc-300`,而是使用一个默认颜色,但允许被父级覆盖。或者,我们在 `a` 组件中,给子元素强制颜色。
+
+鉴于 `react-markdown` 的结构,最简单有效的方法是在 `code` 组件中移除 `text-zinc-300`,改为使用 `bg-zinc-800` 等背景色来区分代码块,字体颜色让其继承或使用更弱的默认值。
+但为了保持非链接代码块的灰色外观,我们可以尝试在 CSS (Tailwind) 中使用 `group` 或直接在 `a` 标签样式中强制子元素颜色。
+
+**修改计划**:
+1. 修改 `a` 组件:添加 `group` 类。
+2. 修改 `code` 组件:添加 `group-hover:text-blue-400` (这可能不行,因为 code 不是 a 的直接子组件,react 渲染树中它们是分离的组件函数)。
+
+**更直接的方案**:
+在 `code` 组件中,移除 `text-zinc-300`,改为 `text-inherit` 或者不设置颜色类(让其继承),然后在全局或父级容器设置默认文本颜色。
+或者,简单粗暴地:在 `a` 标签的 `className` 中添加 `[&>code]:text-blue-500` (Tailwind 任意变体语法),强制 `a` 标签下的 `code` 元素变成蓝色。
+
+```typescript
+// 在 a 标签组件中
+className="text-blue-500 hover:text-blue-400 transition-colors cursor-pointer [&>code]:text-blue-500 [&>code]:hover:text-blue-400"
+```
+这样可以确保链接内的代码块也显示为蓝色。
+
+## 3. 影响与验证
+- **影响**:所有被链接包裹的行内代码块(如 `[`Code`](link)`)都将变为蓝色,表明它们是可点击的链接。普通行内代码块保持原样(如果它们不在 a 标签内)。
+- **验证**:查看包含 `[`Initialize`](...)` 的文档,确认 "Initialize" 显示为蓝色且可点击。
\ No newline at end of file
diff --git a/.trae/documents/fix_link_navigation_plan.md b/.trae/documents/fix_link_navigation_plan.md
new file mode 100644
index 0000000..cfb0ffa
--- /dev/null
+++ b/.trae/documents/fix_link_navigation_plan.md
@@ -0,0 +1,57 @@
+# 修复文档内链接跳转白屏问题计划
+
+## 1. 问题分析
+用户反馈“点击链接直接白屏了”。这是因为在 Markdown 文档内容中,部分相对链接(例如 `[Some Doc](SomeDoc.md)`)没有以 `./` 或 `../` 开头。
+目前的 `DocContent.tsx` 组件在渲染 `` 标签时,仅拦截了以 `./` 或 `../` 开头的链接。对于其他格式的本地链接,它会渲染为原生的 `` 标签。
+在 Electron 或单页应用(SPA)中,点击原生链接会触发浏览器的默认导航行为,试图跳转到该文件路径,从而导致 React 应用被卸载(变成白屏或显示 404/纯文本)。
+
+以前用户可以通过左侧树直接点击叶子节点查看文档,但在我们隐藏了叶子节点后,用户必须依赖文档内的链接进行导航,导致这个原本就存在的链接跳转问题暴露了出来。
+
+## 2. 修改方案
+
+### 修改文件: `src/components/DocContent.tsx`
+调整 Markdown 中 `` 标签的渲染逻辑,拦截所有本地链接,阻止默认的页面跳转行为,并将其交给内部的 `onReferenceClick` 处理:
+
+1. **识别内部链接**:
+ 判断 `href` 是否存在,且**不以** `http://`、`https://`、`mailto:` 或 `#` 开头。满足此条件的都视为内部文档链接。
+
+2. **阻止默认行为并触发内部跳转**:
+ 对于内部链接,渲染为 `` 标签,但在 `onClick` 事件中调用 `e.preventDefault()` 阻止白屏跳转,随后调用 `onReferenceClick(href)`。
+
+```typescript
+ a: ({ href, children }) => {
+ // 判断是否是内部链接:非 http/https,非邮箱,非页内锚点
+ const isInternal = href && !href.startsWith('http') && !href.startsWith('mailto:') && !href.startsWith('#');
+
+ if (isInternal) {
+ return (
+ {
+ e.preventDefault();
+ onReferenceClick(href);
+ }}
+ className="text-blue-500 hover:text-blue-400 transition-colors cursor-pointer"
+ >
+ {children}
+
+ )
+ }
+
+ // 外部链接保留默认行为,但新窗口打开更安全
+ return (
+
+ {children}
+
+ )
+ },
+```
+
+## 3. 影响与验证
+- **影响**:所有的内部 Markdown 链接现在都会通过 React 状态更新右侧内容,而不会触发导致白屏的浏览器原生导航。
+- **验证**:保存修改后,点击文档内部的普通文件名链接(如 `SomeDoc.md`),页面将平滑切换到目标文档内容,不再出现白屏崩溃现象。
\ No newline at end of file
diff --git a/.trae/documents/hide_leaf_nodes_plan.md b/.trae/documents/hide_leaf_nodes_plan.md
new file mode 100644
index 0000000..1b30c07
--- /dev/null
+++ b/.trae/documents/hide_leaf_nodes_plan.md
@@ -0,0 +1,39 @@
+# 隐藏层级树叶子节点实现计划
+
+## 1. 目标概述
+在 API 文档界面的左侧层级树(`DocTree` 组件)中,隐藏所有的叶子节点(即具体的 Markdown 文件),使目录树仅展示文件夹(目录)结构。
+
+## 2. 现状分析
+- 目前 `src/components/DocTree.tsx` 中的 `DocTree` 和 `TreeNode` 组件会无差别地渲染所有传入的节点(包含文件夹和文件)。
+- 树状图的连线UI(如 `├─` 和 `└─`)依赖于数组的索引和长度(`isLast` 属性)。如果仅在渲染时隐式返回 `null`,会导致连线计算错误。
+- 在当前的交互中,点击文件夹会默认打开与文件夹同名的 Markdown 索引文件(此时 `selectedPath` 是该 `.md` 文件的路径)。如果隐藏了文件节点,需要确保此时对应的文件夹能被正确高亮显示。
+
+## 3. 具体修改方案
+
+### 修改文件: `src/components/DocTree.tsx`
+
+**1. 过滤子节点并修复连线逻辑 (在 `TreeNode` 组件中)**
+- 在渲染子节点之前,先过滤出 `isDir === true` 的节点:
+ ```typescript
+ const visibleChildren = file.children?.filter(c => c.isDir)
+ const showChildren = isDir && isExpanded && visibleChildren && visibleChildren.length > 0
+ ```
+- 在 `visibleChildren.map` 中渲染子节点,并基于 `visibleChildren.length` 来计算 `isLast`,确保树状图的连线完美闭合。
+
+**2. 完善文件夹高亮逻辑 (在 `TreeNode` 组件中)**
+- 修改 `isSelected` 的判断,使得当子文件(与文件夹同名的索引文档)被选中时,该文件夹节点也能呈现高亮状态:
+ ```typescript
+ const isSelected = selectedPath === file.relativePath ||
+ (isDir && selectedPath === `${file.relativePath}/${file.name}.md`)
+ ```
+
+**3. 过滤根节点 (在 `DocTree` 组件中)**
+- 在渲染根层级前过滤出文件夹:
+ ```typescript
+ const visibleFiles = files.filter(f => f.isDir)
+ ```
+- 基于 `visibleFiles` 遍历并传递正确的 `isLast` 属性。
+
+## 4. 影响与验证
+- **影响**:所有的独立 `.md` 文件将不再出现在左侧树中,用户需要通过点击目录(加载索引页)和页面内的文档链接来进行页面导航。
+- **验证**:保存修改后,左侧目录树将只显示文件夹图标/层级;连线正常;点击文件夹后,当前文件夹名称会变为高亮蓝色(`text-blue-400`)。
\ No newline at end of file
diff --git a/docs/api/containers/array/array.md b/docs/api/containers/array/array.md
new file mode 100644
index 0000000..d743c30
--- /dev/null
+++ b/docs/api/containers/array/array.md
@@ -0,0 +1,67 @@
+# Array
+
+**命名空间**: `XCEngine::Containers`
+
+**类型**: `class` (template)
+
+**描述**: 模板动态数组容器,提供自动扩容的数组实现。
+
+## 概述
+
+`Array` 是一个模板动态数组容器,提供了类似 `std::vector` 的功能,但针对游戏引擎进行了优化。
+
+## 类型别名
+
+| 别名 | 类型 | 描述 |
+|------|------|------|
+| `Iterator` | `T*` | 迭代器类型 |
+| `ConstIterator` | `const T*` | 常量迭代器类型 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [Constructor](constructor.md) | 构造数组实例 |
+| [Copy/Move Constructor](copy-move-constructor.md) | 拷贝或移动构造 |
+| [Destructor](destructor.md) | 析构函数 |
+| [operator=](operator-assign.md) | 赋值运算符 |
+| [operator[]](operator-subscript.md) | 下标访问 |
+| [Data](data.md) | 获取原始数据指针 |
+| [Front/Back](front-back.md) | 获取首/尾元素引用 |
+| [Size/Capacity/Empty](size.md) | 获取尺寸信息 |
+| [Clear](clear.md) | 清空所有元素 |
+| [Reserve](reserve.md) | 预留容量 |
+| [Resize](resize.md) | 调整大小 |
+| [PushBack](pushback.md) | 尾部添加(拷贝/移动) |
+| [EmplaceBack](emplaceback.md) | 就地构造尾部添加 |
+| [PopBack](popback.md) | 尾部移除 |
+| [begin/end](iterator.md) | 获取迭代器 |
+| [SetAllocator](setallocator.md) | 设置内存分配器 |
+
+## 使用示例
+
+```cpp
+#include
+
+// 基本用法
+XCEngine::Containers::Array arr;
+arr.PushBack(1);
+arr.PushBack(2);
+arr.PushBack(3);
+
+// 使用 initializer_list
+XCEngine::Containers::Array arr2 = {1, 2, 3, 4, 5};
+
+// 迭代
+for (auto& elem : arr) {
+ printf("%d\n", elem);
+}
+
+// 使用 EmplaceBack
+arr.EmplaceBack(4);
+```
+
+## 相关文档
+
+- [HashMap](../hashmap/hashmap.md) - 哈希表容器
+- [Memory 模块](../../memory/memory.md) - 内存分配器
diff --git a/docs/api/containers/array/clear.md b/docs/api/containers/array/clear.md
new file mode 100644
index 0000000..d0b59ae
--- /dev/null
+++ b/docs/api/containers/array/clear.md
@@ -0,0 +1,36 @@
+# Array::Clear()
+
+```cpp
+void Clear();
+```
+
+清空数组中的所有元素。
+
+**行为:**
+- 调用所有元素的析构函数
+- 将 `Size()` 设为 0
+- **不释放底层内存**,`Capacity()` 保持不变
+
+**线程安全:** ❌ 清空期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr = {1, 2, 3, 4, 5};
+
+arr.Size(); // 5
+arr.Capacity(); // 8(假设自动扩容到 8)
+
+arr.Clear();
+
+arr.Size(); // 0
+arr.Capacity(); // 8(内存未被释放)
+
+// 可继续添加元素,不会重新分配内存
+arr.PushBack(10);
+arr.PushBack(20);
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/constructor.md b/docs/api/containers/array/constructor.md
new file mode 100644
index 0000000..421f485
--- /dev/null
+++ b/docs/api/containers/array/constructor.md
@@ -0,0 +1,44 @@
+# Array::Array()
+
+```cpp
+Array() = default;
+explicit Array(size_t capacity);
+Array(size_t count, const T& value);
+Array(std::initializer_list init);
+```
+
+构造一个 `Array` 实例。
+
+**默认构造**:构造空数组,不分配内存。
+
+**容量构造**:预分配指定容量的内存,但不设置元素数量。适用于已知大致元素数量时减少重新分配。
+
+**数量构造**:创建 `count` 个元素,每个元素都是 `value` 的拷贝。使用拷贝构造,不调用默认构造。
+
+**初始化列表构造**:使用 C++ initializer_list 语法创建数组。
+
+**参数:**
+- `capacity` - 预分配的容量大小
+- `count` - 元素数量
+- `value` - 每个元素的初始值
+- `init` - initializer_list 初始化列表
+
+**示例:**
+
+```cpp
+// 默认构造
+Containers::Array arr1;
+
+// 预分配容量(不设置元素)
+Containers::Array arr2(100);
+
+// 创建 10 个元素,初始值为 42
+Containers::Array arr3(10, 42);
+
+// 使用 initializer_list
+Containers::Array arr4 = {1, 2, 3, 4, 5};
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/copy-move-constructor.md b/docs/api/containers/array/copy-move-constructor.md
new file mode 100644
index 0000000..4811dc7
--- /dev/null
+++ b/docs/api/containers/array/copy-move-constructor.md
@@ -0,0 +1,44 @@
+# Array::Array() - 拷贝/移动构造
+
+```cpp
+Array(const Array& other);
+Array(Array&& other) noexcept;
+```
+
+拷贝或移动构造一个新数组。
+
+**拷贝构造:**
+- 分配与 `other` 相同容量的内存
+- 拷贝 `other` 中所有元素
+
+**移动构造:**
+- 接管 `other` 的所有资源(数据指针、容量、大小)
+- 将 `other` 置为空状态(`m_data = nullptr, m_size = 0, m_capacity = 0`)
+- 不拷贝、不移动任何元素数据,性能 O(1)
+
+**参数:**
+- `other` - 源数组
+
+**异常:**
+- 拷贝构造:元素拷贝可能抛出异常
+- 移动构造:`noexcept`,不抛出异常
+
+**线程安全:** ❌ 构造期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr1 = {1, 2, 3};
+
+// 拷贝构造
+Containers::Array arr2(arr1); // arr2 = {1, 2, 3}
+
+// 移动构造
+Containers::Array arr3(std::move(arr1));
+// arr3 = {1, 2, 3}
+// arr1 现在为空,Size() == 0
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/data.md b/docs/api/containers/array/data.md
new file mode 100644
index 0000000..8cd2afb
--- /dev/null
+++ b/docs/api/containers/array/data.md
@@ -0,0 +1,30 @@
+# Array::Data()
+
+```cpp
+T* Data();
+const T* Data() const;
+```
+
+获取指向底层数组数据的原始指针。
+
+**用途:** 用于与 C 风格 API 或需要直接访问内存的场景(如与 GPU 通信)。
+
+**返回:** 指向底层连续内存块的指针。如果数组为空,返回 `nullptr`。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+Containers::Array arr = {1.0f, 2.0f, 3.0f};
+
+float* raw = arr.Data();
+size_t count = arr.Size();
+
+// 可用于与 C API 交互
+// memcpy(dst, arr.Data(), arr.Size() * sizeof(float));
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/destructor.md b/docs/api/containers/array/destructor.md
new file mode 100644
index 0000000..34cce96
--- /dev/null
+++ b/docs/api/containers/array/destructor.md
@@ -0,0 +1,28 @@
+# Array::~Array()
+
+```cpp
+~Array();
+```
+
+销毁数组,释放所有已分配的元素并释放内存。
+
+**行为:**
+- 调用所有元素的析构函数
+- 释放底层数据缓冲区内存
+
+**注意:** 使用 RAII 模式,无需手动调用析构。
+
+**线程安全:** ❌ 析构期间不可并发访问
+
+**示例:**
+
+```cpp
+{
+ Containers::Array arr = {1, 2, 3};
+ // 使用 arr...
+} // arr 在此自动销毁,析构函数被调用
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/emplaceback.md b/docs/api/containers/array/emplaceback.md
new file mode 100644
index 0000000..d1e3e2b
--- /dev/null
+++ b/docs/api/containers/array/emplaceback.md
@@ -0,0 +1,47 @@
+# Array::EmplaceBack()
+
+```cpp
+template
+T& EmplaceBack(Args&&... args);
+```
+
+在数组末尾就地构造一个元素,直接在内存中构造,不产生临时对象。
+
+**优势:**
+- 避免拷贝或移动开销
+- 直接在底层缓冲区末尾构造元素
+- 参数完美转发,支持任意构造参数
+
+**参数:**
+- `args` - 转发给 `T` 构造函数的参数包
+
+**返回:** 新构造元素的引用
+
+**复杂度:** 均摊 O(1)
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+struct Vertex {
+ float x, y, z;
+ Vertex(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
+};
+
+Containers::Array vertices;
+
+// EmplaceBack 直接构造,不产生临时 Vertex 对象
+vertices.EmplaceBack(1.0f, 2.0f, 3.0f);
+vertices.EmplaceBack(4.0f, 5.0f, 6.0f);
+
+// 对比 PushBack(需要先构造临时对象)
+Vertex v(7.0f, 8.0f, 9.0f);
+vertices.PushBack(v); // 产生拷贝或移动
+
+// EmplaceBack 更高效,始终优先使用
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/front-back.md b/docs/api/containers/array/front-back.md
new file mode 100644
index 0000000..e37d697
--- /dev/null
+++ b/docs/api/containers/array/front-back.md
@@ -0,0 +1,38 @@
+# Array::Front() / Back()
+
+```cpp
+T& Front();
+const T& Front() const;
+T& Back();
+const T& Back() const;
+```
+
+获取数组首尾元素的引用。
+
+**Front():** 返回第一个元素(`index == 0`)的引用。
+
+**Back():** 返回最后一个元素(`index == Size() - 1`)的引用。
+
+**前置条件:** 数组必须非空,否则行为未定义。
+
+**返回:** 首/尾元素的引用
+
+**复杂度:** O(1)
+
+**线程安全:** ❌ 访问期间不可并发修改
+
+**示例:**
+
+```cpp
+Containers::Array arr = {10, 20, 30};
+
+int& first = arr.Front(); // first == 10
+int& last = arr.Back(); // last == 30
+
+arr.Front() = 5; // arr 现在是 {5, 20, 30}
+arr.Back() = 100; // arr 现在是 {5, 20, 100}
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/iterator.md b/docs/api/containers/array/iterator.md
new file mode 100644
index 0000000..e5d6364
--- /dev/null
+++ b/docs/api/containers/array/iterator.md
@@ -0,0 +1,45 @@
+# Array::begin() / end()
+
+```cpp
+Iterator begin();
+Iterator end();
+ConstIterator begin() const;
+ConstIterator end() const;
+```
+
+获取数组的迭代器,用于范围遍历。
+
+**begin():** 返回指向第一个元素的迭代器。如果数组为空,返回值等于 `end()`。
+
+**end():** 返回指向"最后一个元素之后"位置的迭代器(哨兵)。这是一个越界位置,不可解引用。
+
+**迭代器类型:** `Iterator = T*`(原始指针),因此支持指针算术运算。
+
+**复杂度:** O(1)
+
+**线程安全:** ❌ 迭代期间不可并发修改数组
+
+**示例:**
+
+```cpp
+Containers::Array arr = {10, 20, 30, 40, 50};
+
+// 范围 for 循环(推荐)
+for (int val : arr) {
+ printf("%d\n", val);
+}
+
+// 手动迭代器
+for (auto it = arr.begin(); it != arr.end(); ++it) {
+ printf("%d\n", *it);
+}
+
+// 指针算术(因为迭代器就是指针)
+int* ptr = arr.begin();
+ptr += 2; // 指向第三个元素
+*ptr; // 30
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/operator-assign.md b/docs/api/containers/array/operator-assign.md
new file mode 100644
index 0000000..84f9bc9
--- /dev/null
+++ b/docs/api/containers/array/operator-assign.md
@@ -0,0 +1,44 @@
+# Array::operator=
+
+```cpp
+Array& operator=(const Array& other);
+Array& operator=(Array&& other) noexcept;
+```
+
+赋值运算符,用另一个数组的内容替换当前数组的内容。
+
+**拷贝赋值(`=`):**
+- 先销毁当前所有元素
+- 分配与 `other` 相同大小的内存
+- 拷贝 `other` 中所有元素
+
+**移动赋值(`=`):**
+- 先销毁当前所有元素
+- 接管 `other` 的所有资源(数据指针、容量)
+- 将 `other` 置为空状态
+
+**参数:**
+- `other` - 源数组
+
+**返回:** 引用自身(`*this`)
+
+**异常:**
+- 拷贝赋值:`other` 元素拷贝可能抛出异常
+
+**线程安全:** ❌ 赋值期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr1 = {1, 2, 3};
+Containers::Array arr2;
+
+arr2 = arr1; // 拷贝赋值,arr2 现在是 {1, 2, 3}
+
+Containers::Array arr3 = {4, 5};
+arr2 = std::move(arr3); // 移动赋值,arr2 现在是 {4, 5},arr3 为空
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/operator-subscript.md b/docs/api/containers/array/operator-subscript.md
new file mode 100644
index 0000000..7f74e53
--- /dev/null
+++ b/docs/api/containers/array/operator-subscript.md
@@ -0,0 +1,39 @@
+# Array::operator[]
+
+```cpp
+T& operator[](size_t index);
+const T& operator[](size_t index) const;
+```
+
+按下标访问数组元素,不进行边界检查。
+
+**行为:**
+- 返回指定索引处元素的引用
+- 不进行下标越界检查,性能最优
+- 可用于读取和修改元素(非常量版本)
+
+**参数:**
+- `index` - 元素下标,从 0 开始
+
+**返回:** 元素的引用(常量版本返回常量引用)
+
+**复杂度:** O(1)
+
+**线程安全:** ❌ 访问元素期间不可并发修改
+
+**注意:** 不会进行边界检查。如果 `index >= Size()`,行为未定义。如需边界检查,请使用 `At()` 方法(如果存在)或自行检查。
+
+**示例:**
+
+```cpp
+Containers::Array arr = {10, 20, 30};
+
+int first = arr[0]; // first == 10
+int last = arr[2]; // last == 30
+
+arr[1] = 25; // arr 现在是 {10, 25, 30}
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/popback.md b/docs/api/containers/array/popback.md
new file mode 100644
index 0000000..8762a6f
--- /dev/null
+++ b/docs/api/containers/array/popback.md
@@ -0,0 +1,38 @@
+# Array::PopBack()
+
+```cpp
+void PopBack();
+```
+
+移除数组末尾的元素,并调用其析构函数。
+
+**前置条件:** 数组必须非空(`Size() > 0`)。如果数组为空,行为未定义。
+
+**行为:**
+- 将 `Size()` 减 1
+- 调用被移除元素的析构函数
+- **不释放底层内存**
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr = {10, 20, 30, 40, 50};
+
+arr.Size(); // 5
+
+arr.PopBack(); // 移除 50
+
+arr.Size(); // 4
+// arr = {10, 20, 30, 40}
+
+arr.PopBack();
+arr.PopBack();
+// arr = {10, 20}
+// Capacity() 仍为之前的值(如 8)
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/pushback.md b/docs/api/containers/array/pushback.md
new file mode 100644
index 0000000..741ad85
--- /dev/null
+++ b/docs/api/containers/array/pushback.md
@@ -0,0 +1,43 @@
+# Array::PushBack()
+
+```cpp
+void PushBack(const T& value);
+void PushBack(T&& value);
+```
+
+在数组末尾添加一个元素。
+
+**拷贝版本(`const T&`):**
+- 如果容量不足(`Size() >= Capacity()`),先扩容(容量翻倍)
+- 在末尾位置拷贝构造 `value`
+
+**移动版本(`T&&`):**
+- 行为同拷贝版本,但使用移动构造
+- 适用于临时对象或右值,避免拷贝开销
+
+**参数:**
+- `value` - 要添加的元素(拷贝或移动)
+
+**复杂度:** 均摊 O(1)。每次添加的摊销成本为常数,因为扩容是翻倍策略。
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr;
+
+// 拷贝添加
+std::string s = "hello";
+arr.PushBack(s); // s 被拷贝
+
+// 移动添加(更高效)
+arr.PushBack(std::string("world")); // 直接移动构造
+
+// 临时对象会被隐式移动
+arr.PushBack("temporary"); // 字符串字面量构造后移动
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/reserve.md b/docs/api/containers/array/reserve.md
new file mode 100644
index 0000000..310263f
--- /dev/null
+++ b/docs/api/containers/array/reserve.md
@@ -0,0 +1,39 @@
+# Array::Reserve()
+
+```cpp
+void Reserve(size_t capacity);
+```
+
+预分配底层内存容量,确保能容纳至少 `capacity` 个元素而不重新分配。
+
+**行为:**
+- 如果 `capacity > Capacity()`,分配新的内存(容量翻倍策略)
+- 如果 `capacity <= Capacity()`,什么都不做
+- 不改变 `Size()`
+
+**参数:**
+- `capacity` - 目标容量
+
+**用途:** 当已知大致元素数量时,提前分配可以避免多次重新分配带来的性能开销和迭代器失效。
+
+**复杂度:** O(n),其中 n 为当前元素数量(需要拷贝现有元素到新内存)
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr;
+
+// 预分配 1000 个元素的容量
+arr.Reserve(1000);
+
+// 之后添加 500 个元素不会触发重新分配
+for (int i = 0; i < 500; ++i) {
+ arr.PushBack(i);
+}
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/resize.md b/docs/api/containers/array/resize.md
new file mode 100644
index 0000000..f29d109
--- /dev/null
+++ b/docs/api/containers/array/resize.md
@@ -0,0 +1,46 @@
+# Array::Resize()
+
+```cpp
+void Resize(size_t newSize);
+void Resize(size_t newSize, const T& value);
+```
+
+调整数组大小。
+
+**Resize(newSize):**
+- 如果 `newSize > Size()`:在末尾构造 `newSize - Size()` 个默认构造的元素
+- 如果 `newSize < Size()`:销毁末尾多出的元素
+- 如果 `newSize == Size()`:什么都不做
+
+**Resize(newSize, value):**
+- 行为同上述,但扩展时使用 `value` 拷贝构造新元素,而非默认构造
+
+**参数:**
+- `newSize` - 新的元素数量
+- `value` - 扩展时用作填充值的元素
+
+**复杂度:** O(n),涉及元素构造/析构和可能的内存重新分配
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+Containers::Array arr = {1, 2, 3};
+
+// 扩展到 5 个元素,新元素默认构造为 0
+arr.Resize(5);
+// arr = {1, 2, 3, 0, 0}
+
+// 缩减到 2 个元素
+arr.Resize(2);
+// arr = {1, 2}
+
+// 扩展到 4 个,填充为 -1
+arr.Resize(4, -1);
+// arr = {1, 2, -1, -1}
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/setallocator.md b/docs/api/containers/array/setallocator.md
new file mode 100644
index 0000000..c6b6be4
--- /dev/null
+++ b/docs/api/containers/array/setallocator.md
@@ -0,0 +1,38 @@
+# Array::SetAllocator()
+
+```cpp
+void SetAllocator(Memory::IAllocator* allocator);
+```
+
+设置数组使用的内存分配器。
+
+**用途:** 允许自定义内存分配策略,如使用对象池、固定大小分配器或调试分配器。
+
+**参数:**
+- `allocator` - 指向 `Memory::IAllocator` 接口的指针。如果为 `nullptr`,使用默认 `::operator new/delete`。
+
+**注意:**
+- 如果数组已有元素,设置新的分配器后,**不会**迁移现有元素
+- 仅影响后续的内存分配操作
+- 通常在构造后立即调用,或在数组为空时调用
+
+**线程安全:** ❌ 操作期间不可并发访问
+
+**示例:**
+
+```cpp
+// 使用线性分配器(适合帧分配)
+auto* linear = new Memory::LinearAllocator(1024 * 1024);
+
+Containers::Array arr;
+arr.SetAllocator(linear);
+
+// 使用对象池分配器
+auto* pool = new Memory::PoolAllocator(sizeof(MyObject), 100);
+Containers::Array objects;
+objects.SetAllocator(pool);
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/array/size.md b/docs/api/containers/array/size.md
new file mode 100644
index 0000000..1077f29
--- /dev/null
+++ b/docs/api/containers/array/size.md
@@ -0,0 +1,47 @@
+# Array::Size() / Capacity() / Empty()
+
+```cpp
+size_t Size() const;
+size_t Capacity() const;
+bool Empty() const;
+```
+
+获取数组的尺寸信息。
+
+**Size():** 返回数组中的实际元素数量。
+
+**Capacity():** 返回底层内存缓冲区能容纳的元素数量,不一定等于 `Size()`。
+
+**Empty():** 返回数组是否为空(`Size() == 0`)。等价于 `Size() == 0`,但更语义化。
+
+**返回:**
+- `Size()` - 元素数量
+- `Capacity()` - 底层缓冲区容量
+- `Empty()` - 是否为空
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+Containers::Array arr;
+
+arr.Size(); // 0
+arr.Capacity(); // 0
+arr.Empty(); // true
+
+arr.PushBack(1);
+arr.PushBack(2);
+
+arr.Size(); // 2
+arr.Capacity(); // 4(自动扩容)
+arr.Empty(); // false
+
+arr.Reserve(100);
+arr.Size(); // 2(元素数量不变)
+arr.Capacity(); // 100(容量增加)
+```
+
+## 相关文档
+
+- [Array 总览](array.md) - 返回类总览
diff --git a/docs/api/containers/containers.md b/docs/api/containers/containers.md
new file mode 100644
index 0000000..54ec313
--- /dev/null
+++ b/docs/api/containers/containers.md
@@ -0,0 +1,57 @@
+# Containers 容器模块概览
+
+**命名空间**: `XCEngine::Containers`
+
+**类型**: `module`
+
+**描述**: XCEngine 的容器模块,提供常用的数据结构实现。
+
+## 概述
+
+Containers 模块提供了图形引擎常用的数据结构,包括动态数组、字符串和哈希表。这些容器都使用自定义内存分配器接口,支持内存跟踪和优化。
+
+## 模块内容
+
+### 容器类
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [Array](array/array.md) | `Array.h` | 模板动态数组,支持自动扩容 |
+| [String](string/string.md) | `String.h` | 动态字符串类 |
+| [HashMap](hashmap/hashmap.md) | `HashMap.h` | 模板哈希表 |
+
+## 设计特点
+
+1. **自定义内存分配器支持** - 所有容器都支持通过 `IAllocator` 接口分配内存
+2. **迭代器支持** - Array 和 HashMap 都提供 STL 风格的迭代器
+3. **移动语义** - 完整支持 C++11 移动语义
+4. **异常安全** - 内存分配失败时提供良好的错误处理
+
+## 使用示例
+
+```cpp
+#include
+#include
+#include
+
+// 使用 Array
+XCEngine::Containers::Array arr;
+arr.PushBack(1);
+arr.PushBack(2);
+arr.PushBack(3);
+
+// 使用 String
+XCEngine::Containers::String str;
+str = "Hello, ";
+str += "World!";
+
+// 使用 HashMap
+XCEngine::Containers::HashMap map;
+map.Insert("key1", 100);
+map.Insert("key2", 200);
+int* value = map.Find("key1");
+```
+
+## 相关文档
+
+- [Memory 模块](../memory/memory.md) - 内存分配器接口
diff --git a/docs/api/containers/hashmap/clear.md b/docs/api/containers/hashmap/clear.md
new file mode 100644
index 0000000..fc8facd
--- /dev/null
+++ b/docs/api/containers/hashmap/clear.md
@@ -0,0 +1,34 @@
+# HashMap::Clear
+
+```cpp
+void Clear();
+```
+
+清空哈希表中的所有元素,将元素数量置为 0。桶的数量保持不变。
+
+**参数:** 无
+
+**返回:** 无
+
+**复杂度:** O(m_bucketCount),需要清空所有桶
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+map.Insert(1, "one");
+map.Insert(2, "two");
+map.Insert(3, "three");
+
+std::cout << "Size before clear: " << map.Size() << std::endl; // 输出 3
+
+map.Clear();
+
+std::cout << "Size after clear: " << map.Size() << std::endl; // 输出 0
+std::cout << "Empty: " << (map.Empty() ? "yes" : "no") << std::endl; // 输出 "yes"
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Erase](erase.md) - 删除单个元素
diff --git a/docs/api/containers/hashmap/constructor.md b/docs/api/containers/hashmap/constructor.md
new file mode 100644
index 0000000..6930a52
--- /dev/null
+++ b/docs/api/containers/hashmap/constructor.md
@@ -0,0 +1,31 @@
+# HashMap::HashMap
+
+```cpp
+HashMap();
+explicit HashMap(size_t bucketCount, Memory::IAllocator* allocator = nullptr);
+```
+
+构造哈希表实例。
+
+**参数:**
+- `bucketCount` - 初始桶的数量,默认为 16。若传入 0,则自动调整为 16。
+- `allocator` - 内存分配器指针,默认为 `nullptr`(使用默认分配器)。
+
+**返回:** 无
+
+**复杂度:** O(bucketCount),需要初始化所有桶
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map1;
+
+XCEngine::Containers::HashMap map2(32);
+
+auto customAllocator = XCEngine::Memory::GetDefaultAllocator();
+XCEngine::Containers::HashMap map3(64, customAllocator);
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
diff --git a/docs/api/containers/hashmap/contains.md b/docs/api/containers/hashmap/contains.md
new file mode 100644
index 0000000..ff0f5db
--- /dev/null
+++ b/docs/api/containers/hashmap/contains.md
@@ -0,0 +1,35 @@
+# HashMap::Contains
+
+```cpp
+bool Contains(const Key& key) const;
+```
+
+检查哈希表中是否包含指定的键。
+
+**参数:**
+- `key` - 要检查的键
+
+**返回:** 如果键存在返回 `true`,否则返回 `false`。
+
+**复杂度:** O(1) 平均,最坏 O(n)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+map.Insert(1, "one");
+map.Insert(2, "two");
+
+if (map.Contains(1)) {
+ std::cout << "Key 1 exists" << std::endl; // 输出 "Key 1 exists"
+}
+
+if (!map.Contains(99)) {
+ std::cout << "Key 99 does not exist" << std::endl; // 输出 "Key 99 does not exist"
+}
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Find](find.md) - 查找键对应的值
diff --git a/docs/api/containers/hashmap/copy-move.md b/docs/api/containers/hashmap/copy-move.md
new file mode 100644
index 0000000..4eacdea
--- /dev/null
+++ b/docs/api/containers/hashmap/copy-move.md
@@ -0,0 +1,34 @@
+# HashMap::Copy/Move 构造
+
+```cpp
+HashMap(const HashMap& other);
+HashMap(HashMap&& other) noexcept;
+```
+
+拷贝构造和移动构造。
+
+**参数:**
+- `other` - 源哈希表(拷贝版本为 `const` 引用,移动版本为右值引用)
+
+**返回:** 无(构造函数)
+
+**复杂度:**
+- 拷贝构造:O(m_bucketCount + other.m_size)
+- 移动构造:O(m_bucketCount),移动构造需要遍历所有桶以重新建立桶的指针关系
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map1;
+map1.Insert(1, "hello");
+map1.Insert(2, "world");
+
+XCEngine::Containers::HashMap map2(map1); // 拷贝构造
+
+XCEngine::Containers::HashMap map3(std::move(map1)); // 移动构造,map1 在此调用后状态不确定
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [operator=](operator-assign.md) - 赋值运算符
diff --git a/docs/api/containers/hashmap/destructor.md b/docs/api/containers/hashmap/destructor.md
new file mode 100644
index 0000000..1274b16
--- /dev/null
+++ b/docs/api/containers/hashmap/destructor.md
@@ -0,0 +1,27 @@
+# HashMap::~HashMap
+
+```cpp
+~HashMap();
+```
+
+析构函数,清空所有元素并释放资源。
+
+**参数:** 无
+
+**返回:** 无
+
+**复杂度:** O(n),需要清空所有桶中的元素
+
+**示例:**
+
+```cpp
+{
+ XCEngine::Containers::HashMap map;
+ map.Insert(1, "hello");
+ map.Insert(2, "world");
+} // map 在此自动析构,所有资源被正确释放
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
diff --git a/docs/api/containers/hashmap/erase.md b/docs/api/containers/hashmap/erase.md
new file mode 100644
index 0000000..02df0ea
--- /dev/null
+++ b/docs/api/containers/hashmap/erase.md
@@ -0,0 +1,37 @@
+# HashMap::Erase
+
+```cpp
+bool Erase(const Key& key);
+```
+
+删除指定键对应的元素。
+
+**参数:**
+- `key` - 要删除的键
+
+**返回:** 如果元素被删除返回 `true`,如果键不存在返回 `false`。
+
+**复杂度:** O(1) 平均,最坏 O(n)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+map.Insert(1, "one");
+map.Insert(2, "two");
+map.Insert(3, "three");
+
+bool erased = map.Erase(2); // 返回 true
+
+if (!map.Contains(2)) {
+ std::cout << "Key 2 removed" << std::endl; // 输出 "Key 2 removed"
+}
+
+bool notErased = map.Erase(99); // 返回 false,键不存在
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Insert](insert.md) - 插入键值对
+- [Clear](clear.md) - 清空所有元素
diff --git a/docs/api/containers/hashmap/find.md b/docs/api/containers/hashmap/find.md
new file mode 100644
index 0000000..5f6c78f
--- /dev/null
+++ b/docs/api/containers/hashmap/find.md
@@ -0,0 +1,39 @@
+# HashMap::Find
+
+```cpp
+Value* Find(const Key& key);
+const Value* Find(const Key& key) const;
+```
+
+根据键查找对应的值指针。
+
+**参数:**
+- `key` - 要查找的键
+
+**返回:** 如果找到,返回指向值的指针;否则返回 `nullptr`。
+
+**复杂度:** O(1) 平均,最坏 O(n)(同一桶中有多个键发生哈希冲突)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+map.Insert(1, "one");
+map.Insert(2, "two");
+
+const char* value1 = map.Find(1);
+if (value1) {
+ std::cout << "Found: " << value1 << std::endl; // 输出 "Found: one"
+}
+
+const char* value2 = map.Find(99);
+if (!value2) {
+ std::cout << "Not found" << std::endl; // 输出 "Not found"
+}
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Contains](contains.md) - 检查是否包含键
+- [operator[]](./operator-subscript.md) - 下标访问
diff --git a/docs/api/containers/hashmap/hashmap.md b/docs/api/containers/hashmap/hashmap.md
new file mode 100644
index 0000000..96b5998
--- /dev/null
+++ b/docs/api/containers/hashmap/hashmap.md
@@ -0,0 +1,80 @@
+# HashMap
+
+**命名空间**: `XCEngine::Containers`
+
+**类型**: `class` (template)
+
+**描述**: 模板哈希表容器,提供键值对存储和快速查找。
+
+## 概述
+
+`HashMap` 是一个模板哈希表容器,使用动态数组作为桶来解决哈希冲突,支持键值对的插入、查找和删除操作。
+
+## 公共类型
+
+### Pair
+
+| 成员 | 类型 | 描述 |
+|------|------|------|
+| `first` | `Key` | 键 |
+| `second` | `Value` | 值 |
+
+### 迭代器
+
+| 别名 | 类型 | 描述 |
+|------|------|------|
+| `Iterator` | `typename Array::Iterator` | 迭代器类型 |
+| `ConstIterator` | `typename Array::ConstIterator` | 常量迭代器类型 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [Constructor](constructor.md) | 构造哈希表实例 |
+| [Destructor](destructor.md) | 析构函数 |
+| [operator=](operator-assign.md) | 赋值运算符 |
+| [Copy/Move](copy-move.md) | 拷贝/移动构造 |
+| [operator[]](operator-subscript.md) | 下标访问(不存在时插入) |
+| [Find](find.md) | 查找键对应的值指针 |
+| [Contains](contains.md) | 检查是否包含键 |
+| [Insert](insert.md) | 插入键值对 |
+| [Erase](erase.md) | 删除键对应的元素 |
+| [Clear](clear.md) | 清空所有元素 |
+| [Size/Empty](size.md) | 获取元素数量 |
+| [begin/end](iterator.md) | 获取迭代器 |
+| [SetAllocator](setallocator.md) | 设置内存分配器 |
+
+## 使用示例
+
+```cpp
+#include
+#include
+
+int main() {
+ XCEngine::Containers::HashMap map;
+
+ map.Insert(1, "one");
+ map.Insert(2, "two");
+ map.Insert(3, "three");
+
+ if (const char* value = map.Find(1)) {
+ std::cout << "Key 1: " << value << std::endl;
+ }
+
+ std::cout << "Size: " << map.Size() << std::endl;
+
+ for (auto it = map.begin(); it != map.end(); ++it) {
+ std::cout << it->first << " -> " << it->second << std::endl;
+ }
+
+ map.Erase(2);
+ std::cout << "Contains 2: " << (map.Contains(2) ? "yes" : "no") << std::endl;
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [Array](../array/array.md) - 动态数组
+- [Memory 模块](../../memory/memory.md) - 内存分配器
diff --git a/docs/api/containers/hashmap/insert.md b/docs/api/containers/hashmap/insert.md
new file mode 100644
index 0000000..ad582ac
--- /dev/null
+++ b/docs/api/containers/hashmap/insert.md
@@ -0,0 +1,38 @@
+# HashMap::Insert
+
+```cpp
+bool Insert(const Key& key, const Value& value);
+bool Insert(const Key& key, Value&& value);
+bool Insert(Pair&& pair);
+```
+
+插入键值对。如果键已存在,则更新其值并返回 `false`;否则插入新元素并返回 `true`。
+
+**参数:**
+- `key` - 要插入的键
+- `value` - 要插入的值(const 版本为拷贝,&& 版本为移动)
+- `pair` - 包含键值对的 `Pair` 结构(右值)
+
+**返回:** 如果插入成功(键不存在)返回 `true`,如果键已存在(更新值)返回 `false`。
+
+**复杂度:** O(1) 平均,最坏 O(n)(包括可能的 rehash)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+
+bool inserted1 = map.Insert(1, "one"); // 返回 true
+bool inserted2 = map.Insert(1, "ONE"); // 返回 false,更新现有值
+
+bool inserted3 = map.Insert(2, std::string("two")); // 移动语义版本
+
+XCEngine::Containers::HashMap::Pair p{3, "three"};
+bool inserted4 = map.Insert(std::move(p)); // Pair 移动版本
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [operator[]](./operator-subscript.md) - 下标访问(总是插入)
+- [Erase](erase.md) - 删除键对应的元素
diff --git a/docs/api/containers/hashmap/iterator.md b/docs/api/containers/hashmap/iterator.md
new file mode 100644
index 0000000..62e3cb2
--- /dev/null
+++ b/docs/api/containers/hashmap/iterator.md
@@ -0,0 +1,34 @@
+# HashMap::begin / end
+
+```cpp
+Iterator begin();
+Iterator end();
+ConstIterator begin() const;
+ConstIterator end() const;
+```
+
+获取哈希表的迭代器。迭代器遍历所有桶中的元素。
+
+**参数:** 无
+
+**返回:** 返回指向第一个元素和末尾(最后一个元素之后)位置的迭代器。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+map.Insert(1, "one");
+map.Insert(2, "two");
+map.Insert(3, "three");
+
+for (auto it = map.begin(); it != map.end(); ++it) {
+ std::cout << it->first << " -> " << it->second << std::endl;
+}
+// 输出顺序不确定,取决于哈希桶的内部布局
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
diff --git a/docs/api/containers/hashmap/operator-assign.md b/docs/api/containers/hashmap/operator-assign.md
new file mode 100644
index 0000000..d439ab9
--- /dev/null
+++ b/docs/api/containers/hashmap/operator-assign.md
@@ -0,0 +1,36 @@
+# HashMap::operator=
+
+```cpp
+HashMap& operator=(const HashMap& other);
+HashMap& operator=(HashMap&& other) noexcept;
+```
+
+赋值运算符,用另一个 HashMap 的内容替换当前内容。
+
+**参数:**
+- `other` - 源哈希表(拷贝版本为 `const` 引用,移动版本为右值引用)
+
+**返回:** 对当前对象的引用 (`*this`)
+
+**复杂度:**
+- 拷贝赋值:O(m_bucketCount + other.m_size)
+- 移动赋值:O(m_size),需要先清空当前内容
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map1;
+map1.Insert(1, "one");
+map1.Insert(2, "two");
+
+XCEngine::Containers::HashMap map2;
+map2 = map1; // 拷贝赋值
+
+XCEngine::Containers::HashMap map3;
+map3 = std::move(map1); // 移动赋值,map1 在此调用后状态不确定
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Copy/Move](copy-move.md) - 拷贝/移动构造
diff --git a/docs/api/containers/hashmap/operator-subscript.md b/docs/api/containers/hashmap/operator-subscript.md
new file mode 100644
index 0000000..6f77157
--- /dev/null
+++ b/docs/api/containers/hashmap/operator-subscript.md
@@ -0,0 +1,33 @@
+# HashMap::operator[]
+
+```cpp
+Value& operator[](const Key& key);
+```
+
+按下标访问键对应的值。如果键不存在,则插入一个默认构造的值并返回引用。
+
+**参数:**
+- `key` - 要访问的键
+
+**返回:** 对应值的引用。如果键不存在,则返回一个默认构造的 `Value` 的引用。
+
+**复杂度:** O(1) 平均,最坏 O(n)(发生 rehash 时)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+
+map[1] = "one"; // 插入键 1,值 "one"
+map[2] = "two"; // 插入键 2,值 "two"
+
+std::string& value = map[1]; // 获取键 1 对应的值,结果为 "one"
+
+map[3]; // 插入键 3,值为 std::string 的默认构造值
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Find](find.md) - 查找键对应的值(不插入)
+- [Insert](insert.md) - 插入键值对(不覆盖已存在的键)
diff --git a/docs/api/containers/hashmap/setallocator.md b/docs/api/containers/hashmap/setallocator.md
new file mode 100644
index 0000000..b272bfd
--- /dev/null
+++ b/docs/api/containers/hashmap/setallocator.md
@@ -0,0 +1,28 @@
+# HashMap::SetAllocator
+
+```cpp
+void SetAllocator(Memory::IAllocator* allocator);
+```
+
+设置哈希表的内存分配器。
+
+**参数:**
+- `allocator` - 内存分配器指针,可以为 `nullptr`(使用默认分配器)
+
+**返回:** 无
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+
+// 设置自定义分配器(如果使用内存分配器接口)
+// map.SetAllocator(customAllocator);
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
+- [Memory 模块](../../memory/memory.md) - 内存分配器
diff --git a/docs/api/containers/hashmap/size.md b/docs/api/containers/hashmap/size.md
new file mode 100644
index 0000000..40b40be
--- /dev/null
+++ b/docs/api/containers/hashmap/size.md
@@ -0,0 +1,35 @@
+# HashMap::Size / Empty
+
+```cpp
+size_t Size() const;
+bool Empty() const;
+```
+
+获取哈希表的元素数量或判断是否为空。
+
+**参数:** 无
+
+**返回:**
+- `Size()` - 返回元素数量
+- `Empty()` - 容器为空返回 `true`,否则返回 `false`
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Containers::HashMap map;
+
+std::cout << "Empty: " << (map.Empty() ? "yes" : "no") << std::endl; // 输出 "yes"
+std::cout << "Size: " << map.Size() << std::endl; // 输出 0
+
+map.Insert(1, "one");
+map.Insert(2, "two");
+
+std::cout << "Empty: " << (map.Empty() ? "yes" : "no") << std::endl; // 输出 "no"
+std::cout << "Size: " << map.Size() << std::endl; // 输出 2
+```
+
+## 相关文档
+
+- [HashMap 总览](hashmap.md) - 返回类总览
diff --git a/docs/api/containers/string/clear.md b/docs/api/containers/string/clear.md
new file mode 100644
index 0000000..af9c064
--- /dev/null
+++ b/docs/api/containers/string/clear.md
@@ -0,0 +1,39 @@
+# String::Clear
+
+```cpp
+void Clear();
+```
+
+清空字符串内容,将长度设为 0,但不释放已分配的内存。
+
+**参数:** 无
+
+**返回:** 无
+
+**复杂度:** O(1)
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World");
+ std::cout << "Before clear - Length: " << s.Length()
+ << ", Capacity: " << s.Capacity() << std::endl;
+ // 输出: Before clear - Length: 11, Capacity: 12
+
+ s.Clear();
+ std::cout << "After clear - Length: " << s.Length()
+ << ", Capacity: " << s.Capacity() << std::endl;
+ // 输出: After clear - Length: 0, Capacity: 12
+ std::cout << "Empty: " << s.Empty() << std::endl; // 输出: Empty: 1
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [Reserve / Resize](reserve-resize.md) - 内存管理
diff --git a/docs/api/containers/string/constructor.md b/docs/api/containers/string/constructor.md
new file mode 100644
index 0000000..f1967eb
--- /dev/null
+++ b/docs/api/containers/string/constructor.md
@@ -0,0 +1,48 @@
+# String::String
+
+```cpp
+String();
+String(const char* str);
+String(const char* str, SizeType len);
+String(const String& other);
+String(String&& other) noexcept;
+```
+
+构造 String 对象。提供多种构造方式以适应不同的使用场景。
+
+**参数:**
+- `str` - 以 null 结尾的 C 字符串
+- `len` - 要复制的字符数量
+- `other` - 另一个 String 对象(用于拷贝构造或移动构造)
+
+**返回:** 无
+
+**复杂度:**
+- 默认构造:O(1)
+- 从 `const char*` 构造:O(n),其中 n 为字符串长度
+- 拷贝构造:O(n)
+- 移动构造:O(1)
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s1; // 默认构造
+ XCEngine::Containers::String s2("hello"); // 从 C 字符串构造
+ XCEngine::Containers::String s3("world", 3); // 从 C 字符串前 n 个字符构造
+ XCEngine::Containers::String s4(s2); // 拷贝构造
+ XCEngine::Containers::String s5(std::move(s4)); // 移动构造
+
+ std::cout << s2.CStr() << std::endl; // 输出: hello
+ std::cout << s3.CStr() << std::endl; // 输出: wor
+ std::cout << s4.CStr() << std::endl; // 输出: hello
+ std::cout << s5.CStr() << std::endl; // 输出: hello
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/cstr.md b/docs/api/containers/string/cstr.md
new file mode 100644
index 0000000..7072962
--- /dev/null
+++ b/docs/api/containers/string/cstr.md
@@ -0,0 +1,36 @@
+# String::CStr
+
+```cpp
+const char* CStr() const;
+```
+
+返回指向以 null 结尾的 C 字符串的指针。
+
+**参数:** 无
+
+**返回:** 指向内部字符数组的指针,以 null 结尾
+
+**复杂度:** O(1)
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World");
+
+ const char* cstr = s.CStr();
+ std::cout << cstr << std::endl; // 输出: Hello World
+
+ std::cout << "Length: " << std::strlen(cstr) << std::endl; // 输出: Length: 11
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [Length](size.md) - 获取长度
diff --git a/docs/api/containers/string/destructor.md b/docs/api/containers/string/destructor.md
new file mode 100644
index 0000000..49375c9
--- /dev/null
+++ b/docs/api/containers/string/destructor.md
@@ -0,0 +1,31 @@
+# String::~String
+
+```cpp
+~String();
+```
+
+销毁 String 对象,释放所有动态分配的内存。
+
+**参数:** 无
+
+**返回:** 无
+
+**复杂度:** O(1)
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+
+int main() {
+ {
+ XCEngine::Containers::String s("hello");
+ // s 在作用域结束时自动销毁
+ }
+ // 内存已释放
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/ends-with.md b/docs/api/containers/string/ends-with.md
new file mode 100644
index 0000000..aabe335
--- /dev/null
+++ b/docs/api/containers/string/ends-with.md
@@ -0,0 +1,39 @@
+# String::EndsWith
+
+```cpp
+bool EndsWith(const String& suffix) const;
+bool EndsWith(const char* suffix) const;
+```
+
+检查字符串是否以指定的后缀结尾。
+
+**参数:**
+- `suffix` - 要检查的后缀(String 或 const char*)
+
+**返回:** 如果字符串以指定后缀结尾则返回 `true`,否则返回 `false`
+
+**复杂度:** O(n),其中 n 为后缀长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World");
+
+ std::cout << std::boolalpha;
+ std::cout << s.EndsWith("World") << std::endl; // 输出: true
+ std::cout << s.EndsWith(XCEngine::Containers::String("World")) << std::endl; // 输出: true
+ std::cout << s.EndsWith("Hello") << std::endl; // 输出: false
+ std::cout << s.EndsWith("") << std::endl; // 输出: true
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [StartsWith](starts-with.md) - 检查前缀
+- [Find](find.md) - 查找子串
diff --git a/docs/api/containers/string/find.md b/docs/api/containers/string/find.md
new file mode 100644
index 0000000..652e3d8
--- /dev/null
+++ b/docs/api/containers/string/find.md
@@ -0,0 +1,47 @@
+# String::Find
+
+```cpp
+SizeType Find(const char* str, SizeType pos = 0) const;
+```
+
+在字符串中查找子串 `str`,从位置 `pos` 开始搜索。
+
+**参数:**
+- `str` - 要查找的以 null 结尾的 C 字符串
+- `pos` - 开始搜索的位置,默认为 0
+
+**返回:** 子串首次出现的起始位置;如果未找到,返回 `String::npos`
+
+**复杂度:** O(n * m),其中 n 为原字符串长度,m 为要查找的字符串长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World, Hello Universe");
+
+ XCEngine::Containers::String::SizeType pos1 = s.Find("World");
+ std::cout << "Found at: " << pos1 << std::endl; // 输出: Found at: 6
+
+ XCEngine::Containers::String::SizeType pos2 = s.Find("Hello", 0);
+ std::cout << "First 'Hello' at: " << pos2 << std::endl; // 输出: First 'Hello' at: 0
+
+ XCEngine::Containers::String::SizeType pos3 = s.Find("Hello", 7);
+ std::cout << "Second 'Hello' at: " << pos3 << std::endl; // 输出: Second 'Hello' at: 13
+
+ XCEngine::Containers::String::SizeType pos4 = s.Find("NotFound");
+ if (pos4 == XCEngine::Containers::String::npos) {
+ std::cout << "Not found" << std::endl; // 输出: Not found
+ }
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [StartsWith](starts-with.md) - 检查前缀
+- [EndsWith](ends-with.md) - 检查后缀
diff --git a/docs/api/containers/string/operator-assign.md b/docs/api/containers/string/operator-assign.md
new file mode 100644
index 0000000..e6bd49a
--- /dev/null
+++ b/docs/api/containers/string/operator-assign.md
@@ -0,0 +1,47 @@
+# String::operator=
+
+```cpp
+String& operator=(const String& other);
+String& operator=(String&& other) noexcept;
+String& operator=(const char* str);
+```
+
+将新的值赋给 String 对象,替换原有的内容。
+
+**参数:**
+- `other` - 另一个 String 对象(拷贝赋值或移动赋值)
+- `str` - 以 null 结尾的 C 字符串
+
+**返回:** `*this`,支持链式调用
+
+**复杂度:**
+- 拷贝赋值:O(n),n 为 other 的长度
+- 移动赋值:O(1)
+- 从 `const char*` 赋值:O(n),n 为 str 的长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s1;
+ XCEngine::Containers::String s2("hello");
+
+ s1 = s2; // 拷贝赋值
+ std::cout << s1.CStr() << std::endl; // 输出: hello
+
+ s1 = "world"; // 从 const char* 赋值
+ std::cout << s1.CStr() << std::endl; // 输出: world
+
+ XCEngine::Containers::String s3("moved");
+ s1 = std::move(s3); // 移动赋值
+ std::cout << s1.CStr() << std::endl; // 输出: moved
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/operator-equal.md b/docs/api/containers/string/operator-equal.md
new file mode 100644
index 0000000..5d998d5
--- /dev/null
+++ b/docs/api/containers/string/operator-equal.md
@@ -0,0 +1,43 @@
+# operator== / operator!=
+
+```cpp
+inline bool operator==(const String& lhs, const String& rhs);
+inline bool operator!=(const String& lhs, const String& rhs);
+```
+
+判断两个字符串是否相等或不相等。
+
+**operator==:** 比较两个字符串的长度是否相等,以及内容是否相同。
+
+**operator!=:** 相当于 `!(lhs == rhs)`。
+
+**参数:**
+- `lhs` - 左侧字符串
+- `rhs` - 右侧字符串
+
+**返回:** 布尔值,表示比较结果
+
+**复杂度:** O(n),其中 n 为字符串长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s1("Hello");
+ XCEngine::Containers::String s2("Hello");
+ XCEngine::Containers::String s3("World");
+
+ std::cout << std::boolalpha;
+ std::cout << (s1 == s2) << std::endl; // 输出: true
+ std::cout << (s1 == s3) << std::endl; // 输出: false
+ std::cout << (s1 != s3) << std::endl; // 输出: true
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/operator-plus-assign.md b/docs/api/containers/string/operator-plus-assign.md
new file mode 100644
index 0000000..53c3377
--- /dev/null
+++ b/docs/api/containers/string/operator-plus-assign.md
@@ -0,0 +1,43 @@
+# String::operator+=
+
+```cpp
+String& operator+=(const String& other);
+String& operator+=(const char* str);
+String& operator+=(char c);
+```
+
+将指定的内容追加到当前 String 的末尾。
+
+**参数:**
+- `other` - 要追加的 String 对象
+- `str` - 要追加的以 null 结尾的 C 字符串
+- `c` - 要追加的单个字符
+
+**返回:** `*this`,支持链式调用
+
+**复杂度:** O(n),其中 n 为被追加内容的长度。可能会触发重新分配,但均摊复杂度为 O(1)。
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello");
+
+ s += XCEngine::Containers::String(" World"); // 追加 String
+ std::cout << s.CStr() << std::endl; // 输出: Hello World
+
+ s += "!"; // 追加 const char*
+ std::cout << s.CStr() << std::endl; // 输出: Hello World!
+
+ s += '?'; // 追加 char
+ std::cout << s.CStr() << std::endl; // 输出: Hello World!?
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/operator-plus.md b/docs/api/containers/string/operator-plus.md
new file mode 100644
index 0000000..8e261ef
--- /dev/null
+++ b/docs/api/containers/string/operator-plus.md
@@ -0,0 +1,39 @@
+# operator+
+
+```cpp
+inline String operator+(const String& lhs, const String& rhs);
+```
+
+将两个 String 对象连接,返回一个新的 String 对象。
+
+**参数:**
+- `lhs` - 左侧的 String 对象
+- `rhs` - 右侧的 String 对象
+
+**返回:** 新的 String 对象,内容为 lhs 和 rhs 的拼接
+
+**复杂度:** O(n + m),其中 n 和 m 分别为 lhs 和 rhs 的长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s1("Hello");
+ XCEngine::Containers::String s2(" World");
+ XCEngine::Containers::String s3 = s1 + s2;
+
+ std::cout << s3.CStr() << std::endl; // 输出: Hello World
+
+ XCEngine::Containers::String s4 = XCEngine::Containers::String("Foo") + "Bar";
+ std::cout << s4.CStr() << std::endl; // 输出: FooBar
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [operator+=](operator-plus-assign.md) - 追加操作
diff --git a/docs/api/containers/string/operator-subscript.md b/docs/api/containers/string/operator-subscript.md
new file mode 100644
index 0000000..bb01021
--- /dev/null
+++ b/docs/api/containers/string/operator-subscript.md
@@ -0,0 +1,51 @@
+# String::operator[]
+
+```cpp
+char& operator[](SizeType index);
+const char& operator[](SizeType index) const;
+```
+
+通过索引访问字符串中的字符。
+
+**参数:**
+- `index` - 要访问的字符位置(从 0 开始)
+
+**返回:** 位置 `index` 处字符的引用(可写或只读)
+
+**复杂度:** O(1)
+
+**注意:** 不进行边界检查。调用者需确保 `index < Length()`。
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello");
+
+ // 只读访问
+ for (XCEngine::Containers::String::SizeType i = 0; i < s.Length(); ++i) {
+ std::cout << s[i];
+ }
+ std::cout << std::endl; // 输出: Hello
+
+ // 可写访问
+ s[0] = 'J';
+ s[1] = 'a';
+ s[4] = '!';
+ std::cout << s.CStr() << std::endl; // 输出: Jallo!
+
+ // const 版本
+ const XCEngine::Containers::String& cs = s;
+ char first = cs[0];
+ std::cout << "First char: " << first << std::endl; // 输出: First char: J
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [Length](size.md) - 获取长度
diff --git a/docs/api/containers/string/reserve-resize.md b/docs/api/containers/string/reserve-resize.md
new file mode 100644
index 0000000..fb2a87c
--- /dev/null
+++ b/docs/api/containers/string/reserve-resize.md
@@ -0,0 +1,51 @@
+# String::Reserve / Resize
+
+```cpp
+void Reserve(SizeType capacity);
+void Resize(SizeType newSize);
+void Resize(SizeType newSize, char fillChar);
+```
+
+管理字符串的内存和大小。
+
+**参数:**
+- `capacity` - 要预留的最小容量
+- `newSize` - 新的字符串长度
+- `fillChar` - 当扩展字符串时用于填充新增位置的字符,默认为 '\0'
+
+**返回:** 无
+
+**复杂度:**
+- `Reserve`:最坏 O(n),仅在需要扩展容量时复制数据
+- `Resize`:O(n),当 newSize > Length 时可能需要扩展
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hi");
+
+ // Reserve - 预分配内存
+ s.Reserve(100);
+ std::cout << "After Reserve(100), Capacity: " << s.Capacity() << std::endl;
+ // 输出: After Reserve(100), Capacity: 100
+
+ // Resize - 缩短字符串
+ s.Resize(1);
+ std::cout << "After Resize(1): " << s.CStr() << std::endl; // 输出: H
+
+ // Resize - 扩展字符串,用 'X' 填充
+ s.Resize(5, 'X');
+ std::cout << "After Resize(5, 'X'): " << s.CStr() << std::endl; // 输出: HXXXX
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [Length / Capacity](size.md) - 获取长度和容量
+- [Clear](clear.md) - 清空字符串
diff --git a/docs/api/containers/string/size.md b/docs/api/containers/string/size.md
new file mode 100644
index 0000000..9084722
--- /dev/null
+++ b/docs/api/containers/string/size.md
@@ -0,0 +1,44 @@
+# String::Length / Capacity / Empty
+
+```cpp
+SizeType Length() const;
+SizeType Capacity() const;
+bool Empty() const;
+```
+
+获取字符串的长度、容量和判空状态。
+
+**参数:** 无
+
+**返回:**
+- `Length()` - 返回字符串的字符数(不包括终止 null 字符)
+- `Capacity()` - 返回已分配的存储容量
+- `Empty()` - 如果字符串为空则返回 `true`
+
+**复杂度:** 均为 O(1)
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s1;
+ std::cout << "Empty: " << s1.Empty() << std::endl; // 输出: Empty: 1
+
+ XCEngine::Containers::String s2("Hello");
+ std::cout << "Length: " << s2.Length() << std::endl; // 输出: Length: 5
+ std::cout << "Capacity: " << s2.Capacity() << std::endl; // 输出: Capacity: 6 或更大
+
+ s2.Reserve(100);
+ std::cout << "After Reserve(100), Capacity: " << s2.Capacity() << std::endl; // 输出: 100
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [CStr](cstr.md) - 获取 C 字符串
+- [Reserve / Resize](reserve-resize.md) - 内存管理
diff --git a/docs/api/containers/string/starts-with.md b/docs/api/containers/string/starts-with.md
new file mode 100644
index 0000000..1ee0447
--- /dev/null
+++ b/docs/api/containers/string/starts-with.md
@@ -0,0 +1,39 @@
+# String::StartsWith
+
+```cpp
+bool StartsWith(const String& prefix) const;
+bool StartsWith(const char* prefix) const;
+```
+
+检查字符串是否以指定的前缀开头。
+
+**参数:**
+- `prefix` - 要检查的前缀(String 或 const char*)
+
+**返回:** 如果字符串以指定前缀开头则返回 `true`,否则返回 `false`
+
+**复杂度:** O(n),其中 n 为前缀长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World");
+
+ std::cout << std::boolalpha;
+ std::cout << s.StartsWith("Hello") << std::endl; // 输出: true
+ std::cout << s.StartsWith(XCEngine::Containers::String("Hello")) << std::endl; // 输出: true
+ std::cout << s.StartsWith("World") << std::endl; // 输出: false
+ std::cout << s.StartsWith("") << std::endl; // 输出: true
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
+- [EndsWith](ends-with.md) - 检查后缀
+- [Find](find.md) - 查找子串
diff --git a/docs/api/containers/string/string.md b/docs/api/containers/string/string.md
new file mode 100644
index 0000000..0f425be
--- /dev/null
+++ b/docs/api/containers/string/string.md
@@ -0,0 +1,105 @@
+# String
+
+**命名空间**: `XCEngine::Containers`
+
+**类型**: `class`
+
+**描述**: 动态字符串类,提供 UTF-8 编码的字符串操作。
+
+## 概述
+
+`String` 是一个自定义动态字符串类,提供常见的字符串操作功能,支持拷贝构造、移动构造和多种字符串操作方法。
+
+## 类型别名
+
+| 别名 | 类型 | 描述 |
+|------|------|------|
+| `SizeType` | `size_t` | 大小类型 |
+
+## 常量
+
+| 常量 | 值 | 描述 |
+|------|-----|------|
+| `static constexpr SizeType npos` | `static_cast(-1)` | 无效位置标识 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [Constructor](constructor.md) | 构造字符串实例 |
+| [Destructor](destructor.md) | 析构函数 |
+| [operator=](operator-assign.md) | 赋值运算符 |
+| [operator+=](operator-plus-assign.md) | 追加字符串/字符 |
+| [operator+](../string/operator-plus.md) | 字符串连接 |
+| [operator==](../string/operator-equal.md) | 判断两个字符串是否相等 |
+| [operator!=](../string/operator-equal.md) | 判断两个字符串是否不相等 |
+| [Substring](substring.md) | 获取子串 |
+| [Trim](trim.md) | 去除首尾空白 |
+| [ToLower/ToUpper](to-lower-upper.md) | 大小写转换 |
+| [Find](find.md) | 查找子串位置 |
+| [StartsWith](starts-with.md) | 检查前缀 |
+| [EndsWith](ends-with.md) | 检查后缀 |
+| [CStr](cstr.md) | 获取 C 字符串指针 |
+| [Length/Capacity/Empty](size.md) | 获取尺寸信息 |
+| [operator[]](operator-subscript.md) | 下标访问 |
+| [Clear](clear.md) | 清空字符串 |
+| [Reserve/Resize](reserve-resize.md) | 预留/调整容量 |
+
+## std::hash 特化
+
+```cpp
+namespace std {
+ template<>
+ struct hash {
+ size_t operator()(const XCEngine::Containers::String& str) const noexcept;
+ };
+}
+```
+
+提供了 `std::hash` 特化,使 `String` 可以作为 unordered_map 或 unordered_set 的键使用。
+
+**实现算法:** DJB hash (Daniel J. Bernstein hash)
+
+**算法细节:**
+- 初始值:5381
+- 对每个字符:`hash = hash * 33 + c`(等价于 `(hash << 5) + hash + c`)
+
+**示例:**
+```cpp
+#include
+#include
+
+int main() {
+ std::unordered_map map;
+ map["key1"] = 100;
+ map["key2"] = 200;
+ return 0;
+}
+```
+
+## 使用示例
+
+```cpp
+#include
+
+// 基本用法
+Containers::String str = "Hello";
+str += ", World!";
+
+// 字符串操作
+Containers::String sub = str.Substring(0, 5); // "Hello"
+bool hasPrefix = str.StartsWith("Hello");
+bool hasSuffix = str.EndsWith("!");
+
+// 查找
+SizeType pos = str.Find("World"); // 返回 7
+
+// 转换
+Containers::String upper = str.ToUpper();
+Containers::String lower = str.ToLower();
+```
+
+## 相关文档
+
+- [Array](../array/array.md) - 动态数组
+- [HashMap](../hashmap/hashmap.md) - 哈希表
diff --git a/docs/api/containers/string/substring.md b/docs/api/containers/string/substring.md
new file mode 100644
index 0000000..9b479eb
--- /dev/null
+++ b/docs/api/containers/string/substring.md
@@ -0,0 +1,43 @@
+# String::Substring
+
+```cpp
+String Substring(SizeType pos, SizeType len = npos) const;
+```
+
+返回从位置 `pos` 开始、长度为 `len` 的子字符串。如果 `len` 省略或为 `npos`,则返回从 `pos` 到字符串末尾的所有字符。
+
+**参数:**
+- `pos` - 子字符串的起始位置(从 0 开始)
+- `len` - 子字符串的长度,默认为 `npos`(即到字符串末尾)
+
+**返回:** 新的 String 对象,包含指定的子字符串
+
+**复杂度:** O(n),其中 n 为子字符串的长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World");
+
+ XCEngine::Containers::String sub1 = s.Substring(6); // 从位置6到末尾
+ std::cout << sub1.CStr() << std::endl; // 输出: World
+
+ XCEngine::Containers::String sub2 = s.Substring(6, 5); // 从位置6开始,长度5
+ std::cout << sub2.CStr() << std::endl; // 输出: World
+
+ XCEngine::Containers::String sub3 = s.Substring(0, 5); // 从位置0开始,长度5
+ std::cout << sub3.CStr() << std::endl; // 输出: Hello
+
+ XCEngine::Containers::String sub4 = s.Substring(6, 100); // len超过剩余长度,自动截断
+ std::cout << sub4.CStr() << std::endl; // 输出: World
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/to-lower-upper.md b/docs/api/containers/string/to-lower-upper.md
new file mode 100644
index 0000000..8ad2d58
--- /dev/null
+++ b/docs/api/containers/string/to-lower-upper.md
@@ -0,0 +1,36 @@
+# String::ToLower / ToUpper
+
+```cpp
+String ToLower() const;
+String ToUpper() const;
+```
+
+将字符串转换为小写/大写形式,返回一个新的 String 对象,原字符串不变。
+
+**参数:** 无
+
+**返回:** 转换后的新 String 对象
+
+**复杂度:** O(n),其中 n 为字符串长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s("Hello World 123");
+
+ XCEngine::Containers::String lower = s.ToLower();
+ std::cout << lower.CStr() << std::endl; // 输出: hello world 123
+
+ XCEngine::Containers::String upper = s.ToUpper();
+ std::cout << upper.CStr() << std::endl; // 输出: HELLO WORLD 123
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/containers/string/trim.md b/docs/api/containers/string/trim.md
new file mode 100644
index 0000000..21a1433
--- /dev/null
+++ b/docs/api/containers/string/trim.md
@@ -0,0 +1,35 @@
+# String::Trim
+
+```cpp
+String Trim() const;
+```
+
+移除字符串两端的空白字符(空格、制表符、换行符、回车符),返回一个新的 String 对象,原字符串不变。
+
+**参数:** 无
+
+**返回:** 去除两端空白后的新 String 对象
+
+**复杂度:** O(n),其中 n 为字符串长度
+
+**示例:**
+```cpp
+#include "XCEngine/Containers/String.h"
+#include
+
+int main() {
+ XCEngine::Containers::String s(" Hello World ");
+
+ XCEngine::Containers::String trimmed = s.Trim();
+ std::cout << "\"" << trimmed.CStr() << "\"" << std::endl; // 输出: "Hello World"
+
+ XCEngine::Containers::String s2("\t\n test \t\n");
+ std::cout << "\"" << s2.Trim().CStr() << "\"" << std::endl; // 输出: "test" (空格、制表符、换行、回车被移除)
+
+ return 0;
+}
+```
+
+## 相关文档
+
+- [String 总览](string.md) - 返回类总览
diff --git a/docs/api/core/core.md b/docs/api/core/core.md
new file mode 100644
index 0000000..03239b3
--- /dev/null
+++ b/docs/api/core/core.md
@@ -0,0 +1,97 @@
+# Core 模块概览
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `module`
+
+**描述**: XCEngine 的核心基础模块,提供类型别名、智能指针、事件系统等基础功能。
+
+## 概述
+
+Core 模块包含了引擎所需的基础类型和工具,是其他所有模块的依赖基础。
+
+## 模块内容
+
+### 类型
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [Types](types/types.md) | `Types.h` | 类型别名定义 |
+
+### 智能指针
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [SmartPtr](smartptr/smartptr.md) | `SmartPtr.h` | 智能指针别名和工厂函数 |
+| [RefCounted](refcounted/refcounted.md) | `RefCounted.h` | 引用计数基类 |
+
+### 事件系统
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [Event](event/event.md) | `Event.h` | 事件系统模板 |
+
+### 文件操作
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [FileWriter](filewriter/filewriter.md) | `FileWriter.h` | 文件写入工具 |
+
+## 类型别名
+
+```cpp
+using int8 = int8_t;
+using int16 = int16_t;
+using int32 = int32_t;
+using int64 = int64_t;
+using uint8 = uint8_t;
+using uint16 = uint16_t;
+using uint32 = uint32_t;
+using uint64 = uint64_t;
+using byte = uint8_t;
+```
+
+## 智能指针别名
+
+```cpp
+template
+using Ref = std::shared_ptr;
+
+template
+using UniqueRef = std::unique_ptr;
+
+template
+Ref MakeRef(Args&&... args);
+
+template
+UniqueRef MakeUnique(Args&&... args);
+```
+
+## 使用示例
+
+```cpp
+#include
+#include
+
+using namespace XCEngine::Core;
+
+// 使用类型别名
+uint32 value = 100;
+byte data[4];
+
+// 使用智能指针
+auto ref = MakeRef();
+auto unique = MakeUnique();
+
+// 使用事件系统
+Event myEvent;
+myEvent.Subscribe([](int a, float b) {
+ printf("Event: %d, %f\n", a, b);
+});
+myEvent.Invoke(42, 3.14f);
+```
+
+## 相关文档
+
+- [Containers 模块](../containers/containers.md) - 容器类型
+- [Memory 模块](../memory/memory.md) - 内存管理
diff --git a/docs/api/core/event/Clear.md b/docs/api/core/event/Clear.md
new file mode 100644
index 0000000..3d49bf9
--- /dev/null
+++ b/docs/api/core/event/Clear.md
@@ -0,0 +1,39 @@
+# Event::Clear
+
+```cpp
+void Clear();
+```
+
+清空所有订阅。
+
+**描述**
+
+移除所有已订阅的回调,清空事件。线程安全。
+
+**复杂度:** O(n) 其中 n 为订阅数量
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+Event event;
+
+// 订阅多个回调
+event.Subscribe([](int v) { });
+event.Subscribe([](int v) { });
+event.Subscribe([](int v) { });
+
+// 清空所有订阅
+event.Clear();
+
+// 触发(无回调被执行)
+event.Invoke(42);
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [Unsubscribe](Unsubscribe.md) - 退订单个事件
diff --git a/docs/api/core/event/Invoke.md b/docs/api/core/event/Invoke.md
new file mode 100644
index 0000000..1cd708a
--- /dev/null
+++ b/docs/api/core/event/Invoke.md
@@ -0,0 +1,45 @@
+# Event::Invoke
+
+```cpp
+void Invoke(Args... args);
+```
+
+调用所有订阅的回调。
+
+**描述**
+
+依次调用所有已订阅的回调函数。在调用前会自动处理待退订的回调。回调是在锁外执行的,因此可以在回调中安全地进行订阅/退订操作。线程安全。
+
+**参数:**
+- `args` - 传递给回调的参数
+
+**复杂度:** O(n) 其中 n 为订阅数量
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+// 无参数事件
+Event<> frameEndEvent;
+frameEndEvent.Subscribe([]() {
+ printf("Frame ended\n");
+});
+
+// 带参数事件
+Event playerDiedEvent;
+playerDiedEvent.Subscribe([](int playerId, const char* reason) {
+ printf("Player %d died: %s\n", playerId, reason);
+});
+
+// 触发事件
+frameEndEvent.Invoke();
+playerDiedEvent.Invoke(1, "fell off a cliff");
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [Subscribe](Subscribe.md) - 订阅事件
diff --git a/docs/api/core/event/ProcessUnsubscribes.md b/docs/api/core/event/ProcessUnsubscribes.md
new file mode 100644
index 0000000..32bcbf7
--- /dev/null
+++ b/docs/api/core/event/ProcessUnsubscribes.md
@@ -0,0 +1,39 @@
+# Event::ProcessUnsubscribes
+
+```cpp
+void ProcessUnsubscribes();
+```
+
+处理积压的退订请求。
+
+**描述**
+
+手动处理待退订的回调,将其从订阅列表中移除。通常不需要手动调用,`Invoke` 会自动处理退订。但在某些场景下可能需要主动调用。
+
+**复杂度:** O(n) 其中 n 为待退订数量
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+Event event;
+
+// 订阅
+uint64_t id = event.Subscribe([](int value) { });
+
+// 退订请求入队
+event.Unsubscribe(id);
+
+// 主动处理退订
+event.ProcessUnsubscribes();
+
+// 此时事件列表中已无该回调
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [Unsubscribe](Unsubscribe.md) - 退订事件
diff --git a/docs/api/core/event/Subscribe.md b/docs/api/core/event/Subscribe.md
new file mode 100644
index 0000000..6f961f5
--- /dev/null
+++ b/docs/api/core/event/Subscribe.md
@@ -0,0 +1,50 @@
+# Event::Subscribe
+
+```cpp
+uint64_t Subscribe(Callback callback);
+```
+
+订阅事件回调。
+
+**描述**
+
+将回调函数添加到事件订阅列表中,并返回一个唯一的订阅 ID。该 ID 可用于后续退订。线程安全,可在任意线程调用。
+
+**参数:**
+- `callback` - 要订阅的回调函数,类型为 `std::function`
+
+**返回:** `uint64_t` - 订阅 ID,用于退订
+
+**复杂度:** O(1) amortized
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+// 定义事件
+Event damageEvent;
+
+// 订阅多个回调
+uint64_t id1 = damageEvent.Subscribe([](int damage, float time) {
+ printf("Damage taken: %d at time %f\n", damage, time);
+});
+
+uint64_t id2 = damageEvent.Subscribe([](int damage, float time) {
+ // 记录伤害日志
+});
+
+// 使用 lambda 表达式
+auto callback = [](int damage, float time) {
+ // 处理伤害
+};
+uint64_t id3 = damageEvent.Subscribe(callback);
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [Unsubscribe](Unsubscribe.md) - 退订事件
+- [Invoke](Invoke.md) - 触发事件
diff --git a/docs/api/core/event/Unsubscribe.md b/docs/api/core/event/Unsubscribe.md
new file mode 100644
index 0000000..821b4de
--- /dev/null
+++ b/docs/api/core/event/Unsubscribe.md
@@ -0,0 +1,43 @@
+# Event::Unsubscribe
+
+```cpp
+void Unsubscribe(uint64_t id);
+```
+
+退订事件。
+
+**描述**
+
+将指定 ID 的回调从订阅列表中移除。退订是延迟生效的,在调用 `Invoke` 时会一并处理待退订的回调。线程安全,可在任意线程调用。
+
+**参数:**
+- `id` - 订阅时返回的 ID
+
+**复杂度:** O(n) 在 Invoke 时处理
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+Event someEvent;
+
+// 订阅
+uint64_t id = someEvent.Subscribe([](int value) {
+ printf("Value: %d\n", value);
+});
+
+// 退订
+someEvent.Unsubscribe(id);
+
+// 触发(已退订的回调不会被调用)
+someEvent.Invoke(42);
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [Subscribe](Subscribe.md) - 订阅事件
+- [ProcessUnsubscribes](ProcessUnsubscribes.md) - 手动处理退订
diff --git a/docs/api/core/event/begin.md b/docs/api/core/event/begin.md
new file mode 100644
index 0000000..4337dcc
--- /dev/null
+++ b/docs/api/core/event/begin.md
@@ -0,0 +1,37 @@
+# Event::begin
+
+```cpp
+Iterator begin();
+```
+
+获取开始迭代器。
+
+**描述**
+
+返回订阅列表的开始迭代器,用于范围for循环遍历所有订阅的回调。
+
+**返回:** `Iterator` - 指向第一个监听器的迭代器(等价于 `std::vector::iterator`)
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+Event event;
+event.Subscribe([](int v) { printf("Callback 1: %d\n", v); });
+event.Subscribe([](int v) { printf("Callback 2: %d\n", v); });
+
+// 遍历所有订阅
+for (auto& [id, callback] : event) {
+ callback(100);
+}
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [end](end.md) - 获取结束迭代器
diff --git a/docs/api/core/event/end.md b/docs/api/core/event/end.md
new file mode 100644
index 0000000..cbbf5d3
--- /dev/null
+++ b/docs/api/core/event/end.md
@@ -0,0 +1,36 @@
+# Event::end
+
+```cpp
+Iterator end();
+```
+
+获取结束迭代器。
+
+**描述**
+
+返回订阅列表的结束迭代器,用于范围for循环遍历所有订阅的回调。
+
+**返回:** `Iterator` - 指向末尾的迭代器(等价于 `std::vector::iterator`)
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+Event event;
+event.Subscribe([](int v) { printf("Callback: %d\n", v); });
+
+// 遍历所有订阅
+for (auto& [id, callback] : event) {
+ callback(42);
+}
+```
+
+## 相关文档
+
+- [Event 总览](event.md) - 返回类总览
+- [begin](begin.md) - 获取开始迭代器
diff --git a/docs/api/core/event/event.md b/docs/api/core/event/event.md
new file mode 100644
index 0000000..ce4575c
--- /dev/null
+++ b/docs/api/core/event/event.md
@@ -0,0 +1,69 @@
+# Event
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `class` (template)
+
+**描述**: 事件系统模板类,提供类型安全的多订阅者事件/委托系统。
+
+## 概述
+
+`Event` 是一个类型安全的事件发布-订阅系统。它支持多个回调订阅、退订和线程安全的调用。非常适合用于游戏引擎中的事件驱动通信。
+
+## 模板参数
+
+| 参数 | 描述 |
+|------|------|
+| `Args...` | 事件回调的参数类型 |
+
+## 类型别名
+
+| 别名 | 类型 | 描述 |
+|------|------|------|
+| `Callback` | `std::function` | 回调函数类型 |
+| `Listener` | `std::pair` | 监听器条目 |
+| `Iterator` | `std::vector::iterator` | 迭代器类型 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [`Subscribe`](Subscribe.md) | 订阅事件回调,返回订阅 ID |
+| [`Unsubscribe`](Unsubscribe.md) | 退订事件(延迟生效) |
+| [`ProcessUnsubscribes`](ProcessUnsubscribes.md) | 处理积压的退订请求 |
+| [`Clear`](Clear.md) | 清空所有订阅 |
+| [`Invoke`](Invoke.md) | 调用所有订阅的回调 |
+| [`begin`](begin.md) | 获取开始迭代器 |
+| [`end`](end.md) | 获取结束迭代器 |
+
+## 使用示例
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+// 定义事件(无参数)
+Event<> frameStartEvent;
+
+// 定义事件(带参数)
+Event damageEvent;
+
+// 订阅
+uint64_t id = damageEvent.Subscribe([](int damage, float time) {
+ printf("Damage: %d at time %f\n", damage, time);
+});
+
+// 触发事件
+damageEvent.Invoke(100, 3.14f);
+
+// 退订
+damageEvent.Unsubscribe(id);
+
+// 清空
+frameStartEvent.Clear();
+```
+
+## 相关文档
+
+- [Core 模块总览](../core.md) - 返回模块总览
diff --git a/docs/api/core/filewriter/Close.md b/docs/api/core/filewriter/Close.md
new file mode 100644
index 0000000..85350fe
--- /dev/null
+++ b/docs/api/core/filewriter/Close.md
@@ -0,0 +1,40 @@
+# FileWriter::Close
+
+```cpp
+void Close();
+```
+
+关闭文件。
+
+**描述**
+
+关闭当前打开的文件。如果文件未打开,则什么都不做。析构函数会自动调用此方法。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+FileWriter writer;
+
+if (writer.Open("data.txt")) {
+ writer.Write("Some data\n");
+ writer.Flush();
+ writer.Close();
+}
+
+// 文件已关闭,可再次打开其他文件
+if (writer.Open("other.txt")) {
+ writer.Write("New content\n");
+}
+// 析构时自动关闭
+```
+
+## 相关文档
+
+- [FileWriter 总览](filewriter.md) - 返回类总览
+- [Open](Open.md) - 打开文件
diff --git a/docs/api/core/filewriter/Flush.md b/docs/api/core/filewriter/Flush.md
new file mode 100644
index 0000000..e132609
--- /dev/null
+++ b/docs/api/core/filewriter/Flush.md
@@ -0,0 +1,45 @@
+# FileWriter::Flush
+
+```cpp
+bool Flush();
+```
+
+刷新缓冲区。
+
+**描述**
+
+将缓冲区中的数据强制写入磁盘,确保数据持久化。在写入大量数据后应调用此方法以确保数据已保存。
+
+**返回:** `bool` - 是否刷新成功
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+#include
+
+using namespace XCEngine::Core;
+
+FileWriter writer("output.txt");
+if (writer.IsOpen()) {
+ // 写入大量数据
+ for (int i = 0; i < 1000; i++) {
+ writer.Write("Line ");
+ writer.Write(std::to_string(i).c_str());
+ writer.Write("\n");
+ }
+
+ // 刷新确保数据写入磁盘
+ writer.Flush();
+
+ // 数据已安全保存
+ writer.Close();
+}
+```
+
+## 相关文档
+
+- [FileWriter 总览](filewriter.md) - 返回类总览
+- [Write](Write.md) - 写入数据
diff --git a/docs/api/core/filewriter/IsOpen.md b/docs/api/core/filewriter/IsOpen.md
new file mode 100644
index 0000000..6395743
--- /dev/null
+++ b/docs/api/core/filewriter/IsOpen.md
@@ -0,0 +1,43 @@
+# FileWriter::IsOpen
+
+```cpp
+bool IsOpen() const;
+```
+
+检查文件是否已打开。
+
+**描述**
+
+返回文件是否已成功打开并可用于写入。
+
+**返回:** `bool` - 文件是否已打开
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+FileWriter writer1;
+if (writer1.IsOpen()) {
+ // 不会执行
+ writer1.Write("test");
+}
+
+// 打开文件
+FileWriter writer2("output.txt");
+if (writer2.IsOpen()) {
+ printf("File opened successfully\n");
+ writer2.Write("Content");
+} else {
+ printf("Failed to open file\n");
+}
+```
+
+## 相关文档
+
+- [FileWriter 总览](filewriter.md) - 返回类总览
+- [Open](Open.md) - 打开文件
diff --git a/docs/api/core/filewriter/Open.md b/docs/api/core/filewriter/Open.md
new file mode 100644
index 0000000..d572e39
--- /dev/null
+++ b/docs/api/core/filewriter/Open.md
@@ -0,0 +1,53 @@
+# FileWriter::Open
+
+```cpp
+bool Open(const char* filePath, bool append = false);
+```
+
+打开文件。
+
+**描述**
+
+打开指定路径的文件,准备写入。如果之前已打开文件,会先关闭。返回是否成功打开文件。
+
+**参数:**
+- `filePath` - 要打开的文件路径
+- `append` - 是否以追加模式打开,默认为覆盖模式
+
+**返回:** `bool` - 是否成功打开
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+using namespace XCEngine::Core;
+
+FileWriter writer;
+
+// 打开文件(覆盖模式)
+if (writer.Open("output.txt")) {
+ writer.Write("Hello\n");
+ writer.Close();
+}
+
+// 打开文件(追加模式)
+if (writer.Open("log.txt", true)) {
+ writer.Write("Another line\n");
+ writer.Flush();
+}
+
+// 检查是否成功
+FileWriter writer2;
+if (!writer2.Open("/invalid/path/file.txt")) {
+ printf("Failed to open file\n");
+}
+```
+
+## 相关文档
+
+- [FileWriter 总览](filewriter.md) - 返回类总览
+- [Close](Close.md) - 关闭文件
+- [IsOpen](IsOpen.md) - 检查文件状态
diff --git a/docs/api/core/filewriter/Write.md b/docs/api/core/filewriter/Write.md
new file mode 100644
index 0000000..ce47d08
--- /dev/null
+++ b/docs/api/core/filewriter/Write.md
@@ -0,0 +1,48 @@
+# FileWriter::Write
+
+```cpp
+bool Write(const char* data, size_t length);
+bool Write(const Containers::String& str);
+```
+
+写入数据到文件。
+
+**描述**
+
+将数据写入文件。如果文件未打开,操作会失败。
+
+**参数:**
+- `data` - 要写入的字符数据
+- `length` - 要写入的字节数
+- `str` - 要写入的 String 对象
+
+**返回:** `bool` - 是否写入成功
+
+**复杂度:** O(n) 其中 n 为写入的字节数
+
+**示例:**
+
+```cpp
+#include
+#include
+
+using namespace XCEngine::Core;
+
+FileWriter writer("output.txt");
+if (writer.IsOpen()) {
+ // 写入原始字符数组
+ writer.Write("Hello, World!", 13);
+ writer.Write("\n", 1);
+
+ // 写入 String
+ Containers::String message = "This is a test string";
+ writer.Write(message);
+
+ writer.Flush();
+}
+```
+
+## 相关文档
+
+- [FileWriter 总览](filewriter.md) - 返回类总览
+- [Flush](Flush.md) - 刷新缓冲区
diff --git a/docs/api/core/filewriter/filewriter.md b/docs/api/core/filewriter/filewriter.md
new file mode 100644
index 0000000..b1fe6b5
--- /dev/null
+++ b/docs/api/core/filewriter/filewriter.md
@@ -0,0 +1,66 @@
+# FileWriter
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `class`
+
+**描述**: 文件写入工具类,提供简单的文件写入操作封装。
+
+## 概述
+
+`FileWriter` 是一个轻量级的文件写入工具,封装了 `FILE*` 接口,提供便捷的字符串和二进制数据写入功能。它支持追加模式和自动资源管理(RAII)。
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `FileWriter()` | 默认构造(不打开文件) |
+| `FileWriter(const char* filePath, bool append = false)` | 构造并打开文件 |
+| `~FileWriter()` | 析构函数,自动关闭文件 |
+| [`Open`](Open.md) | 打开文件,append=true 时为追加模式 |
+| [`Close`](Close.md) | 关闭文件 |
+| [`IsOpen`](IsOpen.md) | 检查文件是否已打开 |
+| [`Write`](Write.md) | 写入数据 |
+| [`Flush`](Flush.md) | 刷新缓冲区 |
+
+## 使用示例
+
+```cpp
+#include
+#include
+
+using namespace XCEngine::Core;
+
+// 方式1:构造时打开
+FileWriter writer("output.txt", false);
+if (writer.IsOpen()) {
+ writer.Write("Hello, World!\n");
+ writer.Write("Line 2\n");
+ writer.Flush();
+}
+
+// 方式2:先构造再打开
+FileWriter writer2;
+if (writer2.Open("log.txt")) {
+ writer2.Write("Application started\n");
+ writer2.Close();
+}
+
+// 追加模式
+FileWriter appendWriter("log.txt", true);
+if (appendWriter.IsOpen()) {
+ appendWriter.Write("Another log entry\n");
+ appendWriter.Flush();
+}
+
+// 使用 String 写入
+Containers::String content = "Content written from String";
+FileWriter writer3("data.txt");
+writer3.Write(content);
+```
+
+## 相关文档
+
+- [Core 模块总览](../core.md) - 返回模块总览
+- [Logger](../../debug/logger/logger.md) - 日志系统
+- [FileLogSink](../../debug/filelogsink/filelogsink.md) - 文件日志输出
diff --git a/docs/api/core/refcounted/AddRef.md b/docs/api/core/refcounted/AddRef.md
new file mode 100644
index 0000000..8e1972b
--- /dev/null
+++ b/docs/api/core/refcounted/AddRef.md
@@ -0,0 +1,40 @@
+# RefCounted::AddRef
+
+```cpp
+void AddRef();
+```
+
+增加引用计数。
+
+**描述**
+
+原子地增加引用计数。在复制 `RefCounted` 指针或传递引用时调用此方法。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyObject : public RefCounted {
+public:
+ void DoSomething() { /* ... */ }
+};
+
+// 创建对象(构造时 refCount = 1)
+MyObject* obj = new MyObject();
+
+// 手动增加引用
+obj->AddRef(); // refCount = 2
+obj->AddRef(); // refCount = 3
+
+// 需要释放额外的引用
+obj->Release(); // refCount = 2
+obj->Release(); // refCount = 1
+```
+
+## 相关文档
+
+- [RefCounted 总览](refcounted.md) - 返回类总览
+- [Release](Release.md) - 减少引用计数
diff --git a/docs/api/core/refcounted/GetRefCount.md b/docs/api/core/refcounted/GetRefCount.md
new file mode 100644
index 0000000..16c69a0
--- /dev/null
+++ b/docs/api/core/refcounted/GetRefCount.md
@@ -0,0 +1,43 @@
+# RefCounted::GetRefCount
+
+```cpp
+uint32_t GetRefCount() const;
+```
+
+获取当前引用计数。
+
+**描述**
+
+返回当前的引用计数值。由于使用 `std::atomic` 实现,因此是线程安全的。
+
+**返回:** `uint32_t` - 当前引用计数
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyObject : public RefCounted {
+public:
+ void Debug() {
+ printf("RefCount: %u\n", GetRefCount());
+ }
+};
+
+MyObject* obj = new MyObject();
+printf("After create: %u\n", obj->GetRefCount()); // 1
+
+obj->AddRef();
+printf("After AddRef: %u\n", obj->GetRefCount()); // 2
+
+obj->Release();
+printf("After Release: %u\n", obj->GetRefCount()); // 1
+```
+
+## 相关文档
+
+- [RefCounted 总览](refcounted.md) - 返回类总览
+- [AddRef](AddRef.md) - 增加引用计数
+- [Release](Release.md) - 减少引用计数
diff --git a/docs/api/core/refcounted/Release.md b/docs/api/core/refcounted/Release.md
new file mode 100644
index 0000000..a3ac676
--- /dev/null
+++ b/docs/api/core/refcounted/Release.md
@@ -0,0 +1,39 @@
+# RefCounted::Release
+
+```cpp
+void Release();
+```
+
+减少引用计数。
+
+**描述**
+
+原子地减少引用计数。当引用计数归零时,对象会自动 `delete this`。这是实现自动内存管理的关键方法。
+
+**复杂度:** O(1)(归零时为 O(n),n 为对象大小)
+
+**示例:**
+
+```cpp
+#include
+
+class MyObject : public RefCounted {
+public:
+ void DoSomething() { /* ... */ }
+};
+
+// 创建对象(构造时 refCount = 1)
+MyObject* obj = new MyObject();
+
+// 手动增加引用
+obj->AddRef(); // refCount = 2
+
+// 释放引用
+obj->Release(); // refCount = 1
+obj->Release(); // refCount = 0, 对象被自动 delete
+```
+
+## 相关文档
+
+- [RefCounted 总览](refcounted.md) - 返回类总览
+- [AddRef](AddRef.md) - 增加引用计数
diff --git a/docs/api/core/refcounted/refcounted.md b/docs/api/core/refcounted/refcounted.md
new file mode 100644
index 0000000..947bf28
--- /dev/null
+++ b/docs/api/core/refcounted/refcounted.md
@@ -0,0 +1,44 @@
+# RefCounted
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `class`
+
+**描述**: 引用计数基类,提供线程安全的引用计数生命周期管理。
+
+## 概述
+
+`RefCounted` 是一个简单的引用计数基类。当引用计数归零时,对象会自动删除。它提供了 `AddRef` 和 `Release` 方法,线程安全地管理引用计数。
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `RefCounted()` | 构造函数,初始引用计数为 1 |
+| `virtual ~RefCounted()` | 虚析构函数 |
+| [`AddRef`](AddRef.md) | 增加引用计数 |
+| [`Release`](Release.md) | 减少引用计数(归零时自动 delete this) |
+| [`GetRefCount`](GetRefCount.md) | 获取当前引用计数 |
+
+## 使用示例
+
+```cpp
+class MyObject : public RefCounted {
+public:
+ MyObject() { /* ... */ }
+ ~MyObject() { /* ... */ }
+
+ void DoSomething() { /* ... */ }
+};
+
+// 使用
+MyObject* obj = new MyObject(); // refCount = 1
+obj->AddRef(); // refCount = 2
+obj->Release(); // refCount = 1
+obj->Release(); // refCount = 0, 自动 delete
+```
+
+## 相关文档
+
+- [Core 模块总览](../core.md) - 返回模块总览
+- [SmartPtr](../smartptr/smartptr.md) - 智能指针
diff --git a/docs/api/core/smartptr/MakeRef.md b/docs/api/core/smartptr/MakeRef.md
new file mode 100644
index 0000000..a361213
--- /dev/null
+++ b/docs/api/core/smartptr/MakeRef.md
@@ -0,0 +1,51 @@
+# SmartPtr::MakeRef
+
+```cpp
+template
+Ref MakeRef(Args&&... args);
+```
+
+创建共享指针的工厂函数。
+
+**描述**
+
+`MakeRef` 是创建 `Ref` 的工厂函数,使用完美转发将参数传递给 `T` 的构造函数。相比直接使用 `std::make_shared`,代码更简洁。
+
+**模板参数:**
+- `T` - 被创建对象的类型
+- `Args` - 构造函数的参数类型
+
+**参数:**
+- `args` - 转发给 T 构造函数的参数
+
+**返回:** `Ref` - 新创建的共享指针
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyClass {
+public:
+ MyClass(int a, int b) : m_a(a), m_b(b) {}
+ int GetSum() const { return m_a + m_b; }
+private:
+ int m_a, m_b;
+};
+
+// 创建共享指针
+Core::Ref ref = Core::MakeRef(10, 20);
+printf("Sum: %d\n", ref->GetSum());
+
+// 使用 lambda
+Core::Ref> callback = Core::MakeRef>([]() {
+ printf("Callback invoked!\n");
+});
+```
+
+## 相关文档
+
+- [SmartPtr 总览](smartptr.md) - 返回类总览
+- [Ref](Ref.md) - Ref 类型说明
diff --git a/docs/api/core/smartptr/MakeUnique.md b/docs/api/core/smartptr/MakeUnique.md
new file mode 100644
index 0000000..699012e
--- /dev/null
+++ b/docs/api/core/smartptr/MakeUnique.md
@@ -0,0 +1,49 @@
+# SmartPtr::MakeUnique
+
+```cpp
+template
+UniqueRef MakeUnique(Args&&... args);
+```
+
+创建独占指针的工厂函数。
+
+**描述**
+
+`MakeUnique` 是创建 `UniqueRef` 的工厂函数,使用完美转发将参数传递给 `T` 的构造函数。相比直接使用 `std::make_unique`,代码更简洁。
+
+**模板参数:**
+- `T` - 被创建对象的类型
+- `Args` - 构造函数的参数类型
+
+**参数:**
+- `args` - 转发给 T 构造函数的参数
+
+**返回:** `UniqueRef` - 新创建的独占指针
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyClass {
+public:
+ MyClass(int value) : m_value(value) {}
+ int GetValue() const { return m_value; }
+private:
+ int m_value;
+};
+
+// 创建独占指针
+Core::UniqueRef unique = Core::MakeUnique(42);
+printf("Value: %d\n", unique->GetValue());
+
+// 转移所有权
+Core::UniqueRef moved = Core::MakeUnique(100);
+```
+
+## 相关文档
+
+- [SmartPtr 总览](smartptr.md) - 返回类总览
+- [UniqueRef](UniqueRef.md) - UniqueRef 类型说明
diff --git a/docs/api/core/smartptr/Ref.md b/docs/api/core/smartptr/Ref.md
new file mode 100644
index 0000000..1f7721e
--- /dev/null
+++ b/docs/api/core/smartptr/Ref.md
@@ -0,0 +1,40 @@
+# SmartPtr::Ref
+
+```cpp
+template
+using Ref = std::shared_ptr;
+```
+
+共享引用智能指针类型别名。
+
+**描述**
+
+`Ref` 是 `std::shared_ptr` 的类型别名,提供共享所有权的智能指针。多个 `Ref` 可以指向同一个对象,通过引用计数管理生命周期。当最后一个 `Ref` 被销毁时,对象会被自动删除。
+
+**模板参数:**
+- `T` - 被托管对象的类型
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyClass {
+public:
+ void DoSomething() { /* ... */ }
+};
+
+Core::Ref ref1 = Core::MakeRef();
+Core::Ref ref2 = ref1; // 共享所有权
+
+if (ref1) {
+ ref1->DoSomething();
+}
+```
+
+## 相关文档
+
+- [SmartPtr 总览](smartptr.md) - 返回类总览
+- [MakeRef](MakeRef.md) - 创建 Ref 的工厂函数
diff --git a/docs/api/core/smartptr/UniqueRef.md b/docs/api/core/smartptr/UniqueRef.md
new file mode 100644
index 0000000..c25dea4
--- /dev/null
+++ b/docs/api/core/smartptr/UniqueRef.md
@@ -0,0 +1,46 @@
+# SmartPtr::UniqueRef
+
+```cpp
+template
+using UniqueRef = std::unique_ptr;
+```
+
+独占所有权的智能指针类型别名。
+
+**描述**
+
+`UniqueRef` 是 `std::unique_ptr` 的类型别名,提供独占所有权的智能指针。每个对象只能有一个 `UniqueRef` 持有,当 `UniqueRef` 被销毁时,对象会被自动删除。不能复制,只能移动。
+
+**模板参数:**
+- `T` - 被托管对象的类型
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+class MyClass {
+public:
+ void DoSomething() { /* ... */ }
+};
+
+Core::UniqueRef unique = Core::MakeUnique();
+
+if (unique) {
+ unique->DoSomething();
+}
+
+// 自定义删除器
+Core::UniqueRef
+ file(fopen("test.txt", "r"), &fclose);
+
+// 转移所有权
+Core::UniqueRef moved = std::move(unique);
+```
+
+## 相关文档
+
+- [SmartPtr 总览](smartptr.md) - 返回类总览
+- [MakeUnique](MakeUnique.md) - 创建 UniqueRef 的工厂函数
diff --git a/docs/api/core/smartptr/smartptr.md b/docs/api/core/smartptr/smartptr.md
new file mode 100644
index 0000000..f87ee2d
--- /dev/null
+++ b/docs/api/core/smartptr/smartptr.md
@@ -0,0 +1,64 @@
+# SmartPtr
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `header-only`
+
+**描述**: 智能指针类型别名和工厂函数,提供 `std::shared_ptr` 和 `std::unique_ptr` 的简化接口。
+
+## 概述
+
+`Core::SmartPtr` 提供了 `std::shared_ptr` 和 `std::unique_ptr` 的类型别名和工厂函数,使智能指针的使用更加简洁。
+
+## 类型别名
+
+| 别名 | 底层类型 | 描述 |
+|------|----------|------|
+| `Core::Ref` | `std::shared_ptr` | 共享引用智能指针 |
+| `Core::UniqueRef` | `std::unique_ptr` | 独占所有权的智能指针 |
+
+## 工厂函数
+
+| 函数 | 返回值 | 描述 |
+|------|--------|------|
+| `Core::MakeRef(Args&&... args)` | `Ref` | 创建共享指针 |
+| `Core::MakeUnique(Args&&... args)` | `UniqueRef` | 创建独占指针 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [`Ref`](Ref.md) | `std::shared_ptr` 类型别名 |
+| [`UniqueRef`](UniqueRef.md) | `std::unique_ptr` 类型别名 |
+| [`MakeRef`](MakeRef.md) | 创建共享指针的工厂函数 |
+| [`MakeUnique`](MakeUnique.md) | 创建独占指针的工厂函数 |
+
+## 使用示例
+
+```cpp
+#include
+
+// 使用 Ref(共享指针)
+Core::Ref ref = Core::MakeRef(arg1, arg2);
+
+// 使用 UniqueRef(独占指针)
+Core::UniqueRef unique = Core::MakeUnique();
+
+// 传递所有权
+Core::Ref ref2 = ref; // 引用计数 +1
+
+// 检查有效性
+if (ref) {
+ ref->DoSomething();
+}
+
+// 自定义删除器
+Core::UniqueRef
+ file(fopen("test.txt", "r"), &fclose);
+```
+
+## 相关文档
+
+- [Core 模块总览](../core.md) - 返回模块总览
+- [RefCounted](../refcounted/refcounted.md) - 引用计数基类
+- [Types](../types/types.md) - 类型别名
diff --git a/docs/api/core/types/byte.md b/docs/api/core/types/byte.md
new file mode 100644
index 0000000..eff9330
--- /dev/null
+++ b/docs/api/core/types/byte.md
@@ -0,0 +1,30 @@
+# Types::byte
+
+```cpp
+using byte = uint8_t;
+```
+
+字节类型别名,对应 `uint8_t` 类型。
+
+**描述**
+
+`byte` 是 1 字节无符号整数类型,专门用于表示原始字节数据。语义上比 `uint8` 更清晰,适用于二进制数据、内存缓冲区等场景。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::byte header[4] = {0x00, 0x01, 0x02, 0x03};
+Core::byte flags = 0b11001010;
+
+// 内存缓冲区
+Core::byte* buffer = new Core::byte[1024];
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [uint8](uint8.md) - 底层类型
diff --git a/docs/api/core/types/int16.md b/docs/api/core/types/int16.md
new file mode 100644
index 0000000..fc666ed
--- /dev/null
+++ b/docs/api/core/types/int16.md
@@ -0,0 +1,27 @@
+# Types::int16
+
+```cpp
+using int16 = int16_t;
+```
+
+16位有符号整数类型别名,对应 C++ 标准库的 `int16_t` 类型。
+
+**描述**
+
+`int16` 是 16 位(2 字节)有符号整数类型,范围为 -32,768 到 32,767。该类型别名确保跨平台一致性。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::int16 shortValue = -10000;
+Core::int16 maxValue = 32767;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [uint16](uint16.md) - 对应的无符号类型
diff --git a/docs/api/core/types/int32.md b/docs/api/core/types/int32.md
new file mode 100644
index 0000000..9c4aeb3
--- /dev/null
+++ b/docs/api/core/types/int32.md
@@ -0,0 +1,30 @@
+# Types::int32
+
+```cpp
+using int32 = int32_t;
+```
+
+32位有符号整数类型别名,对应 C++ 标准库的 `int32_t` 类型。
+
+**描述**
+
+`int32` 是 32 位(4 字节)有符号整数类型,范围为 -2,147,483,648 到 2,147,483,647。该类型别名确保跨平台一致性,是最常用的整数类型。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::int32 score = 1000000;
+Core::int32 negative = -500000;
+
+// 函数参数类型
+void SetHealth(Core::int32 health);
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [uint32](uint32.md) - 对应的无符号类型
diff --git a/docs/api/core/types/int64.md b/docs/api/core/types/int64.md
new file mode 100644
index 0000000..7d80c40
--- /dev/null
+++ b/docs/api/core/types/int64.md
@@ -0,0 +1,30 @@
+# Types::int64
+
+```cpp
+using int64 = int64_t;
+```
+
+64位有符号整数类型别名,对应 C++ 标准库的 `int64_t` 类型。
+
+**描述**
+
+`int64` 是 64 位(8 字节)有符号整数类型,范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。该类型别名用于需要大范围整数的场景,如时间戳、大文件大小等。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::int64 largeNumber = 9223372036854775807LL;
+Core::int64 fileSize = 1099511627776LL; // 1TB
+
+// 时间戳(毫秒)
+Core::int64 timestamp = 1700000000000LL;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [uint64](uint64.md) - 对应的无符号类型
diff --git a/docs/api/core/types/int8.md b/docs/api/core/types/int8.md
new file mode 100644
index 0000000..348d020
--- /dev/null
+++ b/docs/api/core/types/int8.md
@@ -0,0 +1,28 @@
+# Types::int8
+
+```cpp
+using int8 = int8_t;
+```
+
+8位有符号整数类型别名,对应 C++ 标准库的 `int8_t` 类型。
+
+**描述**
+
+`int8` 是 8 位(1 字节)有符号整数类型,范围为 -128 到 127。该类型别名确保跨平台一致性。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::int8 signedByte = -50;
+Core::int8 maxValue = 127;
+Core::int8 minValue = -128;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [uint8](uint8.md) - 对应的无符号类型
diff --git a/docs/api/core/types/types.md b/docs/api/core/types/types.md
new file mode 100644
index 0000000..645077f
--- /dev/null
+++ b/docs/api/core/types/types.md
@@ -0,0 +1,63 @@
+# Types
+
+**命名空间**: `XCEngine::Core`
+
+**类型**: `header` (type aliases)
+
+**头文件**: `XCEngine/Core/Types.h`
+
+**描述**: 基础类型别名定义,提供跨平台一致的基础类型名称。
+
+## 概述
+
+`Types.h` 定义了一组类型别名,简化了标准库类型的使用,并提供跨平台一致性。
+
+## 类型别名
+
+| 别名 | 实际类型 | 描述 |
+|------|----------|------|
+| `int8` | `int8_t` | 8位有符号整数 |
+| `int16` | `int16_t` | 16位有符号整数 |
+| `int32` | `int32_t` | 32位有符号整数 |
+| `int64` | `int64_t` | 64位有符号整数 |
+| `uint8` | `uint8_t` | 8位无符号整数 |
+| `uint16` | `uint16_t` | 16位无符号整数 |
+| `uint32` | `uint32_t` | 32位无符号整数 |
+| `uint64` | `uint64_t` | 64位无符号整数 |
+| `byte` | `uint8_t` | 字节类型 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| [`int8`](int8.md) | 8位有符号整数类型别名 |
+| [`int16`](int16.md) | 16位有符号整数类型别名 |
+| [`int32`](int32.md) | 32位有符号整数类型别名 |
+| [`int64`](int64.md) | 64位有符号整数类型别名 |
+| [`uint8`](uint8.md) | 8位无符号整数类型别名 |
+| [`uint16`](uint16.md) | 16位无符号整数类型别名 |
+| [`uint32`](uint32.md) | 32位无符号整数类型别名 |
+| [`uint64`](uint64.md) | 64位无符号整数类型别名 |
+| [`byte`](byte.md) | 字节类型别名 |
+
+## 使用示例
+
+```cpp
+#include
+
+// 使用类型别名
+Core::int32 count = 100;
+Core::uint64 id = 1234567890;
+Core::byte flags = 0xFF;
+
+// 数组定义
+Core::uint8 buffer[1024];
+
+// 函数参数
+void ProcessData(Core::uint32 size, const Core::int8* data);
+```
+
+## 相关文档
+
+- [Core 模块总览](../core.md) - 返回模块总览
+- [SmartPtr](../smartptr/smartptr.md) - 智能指针
diff --git a/docs/api/core/types/uint16.md b/docs/api/core/types/uint16.md
new file mode 100644
index 0000000..3b4a42b
--- /dev/null
+++ b/docs/api/core/types/uint16.md
@@ -0,0 +1,30 @@
+# Types::uint16
+
+```cpp
+using uint16 = uint16_t;
+```
+
+16位无符号整数类型别名,对应 C++ 标准库的 `uint16_t` 类型。
+
+**描述**
+
+`uint16` 是 16 位(2 字节)无符号整数类型,范围为 0 到 65,535。常用于 Unicode 字符、端口号等场景。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::uint16 port = 8080;
+Core::uint16 maxConnections = 65535;
+
+// Unicode 字符
+Core::uint16 unicodeChar = 0x4E2D;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [int16](int16.md) - 对应的有符号类型
diff --git a/docs/api/core/types/uint32.md b/docs/api/core/types/uint32.md
new file mode 100644
index 0000000..4caae08
--- /dev/null
+++ b/docs/api/core/types/uint32.md
@@ -0,0 +1,30 @@
+# Types::uint32
+
+```cpp
+using uint32 = uint32_t;
+```
+
+32位无符号整数类型别名,对应 C++ 标准库的 `uint32_t` 类型。
+
+**描述**
+
+`uint32` 是 32 位(4 字节)无符号整数类型,范围为 0 到 4,294,967,295。常用于 ID、计数、大小等场景。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::uint32 entityId = 1000000;
+Core::uint32 maxItems = 4294967295U;
+
+// 数组大小
+Core::uint32 arraySize = 1000;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [int32](int32.md) - 对应的有符号类型
diff --git a/docs/api/core/types/uint64.md b/docs/api/core/types/uint64.md
new file mode 100644
index 0000000..ab23116
--- /dev/null
+++ b/docs/api/core/types/uint64.md
@@ -0,0 +1,30 @@
+# Types::uint64
+
+```cpp
+using uint64 = uint64_t;
+```
+
+64位无符号整数类型别名,对应 C++ 标准库的 `uint64_t` 类型。
+
+**描述**
+
+`uint64` 是 64 位(8 字节)无符号整数类型,范围为 0 到 18,446,744,073,709,551,615。用于需要极大整数范围的场景,如大文件大小、精确时间等。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::uint64 largeFileSize = 1099511627776ULL; // 1TB
+Core::uint64 maxValue = 18446744073709551615ULL;
+
+// 高精度时间戳(微秒)
+Core::uint64 microseconds = 1700000000000000ULL;
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [int64](int64.md) - 对应的有符号类型
diff --git a/docs/api/core/types/uint8.md b/docs/api/core/types/uint8.md
new file mode 100644
index 0000000..6b55bc5
--- /dev/null
+++ b/docs/api/core/types/uint8.md
@@ -0,0 +1,30 @@
+# Types::uint8
+
+```cpp
+using uint8 = uint8_t;
+```
+
+8位无符号整数类型别名,对应 C++ 标准库的 `uint8_t` 类型。
+
+**描述**
+
+`uint8` 是 8 位(1 字节)无符号整数类型,范围为 0 到 255。常用于字节数据、颜色分量(RGB)等场景。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+Core::uint8 flags = 0xFF;
+Core::uint8 red = 255;
+
+// 字节数组
+Core::uint8 buffer[256];
+```
+
+## 相关文档
+
+- [Types 总览](types.md) - 返回类型总览
+- [int8](int8.md) - 对应的有符号类型
diff --git a/docs/api/debug/consolelogsink/consolelogsink.md b/docs/api/debug/consolelogsink/consolelogsink.md
new file mode 100644
index 0000000..8a43dd2
--- /dev/null
+++ b/docs/api/debug/consolelogsink/consolelogsink.md
@@ -0,0 +1,21 @@
+# ConsoleLogSink::ConsoleLogSink
+
+```cpp
+ConsoleLogSink()
+```
+
+默认构造函数。创建一个 `ConsoleLogSink` 实例,默认启用彩色输出,最小日志级别为 `Verbose`。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto sink = std::make_unique();
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+```
+
+## 相关文档
+
+- [ConsoleLogSink 总览](overview.md) - 返回类总览
+- [Debug 模块总览](../debug.md) - 返回模块总览
diff --git a/docs/api/debug/consolelogsink/flush.md b/docs/api/debug/consolelogsink/flush.md
new file mode 100644
index 0000000..bccfde9
--- /dev/null
+++ b/docs/api/debug/consolelogsink/flush.md
@@ -0,0 +1,22 @@
+# ConsoleLogSink::Flush
+
+```cpp
+void Flush() override
+```
+
+刷新标准输出流(stdout),调用 `fflush(stdout)` 确保所有待输出的日志内容立即显示在控制台上。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto sink = std::make_unique();
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+// 在程序异常退出前确保日志已输出
+XCEngine::Debug::Logger::Get().Flush();
+```
+
+## 相关文档
+
+- [ConsoleLogSink 总览](consolelogsink.md) - 返回类总览
diff --git a/docs/api/debug/consolelogsink/log.md b/docs/api/debug/consolelogsink/log.md
new file mode 100644
index 0000000..44f6af5
--- /dev/null
+++ b/docs/api/debug/consolelogsink/log.md
@@ -0,0 +1,25 @@
+# ConsoleLogSink::Log
+
+```cpp
+void Log(const LogEntry& entry) override
+```
+
+将日志输出到控制台。根据 `LogEntry` 的级别和分类格式化输出内容,并根据 `m_colorOutput` 设置决定是否使用 Windows 控制台颜色 API。如果日志级别低于设置的最小级别,则不输出。
+
+**参数:**
+- `entry` - 日志条目
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto sink = std::make_unique();
+// Log 方法由 Logger 在内部调用,用户无需直接调用
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+XCEngine::Debug::Logger::Get().Info(XCEngine::Debug::LogCategory::General, "Hello console");
+```
+
+## 相关文档
+
+- [ConsoleLogSink 总览](consolelogsink.md) - 返回类总览
diff --git a/docs/api/debug/consolelogsink/overview.md b/docs/api/debug/consolelogsink/overview.md
new file mode 100644
index 0000000..f54f8ce
--- /dev/null
+++ b/docs/api/debug/consolelogsink/overview.md
@@ -0,0 +1,41 @@
+# ConsoleLogSink
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `class`
+
+**头文件**: `XCEngine/Debug/ConsoleLogSink.h`
+
+**描述**: 控制台日志输出目标,将日志输出到标准输出流。
+
+## 概述
+
+`ConsoleLogSink` 是日志系统的控制台输出实现。它将日志条目输出到标准输出流(stdout),支持彩色输出和日志级别过滤。
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `ConsoleLogSink()` | [构造函数](consolelogsink.md) |
+| `~ConsoleLogSink()` | [析构函数](~consolelogsink.md) |
+| `void Log(const LogEntry& entry)` | [输出日志到控制台](log.md) |
+| `void Flush()` | [刷新输出流](flush.md) |
+| `void SetColorOutput(bool enable)` | [设置彩色输出](setcoloroutput.md) |
+| `void SetMinimumLevel(LogLevel level)` | [设置最小日志级别](setminimumlevel.md) |
+
+## 使用示例
+
+```cpp
+#include
+
+auto sink = std::make_unique();
+sink->SetColorOutput(true);
+sink->SetMinimumLevel(XCEngine::Debug::LogLevel::Warning);
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
diff --git a/docs/api/debug/consolelogsink/setcoloroutput.md b/docs/api/debug/consolelogsink/setcoloroutput.md
new file mode 100644
index 0000000..1bea375
--- /dev/null
+++ b/docs/api/debug/consolelogsink/setcoloroutput.md
@@ -0,0 +1,24 @@
+# ConsoleLogSink::SetColorOutput
+
+```cpp
+void SetColorOutput(bool enable)
+```
+
+启用或禁用控制台彩色输出。启用后,不同日志级别使用 Windows 控制台颜色 API 输出,便于快速区分日志类型。
+
+**参数:**
+- `enable` - true 启用彩色输出,false 禁用
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto sink = std::make_unique();
+sink->SetColorOutput(false); // 禁用颜色(适合日志文件或 CI 环境)
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+```
+
+## 相关文档
+
+- [ConsoleLogSink 总览](consolelogsink.md) - 返回类总览
diff --git a/docs/api/debug/consolelogsink/setminimumlevel.md b/docs/api/debug/consolelogsink/setminimumlevel.md
new file mode 100644
index 0000000..8b64fa1
--- /dev/null
+++ b/docs/api/debug/consolelogsink/setminimumlevel.md
@@ -0,0 +1,24 @@
+# ConsoleLogSink::SetMinimumLevel
+
+```cpp
+void SetMinimumLevel(LogLevel level)
+```
+
+设置该 Sink 的最小输出级别。此设置仅影响当前 Sink,不会影响 Logger 的全局级别过滤。
+
+**参数:**
+- `level` - 最小日志级别
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto sink = std::make_unique();
+sink->SetMinimumLevel(XCEngine::Debug::LogLevel::Warning); // 控制台只显示警告及以上
+XCEngine::Debug::Logger::Get().AddSink(std::move(sink));
+```
+
+## 相关文档
+
+- [ConsoleLogSink 总览](consolelogsink.md) - 返回类总览
diff --git a/docs/api/debug/consolelogsink/~consolelogsink.md b/docs/api/debug/consolelogsink/~consolelogsink.md
new file mode 100644
index 0000000..802c70e
--- /dev/null
+++ b/docs/api/debug/consolelogsink/~consolelogsink.md
@@ -0,0 +1,13 @@
+# ConsoleLogSink::~ConsoleLogSink
+
+```cpp
+~ConsoleLogSink() override
+```
+
+析构函数。销毁 `ConsoleLogSink` 实例,释放相关资源。
+
+**复杂度:** O(1)
+
+## 相关文档
+
+- [ConsoleLogSink 总览](consolelogsink.md) - 返回类总览
diff --git a/docs/api/debug/debug.md b/docs/api/debug/debug.md
new file mode 100644
index 0000000..3ade25d
--- /dev/null
+++ b/docs/api/debug/debug.md
@@ -0,0 +1,86 @@
+# Debug 模块概览
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `module`
+
+**描述**: XCEngine 的调试和日志模块,提供日志记录和性能分析功能。
+
+## 概述
+
+Debug 模块提供了一套完整的调试工具,包括日志系统和性能分析器。
+
+## 模块内容
+
+### 日志系统
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [Logger](logger/logger.md) | `Logger.h` | 日志记录器 |
+| [ILogSink](ilogsink/ilogsink.md) | `ILogSink.h` | 日志输出接口 |
+| [ConsoleLogSink](consolelogsink/consolelogsink.md) | `ConsoleLogSink.h` | 控制台输出 |
+| [FileLogSink](filelogsink/filelogsink.md) | `FileLogSink.h` | 文件输出 |
+| [LogLevel](loglevel/loglevel.md) | `LogLevel.h` | 日志级别枚举 |
+| [LogCategory](logcategory/logcategory.md) | `LogCategory.h` | 日志分类枚举 |
+| [LogEntry](logentry/logentry.md) | `LogEntry.h` | 日志条目结构 |
+
+### 性能分析
+
+| 组件 | 文件 | 描述 |
+|------|------|------|
+| [Profiler](profiler/profiler.md) | `Profiler.h` | 性能分析器 |
+
+## 日志级别
+
+| 级别 | 描述 |
+|------|------|
+| `Verbose` | 详细调试信息 |
+| `Debug` | 调试信息 |
+| `Info` | 一般信息 |
+| `Warning` | 警告信息 |
+| `Error` | 错误信息 |
+| `Fatal` | 致命错误 |
+
+## 日志分类
+
+| 分类 | 描述 |
+|------|------|
+| `General` | 通用 |
+| `Rendering` | 渲染 |
+| `Physics` | 物理 |
+| `Audio` | 音频 |
+| `Scripting` | 脚本 |
+| `Network` | 网络 |
+| `Memory` | 内存 |
+| `Threading` | 线程 |
+| `FileSystem` | 文件系统 |
+| `Custom` | 自定义 |
+
+## 使用示例
+
+```cpp
+#include
+
+// 初始化日志系统
+Logger::Get().Initialize();
+Logger::Get().AddSink(std::make_unique());
+Logger::Get().AddSink(std::make_unique("app.log"));
+
+// 设置日志级别
+Logger::Get().SetMinimumLevel(LogLevel::Debug);
+
+// 记录日志
+XE_LOG(LogCategory::Rendering, LogLevel::Info, "Render started");
+
+// 使用宏记录日志
+if (condition) {
+ XE_LOG(LogCategory::General, LogLevel::Error, "Something went wrong");
+}
+
+// 使用断言
+XE_ASSERT(ptr != nullptr, "Pointer must not be null");
+```
+
+## 相关文档
+
+- [Profiler](profiler/profiler.md) - 性能分析器
diff --git a/docs/api/debug/filelogsink/construct.md b/docs/api/debug/filelogsink/construct.md
new file mode 100644
index 0000000..db32c9a
--- /dev/null
+++ b/docs/api/debug/filelogsink/construct.md
@@ -0,0 +1,24 @@
+# FileLogSink::FileLogSink
+
+```cpp
+FileLogSink(const Containers::String& filePath)
+```
+
+构造函数,打开指定路径的文件用于日志写入。如果文件已存在,则追加写入;如果不存在,则创建新文件。
+
+**参数:**
+- `filePath` - 日志文件路径
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto fileSink = std::make_unique("logs/engine.log");
+XCEngine::Debug::Logger::Get().AddSink(std::move(fileSink));
+```
+
+## 相关文档
+
+- [FileLogSink 总览](filelogsink.md) - 返回类总览
+- [Debug 模块总览](../debug.md) - 返回模块总览
diff --git a/docs/api/debug/filelogsink/filelogsink.md b/docs/api/debug/filelogsink/filelogsink.md
new file mode 100644
index 0000000..a3379d4
--- /dev/null
+++ b/docs/api/debug/filelogsink/filelogsink.md
@@ -0,0 +1,37 @@
+# FileLogSink
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `class`
+
+**头文件**: `XCEngine/Debug/FileLogSink.h`
+
+**描述**: 文件日志输出目标,将日志写入到指定文件。
+
+## 概述
+
+`FileLogSink` 是日志系统的文件输出实现。它将日志条目写入到指定的文件,支持追加写入模式。
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `FileLogSink(const Containers::String& filePath)` | [构造函数](construct.md) |
+| `~FileLogSink()` | [析构函数](~filelogsink.md) |
+| `void Log(const LogEntry& entry)` | [输出日志到文件](log.md) |
+| `void Flush()` | [刷新缓冲区](flush.md) |
+
+## 使用示例
+
+```cpp
+#include
+
+auto fileSink = std::make_unique("logs/app.log");
+XCEngine::Debug::Logger::Get().AddSink(std::move(fileSink));
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
diff --git a/docs/api/debug/filelogsink/flush.md b/docs/api/debug/filelogsink/flush.md
new file mode 100644
index 0000000..7dd078a
--- /dev/null
+++ b/docs/api/debug/filelogsink/flush.md
@@ -0,0 +1,24 @@
+# FileLogSink::Flush
+
+```cpp
+void Flush() override
+```
+
+刷新文件缓冲区,调用底层 `FileWriter` 的 flush 方法确保所有待写入的日志数据已实际写入磁盘。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+auto fileSink = std::make_unique("logs/app.log");
+XCEngine::Debug::Logger::Get().AddSink(std::move(fileSink));
+// 关键操作后立即刷新
+XCEngine::Debug::Logger::Get().Info(XCEngine::Debug::LogCategory::General, "Checkpoint saved");
+// 确保写入磁盘
+XCEngine::Debug::Logger::Get().Flush();
+```
+
+## 相关文档
+
+- [FileLogSink 总览](filelogsink.md) - 返回类总览
diff --git a/docs/api/debug/filelogsink/log.md b/docs/api/debug/filelogsink/log.md
new file mode 100644
index 0000000..91563a9
--- /dev/null
+++ b/docs/api/debug/filelogsink/log.md
@@ -0,0 +1,25 @@
+# FileLogSink::Log
+
+```cpp
+void Log(const LogEntry& entry) override
+```
+
+将日志条目追加写入文件。根据 `LogEntry` 的各字段格式化日志行,包括时间戳、级别、分类、消息,并追加到文件末尾。
+
+**参数:**
+- `entry` - 日志条目
+
+**复杂度:** O(m),m 为消息长度
+
+**示例:**
+
+```cpp
+auto fileSink = std::make_unique("logs/app.log");
+XCEngine::Debug::Logger::Get().AddSink(std::move(fileSink));
+// Log 方法由 Logger 在内部调用
+XCEngine::Debug::Logger::Get().Error(XCEngine::Debug::LogCategory::FileSystem, "File not found");
+```
+
+## 相关文档
+
+- [FileLogSink 总览](filelogsink.md) - 返回类总览
diff --git a/docs/api/debug/filelogsink/~filelogsink.md b/docs/api/debug/filelogsink/~filelogsink.md
new file mode 100644
index 0000000..17d3205
--- /dev/null
+++ b/docs/api/debug/filelogsink/~filelogsink.md
@@ -0,0 +1,13 @@
+# FileLogSink::~FileLogSink
+
+```cpp
+~FileLogSink() override
+```
+
+析构函数。销毁 `FileLogSink` 实例,调用 `Flush()` 确保所有日志数据写入文件,然后关闭文件句柄。
+
+**复杂度:** O(1)
+
+## 相关文档
+
+- [FileLogSink 总览](filelogsink.md) - 返回类总览
diff --git a/docs/api/debug/ilogsink/flush.md b/docs/api/debug/ilogsink/flush.md
new file mode 100644
index 0000000..f088ee9
--- /dev/null
+++ b/docs/api/debug/ilogsink/flush.md
@@ -0,0 +1,32 @@
+# ILogSink::Flush
+
+```cpp
+virtual void Flush() = 0
+```
+
+刷新输出缓冲区,确保所有待写入的日志数据已实际写入目标介质。对于文件类 Sink,应调用底层文件系统的 flush;对于网络类 Sink,应发送缓冲区中的数据。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+class BufferedLogSink : public XCEngine::Debug::ILogSink {
+private:
+ std::string m_buffer;
+public:
+ void Log(const XCEngine::Debug::LogEntry& entry) override {
+ m_buffer += entry.message.CStr();
+ m_buffer += "\n";
+ }
+ void Flush() override {
+ // 将缓冲区数据写入目标
+ writeToDestination(m_buffer);
+ m_buffer.clear();
+ }
+};
+```
+
+## 相关文档
+
+- [ILogSink 总览](ilogsink.md) - 返回类总览
diff --git a/docs/api/debug/ilogsink/ilogsink.md b/docs/api/debug/ilogsink/ilogsink.md
new file mode 100644
index 0000000..839144f
--- /dev/null
+++ b/docs/api/debug/ilogsink/ilogsink.md
@@ -0,0 +1,45 @@
+# ILogSink
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `class` (abstract interface)
+
+**描述**: 日志输出槽抽象接口,定义日志输出的标准协议。
+
+## 概述
+
+`ILogSink` 是日志系统的输出抽象接口。用户可以实现此接口来创建自定义的日志输出方式,如网络输出、数据库存储等。`Logger` 通过多个 Sink 分发日志。
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `virtual void Log(const LogEntry& entry) = 0` | [输出单条日志](log.md) |
+| `virtual void Flush() = 0` | [刷新缓冲区,确保日志写入](flush.md) |
+
+## 使用示例
+
+```cpp
+class CustomLogSink : public ILogSink {
+public:
+ void Log(const LogEntry& entry) override {
+ printf("[%s] %s: %s\n",
+ LogLevelToString(entry.level),
+ LogCategoryToString(entry.category),
+ entry.message.CStr());
+ }
+
+ void Flush() override {
+ fflush(stdout);
+ }
+};
+
+Logger::Get().AddSink(std::make_unique());
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
+- [ConsoleLogSink](../consolelogsink/consolelogsink.md) - 控制台输出
+- [FileLogSink](../filelogsink/filelogsink.md) - 文件输出
diff --git a/docs/api/debug/ilogsink/log.md b/docs/api/debug/ilogsink/log.md
new file mode 100644
index 0000000..52aa91c
--- /dev/null
+++ b/docs/api/debug/ilogsink/log.md
@@ -0,0 +1,29 @@
+# ILogSink::Log
+
+```cpp
+virtual void Log(const LogEntry& entry) = 0
+```
+
+输出单条日志到目标介质。`Logger` 在每次日志记录时调用此方法,将包含完整日志信息的 `LogEntry` 传入。派生类需要实现具体的输出逻辑。
+
+**参数:**
+- `entry` - 日志条目,包含级别、分类、消息、时间戳、线程 ID 等完整信息
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+class NetworkLogSink : public XCEngine::Debug::ILogSink {
+public:
+ void Log(const XCEngine::Debug::LogEntry& entry) override {
+ // 将日志发送到远程服务器
+ sendToServer(entry.message.CStr());
+ }
+ void Flush() override { }
+};
+```
+
+## 相关文档
+
+- [ILogSink 总览](ilogsink.md) - 返回类总览
diff --git a/docs/api/debug/logcategory/logcategory.md b/docs/api/debug/logcategory/logcategory.md
new file mode 100644
index 0000000..9932fa8
--- /dev/null
+++ b/docs/api/debug/logcategory/logcategory.md
@@ -0,0 +1,44 @@
+# LogCategory
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `enum class`
+
+**描述**: 日志分类枚举,定义日志的来源模块。
+
+## 概述
+
+`LogCategory` 枚举定义了日志的分类,用于区分不同引擎模块的日志输出。
+
+## 枚举值
+
+| 值 | 说明 |
+|----|------|
+| `General` | 通用 |
+| `Rendering` | 渲染 |
+| `Physics` | 物理 |
+| `Audio` | 音频 |
+| `Scripting` | 脚本 |
+| `Network` | 网络 |
+| `Memory` | 内存 |
+| `Threading` | 线程 |
+| `FileSystem` | 文件系统 |
+| `Custom` | 自定义 |
+
+## 辅助函数
+
+| 函数 | 描述 |
+|------|------|
+| `const char* LogCategoryToString(LogCategory category)` | [将日志分类转换为字符串](logcategorytostring.md) |
+
+## 使用示例
+
+```cpp
+Logger::Get().SetCategoryEnabled(LogCategory::Network, false);
+XE_LOG(LogCategory::Rendering, LogLevel::Info, "Draw call submitted");
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
diff --git a/docs/api/debug/logcategory/logcategorytostring.md b/docs/api/debug/logcategory/logcategorytostring.md
new file mode 100644
index 0000000..01b9a97
--- /dev/null
+++ b/docs/api/debug/logcategory/logcategorytostring.md
@@ -0,0 +1,28 @@
+# LogCategoryToString
+
+```cpp
+const char* LogCategoryToString(LogCategory category)
+```
+
+将 `LogCategory` 枚举值转换为可读字符串。
+
+**参数:**
+- `category` - 日志分类
+
+**返回:** 对应分类的字符串("General", "Rendering", "Physics" 等)
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::LogCategory cat = XCEngine::Debug::LogCategory::Rendering;
+const char* str = XCEngine::Debug::LogCategoryToString(cat);
+// str == "Rendering"
+```
+
+## 相关文档
+
+- [LogCategory 总览](logcategory.md) - 返回类总览
diff --git a/docs/api/debug/logentry/logentry.md b/docs/api/debug/logentry/logentry.md
new file mode 100644
index 0000000..ae2e383
--- /dev/null
+++ b/docs/api/debug/logentry/logentry.md
@@ -0,0 +1,47 @@
+# LogEntry
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `struct`
+
+**描述**: 日志条目结构体,包含单条日志的所有信息。
+
+## 概述
+
+`LogEntry` 是日志系统的核心数据结构,每次日志记录都生成一个 `LogEntry` 并分发给所有注册的 Sink。
+
+## 结构体成员
+
+| 成员 | 类型 | 描述 |
+|------|------|------|
+| `level` | `LogLevel` | 日志级别 |
+| `category` | `LogCategory` | 日志分类 |
+| `message` | `Containers::String` | 日志消息内容 |
+| `file` | `Containers::String` | 源代码文件路径 |
+| `line` | `int32_t` | 源代码行号 |
+| `function` | `Containers::String` | 函数名称 |
+| `timestamp` | `uint64_t` | 时间戳(秒,Unix 时间戳) |
+| `threadId` | `uint32_t` | 线程 ID |
+
+## 使用示例
+
+```cpp
+class MySink : public ILogSink {
+public:
+ void Log(const LogEntry& entry) override {
+ printf("[%llu][%u] %s::%s: %s\n",
+ (unsigned long long)entry.timestamp,
+ (unsigned)entry.threadId,
+ LogCategoryToString(entry.category),
+ LogLevelToString(entry.level),
+ entry.message.CStr());
+ }
+ void Flush() override { }
+};
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
+- [Logger](../logger/logger.md) - 日志记录器
diff --git a/docs/api/debug/logger/addsink.md b/docs/api/debug/logger/addsink.md
new file mode 100644
index 0000000..e04eb90
--- /dev/null
+++ b/docs/api/debug/logger/addsink.md
@@ -0,0 +1,27 @@
+# Logger::AddSink
+
+```cpp
+void AddSink(std::unique_ptr sink)
+```
+
+向日志系统添加一个输出目标(Sink)。Logger 持有 Sink 的所有权,传入的 `unique_ptr` 被移动到内部容器中。每次日志记录时,所有已注册的 Sink 的 `Log` 方法都会被调用。
+
+**参数:**
+- `sink` - 要添加的日志输出目标,使用 `std::unique_ptr` 包装
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Initialize();
+XCEngine::Debug::Logger::Get().AddSink(std::make_unique());
+XCEngine::Debug::Logger::Get().AddSink(std::make_unique("app.log"));
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
diff --git a/docs/api/debug/logger/debug.md b/docs/api/debug/logger/debug.md
new file mode 100644
index 0000000..cec3a9c
--- /dev/null
+++ b/docs/api/debug/logger/debug.md
@@ -0,0 +1,30 @@
+# Logger::Debug
+
+```cpp
+void Debug(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Debug(1 级)日志。Debug 级别用于一般调试信息,比 Verbose 简洁但比 Info 详细。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Debug(
+ XCEngine::Debug::LogCategory::Rendering,
+ "Draw call batch size: 512"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/error.md b/docs/api/debug/logger/error.md
new file mode 100644
index 0000000..3dcdc5e
--- /dev/null
+++ b/docs/api/debug/logger/error.md
@@ -0,0 +1,30 @@
+# Logger::Error
+
+```cpp
+void Error(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Error(4 级)日志。Error 级别用于表示程序执行中发生的错误,如文件读取失败、网络连接中断等。程序通常可以继续运行但功能可能受限。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Error(
+ XCEngine::Debug::LogCategory::Network,
+ "Failed to connect to game server"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/fatal.md b/docs/api/debug/logger/fatal.md
new file mode 100644
index 0000000..fa2fed0
--- /dev/null
+++ b/docs/api/debug/logger/fatal.md
@@ -0,0 +1,30 @@
+# Logger::Fatal
+
+```cpp
+void Fatal(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Fatal(5 级)日志。Fatal 级别用于表示不可恢复的严重错误,通常意味着程序即将终止。此方法可能在记录日志后触发程序中断。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Fatal(
+ XCEngine::Debug::LogCategory::General,
+ "Out of memory - cannot continue"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/get.md b/docs/api/debug/logger/get.md
new file mode 100644
index 0000000..19b348c
--- /dev/null
+++ b/docs/api/debug/logger/get.md
@@ -0,0 +1,22 @@
+# Logger::Get
+
+```cpp
+static Logger& Get()
+```
+
+获取 `Logger` 单例实例。Logger 使用局部静态变量实现 Meyers' Singleton,确保线程安全且只初始化一次。
+
+**返回:** `Logger&` - 全局日志记录器实例的引用
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Debug::Logger& logger = XCEngine::Debug::Logger::Get();
+logger.Initialize();
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/info.md b/docs/api/debug/logger/info.md
new file mode 100644
index 0000000..74292e6
--- /dev/null
+++ b/docs/api/debug/logger/info.md
@@ -0,0 +1,30 @@
+# Logger::Info
+
+```cpp
+void Info(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Info(2 级)日志。Info 级别用于一般性信息,如启动提示、配置加载等用户可见的正常运行消息。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Info(
+ XCEngine::Debug::LogCategory::General,
+ "Application initialized successfully"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/initialize.md b/docs/api/debug/logger/initialize.md
new file mode 100644
index 0000000..7841377
--- /dev/null
+++ b/docs/api/debug/logger/initialize.md
@@ -0,0 +1,28 @@
+# Logger::Initialize
+
+```cpp
+void Initialize()
+```
+
+初始化日志系统。在首次使用日志功能前必须调用。初始化内部状态标志,确保日志系统已准备好工作。
+
+**注意:** 默认最小日志级别为 `Verbose`,所有日志分类默认启用,这些是类成员变量的默认值,不需要在此方法中设置。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+int main() {
+ XCEngine::Debug::Logger::Get().Initialize();
+ XCEngine::Debug::Logger::Get().AddSink(std::make_unique());
+ XCEngine::Debug::Logger::Get().Info(XCEngine::Debug::LogCategory::General, "Application started");
+ return 0;
+}
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/log.md b/docs/api/debug/logger/log.md
new file mode 100644
index 0000000..8a74bae
--- /dev/null
+++ b/docs/api/debug/logger/log.md
@@ -0,0 +1,45 @@
+# Logger::Log
+
+```cpp
+void Log(LogLevel level, LogCategory category,
+ const Containers::String& message, const char* file = nullptr,
+ int32_t line = 0, const char* function = nullptr)
+```
+
+通用日志记录方法。根据设置的最小日志级别和分类开关决定是否输出,然后将日志分发给所有已注册的 Sink。如果日志级别低于最小级别或分类被禁用,则不输出。
+
+**参数:**
+- `level` - 日志级别(Verbose, Debug, Info, Warning, Error, Fatal)
+- `category` - 日志分类(General, Rendering, Physics 等)
+- `message` - 日志消息内容
+- `file` - 源代码文件路径(可选,默认 nullptr)
+- `line` - 源代码行号(可选,默认 0)
+- `function` - 函数名称(可选,默认 nullptr)
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Log(
+ XCEngine::Debug::LogLevel::Error,
+ XCEngine::Debug::LogCategory::FileSystem,
+ "Failed to open config file",
+ __FILE__,
+ __LINE__,
+ __FUNCTION__
+);
+
+// 推荐使用 XE_LOG 宏自动填充位置信息
+XE_LOG(XCEngine::Debug::LogCategory::General, XCEngine::Debug::LogLevel::Info, "Initialized");
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
+- [LogLevel](../loglevel/loglevel.md) - 日志级别枚举
+- [LogCategory](../logcategory/logcategory.md) - 日志分类枚举
diff --git a/docs/api/debug/logger/logger.md b/docs/api/debug/logger/logger.md
new file mode 100644
index 0000000..18c3e20
--- /dev/null
+++ b/docs/api/debug/logger/logger.md
@@ -0,0 +1,92 @@
+# Logger
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `class` (singleton)
+
+**头文件**: `XCEngine/Debug/Logger.h`
+
+**描述**: 全局日志记录器单例,提供多级别、多分类的日志输出。
+
+## 概述
+
+`Logger` 是 XCEngine 的核心日志系统单例。它支持多个日志输出目标(Sink)、日志级别过滤、分类开关,并提供宏方便使用。
+
+## 单例访问
+
+| 方法 | 描述 |
+|------|------|
+| `static Logger& Get()` | 获取单例实例 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `void Initialize()` | [初始化日志系统](initialize.md) |
+| `void Shutdown()` | [关闭日志系统](shutdown.md) |
+| `void AddSink(std::unique_ptr sink)` | [添加日志输出目标](addsink.md) |
+| `void RemoveSink(ILogSink* sink)` | [移除日志输出目标](removesink.md) |
+| `void Log(...)` | [通用日志记录](log.md) |
+| `void Verbose(...)` | [Verbose 级别日志](verbose.md) |
+| `void Debug(...)` | [Debug 级别日志](debug.md) |
+| `void Info(...)` | [Info 级别日志](info.md) |
+| `void Warning(...)` | [Warning 级别日志](warning.md) |
+| `void Error(...)` | [Error 级别日志](error.md) |
+| `void Fatal(...)` | [Fatal 级别日志](fatal.md) |
+| `void SetMinimumLevel(...)` | [设置最小日志级别](setminimumlevel.md) |
+| `void SetCategoryEnabled(...)` | [开启/关闭指定分类](setcategoryenabled.md) |
+
+## 宏定义
+
+### XE_LOG
+
+```cpp
+#define XE_LOG(category, level, message) \
+ XCEngine::Debug::Logger::Get().Log(level, category, message, __FILE__, __LINE__, __FUNCTION__)
+```
+
+通用日志宏,自动填充文件名、行号和函数名。
+
+### XE_ASSERT
+
+```cpp
+#define XE_ASSERT(condition, message) \
+ if (!(condition)) { \
+ XCEngine::Debug::Logger::Get().Fatal(XCEngine::Debug::LogCategory::General, message); \
+ }
+```
+
+断言宏,条件失败时记录 Fatal 日志。
+
+## 使用示例
+
+```cpp
+#include
+
+// 初始化
+Logger::Get().Initialize();
+Logger::Get().AddSink(std::make_unique());
+Logger::Get().AddSink(std::make_unique("app.log"));
+
+// 设置日志级别
+Logger::Get().SetMinimumLevel(LogLevel::Debug);
+
+// 使用便捷方法
+Logger::Get().Info(LogCategory::Rendering, "Render started");
+Logger::Get().Warning(LogCategory::Memory, "High memory usage");
+Logger::Get().Error(LogCategory::FileSystem, "Failed to load file");
+
+// 使用宏(自动带位置信息)
+XE_LOG(LogCategory::General, LogLevel::Info, "Application initialized");
+
+// 使用断言
+XE_ASSERT(ptr != nullptr, "Pointer must not be null");
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
+- [ConsoleLogSink](../consolelogsink/consolelogsink.md) - 控制台输出
+- [FileLogSink](../filelogsink/filelogsink.md) - 文件输出
+- [LogLevel](../loglevel/loglevel.md) - 日志级别枚举
diff --git a/docs/api/debug/logger/removesink.md b/docs/api/debug/logger/removesink.md
new file mode 100644
index 0000000..bc81dab
--- /dev/null
+++ b/docs/api/debug/logger/removesink.md
@@ -0,0 +1,29 @@
+# Logger::RemoveSink
+
+```cpp
+void RemoveSink(ILogSink* sink)
+```
+
+从日志系统移除指定的输出目标。通过指针查找并移除对应的 Sink,Logger 不再向该目标发送日志。
+
+**参数:**
+- `sink` - 要移除的日志输出目标指针
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+auto fileSink = std::make_unique("app.log");
+XCEngine::Debug::FileLogSink* rawPtr = fileSink.get();
+XCEngine::Debug::Logger::Get().AddSink(std::move(fileSink));
+// 稍后移除
+XCEngine::Debug::Logger::Get().RemoveSink(rawPtr);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
+- [ILogSink](../ilogsink/ilogsink.md) - 日志输出接口
diff --git a/docs/api/debug/logger/setcategoryenabled.md b/docs/api/debug/logger/setcategoryenabled.md
new file mode 100644
index 0000000..9f6b512
--- /dev/null
+++ b/docs/api/debug/logger/setcategoryenabled.md
@@ -0,0 +1,36 @@
+# Logger::SetCategoryEnabled
+
+```cpp
+void SetCategoryEnabled(LogCategory category, bool enabled)
+```
+
+启用或禁用指定分类的日志输出。当分类被禁用时,该分类的所有日志都不会分发给 Sink,但级别过滤仍然适用。
+
+**参数:**
+- `category` - 要设置的日志分类
+- `enabled` - true 表示启用,false 表示禁用
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+// 禁用网络模块日志(减少日志噪音)
+XCEngine::Debug::Logger::Get().SetCategoryEnabled(
+ XCEngine::Debug::LogCategory::Network,
+ false
+);
+
+// 稍后重新启用
+XCEngine::Debug::Logger::Get().SetCategoryEnabled(
+ XCEngine::Debug::LogCategory::Network,
+ true
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
+- [LogCategory](../logcategory/logcategory.md) - 日志分类枚举
diff --git a/docs/api/debug/logger/setminimumlevel.md b/docs/api/debug/logger/setminimumlevel.md
new file mode 100644
index 0000000..175fe78
--- /dev/null
+++ b/docs/api/debug/logger/setminimumlevel.md
@@ -0,0 +1,30 @@
+# Logger::SetMinimumLevel
+
+```cpp
+void SetMinimumLevel(LogLevel level)
+```
+
+设置日志系统的最小输出级别。所有低于该级别的日志将被过滤,不会分发给任何 Sink。
+
+**参数:**
+- `level` - 最小日志级别
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+// 只输出 Warning 及以上级别的日志
+XCEngine::Debug::Logger::Get().SetMinimumLevel(XCEngine::Debug::LogLevel::Warning);
+
+// Verbose 和 Debug 级别的日志将被过滤
+XCEngine::Debug::Logger::Get().Verbose(XCEngine::Debug::LogCategory::General, "This will not be logged");
+XCEngine::Debug::Logger::Get().Warning(XCEngine::Debug::LogCategory::General, "This will be logged");
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
+- [LogLevel](../loglevel/loglevel.md) - 日志级别枚举
diff --git a/docs/api/debug/logger/shutdown.md b/docs/api/debug/logger/shutdown.md
new file mode 100644
index 0000000..79cc35b
--- /dev/null
+++ b/docs/api/debug/logger/shutdown.md
@@ -0,0 +1,26 @@
+# Logger::Shutdown
+
+```cpp
+void Shutdown()
+```
+
+关闭日志系统。移除所有注册的 Sink,刷新缓冲区并重置内部状态。在程序退出前调用,确保所有日志数据已写入输出目标。
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+int main() {
+ XCEngine::Debug::Logger::Get().Initialize();
+ // ... 应用逻辑 ...
+ XCEngine::Debug::Logger::Get().Shutdown();
+ return 0;
+}
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/verbose.md b/docs/api/debug/logger/verbose.md
new file mode 100644
index 0000000..9ef925b
--- /dev/null
+++ b/docs/api/debug/logger/verbose.md
@@ -0,0 +1,30 @@
+# Logger::Verbose
+
+```cpp
+void Verbose(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Verbose(0 级)日志。Verbose 是最详细的日志级别,用于输出大量调试细节。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Verbose(
+ XCEngine::Debug::LogCategory::Memory,
+ "Memory pool fragmentation: 12.5%"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/logger/warning.md b/docs/api/debug/logger/warning.md
new file mode 100644
index 0000000..f7e7efc
--- /dev/null
+++ b/docs/api/debug/logger/warning.md
@@ -0,0 +1,30 @@
+# Logger::Warning
+
+```cpp
+void Warning(LogCategory category, const Containers::String& message)
+```
+
+记录一条 Warning(3 级)日志。Warning 级别用于指示潜在问题但程序仍可继续运行的情况,如资源即将耗尽、配置值超出建议范围等。
+
+**参数:**
+- `category` - 日志分类
+- `message` - 日志消息内容
+
+**返回:** 无
+
+**复杂度:** O(n),n 为注册的 Sink 数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Logger::Get().Warning(
+ XCEngine::Debug::LogCategory::Memory,
+ "Memory usage exceeds 80% of available heap"
+);
+```
+
+## 相关文档
+
+- [Logger 总览](logger.md) - 返回类总览
diff --git a/docs/api/debug/loglevel/loglevel.md b/docs/api/debug/loglevel/loglevel.md
new file mode 100644
index 0000000..eda973b
--- /dev/null
+++ b/docs/api/debug/loglevel/loglevel.md
@@ -0,0 +1,40 @@
+# LogLevel
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `enum class`
+
+**描述**: 日志级别枚举,定义日志的严重程度。
+
+## 概述
+
+`LogLevel` 枚举定义了从最详细到最严重的日志级别。`Logger` 根据设置的最小级别过滤日志。
+
+## 枚举值
+
+| 值 | 说明 | 数值 |
+|----|------|------|
+| `Verbose` | 详细调试信息 | 0 |
+| `Debug` | 调试信息 | 1 |
+| `Info` | 一般信息 | 2 |
+| `Warning` | 警告信息 | 3 |
+| `Error` | 错误信息 | 4 |
+| `Fatal` | 致命错误 | 5 |
+
+## 辅助函数
+
+| 函数 | 描述 |
+|------|------|
+| `const char* LogLevelToString(LogLevel level)` | [将日志级别转换为字符串](logleveltostring.md) |
+
+## 使用示例
+
+```cpp
+Logger::Get().SetMinimumLevel(LogLevel::Warning);
+// 只有 Warning、Error、Fatal 级别的日志会被输出
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
diff --git a/docs/api/debug/loglevel/logleveltostring.md b/docs/api/debug/loglevel/logleveltostring.md
new file mode 100644
index 0000000..b07e98d
--- /dev/null
+++ b/docs/api/debug/loglevel/logleveltostring.md
@@ -0,0 +1,28 @@
+# LogLevelToString
+
+```cpp
+const char* LogLevelToString(LogLevel level)
+```
+
+将 `LogLevel` 枚举值转换为可读字符串。
+
+**参数:**
+- `level` - 日志级别
+
+**返回:** 对应级别的字符串("VERBOSE", "DEBUG", "INFO", "WARNING", "ERROR", "FATAL")
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::LogLevel level = XCEngine::Debug::LogLevel::Error;
+const char* str = XCEngine::Debug::LogLevelToString(level);
+// str == "ERROR"
+```
+
+## 相关文档
+
+- [LogLevel 总览](loglevel.md) - 返回类总览
diff --git a/docs/api/debug/profiler/beginframe.md b/docs/api/debug/profiler/beginframe.md
new file mode 100644
index 0000000..109142d
--- /dev/null
+++ b/docs/api/debug/profiler/beginframe.md
@@ -0,0 +1,26 @@
+# Profiler::BeginFrame
+
+```cpp
+void BeginFrame()
+```
+
+开始一帧的性能分析。记录当前帧的起始时间戳,用于计算帧级别的性能指标。应在每帧渲染开始时调用。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+void GameLoop() {
+ XCEngine::Debug::Profiler::Get().BeginFrame();
+ Update();
+ Render();
+ XCEngine::Debug::Profiler::Get().EndFrame();
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/beginprofile.md b/docs/api/debug/profiler/beginprofile.md
new file mode 100644
index 0000000..0203a51
--- /dev/null
+++ b/docs/api/debug/profiler/beginprofile.md
@@ -0,0 +1,36 @@
+# Profiler::BeginProfile
+
+```cpp
+void BeginProfile(const char* name)
+```
+
+开始一个性能分析块。将分析节点压入栈中并记录开始时间。每次调用 `BeginProfile` 应与一次 `EndProfile` 配对使用。
+
+**参数:**
+- `name` - 分析块的名称,用于在导出结果中标识
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+void ProcessMesh() {
+ XCEngine::Debug::Profiler::Get().BeginProfile("ProcessMesh");
+
+ XCEngine::Debug::Profiler::Get().BeginProfile("ComputeVertices");
+ ComputeVertices();
+ XCEngine::Debug::Profiler::Get().EndProfile();
+
+ XCEngine::Debug::Profiler::Get().BeginProfile("ComputeIndices");
+ ComputeIndices();
+ XCEngine::Debug::Profiler::Get().EndProfile();
+
+ XCEngine::Debug::Profiler::Get().EndProfile();
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/endframe.md b/docs/api/debug/profiler/endframe.md
new file mode 100644
index 0000000..d9e208b
--- /dev/null
+++ b/docs/api/debug/profiler/endframe.md
@@ -0,0 +1,26 @@
+# Profiler::EndFrame
+
+```cpp
+void EndFrame()
+```
+
+结束一帧的性能分析。记录当前帧的结束时间,计算帧耗时并可用于帧率统计。应在每帧渲染结束时调用。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+void GameLoop() {
+ XCEngine::Debug::Profiler::Get().BeginFrame();
+ Update();
+ Render();
+ XCEngine::Debug::Profiler::Get().EndFrame();
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/endprofile.md b/docs/api/debug/profiler/endprofile.md
new file mode 100644
index 0000000..c231a29
--- /dev/null
+++ b/docs/api/debug/profiler/endprofile.md
@@ -0,0 +1,25 @@
+# Profiler::EndProfile
+
+```cpp
+void EndProfile()
+```
+
+结束当前性能分析块。从栈顶弹出分析节点并计算持续时间(endTime - startTime),将结果保存到样本列表中。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+void RenderPipeline() {
+ XCEngine::Debug::Profiler::Get().BeginProfile("RenderPipeline");
+ // ... 渲染逻辑 ...
+ XCEngine::Debug::Profiler::Get().EndProfile();
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/exportchrometracing.md b/docs/api/debug/profiler/exportchrometracing.md
new file mode 100644
index 0000000..f0f7829
--- /dev/null
+++ b/docs/api/debug/profiler/exportchrometracing.md
@@ -0,0 +1,45 @@
+# Profiler::ExportChromeTracing
+
+```cpp
+void ExportChromeTracing(const Containers::String& filePath)
+```
+
+**状态:** 此方法目前为空实现,暂未功能。
+
+将收集的性能数据导出为 Chrome Tracing JSON 格式。导出的文件可通过 Chrome 浏览器打开(地址栏输入 `chrome://tracing` 并加载文件)进行可视化分析。
+
+**参数:**
+- `filePath` - 输出文件路径
+
+**复杂度:** O(n),n 为记录的样本数量
+
+**示例:**
+
+```cpp
+#include
+
+XCEngine::Debug::Profiler::Get().Initialize();
+
+void RenderFrame() {
+ XCEngine::Debug::Profiler::Get().BeginFrame();
+ XE_PROFILE_FUNCTION();
+
+ XE_PROFILE_BEGIN("UpdateScene");
+ UpdateScene();
+ XE_PROFILE_END();
+
+ XE_PROFILE_BEGIN("DrawScene");
+ DrawScene();
+ XE_PROFILE_END();
+
+ XCEngine::Debug::Profiler::Get().EndFrame();
+}
+
+// 运行一段时间后导出
+XCEngine::Debug::Profiler::Get().ExportChromeTracing("trace.json");
+XCEngine::Debug::Profiler::Get().Shutdown();
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/get.md b/docs/api/debug/profiler/get.md
new file mode 100644
index 0000000..7ee09d6
--- /dev/null
+++ b/docs/api/debug/profiler/get.md
@@ -0,0 +1,22 @@
+# Profiler::Get
+
+```cpp
+static Profiler& Get()
+```
+
+获取 `Profiler` 单例实例。Profiler 使用局部静态变量实现 Meyers' Singleton,确保线程安全且只初始化一次。
+
+**返回:** `Profiler&` - 全局性能分析器实例的引用
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Debug::Profiler& profiler = XCEngine::Debug::Profiler::Get();
+profiler.Initialize();
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/initialize.md b/docs/api/debug/profiler/initialize.md
new file mode 100644
index 0000000..eb9dcef
--- /dev/null
+++ b/docs/api/debug/profiler/initialize.md
@@ -0,0 +1,30 @@
+# Profiler::Initialize
+
+```cpp
+void Initialize()
+```
+
+初始化性能分析器。在首次使用性能分析功能前必须调用。初始化内部状态标志,确保分析器已准备好工作。
+
+**注意:** 帧计时器等数据结构在首次 BeginFrame 时自动初始化。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+int main() {
+ XCEngine::Debug::Profiler::Get().Initialize();
+ XCEngine::Debug::Profiler::Get().BeginFrame();
+ // ... 性能测量 ...
+ XCEngine::Debug::Profiler::Get().EndFrame();
+ XCEngine::Debug::Profiler::Get().Shutdown();
+ return 0;
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/markevent.md b/docs/api/debug/profiler/markevent.md
new file mode 100644
index 0000000..b1c7325
--- /dev/null
+++ b/docs/api/debug/profiler/markevent.md
@@ -0,0 +1,36 @@
+# Profiler::MarkEvent
+
+```cpp
+void MarkEvent(const char* name, uint64_t timestamp, uint32_t threadId)
+```
+
+**状态:** 此方法目前为空实现,暂未功能。
+
+在指定时间点标记一个事件。用于记录离散的瞬时事件,如 GPU 命令提交、状态切换等,通常用于多线程性能分析。
+
+**参数:**
+- `name` - 事件名称
+- `timestamp` - 事件发生的时间戳(微秒)
+- `threadId` - 事件所属的线程 ID
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+// 在多线程场景中标记事件
+void WorkerThread() {
+ uint32_t tid = GetCurrentThreadId();
+ uint64_t ts = GetTickCount();
+
+ XCEngine::Debug::Profiler::Get().MarkEvent("TaskStarted", ts, tid);
+ DoWork();
+ XCEngine::Debug::Profiler::Get().MarkEvent("TaskCompleted", GetTickCount(), tid);
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/profiler.md b/docs/api/debug/profiler/profiler.md
new file mode 100644
index 0000000..23d7eaf
--- /dev/null
+++ b/docs/api/debug/profiler/profiler.md
@@ -0,0 +1,136 @@
+# Profiler
+
+**命名空间**: `XCEngine::Debug`
+
+**类型**: `class` (singleton)
+
+**描述**: 性能分析器单例,用于测量代码块执行时间并支持 Chrome Tracing 格式导出。
+
+## 概述
+
+`Profiler` 是 XCEngine 的性能分析工具。它通过栈式记录和采样方式跟踪函数执行时间,支持导出为 Chrome Tracing 格式(可通过 Chrome 的 `chrome://tracing` 查看)。
+
+## 单例访问
+
+| 方法 | 描述 |
+|------|------|
+| `static Profiler& Get()` | 获取单例实例 |
+
+## 公共方法
+
+| 方法 | 描述 |
+|------|------|
+| `void Initialize()` | [初始化性能分析器](initialize.md) |
+| `void Shutdown()` | [关闭性能分析器](shutdown.md) |
+| `void BeginProfile(const char* name)` | [开始一个性能分析块](beginprofile.md) |
+| `void EndProfile()` | [结束当前性能分析块](endprofile.md) |
+| `void BeginFrame()` | [开始一帧的分析](beginframe.md) |
+| `void EndFrame()` | [结束一帧的分析](endframe.md) |
+| `void MarkEvent(const char* name, uint64_t timestamp, uint32_t threadId)` | [标记一个事件点](markevent.md) |
+| `void SetMarker(const char* name, uint32_t color)` | [设置帧标记](setmarker.md) |
+| `void ExportChromeTracing(const Containers::String& filePath)` | [导出为 Chrome Tracing JSON 格式](exportchrometracing.md) |
+
+## 宏定义
+
+### XE_PROFILE_BEGIN
+
+```cpp
+#define XE_PROFILE_BEGIN(name) XCEngine::Debug::Profiler::Get().BeginProfile(name)
+```
+
+开始分析指定名称的代码块。
+
+### XE_PROFILE_END
+
+```cpp
+#define XE_PROFILE_END() XCEngine::Debug::Profiler::Get().EndProfile()
+```
+
+结束当前分析块。
+
+### XE_PROFILE_FUNCTION
+
+```cpp
+#define XE_PROFILE_FUNCTION() XE_PROFILE_BEGIN(__FUNCTION__)
+```
+
+自动使用当前函数名进行分析。
+
+## 私有成员
+
+### ProfileNode
+
+```cpp
+struct ProfileNode {
+ const char* name;
+ uint64_t startTime;
+ uint64_t endTime;
+ uint32_t threadId;
+};
+```
+
+内部使用的性能分析节点结构,用于在栈上跟踪嵌套的分析块。
+
+### ProfileSample
+
+```cpp
+struct ProfileSample {
+ const char* name;
+ uint64_t duration;
+ uint32_t threadId;
+};
+```
+
+记录单个性能样本的结构,包含名称、持续时间和线程 ID。
+
+## 成员变量
+
+| 成员 | 类型 | 描述 |
+|------|------|------|
+| `m_profileStack` | `std::vector` | 分析块栈,用于跟踪嵌套调用 |
+| `m_samples` | `std::vector` | 样本列表,记录完成的性能数据 |
+| `m_frameStartTime` | `uint64_t` | 当前帧开始时间戳(微秒) |
+| `m_initialized` | `bool` | 初始化标志 |
+
+## 实现状态
+
+以下方法目前为存根(stub)实现,尚未完成功能:
+
+| 方法 | 状态 |
+|------|------|
+| `void MarkEvent(const char* name, uint64_t timestamp, uint32_t threadId)` | 存根 |
+| `void SetMarker(const char* name, uint32_t color)` | 存根 |
+| `void ExportChromeTracing(const Containers::String& filePath)` | 存根 |
+
+## 使用示例
+
+```cpp
+Profiler::Get().Initialize();
+
+void RenderFrame() {
+ XE_PROFILE_FUNCTION();
+
+ {
+ XE_PROFILE_BEGIN("UpdateGeometry");
+ UpdateGeometry();
+ XE_PROFILE_END();
+ }
+
+ {
+ XE_PROFILE_BEGIN("DrawCalls");
+ DrawCalls();
+ XE_PROFILE_END();
+ }
+}
+
+Profiler::Get().BeginFrame();
+// ... 渲染帧 ...
+Profiler::Get().EndFrame();
+Profiler::Get().ExportChromeTracing("profile.json");
+Profiler::Get().Shutdown();
+```
+
+## 相关文档
+
+- [Debug 模块总览](../debug.md) - 返回模块总览
+- [Logger](../logger/logger.md) - 日志记录器
diff --git a/docs/api/debug/profiler/setmarker.md b/docs/api/debug/profiler/setmarker.md
new file mode 100644
index 0000000..a9610c8
--- /dev/null
+++ b/docs/api/debug/profiler/setmarker.md
@@ -0,0 +1,33 @@
+# Profiler::SetMarker
+
+```cpp
+void SetMarker(const char* name, uint32_t color)
+```
+
+**状态:** 此方法目前为空实现,暂未功能。
+
+在 Chrome Tracing 时间线上设置一个标记点,用于标记特定位置或状态。标记会显示为一条垂直线,便于在性能图中定位关键事件。
+
+**参数:**
+- `name` - 标记名称
+- `color` - 标记颜色(ABGR 格式)
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+#include
+
+void OnVBlank() {
+ XCEngine::Debug::Profiler::Get().SetMarker("VBlank", 0xFF00FF00); // 绿色
+}
+
+void OnRenderComplete() {
+ XCEngine::Debug::Profiler::Get().SetMarker("FrameRendered", 0xFFFF0000); // 红色
+}
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/debug/profiler/shutdown.md b/docs/api/debug/profiler/shutdown.md
new file mode 100644
index 0000000..8d01e54
--- /dev/null
+++ b/docs/api/debug/profiler/shutdown.md
@@ -0,0 +1,22 @@
+# Profiler::Shutdown
+
+```cpp
+void Shutdown()
+```
+
+关闭性能分析器。清理内部数据结构,停止所有活动分析块,重置状态。在程序退出前调用。
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+XCEngine::Debug::Profiler::Get().Initialize();
+// ... 使用 Profiler ...
+XCEngine::Debug::Profiler::Get().ExportChromeTracing("profile.json");
+XCEngine::Debug::Profiler::Get().Shutdown();
+```
+
+## 相关文档
+
+- [Profiler 总览](profiler.md) - 返回类总览
diff --git a/docs/api/fix_links.py b/docs/api/fix_links.py
new file mode 100644
index 0000000..36867ea
--- /dev/null
+++ b/docs/api/fix_links.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python3
+"""
+Fix broken cross-references in API documentation.
+"""
+
+import os
+import re
+from pathlib import Path
+
+API_DOCS_ROOT = Path(r"D:\Xuanchi\Main\XCEngine\docs\api")
+
+
+def normalize_path(path_str):
+ """Remove duplicate path segments like ./module/./module/."""
+ parts = []
+ for part in path_str.replace("\\", "/").split("/"):
+ if part == "." or part == "":
+ continue
+ parts.append(part)
+ return "/".join(parts)
+
+
+def resolve_reference(current_file, ref_path):
+ """Resolve a reference path relative to current file and check if it exists."""
+ current_file = Path(current_file)
+ parent_dir = current_file.parent
+
+ # Normalize the reference path
+ normalized_ref = normalize_path(ref_path)
+
+ # Try to resolve the path
+ resolved = (parent_dir / normalized_ref).resolve()
+
+ # Also try with normalized path
+ resolved2 = (parent_dir / ref_path.replace("\\", "/")).resolve()
+
+ return resolved, resolved2
+
+
+def get_relative_path(from_file, to_file):
+ """Get correct relative path from one file to another."""
+ from_file = Path(from_file)
+ to_file = Path(to_file)
+
+ # Get common prefix
+ from_parts = from_file.parts
+ to_parts = to_file.parts
+
+ # Find common prefix length
+ common_len = 0
+ for i in range(min(len(from_parts), len(to_parts))):
+ if from_parts[i] == to_parts[i]:
+ common_len = i + 1
+ else:
+ break
+
+ # Build relative path
+ up_count = len(from_parts) - common_len - 1 # -1 for the filename
+ parts = [".."] * up_count + list(to_parts[common_len:])
+
+ return "/".join(parts)
+
+
+def find_file_by_name(target_name, base_dir):
+ """Find a file with given name in the base directory."""
+ base_dir = Path(base_dir)
+ api_docs = API_DOCS_ROOT
+
+ # Search for the file
+ pattern = f"**/{target_name}"
+ matches = list(api_docs.glob(pattern))
+
+ # Filter for exact filename match
+ for match in matches:
+ if match.name == target_name:
+ return match
+
+ return None
+
+
+def fix_links_in_file(file_path, verbose=True):
+ """Analyze and fix links in a single file."""
+ file_path = Path(file_path)
+
+ if not file_path.exists():
+ return []
+
+ with open(file_path, "r", encoding="utf-8") as f:
+ content = f.read()
+
+ original_content = content
+ fixes = []
+
+ # Find all markdown links: [text](path)
+ link_pattern = r"\[([^\]]*)\]\(([^)]+\.md)\)"
+
+ def replace_link(match):
+ link_text = match.group(1)
+ link_path = match.group(2)
+
+ # Skip external links
+ if link_path.startswith("http://") or link_path.startswith("https://"):
+ return match.group(0)
+
+ # Skip anchor links
+ if link_path.startswith("#"):
+ return match.group(0)
+
+ # Normalize the path
+ normalized = normalize_path(link_path)
+
+ # Try to resolve the target file
+ parent_dir = file_path.parent
+
+ # Try the exact path first
+ target_path = parent_dir / link_path.replace("\\", "/")
+ target_exists = target_path.exists()
+
+ if not target_exists:
+ # Try normalized path
+ target_path = parent_dir / normalized
+ target_exists = target_path.exists()
+
+ if not target_exists:
+ # Try to find the file elsewhere
+ # Get just the filename
+ filename = Path(normalized).name
+
+ # Try to find it
+ found = find_file_by_name(filename, API_DOCS_ROOT)
+ if found:
+ # Calculate correct relative path
+ correct_rel = get_relative_path(file_path, found)
+ if correct_rel != normalized:
+ fixes.append(
+ {
+ "file": file_path,
+ "line": content[: match.start()].count("\n") + 1,
+ "old": link_path,
+ "new": correct_rel,
+ "target": found,
+ }
+ )
+ return f"[{link_text}]({correct_rel})"
+ else:
+ fixes.append(
+ {
+ "file": file_path,
+ "line": content[: match.start()].count("\n") + 1,
+ "old": link_path,
+ "new": None,
+ "target": None,
+ "error": "Target file not found",
+ }
+ )
+ return match.group(0)
+ elif normalized != link_path:
+ # Path has duplicate segments that need fixing
+ fixes.append(
+ {
+ "file": file_path,
+ "line": content[: match.start()].count("\n") + 1,
+ "old": link_path,
+ "new": normalized,
+ "target": target_path,
+ }
+ )
+ return f"[{link_text}]({normalized})"
+
+ return match.group(0)
+
+ new_content = re.sub(link_pattern, replace_link, content)
+
+ if new_content != original_content:
+ with open(file_path, "w", encoding="utf-8") as f:
+ f.write(new_content)
+
+ return fixes
+
+
+def main():
+ print("=" * 70)
+ print("API Documentation Cross-Reference Fixer")
+ print("=" * 70)
+
+ # Collect all markdown files
+ md_files = list(API_DOCS_ROOT.glob("**/*.md"))
+ print(f"\nFound {len(md_files)} markdown files in {API_DOCS_ROOT}")
+
+ all_fixes = []
+ broken_refs = []
+
+ for md_file in md_files:
+ fixes = fix_links_in_file(md_file, verbose=False)
+ for fix in fixes:
+ if fix.get("error"):
+ broken_refs.append(fix)
+ else:
+ all_fixes.append(fix)
+
+ print(f"\n{'=' * 70}")
+ print("FIXES APPLIED:")
+ print("=" * 70)
+
+ if all_fixes:
+ for fix in all_fixes:
+ rel_file = fix["file"].relative_to(API_DOCS_ROOT)
+ print(f"\n File: {rel_file}")
+ print(f" Line: {fix['line']}")
+ print(f" Old: {fix['old']}")
+ print(f" New: {fix['new']}")
+ else:
+ print("\n No fixes needed.")
+
+ print(f"\n{'=' * 70}")
+ print("BROKEN REFERENCES (target files don't exist):")
+ print("=" * 70)
+
+ if broken_refs:
+ for ref in broken_refs:
+ rel_file = ref["file"].relative_to(API_DOCS_ROOT)
+ print(f"\n File: {rel_file}")
+ print(f" Line: {ref['line']}")
+ print(f" Broken ref: {ref['old']}")
+ else:
+ print("\n No broken references found.")
+
+ print(f"\n{'=' * 70}")
+ print(f"SUMMARY:")
+ print(f" Total fixes applied: {len(all_fixes)}")
+ print(f" Broken references: {len(broken_refs)}")
+ print("=" * 70)
+
+ return len(all_fixes), len(broken_refs)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/docs/api/main.md b/docs/api/main.md
new file mode 100644
index 0000000..1f9f256
--- /dev/null
+++ b/docs/api/main.md
@@ -0,0 +1,94 @@
+# XCEngine API 文档总索引
+
+**描述**: XCEngine 图形引擎的完整 API 文档索引。
+
+---
+
+## 模块导航
+
+| 模块 | 文档目录 | 描述 |
+|------|----------|------|
+| **RHI** | [rhi/](rhi/rhi.md) | 渲染硬件接口抽象层 |
+| **D3D12** | [rhi/d3d12/](rhi/opengl/overview.md) | DirectX 12 后端实现 |
+| **OpenGL** | [rhi/opengl/](rhi/opengl/overview.md) | OpenGL 后端实现 |
+| **Containers** | [containers/](containers/containers.md) | 容器数据结构 |
+| **Memory** | [memory/](memory/memory.md) | 内存管理 |
+| **Threading** | [threading/](threading/threading.md) | 多线程和任务系统 |
+| **Core** | [core/](core/core.md) | 核心基础类型 |
+| **Debug** | [debug/](debug/debug.md) | 调试和日志 |
+| **Math** | [math/](math/math.md) | 数学库 |
+| **Resources** | [resources/](resources/resources.md) | 资源管理系统 |
+
+---
+
+## 快速开始
+
+### 创建渲染设备
+
+```cpp
+#include
+#include
+
+// 创建 D3D12 设备
+RHI::RHIDevice* device = RHI::RHIFactory::CreateRHIDevice(RHI::RHIType::D3D12);
+
+// 初始化
+RHI::RHIDeviceDesc desc;
+desc.windowHandle = hwnd;
+device->Initialize(desc);
+```
+
+### 使用资源管理器
+
+```cpp
+#include
+
+// 加载纹理
+auto texture = Resources::ResourceManager::Get().Load("textures/player.png");
+
+// 加载网格
+auto mesh = Resources::ResourceManager::Get().Load("models/player.fbx");
+```
+
+### 日志记录
+
+```cpp
+#include
+
+// 记录日志
+XE_LOG(Debug::LogCategory::Rendering, Debug::LogLevel::Info, "Render started");
+```
+
+### 数学运算
+
+```cpp
+#include
+
+// 创建变换矩阵
+Math::Matrix4 transform = Math::Matrix4::TRS(position, rotation, scale);
+```
+
+---
+
+## 文档统计
+
+| 模块 | 文档数量 |
+|------|----------|
+| RHI 抽象层 | 17 |
+| D3D12 后端 | 24 |
+| OpenGL 后端 | 14 |
+| Math | 17 |
+| Resources | 17 |
+| Threading | 10 |
+| Memory | 6 |
+| Debug | 9 |
+| Core | 6 |
+| Containers | 4 |
+| **总计** | **124** |
+
+---
+
+## 相关文档
+
+- [XCEngine 架构设计](../../docs/plan/XCEngine渲染引擎架构设计.md)
+- [RHI 抽象层设计](../../docs/plan/RHI抽象层设计与实现.md)
diff --git a/docs/api/math/aabb/aabb.md b/docs/api/math/aabb/aabb.md
new file mode 100644
index 0000000..637ef6c
--- /dev/null
+++ b/docs/api/math/aabb/aabb.md
@@ -0,0 +1,43 @@
+# AABB / OBB
+
+轴对齐包围盒 (AABB) 和有向包围盒 (OBB)。
+
+**头文件:** `#include `
+
+**命名空间:** `XCEngine::Math`
+
+## AABB
+
+`AABB` 在 Math 库中通过 `Bounds` 类型实现,参见 [./bounds/bounds.md](../bounds/bounds.md)。
+
+## OBB - 有向包围盒
+
+OBB 是可以任意方向旋转的包围盒。
+
+```cpp
+struct OBB {
+ Vector3 center;
+ Vector3 extents;
+ Matrix4 transform;
+};
+```
+
+### 构造函数
+
+- `OBB()` - 默认构造
+- `OBB(const Vector3& center, const Vector3& extents)` - 从中心和半长构造
+
+### 实例方法
+
+| 方法 | 返回值 | 描述 |
+|------|--------|------|
+| [GetAxis(index)](getaxis.md) | `Vector3` | 获取局部轴(index 必须是 0、1 或 2) |
+| [GetMin()](../box/getmin.md) | `Vector3` | 局部空间最小点 |
+| [GetMax()](../box/getmax.md) | `Vector3` | 局部空间最大点 |
+| [Contains(point)](../box/contains.md) | `bool` | 点是否在 OBB 内 |
+| [Intersects(OBB)](intersects-obb.md) | `bool` | 与另一个 OBB 相交 |
+| [Intersects(Sphere)](intersects-sphere.md) | `bool` | 与球体相交 |
+
+## 相关文档
+
+- [Math 模块总览](../math.md) - 返回 Math 模块总览
diff --git a/docs/api/math/aabb/getaxis.md b/docs/api/math/aabb/getaxis.md
new file mode 100644
index 0000000..769e6ec
--- /dev/null
+++ b/docs/api/math/aabb/getaxis.md
@@ -0,0 +1,23 @@
+# OBB::GetAxis
+
+```cpp
+Vector3 GetAxis(int index) const
+```
+
+获取 OBB 的局部坐标轴。
+
+**参数:**
+- `index` - 轴索引(0=X轴, 1=Y轴, 2=Z轴)
+
+**返回:** `Vector3` - 对应轴的方向向量
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+OBB obb = ...;
+Vector3 xAxis = obb.GetAxis(0); // 局部 X 轴
+Vector3 yAxis = obb.GetAxis(1); // 局部 Y 轴
+Vector3 zAxis = obb.GetAxis(2); // 局部 Z 轴
+```
diff --git a/docs/api/math/aabb/intersects-obb.md b/docs/api/math/aabb/intersects-obb.md
new file mode 100644
index 0000000..feeadb9
--- /dev/null
+++ b/docs/api/math/aabb/intersects-obb.md
@@ -0,0 +1,24 @@
+# OBB::Intersects (OBB)
+
+```cpp
+bool Intersects(const OBB& other) const
+```
+
+检测两个 OBB 是否相交(使用 SAT 分离轴定理)。
+
+**参数:**
+- `other` - 另一个 OBB
+
+**返回:** `bool` - true 表示相交
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+OBB obbA = ...;
+OBB obbB = ...;
+if (obbA.Intersects(obbB)) {
+ // 两个有向包围盒相交
+}
+```
diff --git a/docs/api/math/aabb/intersects-sphere.md b/docs/api/math/aabb/intersects-sphere.md
new file mode 100644
index 0000000..13d919a
--- /dev/null
+++ b/docs/api/math/aabb/intersects-sphere.md
@@ -0,0 +1,24 @@
+# OBB::Intersects (Sphere)
+
+```cpp
+bool Intersects(const Sphere& sphere) const
+```
+
+检测 OBB 是否与球体相交。
+
+**参数:**
+- `sphere` - 要检测的球体
+
+**返回:** `bool` - true 表示相交
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+OBB obb = ...;
+Sphere sphere = ...;
+if (obb.Intersects(sphere)) {
+ // OBB 与球体相交
+}
+```
diff --git a/docs/api/math/aabb/obb-contains.md b/docs/api/math/aabb/obb-contains.md
new file mode 100644
index 0000000..9aee18e
--- /dev/null
+++ b/docs/api/math/aabb/obb-contains.md
@@ -0,0 +1,20 @@
+# OBB::Contains
+
+```cpp
+bool Contains(const Vector3& point) const
+```
+
+检测点是否在 OBB 内。
+
+**参数:**
+- `point` - 要检测的点
+
+**返回:** `bool` - true 表示点在 OBB 内
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+if (obb.Contains(point)) { /* inside */ }
+```
diff --git a/docs/api/math/aabb/obb-getaxis.md b/docs/api/math/aabb/obb-getaxis.md
new file mode 100644
index 0000000..c438abc
--- /dev/null
+++ b/docs/api/math/aabb/obb-getaxis.md
@@ -0,0 +1,20 @@
+# OBB::GetAxis
+
+```cpp
+Vector3 GetAxis(int index) const
+```
+
+获取 OBB 的局部轴。
+
+**参数:**
+- `index` - 轴索引 (0=X, 1=Y, 2=Z)
+
+**返回:** `Vector3` - 对应的局部轴
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+Vector3 xAxis = obb.GetAxis(0);
+```
diff --git a/docs/api/math/aabb/obb-getmax.md b/docs/api/math/aabb/obb-getmax.md
new file mode 100644
index 0000000..04e56e8
--- /dev/null
+++ b/docs/api/math/aabb/obb-getmax.md
@@ -0,0 +1,17 @@
+# OBB::GetMax
+
+```cpp
+Vector3 GetMax() const
+```
+
+获取局部空间最大点。
+
+**返回:** `Vector3` - center + extents
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+Vector3 max = obb.GetMax();
+```
diff --git a/docs/api/math/aabb/obb-getmin.md b/docs/api/math/aabb/obb-getmin.md
new file mode 100644
index 0000000..34d1bf1
--- /dev/null
+++ b/docs/api/math/aabb/obb-getmin.md
@@ -0,0 +1,17 @@
+# OBB::GetMin
+
+```cpp
+Vector3 GetMin() const
+```
+
+获取局部空间最小点。
+
+**返回:** `Vector3` - center - extents
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+Vector3 min = obb.GetMin();
+```
diff --git a/docs/api/math/aabb/obb-intersects-obb.md b/docs/api/math/aabb/obb-intersects-obb.md
new file mode 100644
index 0000000..fb06b8a
--- /dev/null
+++ b/docs/api/math/aabb/obb-intersects-obb.md
@@ -0,0 +1,25 @@
+# OBB::Intersects(OBB)
+
+```cpp
+bool Intersects(const OBB& other) const;
+```
+
+判断两个 OBB 是否相交(SAT 分离轴定理)。
+
+**返回:** 两包围盒是否相交
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+OBB a(centerA, extentsA);
+OBB b(centerB, extentsB);
+if (a.Intersects(b)) {
+ // 两包围盒相交
+}
+```
+
+## 相关文档
+
+- [AABB 总览](aabb.md) - 返回 AABB 概览
diff --git a/docs/api/math/aabb/obb-intersects-sphere.md b/docs/api/math/aabb/obb-intersects-sphere.md
new file mode 100644
index 0000000..57071ef
--- /dev/null
+++ b/docs/api/math/aabb/obb-intersects-sphere.md
@@ -0,0 +1,28 @@
+# OBB::Intersects(Sphere)
+
+```cpp
+bool Intersects(const Sphere& sphere) const;
+```
+
+判断 OBB 与球体是否相交。
+
+**参数:**
+- `sphere` - 球体
+
+**返回:** OBB 与球体是否相交
+
+**复杂度:** O(1)
+
+**示例:**
+
+```cpp
+OBB obb(center, extents);
+Sphere s(sphereCenter, radius);
+if (obb.Intersects(s)) {
+ // OBB 与球体相交
+}
+```
+
+## 相关文档
+
+- [AABB 总览](aabb.md) - 返回 AABB 概览
diff --git a/docs/api/math/bounds/bounds.md b/docs/api/math/bounds/bounds.md
new file mode 100644
index 0000000..ba8aaf2
--- /dev/null
+++ b/docs/api/math/bounds/bounds.md
@@ -0,0 +1,40 @@
+# Bounds
+
+轴对齐包围盒 (AABB),中心-范围表示。
+
+**头文件:** `#include