6 个版本
0.1.2 | 2019 年 3 月 19 日 |
---|---|
0.1.1 | 2019 年 3 月 19 日 |
0.0.4 | 2019 年 3 月 18 日 |
485 在 图形 API 中
768 每月下载次数
用于 3 个 Crates
10KB
141 行
gl_loader
:基于 Glad 的 OpenGL 函数指针加载器
这个(小巧)的包旨在做 唯一的一件事:提供一个 get_proc_address
函数来加载 OpenGL 函数指针。
它不会提供任何形式的窗口或 OpenGL 上下文创建。您将需要自己处理。
代码只是对 glad 库中指针加载部分的绑定: glad
说明
当使用 OpenGL 的头文件时,函数只是声明,空的壳。尝试调用它们将导致尝试使用空指针作为函数时发生的事情。
要真正能够使用这些函数,您需要加载它们的指针。操作系统通常会通过公开一个 getProcAddress
函数(或等效函数)来为您这样做,该函数接受 OpenGL 函数名称并输出其指针。
因此,这个 crate 的目标是提供一个跨平台的 OpenGL 函数指针加载方法。
为什么
主要思想是能够制作一个完全与 GUI/窗口库无关的 OpenGL 引擎。例如,假设您想制作一个使用 libGUI-X 并将最终应用程序与 libWindow-Y 打包的编辑器。这两个系统都应该处理窗口和上下文的创建,但可能有一种方式来加载函数指针,这种方式不兼容或需要在您的引擎中执行脏乱差的黑客攻击来处理两种情况。
通过将函数指针加载推迟到这个小库中,您应该能够使您的引擎完全无关,只要已经创建了适当的 OpenGL 上下文并在同一线程中使其当前。
如何使用
首先,您需要以下要求:1 - 已创建并激活了一个 OpenGL 上下文 2 - 您从拥有当前上下文的 同一线程 中调用 get_proc_address
然后,使用 gl crate,您应该能够做到
extern crate gl_loader;
fn load_gl_symbol() {
gl_loader::init_gl();
gl::load_with(|symbol| gl_loader::get_proc_address(symbol) as *const _);
}
您的函数指针应已加载,并且您应该能够使用OpenGL。
注意
您必须先调用gl_loader::init_gl()
,然后再调用gl_loader::get_proc_address(...)
,init_gl()
将确保OpenGL库/框架被正确加载。
目标
目前,一些依赖项依赖于std。最终目标是使该包完全兼容#![no_std]
。
致谢
glutin贡献者:原始代码基于glutin源代码。
glad贡献者:当前代码是对Glad中处理函数指针加载的特定部分的绑定。
依赖项
约225KB