feat(render): 导出渲染系统核心类并优化数据类型- 为 RenderSystem、BufferBuilder 等关键类添加 VIVID_2D_MYDLL_API 导出宏

- 将多个 int 类型成员变量和返回值改为 size_t 以提升跨平台兼容性
- 在 pch.h 中统一管理 VIVID_2D_MYDLL_API 宏定义逻辑
- 更新项目配置禁用特定警告 4251 并增加头文件打包后处理脚本- 优化构建流程自动复制所需头文件至输出目录并排除无关文件
This commit is contained in:
tzdwindows 7
2025-11-14 20:24:40 +08:00
parent efa010b087
commit e937d05968
8 changed files with 47 additions and 16 deletions

View File

@@ -131,7 +131,7 @@
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
<LanguageStandard>stdcpp20</LanguageStandard>
<DisableSpecificWarnings>4828</DisableSpecificWarnings>
<DisableSpecificWarnings>4828;4251</DisableSpecificWarnings>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
@@ -140,6 +140,26 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
<PostBuildEvent>
<Command>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"
)</Command>
</PostBuildEvent>
<PostBuildEvent>
<Message>==== Package include ====</Message>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="systems\buffer\BufferUploader.h" />

View File

@@ -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"

View File

@@ -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<std::mutex> lock(s_RenderQueueMutex);
return s_RenderQueue.size();
}

View File

@@ -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;

View File

@@ -14,7 +14,7 @@ namespace Buffer {
/**
* @brief <20><>Ⱦ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
*/
struct RenderState {
struct VIVID_2D_MYDLL_API RenderState {
// <20><>Ⱦ״̬<D7B4><CCAC><EFBFBD><EFBFBD> (<28><>Ӧ Java <20>е<EFBFBD> RenderState)
unsigned int textureId = 0;
int textureUnit = 0;
@@ -55,7 +55,7 @@ namespace Buffer {
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɵĻ<C9B5><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ
*/
struct BuiltBuffer {
struct VIVID_2D_MYDLL_API BuiltBuffer {
unsigned int vao;
unsigned int vbo;
int vertexCount;
@@ -71,13 +71,13 @@ namespace Buffer {
* @brief <20>򻯰<EFBFBD> BufferBuilder<65><72><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD><DAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ի<EFBFBD><D4BB>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>
* ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD> float x, float y, float u, float v <20><><EFBFBD><EFBFBD>4<EFBFBD><34> float<61><74>
*/
class BufferBuilder {
class VIVID_2D_MYDLL_API BufferBuilder {
private:
static constexpr int COMPONENTS_PER_VERTEX = 4; // x,y,u,v
std::vector<float> array;
int size; // ʵ<>ʴ洢<CAB4><E6B4A2> float <20><><EFBFBD><EFBFBD> (array.size())
int vertexCount;
int mode; // GL mode
size_t size; // ʵ<>ʴ洢<CAB4><E6B4A2> float <20><><EFBFBD><EFBFBD> (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;
}

View File

@@ -8,7 +8,7 @@ namespace Buffer {
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ⱦ״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VAO <20><>ִ<EFBFBD>л<EFBFBD><D0BB>ơ<EFBFBD>
*/
class BufferUploader {
class VIVID_2D_MYDLL_API BufferUploader {
public:
/**
* @brief ʹ<><CAB9><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD><EFBFBD><EFBFBD>Ȩ<EFBFBD><C8A8>

View File

@@ -76,7 +76,7 @@ namespace Buffer {
* 2. <20><>װ BufferBuilder<65><72><EFBFBD>һ<E1B9A9>µļ<C2B5><C4BC><EFBFBD><EFBFBD><EFBFBD><E5B9B9><EFBFBD>ӿڡ<D3BF>
* 3. <20><> end() <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BufferUploader <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
*/
class Tesselator {
class VIVID_2D_MYDLL_API Tesselator {
private:
static constexpr int DEFAULT_BUFFER_SIZE = 2097152; // 2MB floats

View File

@@ -19,7 +19,7 @@ class TextShader;
/**
* @brief <20><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EBA1A2><EFBFBD>Ӻ͹<D3BA><CDB9><EFBFBD> (C++ <20><>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>)
*/
class ShaderManagement
class VIVID_2D_MYDLL_API ShaderManagement
{
private:
// <20><>ֹʵ<D6B9><CAB5><EFBFBD><EFBFBD>