49 个版本
使用旧的 Rust 2015
0.14.0 | 2019 年 10 月 3 日 |
---|---|
0.13.0 | 2019 年 7 月 9 日 |
0.10.0 | 2018 年 11 月 4 日 |
0.9.0 | 2018 年 2 月 3 日 |
0.0.3 | 2014 年 11 月 21 日 |
#10 在 图形 API 中
267,062 每月下载量
在 1,559 个软件包中(60 个直接使用) 使用
720KB
2.5K SLoC
gl_generator
Khronos OpenGL API 绑定生成器。
用法
如果您需要特定版本的 OpenGL,或者需要不同的 API(OpenGL ES、EGL、WGL、GLX),或者需要某些扩展,应使用 gl_generator
插件。
有关使用自定义 gfx-rs 加载器进行项目的示例,请参阅 gfx_gl。
将其添加到您的 Cargo.toml
[build-dependencies]
gl_generator = "0.5.0"
在 [package]
部分中,添加以下内容
build = "build.rs"
创建一个 build.rs
文件以获取您的特定版本/API
extern crate gl_generator;
use gl_generator::{Registry, Api, Profile, Fallbacks, GlobalGenerator};
use std::env;
use std::fs::File;
use std::path::Path;
fn main() {
let dest = env::var("OUT_DIR").unwrap();
let mut file = File::create(&Path::new(&dest).join("bindings.rs")).unwrap();
Registry::new(Api::Gl, (4, 5), Profile::Core, Fallbacks::All, [])
.write_bindings(GlobalGenerator, &mut file)
.unwrap();
}
然后这样使用它
mod gl {
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
}
/// Simple loading example
fn main() {
let window = ...;
// Assuming `window` is GLFW: initialize, and make current
gl::load_with(|s| window.get_proc_address(s) as *const _);
}
build.rs
文件将生成所有 OpenGL 函数,存放在名为 bindings.rs
的文件中,以及所有枚举和类型,位于 types
子模块中。
生成器类型
全局生成器
全局生成器是 gl
软件包默认使用的生成器。有关更多详细信息,请参阅上面。
结构生成器
结构生成器是全局生成器的更清洁的替代方案。
主要区别在于你必须调用gl::Gl::load_with
而不是gl::load_with
,并且这个函数返回一个类型为Gl
的结构体。OpenGL函数不是静态函数,而是这个Gl
结构体中的成员函数。当GL函数与当前上下文相关联时,这一点很重要,例如在Windows上。
枚举和类型仍然是静态的,并且以类似全局生成器的方式提供。
静态生成器
静态生成器生成普通的旧绑定。你不需要加载函数。
只有在编译的平台保证支持请求的API时,才应使用此生成器。否则,您将遇到编译错误。例如,您可以在Windows上使用WGL和OpenGL 1.1或在Linux上使用GLX和OpenGL 1.3,因为Windows和Linux保证提供这些API的实现。
您需要手动提供链接。例如,要在Windows上使用WGL或OpenGL 1.1,您需要在您的代码中某个地方添加以下代码:#[link="OpenGL32.lib"] extern {}
自定义生成器
可以使用自定义生成器扩展gl_generator
。这是一个仅在极少数情况下有用的利基功能。要创建自定义生成器,请实现gl_generator::Generator
特质。请参阅gl_generator::generators
模块的源代码以获取示例。
在generators
模块中提供了各种实用函数,但API是不稳定的,因此它被放置在特性标志后面。在访问这些函数时,您需要将"unstable_generator_utils"
特性添加到您的Cargo.toml
中。
[build-dependencies.gl_generator]
version = "0.4.2"
features = ["unstable_generator_utils"]
额外功能
全局和结构生成器将尝试使用可用的后备函数。例如,如果无法加载glGenFramebuffers
,它还将尝试加载glGenFramebuffersEXT
作为后备。
变更日志
v0.5.0
- 将
Ns
重命名为API
,并在顶级公开 - 通过根据请求的
API
确定XML源来消除客户端对khronos_api
包的依赖 - 使用一个
(u8, u8)
而不是字符串作为目标版本号 - 使用一个
Profile
枚举而不是字符串作为配置文件 - 从
Registry
中删除未使用的字段 - 接受满足
AsRef<[&str]>
扩展列表的类型 - 在API中将解析和生成阶段分开
- 从公共API中隐藏
registry::{Feature, Filter, Require, Remove, Extension}
类型 - 将
registry::{Fallbacks, Api, Profile}
类型移动到顶级模块 - 删除
GlxOpcode::type
字段 - 让
ty
字段在Enum
和Binding
上使用Cow<'static, str>
以减少分配
v0.4.2
- 更新crate元数据
v0.4.1
- 升级
khronos_api
到 v1.0.0
v0.4.0
- 升级
xml-rs
到 v0.2.2 - 使用
raw::c_void
作为GLvoid
- 删除
registry::{Group, EnumNs, CmdNs}
- 从
registry::Registry
中删除groups
字段 - 从
registry::Cmd
中删除is_safe
字段 - 从
registry::{Require, Remove, GlxOpcode}
中删除comment
字段 - 将
khronos_api
降级为开发依赖项