#texture #glium #graphics #gamedev

texture_bag

简单存储和加载glium纹理

4个版本

0.0.4 2021年1月9日
0.0.3 2021年1月9日
0.0.2 2021年1月9日
0.0.1 2021年1月9日

游戏开发中排名第1474

MIT许可

10KB
113

纹理包

这个库提供了一个容器来存储纹理,无需手动加载和转换。它还提供了一个单独的纹理访问点,即使它们在容器初始化时未加载。库支持懒加载,按需从文件加载纹理,以及急切加载,在容器初始化时加载所有纹理。

用法

将其添加到您的cargo.toml

[dependencies]
texture_bag = "0.0.1"

准备

首先,您需要创建一个配置文件,列出项目中使用的所有纹理

{
  "textures": {
    "texture_id": "path_to_texture"    
  }
}

默认文件名是texture_config.json,但您可以通过在TextureBag初始化时传递实际名称和路径作为参数之一来更改它。

用法示例

fn main() {
    // Some preparation code for proper init
    let event_loop = glium::glutin::event_loop::EventLoop::new();
    let window_builder = glium::glutin::window::WindowBuilder::new().with_title("Foo");
    let context = glium::glutin::ContextBuilder::new().with_depth_buffer(24);
    let display = glium::Display::new(window_builder, context, &event_loop).unwrap();

    // This call will load all textures from config into memory 
    let mut texture_bag = TextureBag::init_eager(&display, None);
    
    // Lazy init will load only config data for further operations, no texture loading will be made
    let mut texture_bag = TextureBag::init_lazy(&display, None);

    // Method returns reference to a texture. 
    // If texture was not loaded before, method will check config, load texture by path and store it into the bag.
    let texture = texture_bag.get_texture(String::from("texture_id"), display);
    
    // This method will remove texture from the bag. Texture can be loaded again by calling get_texture.
    texture_bag.forget(String::from("texture_id"));
}

进一步的待办事项和问题

请注意,这个版本基本上是这个项目的alpha版本。API可能会在稳定之前发生变化。进一步的可能的改进

  • 目前,texture_id基本上是一个String。我可能需要使其更通用,并支持实现了Display接口的任何类型
  • "全或无"加载对小文件数量很好。我需要实现分块加载以支持大型项目。按组加载纹理看起来足够好。

依赖关系

~20–34MB
~392K SLoC