私はa tutorial on the gfx libraryに従っています。次のコードは、ウィンドウシステムを初期化するために使用され、暗黙的に型指定されたバインディングを使用してさまざまなビットを返します。フロントエンドのクレート内のボックスからGfxバックエンドタイプを参照する
私は読みやすさのために、チュートリアルの一部である描画コードをそれ自身の機能に抽出しようと決めました。ここで
fn draw_triangle(factory: &Factory) {
let mut encoder: gfx::Encoder<_, _> = factory.create_command_buffer().into();
const TRIANGLE: [Vertex; 3] = [
Vertex {
pos: [-0.5, -0.5, 0.0, 1.0],
color: [1.0, 0.0, 0.0],
},
Vertex {
pos: [0.5, -0.5, 0.0, 1.0],
color: [0.0, 1.0, 0.0],
},
Vertex {
pos: [0.0, 0.5, 0.0, 1.0],
color: [0.0, 0.0, 1.0],
},
];
//Identity Matrix
const TRANSFORM: Transform = Transform {
transform: [
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0],
],
};
let (vertex_buffer, slice) = factory.create_vertex_buffer_with_slice(&TRIANGLE,());
let transform_buffer = factory.create_constant_buffer(1);
let data = pipe::Data {
vbuf: vertex_buffer,
transform: transform_buffer,
out: color_view.clone(),
};
//Put in main loop before swap buffers and device clean-up method
encoder.clear(&color_view, BLACK); //clear the framebuffer with a color(color needs to be an array of 4 f32s, RGBa)
encoder.update_buffer(&data.transform, &[TRANSFORM], 0); //update buffers
encoder.draw(&slice, &pso, &data); // draw commands with buffer data and attached pso
encoder.flush(&mut device); // execute draw commands
}
問題は、(最初のコード断片から渡さ)Factory
このファイルの範囲内に存在しないことがあり、実際にgfx_glutin_windowクレート内に存在するクレートに属します。
コンパイラは、これがコードの最初のフラグメントで暗黙的に定義されていることに満足していますが、私は明示的にそれを参照することはできません。 (つまり、私はgfx_glutin_windowの木枠でそれを得ることができません)。
ここでマークを完全に紛失しているのか、それとも設計上のものであるのか分かりません。プロジェクトの依存関係が一時的な依存関係と衝突するシナリオを想像することはできますが、
ああ、素晴らしい(私はこれが錆のパターンになるのではないかと恐れていた)後者の解決策は間違いなくより堅牢です。このような状況で特性を使用することは、錆が発生しても良い習慣と考えられますか?ありがとう。ああ、私の質問をクリアしてくれてありがとう。 – user975391
@ user975391可能であれば、一般化はしばしば良い考えです。例えば、Gfx上でのpiston2d-graphics APIの使用を選択した場合でも、['Graphics'](https://docs.rs/piston2d-graphics/0.23.0/graphics/trait)でコードを汎用的にすることをお勧めします.Graphics.html)。特定のテクスチャのみを使用する場合、[テクスチャ]関連タイプを割り当てることができます(https://docs.rs/piston2d-graphics/0.23.0/graphics/trait.Graphics.html#associatedtype.Texture )を目的のテクスチャタイプに変更します。 –