Chapter 07

4章 ピクセル描画とmake入門

misawa
misawa
2022.01.08に更新

Make

make じゃなくて cargo-make を使っているのだが, ついでにちょっとだけ整理した.
前章で

仕方ないので, cargo project 自体を分けた.

と言ったが, 一つの cargo project にして workspace を使っていても, cargo build 自体をそれぞれの member 内でやれば一応ビルド出来ることがわかったため, 一つに戻した.

仮想関数

Rust では Box<dyn PixelWriter> などとすればよいが,

  • Boxno_std では allocator を実装しないと使えない
  • 分岐を削除したいなら, 単に事前に RGB それぞれのオフセットを計算し, self.buffer[pos + self.r_offset as usize] = color.r などとすればよい.

という理由により, わざわざ vtable が使われる実装にはしなかった.

ELF ファイルをちゃんとマップするやつ

既にやっていたが, PT_LOAD なセグメントのみで良いらしいのと, メモリ上に展開すべきサイズとファイル内のサイズが違うときの 0 fill 対応をしていなかったので改修した. セグメントの種別は, 自分が使っているライブラリ(object)では, 色々なオブジェクトフォーマットを統一的に扱えるライブラリという都合上か, 普通の統一された API では取得できず, ELF 専用の API を使って読まねばならなかった.