我正在使用 minifb 构建一个小型图形库,本质上只是将像素绘制到帧缓冲区。
目前,我将矩形位块传输为
Texture
的代码如下:
fn blit(&self, dest: &mut Texture) {
for x: i32 in self.x..self.x+self.width {
for y: i32 in self.y..self.y+self.height {
dest.set(x, y, color: self.color.clone());
// same as dest.pixels[y*dest.width+x]=color
// but this checks for out-of-bound pixels.
}
}
}
显然这是非常低效的,因为我需要逐一循环每个像素。
我想知道 Rust 是否有一种方法将 dest.pixels 向量的“块”设置为矩形像素线?那么一次调用就可以更新一行 100 像素?类似于
Vec::update_from(&mut self, index, new_values)
。
例如,如果我有两个 Vec,如下所示:
let a = vec![2, 4, 5, 6, 7, 8, 10];
let b = vec![0, 1, 2];
我希望能够开始将 vec b 写入 vec a 的特定索引处,例如索引 3(元素 4)。所以得到的 vec 将是
[2, 4, 5, 0, 1, 2, 10]
。
如果有一种方法可以通过一次调用来批量更新 vec 中的元素,我真的很感激:)
我将texture(像素向量)传输到另一个纹理的代码如下:
fn blit(&self, dest: &mut Texture) {
for y: i32 in 0i32..self.height as i32 {
for x: i32 in 0i32..self.width as i32 {
dest.set(x: x + self.x, y: y + self.y, color: self.get(x, y).unwrap().clone());
}
}
}
是否也可以批量写入不同的值(一次写入行而不是像素)?
对其中任何一个的任何帮助将不胜感激,我很乐意回答任何问题以澄清问题。