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:
// ֹʵ