2个版本

0.1.1 2019年12月20日
0.1.0 2019年12月19日

#670 in 图形API

MIT许可证

22KB
246 代码行

ktx-async

crate-badge docs-badge ci-status

异步KTX纹理格式读取器

功能

  • 异步IO API
  • tokio兼容
  • 支持KTX 1.1

待办事项

  • 自定义缓冲区分配(例如:OpenGL像素缓冲区对象)
  • 添加std::io::Read支持(?)
  • KTX 2.0(?) 规范

示例

use ktx_async as ktx;
use tokio::fs::File;
use tokio::stream::StreamExt as _;

// In async code

// Open AsyncRead
let file = File::open("example.ktx").await.unwrap();

// Start decoding KTX
let decoder = ktx::Decoder::new(file);
let (info, mut stream) = decoder.read_async().await.unwrap();

// create and bind a texture object ...

// Get all the frames from the stream
while let Some((frame, buf)) = stream.next().await.map(|r| r.unwrap()) {
    unsafe {
        gl::TexImage2D(gl::TEXTURE_2D,
            frame.level as GLint,
            info.gl_internal_format as GLint,
            frame.pixel_width as GLsizei,
            frame.pixel_height as GLsizei,
            /*border*/ 0,
            info.gl_format as GLenum,
            info.gl_type as GLenum,
            buf.as_ptr() as *const GLvoid);
    }
}

开发

构建

cargo build

运行测试

cargo test

运行示例

cargo run --example basic

许可证

本项目采用MIT许可证

参考

依赖

~8.5MB
~159K SLoC