14 个版本

0.1.7 2020 年 8 月 24 日
0.1.6 2020 年 8 月 3 日
0.1.5 2020 年 6 月 21 日
0.1.3 2020 年 3 月 1 日
0.1.0-alpha42019 年 12 月 26 日

#797 in 游戏开发

Download history 66/week @ 2024-03-11 68/week @ 2024-03-18 28/week @ 2024-03-25 164/week @ 2024-04-01 49/week @ 2024-04-08 76/week @ 2024-04-15 70/week @ 2024-04-22 51/week @ 2024-04-29 49/week @ 2024-05-06 44/week @ 2024-05-13 63/week @ 2024-05-20 44/week @ 2024-05-27 59/week @ 2024-06-03 34/week @ 2024-06-10 56/week @ 2024-06-17 50/week @ 2024-06-24

206 每月下载量
用于 3 个工具箱(通过 quicksilver

MIT/Apache

73KB
1.5K SLoC

莱姆

golem 是一个具有见解的、主要安全的图形 API

当可能时,golem 应该使简单的事情安全(在操作它们之前绑定对象,或者检查它们是否已绑定,对于绑定成本较高的对象。)然而,当不可能或方便时(例如在元素缓冲区中检查索引的界限),golem 提供具有明确定义的安全条件的非安全 API。

一个用于显示三角形的示例

use golem::*;
use golem::Dimension::*;
fn func(ctx: &Context) -> Result<(), GolemError> {
 let vertices = [
     // Position         Color
     -0.5, -0.5,         1.0, 0.0, 0.0, 1.0,
     0.5, -0.5,          0.0, 1.0, 0.0, 1.0,
     0.0, 0.5,           0.0, 0.0, 1.0, 1.0
 ];
 let indices = [0, 1, 2];

 let mut shader = ShaderProgram::new(
     ctx,
     ShaderDescription {
         vertex_input: &[
             Attribute::new("vert_position", AttributeType::Vector(D2)),
             Attribute::new("vert_color", AttributeType::Vector(D4)),
         ],
         fragment_input: &[Attribute::new("frag_color", AttributeType::Vector(D4))],
         uniforms: &[],
         vertex_shader: r#" void main() {
         gl_Position = vec4(vert_position, 0, 1);
         frag_color = vert_color;
         }"#,
         fragment_shader: r#" void main() {
         gl_FragColor = frag_color;
         }"#,
     },
 )?;
 let mut vb= VertexBuffer::new(ctx)?;
 let mut eb  ElementBuffer::new(ctx)?;
 vb.set_data(&vertices);
 eb.set_data(&indices);
 shader.bind();
 ctx.clear();
 unsafe {
    shader.draw(&vb, &eb, 0..indices.len(), GeometryMode::Triangles)?;
 }
 Ok(())
}

golem 的核心类型是 Context,它由 glow::Context 构建。从 Context,创建 ShaderProgram,它们从 Buffer 中获取数据。一旦数据通过 Buffer::set_data 上传到 GPU,就可以通过 ShaderProgram::draw 绘制。

初始化

用户负责窗口和提供有效的 glow Context 来创建 Context。您可以尝试使用与 golem 配合良好的 blinds 工具箱,但也可以直接使用 winit 或其他窗口解决方案,如 sdl2

OpenGL 版本

后端目前通过 glow 实现,针对桌面上的 OpenGL 3.2 和 WebGL 1(因此应在广泛的硬件上运行。)选择 GL 3.2 以确保最大桌面可用性,而 WebGL 1 在 97% 的客户端上可用,占 WebGL 的 75%(在编写时从 caniuse.com 获取。)

GLSL

着色器部分由 golem 在运行时生成,以处理平台兼容性问题。用户提供着色器的主函数,而 golem 提供版本号、着色器输入、输出和统一变量。有关更多信息,请参阅 ShaderDescription 文档。

依赖项

~2–4MB
~84K SLoC