6个版本 (3个重大更改)

0.4.0 2021年11月15日
0.3.1 2021年11月8日
0.2.1 2021年11月8日
0.1.0 2021年10月25日

图形API 中排名#1080

Zlib OR Apache-2.0 OR MIT

155KB
2.5K SLoC

glitz


lib.rs:

这里GL文档是从官方Khronos GL文档(许可)改编的。

这是一个用于使用“原始”GL调用的包,所有GL函数都存储在[GlFns]结构中。

该结构针对每个函数指针有一个方法。每个方法只是调用内部持有的适当函数指针。方法名称与通常的GL函数名称匹配,但去掉了“gl”前缀。预计您会将该结构本身绑定到名为gl的变量,然后调用如glClear之类的函数,用gl.Clear调用。

GlFns中的所有指针都是非空函数指针。这避免了在每次GL函数调用时需要执行空检查。缺点是,如果任何预期的函数指针加载失败,整个加载过程将失败。

此包支持的函数列表远小于所有可能的GL函数。目前,该包假定OpenGL 3.3 + GL_KHR_debug可用。此配置在Windows、Mac和Linux上得到广泛支持。即使如此,加载的确切函数列表也只是全部可能性的一部分。

将来,该包可能提供一种在编译时更精确配置哪些函数被包含或未被包含的方法。

示例用法

use glitz::*;

unimplemented!("set up the GL context and be ready to load functions");

let loader_fn = |c_str: *const u8| {
  // The loader fn is intended to accept a null-termianted-pointer.
  // This matches up with SDL_GL_GetProcAddress, wglGetProcAddress,
  // GetProcAddress, and similar.
  unimplemented!("use the OS or a lib to load a fn by name.");

  // If you're using a rust lib that expects `&str` values, you can
  // convert the pointer like this:
  let _s: &str =
    unsafe { std::ffi::CStr::from_ptr(c_str.cast()).to_str().unwrap() };
};

let gl = unsafe { GlFns::from_loader(&loader_fn).unwrap() };

gl.ClearColor(0.5, 0.5, 0.5, 1.0);
gl.Clear(GL_COLOR_BUFFER_BIT);

依赖项

~40KB