refactor(asset_service): 移除未使用的algorithm头文件并清理代码格式

refactor(object_pool): 重构对象池实现并修复内存边界检查

chore: 删除废弃的renderer.h头文件
This commit is contained in:
ChestnutYueyue 2026-02-21 20:32:16 +08:00
parent 6195d57814
commit 24960516ae
3 changed files with 42 additions and 174 deletions

View File

@ -1,7 +1,7 @@
#pragma once
#include <extra2d/core/types.h>
#include <array>
#include <extra2d/core/types.h>
#include <queue>
namespace extra2d {
@ -11,8 +11,7 @@ namespace extra2d {
* @tparam T
* @tparam Size
*/
template <typename T, size_t Size>
class ObjectPool {
template <typename T, size_t Size> class ObjectPool {
public:
ObjectPool() {
for (size_t i = 0; i < Size; ++i) {
@ -24,11 +23,11 @@ public:
* @brief
* @return nullptr
*/
T* acquire() {
T *acquire() {
if (available_.empty()) {
return nullptr;
}
T* obj = available_.front();
T *obj = available_.front();
available_.pop();
return obj;
}
@ -37,8 +36,8 @@ public:
* @brief
* @param obj
*/
void release(T* obj) {
if (obj >= pool_.data() && obj < pool_.data() + Size) {
void release(T *obj) {
if (obj >= pool_ && obj < pool_ + Size) {
obj->~T();
new (obj) T();
available_.push(obj);
@ -57,8 +56,8 @@ public:
private:
alignas(alignof(T)) std::array<u8, sizeof(T) * Size> storage_;
T* pool_ = reinterpret_cast<T*>(storage_.data());
std::queue<T*> available_;
T *pool_ = reinterpret_cast<T *>(storage_.data());
std::queue<T *> available_;
};
} // namespace extra2d

View File

@ -1,130 +0,0 @@
#pragma once
#include <extra2d/core/types.h>
#include <extra2d/core/math_types.h>
#include <extra2d/core/color.h>
#include <extra2d/render/render_types.h>
#include <extra2d/render/texture.h>
#include <extra2d/render/shader.h>
#include <extra2d/render/batch.h>
#include <memory>
#include <string>
#include <vector>
namespace extra2d {
class Camera2D;
class TextureAsset;
class FontAsset;
class SceneNode;
using RendererRef = Ref<class IRenderer2D>;
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<TextureAsset> asset) = 0;
virtual void destroyTexture(TextureRef texture) = 0;
virtual Ref<ITextureArray> 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<SpriteVertex>& vertices,
const std::vector<u32>& indices,
TextureRef texture) = 0;
virtual void drawText(Ref<FontAsset> 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<Vec2>& points,
const Color& color,
float thickness = 1.0f) = 0;
virtual void drawPolygon(const std::vector<Vec2>& points,
const Color& color,
bool filled) = 0;
virtual void drawShapeBatch(const std::vector<ShapeVertex>& vertices,
const std::vector<u32>& 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;
}
};
}

View File

@ -1,6 +1,5 @@
#include "extra2d/services/asset_service.h"
#include <algorithm>
#include <filesystem>
namespace extra2d {
@ -81,12 +80,12 @@ void AssetService::purge() {
std::unique_lock<std::shared_mutex> lock(mutex_);
std::vector<AssetID> 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);
}