diff --git a/Extra2D/include/extra2d/core/object_pool.h b/Extra2D/include/extra2d/core/object_pool.h index db45a2b..ea6305f 100644 --- a/Extra2D/include/extra2d/core/object_pool.h +++ b/Extra2D/include/extra2d/core/object_pool.h @@ -1,7 +1,7 @@ #pragma once -#include #include +#include #include namespace extra2d { @@ -11,54 +11,53 @@ namespace extra2d { * @tparam T 对象类型 * @tparam Size 池大小 */ -template -class ObjectPool { +template class ObjectPool { public: - ObjectPool() { - for (size_t i = 0; i < Size; ++i) { - available_.push(&pool_[i]); - } + ObjectPool() { + for (size_t i = 0; i < Size; ++i) { + available_.push(&pool_[i]); } + } - /** - * @brief 获取对象 - * @return 对象指针,池耗尽返回nullptr - */ - T* acquire() { - if (available_.empty()) { - return nullptr; - } - T* obj = available_.front(); - available_.pop(); - return obj; + /** + * @brief 获取对象 + * @return 对象指针,池耗尽返回nullptr + */ + T *acquire() { + if (available_.empty()) { + return nullptr; } + T *obj = available_.front(); + available_.pop(); + return obj; + } - /** - * @brief 释放对象回池 - * @param obj 对象指针 - */ - void release(T* obj) { - if (obj >= pool_.data() && obj < pool_.data() + Size) { - obj->~T(); - new (obj) T(); - available_.push(obj); - } + /** + * @brief 释放对象回池 + * @param obj 对象指针 + */ + void release(T *obj) { + if (obj >= pool_ && obj < pool_ + Size) { + obj->~T(); + new (obj) T(); + available_.push(obj); } + } - /** - * @brief 获取可用对象数量 - */ - size_t available() const { return available_.size(); } + /** + * @brief 获取可用对象数量 + */ + size_t available() const { return available_.size(); } - /** - * @brief 获取池总大小 - */ - static constexpr size_t capacity() { return Size; } + /** + * @brief 获取池总大小 + */ + static constexpr size_t capacity() { return Size; } private: - alignas(alignof(T)) std::array storage_; - T* pool_ = reinterpret_cast(storage_.data()); - std::queue available_; + alignas(alignof(T)) std::array storage_; + T *pool_ = reinterpret_cast(storage_.data()); + std::queue available_; }; } // namespace extra2d diff --git a/Extra2D/include/extra2d/render/renderer.h b/Extra2D/include/extra2d/render/renderer.h deleted file mode 100644 index fe29188..0000000 --- a/Extra2D/include/extra2d/render/renderer.h +++ /dev/null @@ -1,130 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace extra2d { - -class Camera2D; -class TextureAsset; -class FontAsset; -class SceneNode; - -using RendererRef = Ref; - -class IRenderer2D { -public: - virtual ~IRenderer2D() = default; - - virtual bool init(void* nativeWindow) = 0; - virtual void shutdown() = 0; - virtual void resize(i32 width, i32 height) = 0; - - virtual void beginFrame() = 0; - virtual void endFrame() = 0; - virtual void present() = 0; - - virtual void setViewport(const Viewport& viewport) = 0; - virtual void setScissor(const Scissor& scissor) = 0; - virtual void clear(const ClearCommand& cmd) = 0; - - virtual void setCamera(const Camera2D* camera) = 0; - virtual void resetCamera() = 0; - - virtual void setBlendMode(BlendMode mode) = 0; - virtual void setRenderState(const RenderState& state) = 0; - - virtual TextureRef createTexture(const TextureDesc& desc) = 0; - virtual TextureRef createTextureFromAsset(Ref asset) = 0; - virtual void destroyTexture(TextureRef texture) = 0; - - virtual Ref createTextureArray(i32 width, i32 height, - u32 maxLayers, - TextureFormat format) = 0; - - virtual ShaderRef createShader(const std::string& vertexSrc, - const std::string& fragmentSrc) = 0; - virtual void destroyShader(ShaderRef shader) = 0; - - virtual void drawSprite(TextureRef texture, - const Vec2& position, - const Vec2& size, - const Vec2& scale, - float rotation, - const Vec2& anchor, - const TextureRegion& region, - const Color& tint, - float opacity) = 0; - - virtual void drawSpriteBatch(const std::vector& vertices, - const std::vector& indices, - TextureRef texture) = 0; - - virtual void drawText(Ref font, - const std::string& text, - const Vec2& position, - float fontSize, - const Color& color, - float opacity) = 0; - - virtual void drawRect(const Rect& rect, const Color& color, bool filled) = 0; - virtual void drawRect(const Vec2& position, const Vec2& size, - const Color& color, bool filled) = 0; - - virtual void drawCircle(const Vec2& center, float radius, - const Color& color, bool filled, - u32 segments = 32) = 0; - - virtual void drawLine(const Vec2& start, const Vec2& end, - const Color& color, float thickness = 1.0f) = 0; - - virtual void drawLines(const std::vector& points, - const Color& color, - float thickness = 1.0f) = 0; - - virtual void drawPolygon(const std::vector& points, - const Color& color, - bool filled) = 0; - - virtual void drawShapeBatch(const std::vector& vertices, - const std::vector& indices, - PrimitiveType primitive) = 0; - - virtual void flushBatch() = 0; - - virtual i32 width() const = 0; - virtual i32 height() const = 0; - - virtual bool isVulkan() const = 0; - virtual const char* backendName() const = 0; - - static RendererRef create(bool preferVulkan = true); -}; - -struct RenderStats { - u32 drawCalls = 0; - u32 quadCount = 0; - u32 vertexCount = 0; - u32 indexCount = 0; - u32 textureSwitches = 0; - u32 shaderSwitches = 0; - - void reset() { - drawCalls = 0; - quadCount = 0; - vertexCount = 0; - indexCount = 0; - textureSwitches = 0; - shaderSwitches = 0; - } -}; - -} diff --git a/Extra2D/src/services/asset_service.cpp b/Extra2D/src/services/asset_service.cpp index 884e899..f04cf60 100644 --- a/Extra2D/src/services/asset_service.cpp +++ b/Extra2D/src/services/asset_service.cpp @@ -1,6 +1,5 @@ #include "extra2d/services/asset_service.h" -#include #include namespace extra2d { @@ -79,18 +78,18 @@ size_t AssetService::size() const { return cache_->size(); } void AssetService::purge() { std::unique_lock lock(mutex_); - + std::vector toRemove; - for (const auto& [id, loaded] : assets_) { + for (const auto &[id, loaded] : assets_) { if (loaded.asset.use_count() <= 2) { toRemove.push_back(id); } } - for (const auto& id : toRemove) { + for (const auto &id : toRemove) { assets_.erase(id); states_.erase(id); } - + cache_->purge(); }