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

Download history 50782/week @ 2024-03-14 60474/week @ 2024-03-21 56041/week @ 2024-03-28 50268/week @ 2024-04-04 51372/week @ 2024-04-11 56195/week @ 2024-04-18 51857/week @ 2024-04-25 52125/week @ 2024-05-02 48246/week @ 2024-05-09 56650/week @ 2024-05-16 52876/week @ 2024-05-23 55352/week @ 2024-05-30 60826/week @ 2024-06-06 73939/week @ 2024-06-13 66514/week @ 2024-06-20 56712/week @ 2024-06-27

267,062 每月下载量
1,559 个软件包中(60 个直接使用) 使用

Apache-2.0

720KB
2.5K SLoC

gl_generator

Version License Downloads

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 字段在 EnumBinding 上使用 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 降级为开发依赖项

依赖项