From e937d0596848e275151e62aa8ce5eeb60194cd35 Mon Sep 17 00:00:00 2001 From: tzdwindows 7 <3076584115@qq.com> Date: Fri, 14 Nov 2025 20:24:40 +0800 Subject: [PATCH] =?UTF-8?q?feat(render):=20=E5=AF=BC=E5=87=BA=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E7=B3=BB=E7=BB=9F=E6=A0=B8=E5=BF=83=E7=B1=BB=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B-=20?= =?UTF-8?q?=E4=B8=BA=20RenderSystem=E3=80=81BufferBuilder=20=E7=AD=89?= =?UTF-8?q?=E5=85=B3=E9=94=AE=E7=B1=BB=E6=B7=BB=E5=8A=A0=20VIVID=5F2D=5FMY?= =?UTF-8?q?DLL=5FAPI=20=E5=AF=BC=E5=87=BA=E5=AE=8F=20-=20=E5=B0=86?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=20int=20=E7=B1=BB=E5=9E=8B=E6=88=90=E5=91=98?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=92=8C=E8=BF=94=E5=9B=9E=E5=80=BC=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20size=5Ft=20=E4=BB=A5=E6=8F=90=E5=8D=87=E8=B7=A8?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=85=BC=E5=AE=B9=E6=80=A7=20-=20=E5=9C=A8?= =?UTF-8?q?=20pch.h=20=E4=B8=AD=E7=BB=9F=E4=B8=80=E7=AE=A1=E7=90=86=20VIVI?= =?UTF-8?q?D=5F2D=5FMYDLL=5FAPI=20=E5=AE=8F=E5=AE=9A=E4=B9=89=E9=80=BB?= =?UTF-8?q?=E8=BE=91=20-=20=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AE=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=A6=81=E7=94=A8=E7=89=B9=E5=AE=9A=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=204251=20=E5=B9=B6=E5=A2=9E=E5=8A=A0=E5=A4=B4=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=89=93=E5=8C=85=E5=90=8E=E5=A4=84=E7=90=86=E8=84=9A?= =?UTF-8?q?=E6=9C=AC-=20=E4=BC=98=E5=8C=96=E6=9E=84=E5=BB=BA=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E8=87=AA=E5=8A=A8=E5=A4=8D=E5=88=B6=E6=89=80=E9=9C=80?= =?UTF-8?q?=E5=A4=B4=E6=96=87=E4=BB=B6=E8=87=B3=E8=BE=93=E5=87=BA=E7=9B=AE?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E6=8E=92=E9=99=A4=E6=97=A0=E5=85=B3=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Vivid2DRenderer/Vivid2DRenderer.vcxproj | 22 ++++++++++++++++++- Vivid2DRenderer/pch.h | 11 ++++++++++ Vivid2DRenderer/systems/RenderSystem.cpp | 4 ++-- Vivid2DRenderer/systems/RenderSystem.h | 6 ++--- .../systems/buffer/BufferBuilder.h | 14 ++++++------ .../systems/buffer/BufferUploader.h | 2 +- Vivid2DRenderer/systems/buffer/Tesselator.h | 2 +- .../systems/sources/ShaderManagement.h | 2 +- 8 files changed, 47 insertions(+), 16 deletions(-) diff --git a/Vivid2DRenderer/Vivid2DRenderer.vcxproj b/Vivid2DRenderer/Vivid2DRenderer.vcxproj index 58fecc4..9d8ce37 100644 --- a/Vivid2DRenderer/Vivid2DRenderer.vcxproj +++ b/Vivid2DRenderer/Vivid2DRenderer.vcxproj @@ -131,7 +131,7 @@ pch.h /utf-8 %(AdditionalOptions) stdcpp20 - 4828 + 4828;4251 Windows @@ -140,6 +140,26 @@ true false + + REM 目标路径:$(OutDir)include +setlocal enabledelayedexpansion + +REM 1. 复制项目根目录下的 .h 文件 +xcopy "$(ProjectDir)*.h" "$(OutDir)include" /Y /I + +REM 2. 递归复制 'systems\' 文件夹下的所有 .h 文件 +REM /E 确保复制子目录结构 +xcopy "$(ProjectDir)systems\*.h" "$(OutDir)include\systems" /E /Y /I + +REM --- 排除操作 --- +REM 3. 递归查找目标目录 "$(OutDir)include" 下的排除文件并删除 +for /R "$(OutDir)include" %%f in (framework.h pch.h) do ( + del /Q "%%f" +) + + + ==== Package include ==== + diff --git a/Vivid2DRenderer/pch.h b/Vivid2DRenderer/pch.h index 9660927..1698246 100644 --- a/Vivid2DRenderer/pch.h +++ b/Vivid2DRenderer/pch.h @@ -7,6 +7,17 @@ #ifndef PCH_H #define PCH_H +// 检查 VIVID_2D_MYDLL_API 宏是否已经被定义 +#ifdef VIVID_2D_MYDLL_API +// 如果已经定义,则先取消其定义(防止重复或冲突的定义) +#undef VIVID_2D_MYDLL_API +#endif + +// 强制将 VIVID_2D_MYDLL_API 宏定义为 __declspec(dllexport) +// 作用:告诉编译器,使用此宏标记的类、函数或变量,必须从当前 DLL 中导出。 +// 这是在编译 DLL 自身源代码时,确保其接口能够被外部应用程序使用的关键步骤。 +#define VIVID_2D_MYDLL_API __declspec(dllexport) + // 添加要在此处预编译的标头 #include "framework.h" diff --git a/Vivid2DRenderer/systems/RenderSystem.cpp b/Vivid2DRenderer/systems/RenderSystem.cpp index a7131f8..7a98ac4 100644 --- a/Vivid2DRenderer/systems/RenderSystem.cpp +++ b/Vivid2DRenderer/systems/RenderSystem.cpp @@ -138,7 +138,7 @@ void RenderSystem::_popState() { s_Logger->warn("popState called with empty state stack."); } } -int RenderSystem::getStateStackSize() { return s_StateStack.size(); } +size_t RenderSystem::getStateStackSize() { return s_StateStack.size(); } void RenderSystem::clearColor(float r, float g, float b, float a) { RENDER_SYSTEM_QUEUE_CALL(_clearColor, r, g, b, a); } void RenderSystem::_clearColor(float r, float g, float b, float a) { @@ -468,7 +468,7 @@ std::string RenderSystem::getGLErrorString(GLenum error) { int RenderSystem::getViewportWidth() { return s_ViewportWidth; } int RenderSystem::getViewportHeight() { return s_ViewportHeight; } glm::vec4 RenderSystem::getClearColor() { return s_ClearColorValue; } -int RenderSystem::getQueueSize() { +size_t RenderSystem::getQueueSize() { std::lock_guard lock(s_RenderQueueMutex); return s_RenderQueue.size(); } \ No newline at end of file diff --git a/Vivid2DRenderer/systems/RenderSystem.h b/Vivid2DRenderer/systems/RenderSystem.h index fbc0975..b2f7cf6 100644 --- a/Vivid2DRenderer/systems/RenderSystem.h +++ b/Vivid2DRenderer/systems/RenderSystem.h @@ -18,7 +18,7 @@ namespace spdlog { class logger; } -class RenderSystem { +class VIVID_2D_MYDLL_API RenderSystem { public: RenderSystem() = delete; ~RenderSystem() = delete; @@ -55,7 +55,7 @@ public: static void disable(GLenum capability); static void pushState(); static void popState(); - static int getStateStackSize(); + static size_t getStateStackSize(); static void clearColor(float r, float g, float b, float a); static void clear(GLbitfield mask); static void viewport(int x, int y, int width, int height); @@ -159,7 +159,7 @@ public: static int getViewportWidth(); static int getViewportHeight(); static glm::vec4 getClearColor(); - static int getQueueSize(); + static size_t getQueueSize(); private: struct RenderState; diff --git a/Vivid2DRenderer/systems/buffer/BufferBuilder.h b/Vivid2DRenderer/systems/buffer/BufferBuilder.h index 4c7afcf..edbed12 100644 --- a/Vivid2DRenderer/systems/buffer/BufferBuilder.h +++ b/Vivid2DRenderer/systems/buffer/BufferBuilder.h @@ -14,7 +14,7 @@ namespace Buffer { /** * @brief Ⱦ״̬ṹ */ - struct RenderState { + struct VIVID_2D_MYDLL_API RenderState { // Ⱦ״̬ (Ӧ Java е RenderState) unsigned int textureId = 0; int textureUnit = 0; @@ -55,7 +55,7 @@ namespace Buffer { /** * @brief ɵĻݽṹ */ - struct BuiltBuffer { + struct VIVID_2D_MYDLL_API BuiltBuffer { unsigned int vao; unsigned int vbo; int vertexCount; @@ -71,13 +71,13 @@ namespace Buffer { * @brief 򻯰 BufferBuilderڰһԻƼ塣 * ÿʽ float x, float y, float u, float v 4 float */ - class BufferBuilder { + class VIVID_2D_MYDLL_API BufferBuilder { private: static constexpr int COMPONENTS_PER_VERTEX = 4; // x,y,u,v std::vector array; - int size; // ʵʴ洢 float (array.size()) - int vertexCount; - int mode; // GL mode + size_t size; // ʵʴ洢 float (array.size()) + size_t vertexCount; + size_t mode; // GL mode RenderState renderState; bool stateSaved = false; public: @@ -119,7 +119,7 @@ namespace Buffer { */ void clear(); - int getVertexCount() const { + size_t getVertexCount() const { return vertexCount; } diff --git a/Vivid2DRenderer/systems/buffer/BufferUploader.h b/Vivid2DRenderer/systems/buffer/BufferUploader.h index bd72d2d..bd2b790 100644 --- a/Vivid2DRenderer/systems/buffer/BufferUploader.h +++ b/Vivid2DRenderer/systems/buffer/BufferUploader.h @@ -8,7 +8,7 @@ namespace Buffer { /** * @brief ϴӦȾ״̬ VAO ִлơ */ - class BufferUploader { + class VIVID_2D_MYDLL_API BufferUploader { public: /** * @brief ʹɫѹĻӹȨ diff --git a/Vivid2DRenderer/systems/buffer/Tesselator.h b/Vivid2DRenderer/systems/buffer/Tesselator.h index e670d65..61a9ddd 100644 --- a/Vivid2DRenderer/systems/buffer/Tesselator.h +++ b/Vivid2DRenderer/systems/buffer/Tesselator.h @@ -76,7 +76,7 @@ namespace Buffer { * 2. װ BufferBuilderṩһµļ幹ӿڡ * 3. end() ʱ BufferUploader ơ */ - class Tesselator { + class VIVID_2D_MYDLL_API Tesselator { private: static constexpr int DEFAULT_BUFFER_SIZE = 2097152; // 2MB floats diff --git a/Vivid2DRenderer/systems/sources/ShaderManagement.h b/Vivid2DRenderer/systems/sources/ShaderManagement.h index 3026497..cb75dd9 100644 --- a/Vivid2DRenderer/systems/sources/ShaderManagement.h +++ b/Vivid2DRenderer/systems/sources/ShaderManagement.h @@ -19,7 +19,7 @@ class TextShader; /** * @brief ɫ - ɫı롢Ӻ͹ (C++ ̬ʵ) */ -class ShaderManagement +class VIVID_2D_MYDLL_API ShaderManagement { private: // ֹʵ