easy2d 是一个使用 C++ 和 OpenGL ES 2.0 编写的二维游戏引擎原型,包含 Windows 窗口管理、着色器、纹理加载和二维正交投影,以及一个用于验证渲染效果的示例程序。
项目保留 Visual Studio 2008 工程和早期依赖配置。当前主要实现面向 Windows / Win32;运行前需要准备图形 SDK 和示例资源,尚未提供完整的跨平台构建流程。
| 模块 | 当前内容 |
|---|---|
| 应用管理 | Windows 窗口、消息循环、应用回调、标题与尺寸管理 |
| GLES2 渲染 | EGL 上下文、视口、清屏、缓冲区交换与四边形绘制 |
| 着色器 | 编译与链接 GLSL 程序、顶点属性、标量和矩阵参数 |
| 纹理 | 使用 FreeImage 读取图片、创建纹理、绑定纹理单元和透明混合 |
| 二维变换 | 使用 kazmath 计算正交投影及模型视图矩阵 |
| 核心事件 | 基础事件类型与对象 |
| 音频、输入、D3D9 | 接口或目录占位,尚未完整实现 |
| Android、iOS | 预留目录,尚无完整平台实现与构建工程 |
engine/
application/ 应用接口与 Windows 窗口实现
core/ 基础事件模型
video/ 渲染接口、GLES2 实现与数学相关代码
audio/、input/ 音频与输入模块框架
platform/ 平台扩展占位
third_party/win32/ 图形 SDK 压缩包、FreeImage、kazmath
samples/easy2d_test/ Windows 渲染示例源码
build/vs2008/ Visual Studio 2008 解决方案及工程
bin/res/ 示例纹理与 GLSL 着色器
docs/、tools/ 文档与工具占位目录
premake4.lua 历史工程生成脚本
AGENTS.md 贡献与开发约定
LICENSE Apache 2.0 许可证
build/vs2008/ 中包含受版本控制的工程和资源,不应将整个目录视为可删除的构建缓存。
- Windows,以及安装了 C++ 工具链的 Visual Studio 2008。
- 使用
Win32配置,并确保依赖库和运行时 DLL 的架构、版本匹配。 - 一套可用于 Windows 的 EGL / OpenGL ES 2.0 SDK。
- FreeImage 和 kazmath;仓库已包含其头文件和库,FreeImage 另有运行时 DLL。
图形 SDK 的历史压缩包位于:
engine/third_party/win32/amd_es2/amd_lib.rar
engine/third_party/win32/arm_es2/arm_lib.rar
选择一套兼容 SDK,解压并检查其内容,按工程引用路径准备依赖,避免混用不同 SDK 的头文件、库和 DLL:
| 文件 | 工程期望位置 |
|---|---|
EGL/、GLES2/ 及 SDK 所需的公共头文件目录 |
engine/third_party/win32/include/ |
libEGL.lib、libGLESv2.lib |
engine/third_party/win32/lib/ |
SDK 对应的运行时 DLL、FreeImage.dll |
可执行文件所在目录,或系统可搜索到的 PATH 目录 |
FreeImage.dll 的仓库位置为 engine/third_party/win32/bin/FreeImage.dll。此目录不会自动成为运行时 DLL 搜索路径。
优先打开已有的 build/vs2008/easy2d.sln,选择 Debug | Win32,先构建 application、video,再构建 easy2d_test。示例链接 application_d.lib 和 video_d.lib,显式按此顺序构建可避免依赖顺序问题。
也可以在已配置 VS2008 工具链的命令环境中,从仓库根目录执行:
devenv build\vs2008\easy2d.sln /Build "Debug|Win32" /Project application
devenv build\vs2008\easy2d.sln /Build "Debug|Win32" /Project video
devenv build\vs2008\easy2d.sln /Build "Debug|Win32" /Project easy2d_test按现有 Debug 配置,引擎静态库输出到 engine/lib/,示例输出到 build/vs2008/bin/easy2d_test_d.exe。
解决方案也包含 Release 配置,但其包含目录、链接依赖与输出位置不完全等同于 Debug;使用前需要单独检查。
generate_vs2008.txt 记录了历史命令 premake4.exe vs2008。当前 premake4.lua 仍引用 easy2d/*.cpp、3Party/glew-1.9.0 和 DXSDK_DIR 等旧配置,与现有模块结构不一致。修正脚本前,不要依靠它重新生成或覆盖已提交的工程。
- 准备匹配的 EGL、GLES2 和 FreeImage 运行时 DLL。
- 检查
samples/easy2d_test/easy2d_test.cpp中onLaunch()的图片路径:当前两张中文文件名的 TGA 图片未随仓库提供。需补齐对应图片,或将加载路径调整为已有的res/test.tga、res/item.tga等资源后重新构建;替换图片会改变演示效果。 - 将工作目录设为
build/vs2008/bin/,确保程序可以读取res/default.vert、res/default.frag和纹理文件。
在仓库根目录使用 PowerShell 运行:
Push-Location build\vs2008\bin
.\easy2d_test_d.exe
Pop-Location通过 Visual Studio 启动时,将 easy2d_test 设为启动项目,并将调试工作目录设为 $(SolutionDir)bin。示例代码创建 800 × 600 窗口,通过应用回调执行纹理绘制和窗口尺寸变化处理。
仓库尚未配置自动化测试框架、CI 或覆盖率要求;easy2d_test 是交互式演示程序。修改后应构建受影响模块,手动检查窗口启动、纹理显示、透明混合、投影、窗口缩放和正常退出。
| 现象 | 检查方向 |
|---|---|
找不到 EGL/egl.h 或 GLES2/gl2.h |
SDK 是否已解压,头文件目录层级是否符合工程配置 |
找不到 libEGL.lib 或 libGLESv2.lib |
SDK 导入库是否放入 engine/third_party/win32/lib/ |
找不到 application_d.lib 或 video_d.lib |
是否先成功构建相应引擎项目 |
| 启动时提示缺少 DLL | DLL 是否与 Win32 程序匹配,是否位于程序目录或 PATH |
| 图片未显示或加载时异常 | 示例图片是否存在,运行工作目录是否包含 res/ |
| 着色器或 EGL / GL 报错 | 资源路径、着色器日志、SDK 兼容性和错误输出 |
以上流程依据现有源码和工程配置整理,不代表已在当前环境完成编译或运行验证。提交问题时请提供构建配置、SDK 信息、复现步骤和错误日志;渲染问题附截图。
开发约定见 AGENTS.md。保持 VS2008 编译器兼容性,保留旧文件的编码与换行;新增源码时同步更新对应 .vcproj,目录说明文件统一使用 README.md。
按功能模块拆分提交,使用 类型(模块): 简体中文说明,例如 fix(texture): 修正透明通道上传。拉取请求说明修改目的、验证结果和已知限制,视觉变化附前后截图。
项目采用 Apache License 2.0。随附第三方依赖的许可信息请分别查阅对应头文件、压缩包或发行说明。