refactor(core): 重命名智能指针类型别名

将 UniquePtr 重命名为 Unique,WeakPtr 重命名为 Weak
更新相关文件和文档中的引用
This commit is contained in:
ChestnutYueyue 2026-02-23 22:57:23 +08:00
parent c61edbb9dd
commit ec136e42e4
7 changed files with 131 additions and 124 deletions

View File

@ -60,10 +60,10 @@ private:
AppConfig config_; AppConfig config_;
UniquePtr<Window> window_; Unique<Window> window_;
UniquePtr<Renderer> renderer_; Unique<Renderer> renderer_;
UniquePtr<EventQueue> eventQueue_; Unique<EventQueue> eventQueue_;
UniquePtr<EventDispatcher> eventDispatcher_; Unique<EventDispatcher> eventDispatcher_;
bool initialized_ = false; bool initialized_ = false;
bool running_ = false; bool running_ = false;

View File

@ -3,7 +3,6 @@
#include <cstdint> #include <cstdint>
#include <functional> #include <functional>
#include <memory> #include <memory>
#include <string>
namespace extra2d { namespace extra2d {
@ -12,9 +11,9 @@ namespace extra2d {
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
template <typename T> using Ptr = std::shared_ptr<T>; template <typename T> using Ptr = std::shared_ptr<T>;
template <typename T> using UniquePtr = std::unique_ptr<T>; template <typename T> using Unique = std::unique_ptr<T>;
template <typename T> using WeakPtr = std::weak_ptr<T>; template <typename T> using Weak = std::weak_ptr<T>;
/// 创建 shared_ptr 的便捷函数 /// 创建 shared_ptr 的便捷函数
template <typename T, typename... Args> inline Ptr<T> shared(Args &&...args) { template <typename T, typename... Args> inline Ptr<T> shared(Args &&...args) {
@ -23,7 +22,7 @@ template <typename T, typename... Args> inline Ptr<T> shared(Args &&...args) {
/// 创建 unique_ptr 的便捷函数 /// 创建 unique_ptr 的便捷函数
template <typename T, typename... Args> template <typename T, typename... Args>
inline UniquePtr<T> unique(Args &&...args) { inline Unique<T> unique(Args &&...args) {
return std::make_unique<T>(std::forward<Args>(args)...); return std::make_unique<T>(std::forward<Args>(args)...);
} }

View File

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <atomic>
#include <extra2d/audio/sound.h> #include <extra2d/audio/sound.h>
#include <extra2d/core/types.h> #include <extra2d/core/types.h>
#include <extra2d/graphics/alpha_mask.h> #include <extra2d/graphics/alpha_mask.h>
@ -7,15 +8,15 @@
#include <extra2d/graphics/texture.h> #include <extra2d/graphics/texture.h>
#include <functional> #include <functional>
#include <future> #include <future>
#include <mutex>
#include <string>
#include <unordered_map>
#include <queue>
#include <thread>
#include <atomic>
#include <list> #include <list>
#include <mutex>
#include <queue>
#include <string>
#include <thread>
#include <unordered_map>
#include <vector> #include <vector>
namespace extra2d { namespace extra2d {
// ============================================================================ // ============================================================================
@ -25,14 +26,14 @@ namespace extra2d {
// 纹理格式枚举 // 纹理格式枚举
enum class TextureFormat { enum class TextureFormat {
Auto = 0, // 自动选择最佳格式 Auto = 0, // 自动选择最佳格式
RGBA8, // 32位 RGBA RGBA8, // 32位 RGBA
RGB8, // 24位 RGB RGB8, // 24位 RGB
DXT1, // BC1/DXT1 压缩1 bit alpha DXT1, // BC1/DXT1 压缩1 bit alpha
DXT5, // BC3/DXT5 压缩(完整 alpha DXT5, // BC3/DXT5 压缩(完整 alpha
ETC2, // ETC2 压缩(移动平台) ETC2, // ETC2 压缩(移动平台)
ASTC4x4, // ASTC 4x4 压缩(高质量) ASTC4x4, // ASTC 4x4 压缩(高质量)
ASTC8x8, // ASTC 8x8 压缩(高压缩率) ASTC8x8, // ASTC 8x8 压缩(高压缩率)
}; };
// ============================================================================ // ============================================================================
@ -40,9 +41,9 @@ enum class TextureFormat {
// ============================================================================ // ============================================================================
struct TextureCacheEntry { struct TextureCacheEntry {
Ptr<Texture> texture; Ptr<Texture> texture;
size_t size = 0; // 纹理大小(字节) size_t size = 0; // 纹理大小(字节)
float lastAccessTime = 0.0f; // 最后访问时间 float lastAccessTime = 0.0f; // 最后访问时间
uint32_t accessCount = 0; // 访问次数 uint32_t accessCount = 0; // 访问次数
}; };
// 异步加载回调类型 // 异步加载回调类型
@ -66,13 +67,16 @@ public:
Ptr<Texture> loadTexture(const std::string &filepath, bool async); Ptr<Texture> loadTexture(const std::string &filepath, bool async);
/// 加载纹理(完整参数:异步 + 压缩格式) /// 加载纹理(完整参数:异步 + 压缩格式)
Ptr<Texture> loadTexture(const std::string &filepath, bool async, TextureFormat format); Ptr<Texture> loadTexture(const std::string &filepath, bool async,
TextureFormat format);
/// 异步加载纹理(带回调) /// 异步加载纹理(带回调)
void loadTextureAsync(const std::string &filepath, TextureLoadCallback callback); void loadTextureAsync(const std::string &filepath,
TextureLoadCallback callback);
/// 异步加载纹理(指定格式 + 回调) /// 异步加载纹理(指定格式 + 回调)
void loadTextureAsync(const std::string &filepath, TextureFormat format, TextureLoadCallback callback); void loadTextureAsync(const std::string &filepath, TextureFormat format,
TextureLoadCallback callback);
/// 加载纹理并生成Alpha遮罩用于不规则形状图片 /// 加载纹理并生成Alpha遮罩用于不规则形状图片
Ptr<Texture> loadTextureWithAlphaMask(const std::string &filepath); Ptr<Texture> loadTextureWithAlphaMask(const std::string &filepath);
@ -146,7 +150,8 @@ public:
/// @param filepath 文件路径 /// @param filepath 文件路径
/// @param encoding 文件编码(默认 UTF-8 /// @param encoding 文件编码(默认 UTF-8
/// @return 文件内容字符串 /// @return 文件内容字符串
std::string loadTextFile(const std::string &filepath, const std::string &encoding); std::string loadTextFile(const std::string &filepath,
const std::string &encoding);
/// 通过key获取已缓存的文本内容 /// 通过key获取已缓存的文本内容
std::string getTextFile(const std::string &key) const; std::string getTextFile(const std::string &key) const;
@ -251,14 +256,16 @@ private:
bool useSDF) const; bool useSDF) const;
// 内部加载实现 // 内部加载实现
Ptr<Texture> loadTextureInternal(const std::string &filepath, TextureFormat format); Ptr<Texture> loadTextureInternal(const std::string &filepath,
TextureFormat format);
// 选择最佳纹理格式 // 选择最佳纹理格式
TextureFormat selectBestFormat(TextureFormat requested) const; TextureFormat selectBestFormat(TextureFormat requested) const;
// 压缩纹理数据 // 压缩纹理数据
std::vector<uint8_t> compressTexture(const uint8_t* data, int width, int height, std::vector<uint8_t> compressTexture(const uint8_t *data, int width,
int channels, TextureFormat format); int height, int channels,
TextureFormat format);
// 互斥锁保护缓存 // 互斥锁保护缓存
mutable std::mutex textureMutex_; mutable std::mutex textureMutex_;
@ -268,8 +275,8 @@ private:
mutable std::mutex jsonFileMutex_; mutable std::mutex jsonFileMutex_;
// 资源缓存 - 使用弱指针实现自动清理 // 资源缓存 - 使用弱指针实现自动清理
std::unordered_map<std::string, WeakPtr<FontAtlas>> fontCache_; std::unordered_map<std::string, Weak<FontAtlas>> fontCache_;
std::unordered_map<std::string, WeakPtr<Sound>> soundCache_; std::unordered_map<std::string, Weak<Sound>> soundCache_;
// 文本文件缓存 - 使用强引用(字符串值类型) // 文本文件缓存 - 使用强引用(字符串值类型)
std::unordered_map<std::string, std::string> textFileCache_; std::unordered_map<std::string, std::string> textFileCache_;
@ -282,24 +289,24 @@ private:
// LRU链表节点 // LRU链表节点
struct LRUNode { struct LRUNode {
std::string key; std::string key;
uint32_t prev = 0; // 数组索引0表示无效 uint32_t prev = 0; // 数组索引0表示无效
uint32_t next = 0; // 数组索引0表示无效 uint32_t next = 0; // 数组索引0表示无效
bool valid = false; bool valid = false;
}; };
// 纹理缓存配置 // 纹理缓存配置
size_t maxCacheSize_ = 64 * 1024 * 1024; // 最大缓存大小 (64MB) size_t maxCacheSize_ = 64 * 1024 * 1024; // 最大缓存大小 (64MB)
size_t maxTextureCount_ = 256; // 最大纹理数量 size_t maxTextureCount_ = 256; // 最大纹理数量
float unloadInterval_ = 30.0f; // 自动清理间隔 (秒) float unloadInterval_ = 30.0f; // 自动清理间隔 (秒)
// 纹理缓存 - 使用强指针保持引用 // 纹理缓存 - 使用强指针保持引用
std::unordered_map<std::string, TextureCacheEntry> textureCache_; std::unordered_map<std::string, TextureCacheEntry> textureCache_;
// 侵入式LRU链表 - 使用数组索引代替指针,提高缓存局部性 // 侵入式LRU链表 - 使用数组索引代替指针,提高缓存局部性
std::vector<LRUNode> lruNodes_; std::vector<LRUNode> lruNodes_;
uint32_t lruHead_ = 0; // 最近使用 uint32_t lruHead_ = 0; // 最近使用
uint32_t lruTail_ = 0; // 最久未使用 uint32_t lruTail_ = 0; // 最久未使用
uint32_t freeList_ = 0; // 空闲节点链表 uint32_t freeList_ = 0; // 空闲节点链表
// 统计 // 统计
size_t totalTextureSize_ = 0; size_t totalTextureSize_ = 0;

View File

@ -80,7 +80,7 @@ public:
* @brief * @brief
* @param color RGB颜色 * @param color RGB颜色
*/ */
void setColor(const Color3B& color); void setColor(const Color3B &color);
Color3B getColor() const { return color_; } Color3B getColor() const { return color_; }
/** /**
@ -163,7 +163,7 @@ public:
* @param action * @param action
* @return * @return
*/ */
Action* runAction(Action* action); Action *runAction(Action *action);
/** /**
* @brief * @brief
@ -174,7 +174,7 @@ public:
* @brief * @brief
* @param action * @param action
*/ */
void stopAction(Action* action); void stopAction(Action *action);
/** /**
* @brief * @brief
@ -193,7 +193,7 @@ public:
* @param tag * @param tag
* @return nullptr * @return nullptr
*/ */
Action* getActionByTag(int tag); Action *getActionByTag(int tag);
/** /**
* @brief * @brief
@ -248,57 +248,57 @@ private:
// ========================================================================== // ==========================================================================
// 1. 大块内存64字节 // 1. 大块内存64字节
mutable glm::mat4 localTransform_; // 64 bytes mutable glm::mat4 localTransform_; // 64 bytes
mutable glm::mat4 worldTransform_; // 64 bytes mutable glm::mat4 worldTransform_; // 64 bytes
// 2. 字符串和容器24-32字节 // 2. 字符串和容器24-32字节
std::string name_; // 32 bytes std::string name_; // 32 bytes
std::vector<Ptr<Node>> children_; // 24 bytes std::vector<Ptr<Node>> children_; // 24 bytes
// 3. 子节点索引(加速查找) // 3. 子节点索引(加速查找)
std::unordered_map<std::string, WeakPtr<Node>> nameIndex_; // 56 bytes std::unordered_map<std::string, Weak<Node>> nameIndex_; // 56 bytes
std::unordered_map<int, WeakPtr<Node>> tagIndex_; // 56 bytes std::unordered_map<int, Weak<Node>> tagIndex_; // 56 bytes
// 4. 事件分发器 // 4. 事件分发器
EventDispatcher eventDispatcher_; // 大小取决于实现 EventDispatcher eventDispatcher_; // 大小取决于实现
// 5. 父节点引用 // 5. 父节点引用
WeakPtr<Node> parent_; // 16 bytes Weak<Node> parent_; // 16 bytes
// 7. 变换属性(按访问频率分组) // 7. 变换属性(按访问频率分组)
Vec2 position_ = Vec2::Zero(); // 8 bytes Vec2 position_ = Vec2::Zero(); // 8 bytes
Vec2 scale_ = Vec2(1.0f, 1.0f); // 8 bytes Vec2 scale_ = Vec2(1.0f, 1.0f); // 8 bytes
Vec2 anchor_ = Vec2(0.5f, 0.5f); // 8 bytes Vec2 anchor_ = Vec2(0.5f, 0.5f); // 8 bytes
Vec2 skew_ = Vec2::Zero(); // 8 bytes Vec2 skew_ = Vec2::Zero(); // 8 bytes
// 8. 边界框(用于空间索引) // 8. 边界框(用于空间索引)
Rect lastSpatialBounds_; // 16 bytes Rect lastSpatialBounds_; // 16 bytes
// 9. 浮点属性 // 9. 浮点属性
float rotation_ = 0.0f; // 4 bytes float rotation_ = 0.0f; // 4 bytes
float opacity_ = 1.0f; // 4 bytes float opacity_ = 1.0f; // 4 bytes
// 10. 颜色属性 // 10. 颜色属性
Color3B color_ = Color3B(255, 255, 255); // 3 bytes Color3B color_ = Color3B(255, 255, 255); // 3 bytes
// 11. 整数属性 // 11. 整数属性
int zOrder_ = 0; // 4 bytes int zOrder_ = 0; // 4 bytes
int tag_ = -1; // 4 bytes int tag_ = -1; // 4 bytes
// 12. 布尔属性 // 12. 布尔属性
bool flipX_ = false; // 1 byte bool flipX_ = false; // 1 byte
bool flipY_ = false; // 1 byte bool flipY_ = false; // 1 byte
// 11. 场景指针 // 11. 场景指针
Scene *scene_ = nullptr; // 8 bytes Scene *scene_ = nullptr; // 8 bytes
// 12. 布尔标志(打包在一起) // 12. 布尔标志(打包在一起)
mutable bool transformDirty_ = true; // 1 byte mutable bool transformDirty_ = true; // 1 byte
mutable bool worldTransformDirty_ = true; // 1 byte mutable bool worldTransformDirty_ = true; // 1 byte
bool childrenOrderDirty_ = false; // 1 byte bool childrenOrderDirty_ = false; // 1 byte
bool visible_ = true; // 1 byte bool visible_ = true; // 1 byte
bool running_ = false; // 1 byte bool running_ = false; // 1 byte
bool spatialIndexed_ = true; // 1 byte bool spatialIndexed_ = true; // 1 byte
// 填充 2 bytes 到 8 字节对齐 // 填充 2 bytes 到 8 字节对齐
}; };

View File

@ -202,7 +202,7 @@ public:
private: private:
class Impl; class Impl;
UniquePtr<Impl> impl_; Unique<Impl> impl_;
std::string filename_; std::string filename_;
std::string mountName_; std::string mountName_;
UserId defaultUserId_; UserId defaultUserId_;

View File

@ -1,10 +1,11 @@
#pragma once #pragma once
#include <extra2d/core/types.h>
#include <extra2d/core/string.h>
#include <extra2d/core/math_types.h> #include <extra2d/core/math_types.h>
#include <extra2d/core/string.h>
#include <extra2d/core/types.h>
#include <functional> #include <functional>
#include <SDL.h> #include <SDL.h>
namespace extra2d { namespace extra2d {
@ -12,57 +13,57 @@ namespace extra2d {
class Input; class Input;
struct WindowConfig { struct WindowConfig {
std::string title = "Extra2D Application"; std::string title = "Extra2D Application";
int width = 1280; int width = 1280;
int height = 720; int height = 720;
bool fullscreen = true; bool fullscreen = true;
bool resizable = false; bool resizable = false;
bool vsync = true; bool vsync = true;
int msaaSamples = 0; int msaaSamples = 0;
bool centerWindow = true; bool centerWindow = true;
}; };
class Window { class Window {
public: public:
Window(); Window();
~Window(); ~Window();
bool create(const WindowConfig& config); bool create(const WindowConfig &config);
void destroy(); void destroy();
void pollEvents(); void pollEvents();
void swapBuffers(); void swapBuffers();
bool shouldClose() const; bool shouldClose() const;
void setShouldClose(bool close); void setShouldClose(bool close);
void setTitle(const std::string& title); void setTitle(const std::string &title);
void setSize(int width, int height); void setSize(int width, int height);
void setFullscreen(bool fullscreen); void setFullscreen(bool fullscreen);
void setVSync(bool enabled); void setVSync(bool enabled);
int getWidth() const { return width_; } int getWidth() const { return width_; }
int getHeight() const { return height_; } int getHeight() const { return height_; }
bool isFullscreen() const { return fullscreen_; } bool isFullscreen() const { return fullscreen_; }
bool isVSync() const { return vsync_; } bool isVSync() const { return vsync_; }
SDL_Window* getSDLWindow() const { return sdlWindow_; } SDL_Window *getSDLWindow() const { return sdlWindow_; }
SDL_GLContext getGLContext() const { return glContext_; } SDL_GLContext getGLContext() const { return glContext_; }
Input* getInput() const { return input_.get(); } Input *getInput() const { return input_.get(); }
private: private:
SDL_Window* sdlWindow_; SDL_Window *sdlWindow_;
SDL_GLContext glContext_; SDL_GLContext glContext_;
int width_; int width_;
int height_; int height_;
bool vsync_; bool vsync_;
bool shouldClose_; bool shouldClose_;
bool fullscreen_; bool fullscreen_;
UniquePtr<Input> input_; Unique<Input> input_;
bool initSDL(const WindowConfig& config); bool initSDL(const WindowConfig &config);
void deinitSDL(); void deinitSDL();
}; };
} // namespace extra2d } // namespace extra2d

View File

@ -103,7 +103,7 @@ mindmap
颜色 Color 颜色 Color
大小 Size 大小 Size
类型系统 类型系统
智能指针 Ptr/UniquePtr 智能指针 Ptr/Unique
字符串 String 字符串 String
平台抽象层 平台抽象层
窗口管理 Window 窗口管理 Window