GLFW
简介
GLFW是一个开源的、跨平台的OpenGL、OpenGL ES和Vulkan应用程序开发库。它提供了一个简单、平台无关的API,用于创建窗口、上下文和表面,读取输入,处理事件等。
GLFW原生支持Windows、macOS和Linux以及其他类Unix系统。在Linux上同时支持Wayland和X11。
GLFW采用zlib/libpng许可证。
你可以下载最新的稳定版源代码或Windows二进制文件。从3.0版本开始,每个发布版本都有相应的带注释的标签,包含源代码和二进制文件压缩包。
文档可在线获取,并包含在所有源代码和二进制文件压缩包中。查看发布说明了解最新版本的新功能、注意事项和废弃内容。更多详情请参阅版本历史。
master
分支是稳定的集成分支,_应该_始终能在所有支持的平台上编译和运行,尽管新添加功能的细节可能会在被包含到发布版本之前发生变化。新功能和许多错误修复位于其他分支中,直到它们足够稳定可以合并。
如果你是GLFW新手,可能会发现GLFW 3的教程很有用。如果你以前使用过GLFW 2,这里有一个过渡指南帮助你迁移到GLFW 3 API。
GLFW的存在得益于全球众多贡献者的努力,无论是报告错误、提供社区支持、添加功能、审查或测试代码、调试、校对文档、提出功能建议还是修复错误。
编译GLFW
GLFW主要使用C99编写,macOS支持的部分使用Objective-C编写。GLFW本身只需要你的操作系统和窗口系统的头文件和库。它不需要任何额外的头文件来支持上下文创建API(WGL、GLX、EGL、NSGL、OSMesa)或渲染API(OpenGL、OpenGL ES、Vulkan)。
GLFW支持在Windows上使用Visual C++ 2013及更高版本、MinGW和MinGW-w64编译,在macOS上使用Clang编译,在Linux和其他类Unix系统上使用GCC和Clang编译。它可能也能在其他环境中编译,但这并未经常测试。
Windows和macOS上所有支持的编译器都有预编译二进制文件可用。
有关如何自己编译GLFW的更多信息,请参阅编译指南。
使用GLFW
请参阅文档获取教程、指南和API参考。
为GLFW做贡献
更多信息请参阅贡献指南。
系统要求
GLFW支持Windows XP及更高版本,以及macOS 10.11及更高版本。运行X Window System的Linux和其他类Unix系统即使没有桌面环境或现代扩展也受支持,尽管某些功能需要运行中的窗口管理器或剪贴板管理器。OSMesa后端需要Mesa 6.3。
更多信息请参阅文档中的兼容性指南。
依赖项
GLFW本身只需要CMake 3.4或更高版本,以及你的操作系统和窗口系统的头文件和库。
示例和测试程序依赖于一些小型库。这些库位于deps/
目录中。
- getopt_port用于带命令行选项的示例
- TinyCThread用于线程示例
- glad2用于加载OpenGL和Vulkan函数
- linmath.h用于示例中的线性代数
- Nuklear用于测试和示例UI
- stb_image_write用于将图像写入磁盘
如果CMake能找到Doxygen工具,则使用它生成文档。
报告错误
错误报告提交到我们的问题跟踪器。请查看贡献指南了解报告错误时需要包含的信息。
3.4版本以来的更新日志
- 添加了
GLFW_UNLIMITED_MOUSE_BUTTONS
输入模式,允许报告超出鼠标按钮令牌限制的鼠标按钮(#2423) - [Cocoa] 添加了
QuartzCore
框架作为链接时依赖 - [Cocoa] 移除了对OS X 10.10 Yosemite及更早版本的支持(#2506)
- [Wayland] 修复:与小数缩放相关的对象未被销毁
- [Wayland] 修复:在没有seat的合成器上
glfwInit
会导致段错误(#2517) - [Wayland] 修复:拖拽进入非GLFW表面可能导致段错误
- [Null] 通过
VK_EXT_headless_surface
添加了Vulkan"窗口"表面创建 - [Null] 通过
EGL_MESA_platform_surfaceless
在Mesa上添加了EGL上下文创建 - [EGL] 允许在将
GLFW_CONTEXT_CREATION_API
设置为GLFW_NATIVE_CONTEXT_API
时在Wayland上进行原生访问(#2518)
联系方式
在glfw.org你可以找到GLFW的最新版本,以及有关项目的新闻、文档和其他信息。
如果你有与使用GLFW相关的问题,我们有一个论坛。
如果你要报告错误、提交补丁或请求新功能,请在GitHub上的问题跟踪器中提交。
最后,如果你对参与GLFW的开发或将其移植到你喜欢的平台感兴趣,欢迎在论坛或GitHub上加入我们。