有没有一种方法可以将外部资源数据包含在Rust源代码中?

Mar*_*ann 15 resources rust

想象一下以下示例:

let SHADER: &'static str = "
#version 140

attribute vec2 v_coord;
uniform sampler2D fbo_texture;
varying vec2 f_texcoord;

void main(void) {
    gl_Position = vec4(v_coord, 0.0, 1.0);
    f_texcoord = (v_coord + 1.0) / 2.0;
}";

fn main() {
    // compile and use SHADER
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以如上所示编写着色器内联,但在使用外部软件设计着色器或具有多个着色器时,这会变得非常复杂.您也可以从外部文件加载数据,但有时您只想提供一个小的可执行文件,而无需确定资源的存储位置.

如果解决方案也适用于二进制文件(例如图标,字体),那将会很棒.

我知道有可能编写rustc插件,据我所知它应该可以提供这样的功能,但编写我自己的插件相当复杂,我想知道是否已经有一个很好的插件/ lib /包含资源文件的标准方法.另一点是它应该在不利用手动链接器+指针方式的情况下工作.

Vla*_*eev 28

我相信你在寻找include_str!()宏观:

static SHADER: &'static str = include_str!("shader.glsl");
Run Code Online (Sandbox Code Playgroud)

shader.glsl 文件应位于源文件旁边,以便工作.

还有include_bytes!()非UTF-8数据:

static SHADER: &'static [u8] = include_bytes!("main.rs");
Run Code Online (Sandbox Code Playgroud)

不要将这些与include!文件作为Rust代码进行混淆.