glfw/glfw

GitHub: glfw/glfw

跨平台的轻量级库,为OpenGL/Vulkan应用提供窗口创建、上下文管理和输入处理能力。

Stars: 14755 | Forks: 5812

# GLFW [![构建状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a3658f96a2005014.svg)](https://github.com/glfw/glfw/actions) [![构建状态](https://ci.appveyor.com/api/projects/status/0kf0ct9831i5l6sp/branch/master?svg=true)](https://ci.appveyor.com/project/elmindreda/glfw) ## 简介 GLFW 是一个开源的、多平台的库,用于 OpenGL、OpenGL ES 和 Vulkan 应用程序开发。它提供了一个简单的、独立于平台的 API,用于创建窗口、上下文和 surfaces,读取输入,处理事件等。 GLFW 主要使用 C99 编写,其中 macOS 的部分支持使用 Objective-C 编写。 GLFW 支持 Windows、macOS 和 Linux,也可以在许多其他类 Unix 系统上运行。在 Linux 上,同时支持 Wayland 和 X11。 GLFW 根据 [zlib/libpng license](https://www.glfw.org/license.html) 获得许可。 您可以[下载](https://www.glfw.org/download.html)最新的稳定版本,包括源代码或 Windows 和 macOS 二进制文件。自 3.0 版本以来,每个版本都附带了带有源代码和二进制归档文件的[发布标签](https://github.com/glfw/glfw/releases)。 [文档](https://www.glfw.org/docs/latest/)可在线获取,也包含在源代码和二进制归档文件中,Github 自动生成的归档除外。文档包含指南、教程和 API 参考。[发行说明](https://www.glfw.org/docs/latest/news.html)列出了最新版本中的新功能、注意事项和弃用内容。[版本历史](https://www.glfw.org/changelog.html)列出了每个版本中每个用户可见的更改。 GLFW 的存在归功于世界各地[许多人](CONTRIBUTORS.md)的贡献,无论是通过报告错误、提供社区支持、添加功能、审查或测试代码、调试、校对文档、建议功能还是修复错误。 ## 系统要求 GLFW 支持 Windows 7 及更高版本以及 macOS 10.11 及更高版本。在 GNOME Wayland 上,除非安装了 [libdecor](https://gitlab.freedesktop.org/libdecor/libdecor) 包,否则窗口装饰将非常简陋。即使没有桌面环境或现代扩展,运行 X11 的 Linux 和其他类 Unix 系统也受支持,尽管某些功能需要剪贴板管理器或现代窗口管理器。 请参阅[兼容性指南](https://www.glfw.org/docs/latest/compat.html)以获取更详细的信息。 ## 编译 GLFW GLFW 支持使用 Visual C++(2013 及更高版本)、GCC 和 Clang 进行编译。同时支持 Clang-CL 和 MinGW-w64。其他 C99 编译器可能也可以工作,但这并未经过定期测试。 有适用于 Windows 和 macOS 的[预编译二进制文件](https://www.glfw.org/download.html)可用。 GLFW 本身只需要 CMake 以及用于您的操作系统和窗口系统的头文件和库。不需要其他 SDK。 有关编译 GLFW 以及每个窗口系统所需的确切依赖项的更多信息,请参阅[编译指南](https://www.glfw.org/docs/latest/compile.html)。 示例和测试程序依赖于许多小型库。这些都打包在 `deps/` 目录中。该仓库没有子模块。 - [getopt\_port](https://github.com/kimgr/getopt_port/) 用于带有命令行选项的示例 - [TinyCThread](https://github.com/tinycthread/tinycthread) 用于多线程示例 - [glad2](https://github.com/Dav1dde/glad) 用于加载 OpenGL 和 Vulkan 函数 - [linmath.h](https://github.com/datenwolf/linmath.h) 用于示例中的线性代数 - [Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) 用于测试和示例 UI - [stb\_image\_write](https://github.com/nothings/stb) 用于将图像写入磁盘 如果在配置期间 CMake 能找到足够新的版本,则在构建库时会使用 [Doxygen](https://doxygen.org/) 生成文档。 ## 使用 GLFW 有关教程、指南和 API 参考,请参阅 [HTML 文档](https://www.glfw.org/docs/latest/)。 ## 贡献给 GLFW 请参阅[贡献指南](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md)了解更多信息。 `master` 分支是稳定的集成分支,并且_应该_始终在所有支持的平台上编译和运行。新添加功能的细节,包括公共 API,在将其包含在发布版本中之前可能会发生变化。 `latest` 分支等效于[编号最高](https://semver.org/)的发布版本,尽管它可能并不总是指向与该版本的标签相同的提交。 `ci` 分支用于触发正在测试的代码的持续集成作业,在任何情况下都不应依赖它。 ## 报告错误 错误会报告到我们的 [issue tracker](https://github.com/glfw/glfw/issues)。 请查看[贡献指南](https://github.com/glfw/glfw/blob/master/docs/CONTRIBUTING.md)以获取有关报告错误时应包含内容的信息。 ## 3.4 版本以来的变更日志 - 添加了 `GLFW_UNLIMITED_MOUSE_BUTTONS` 输入模式,允许报告超出鼠标按钮标记限制的鼠标按钮 (#2423) - 添加了 `glfwGetEGLConfig` 函数以查询窗口的 `EGLConfig` (#2045) - 添加了 `glfwGetGLXFBConfig` 函数以查询窗口的 `GLXFBConfig` (#1925) - 将最低 CMake 版本更新为 3.16 (#2541) - 移除了对使用原始 MinGW 构建的支持 (#2540) - [Win32] 移除了对 Windows XP 和 Vista 的支持 (#2505) - [Cocoa] 添加了 `QuartzCore` 框架作为链接时依赖项 - [Cocoa] 移除了对 OS X 10.10 Yosemite 及更早版本的支持 (#2506) - [Wayland] Bugfix: 分数缩放相关对象未被销毁 - [Wayland] Bugfix: `glfwInit` 在没有 seat 的合成器上会发生段错误 (#2517) - [Wayland] Bugfix: 拖拽进入非 GLFW surface 可能导致段错误 - [Wayland] Bugfix: 当没有窗口具有键盘焦点时忽略按键重复事件 (#2727) - [Wayland] Bugfix: 窗口销毁时重置按键重复计时器 (#2741,#2727) - [Wayland] Bugfix: 如果读取数据提供中途失败,内存会泄漏 - [Wayland] Bugfix: 悬停在后备装饰上时检索到的光标位置会不正确 - [Wayland] Bugfix: 后备装饰会报告滚动事件 - [Wayland] Bugfix: 当任何键释放时键盘重复事件停止 (#2568) - [Wayland] Bugfix: 后备装饰会在错误位置显示菜单 - [Wayland] Bugfix: 从模态窗口点击穿透到后备装饰时,光标未更新 - [Wayland] Bugfix: 从模态窗口点击穿透到内容区域时,光标位置未更新 - [Wayland] Bugfix: 在 terminate 函数结束时释放模块以解决潜在的段错误 (#2744) - [Wayland] Bugfix: 在没有 `pointer-constraints-unstable-v1` 的合成器上限制或禁用光标可能会导致段错误 - [Wayland] Bugfix: 按键重复在非常旧的合成器上不起作用 - [Wayland] Bugfix: `libwayland-client` 库在终止时未被卸载 - [Wayland] Bugfix: 在某些版本的 GNOME 上滚动事件被发送了两次 (#2494) - [Wayland] Bugfix: 二维滚动输入作为单独的轴发出 - [X11] Bugfix: 在没有 WM 的情况下运行可能会触发断言 (#2593,#2601,#2631) - [X11] Bugfix: 空闲显示器唤醒时偶尔崩溃 (#2766) - [X11] Bugfix: 当内容比例小于 1 时创建小窗口防止 BadWindow (#2754) - [X11] Bugfix: 将宽度和高度限制为 >= 1 以防止 BadValue 错误和应用程序退出 - [X11] Bugfix: 隐藏时浮动窗口默默地变为非浮动 (#2276) - [X11] Bugfix: `libXext` 库在终止时未被卸载 - [Linux] Bugfix: `ioctl` 的头文件只是隐式包含 (#2778) - [Null] 通过 `VK_EXT_headless_surface` 添加了 Vulkan 'window' surface 创建 - [Null] 通过 `EGL_MESA_platform_surfaceless` 在 Mesa 上添加了 EGL 上下文创建 - [EGL] 允许在 Wayland 上通过设置为 `GLFW_NATIVE_CONTEXT_API` 的 `GLFW_CONTEXT_CREATION_API` 进行原生访问 (#2518) ## 联系方式 在 [glfw.org](https://www.glfw.org/) 上,您可以找到 GLFW 的最新版本,以及有关该项目的新闻、文档和其他信息。 如果您有与使用 GLFW 相关的问题,我们有一个[论坛](https://discourse.glfw.org/)。 如果您有错误要报告,有补丁要提交,或者有想要请求的功能,请在 GitHub 上的 [issue tracker](https://github.com/glfw/glfw/issues) 中提交。 最后,如果您有兴趣帮助开发 GLFW 或将其移植到您喜欢的平台,请加入我们的论坛或 GitHub。
标签:API, Bash脚本, CVE监控, GUI, OpenGL, OpenGL ES, SOC Prime, Vulkan, Wayland, X11, zlib许可证, 人机交互, 图形API, 图形库, 多媒体, 客户端加密, 客户端加密, 底层开发, 开发工具, 开源, 渲染, 游戏开发, 游戏引擎, 窗口管理, 输入处理