2/19日記 ===== プログラム ===== * 描画をお試しできるフレームワークを作って多分6日目。 * 今日も実装を色々進めた。 ---- * ひとつめが画像読み込み。 * https://x.com/__machia__/status/2024413851585032429?s=20 * 画素数は下がる割には容量が大きい形式だけど、仕方ないものとした。 * で、ちゃんとカラーキーにも対応して色抜きしてるし、しっかり色調を落として描画できるようになっている。 * 描画するときはメモリ上に食うデータを低くしてあるので、描画スピードも稼げるはず。(実際当初の頃よりは早くなってる) ---- * ふたつめが、加算合成もしくはアルファブレンディング。 * https://x.com/__machia__/status/2024433281899618601?s=20 * 手前から描画する関係上特殊な方法で描画する関数を作ったりしていたけど、せっかくなので爆発とかに使えそうな要素が欲しいなあと思い始めた。 * 式としては、「(ベースになる色*透過率)+乗せるテクスチャの色」、という形にした。 * まだいまいち加算合成とアルファブレンディングの区別がついてないんだよね。 * これで主な描画関数は「通常・Xor(描画されていたら除外)・加算」になった。意外と多いな。 ---- * みっつめ。 * 今作成中のフレームワークを、DXライブラリ上で動くようにしてみた。 * https://x.com/__machia__/status/2024373671511675049?s=20 * 元々CPUの計算のみで描画させることを念頭に置いてGDIを使っていたけど、他の環境で動かすならDXライブラリや他のライブラリにも対応したほうが夢が広がると考えて移植できるようにしていた。 * 最初SFMLというライブラリを使ってみたけど、これが結構使いやすかったのでWindows環境や別OSはこれ使うのでいいかな?と思い始めた。正直SDLでも作れそうだけど、準備が面倒なんだよね・・・(某OSSで自分がソースコードメンテして仕方ないのでツール作ったようなレベル * あとは日本でメジャーなライブラリだとDXライブラリかなって思ってて、そもそもDXライブラリで自力描画ってどうするのとかせっかくだから移植を目指してみようとか、いろいろ考えて組み込んでみた。 * 目標は某すいっt・・・とは言い難いけど、まず日本でよく使われてるライブラリに乗せることができたのは夢が広がる。 * とは言うものの他の実装とは違ってシングルスレッド形式で動かしてる。 * DXライブラリがマルチスレッドで動くようにはなってないので、ここは仕方ない。 * とは言うもののかなり性能が高いので、これそのまま動かしてもいいじゃんと思った。(他ライブラリは描画がループの邪魔をしていたので仕方なく別スレッドで動かすことになった経緯がある ---- * とか日記を書いてる間に、Raylibへの組み込みもできた。 * https://x.com/__machia__/status/2024464867420438627?s=20 * これで割と利用するライブラリには組み込めるのを確認したかな。 * あとSDLも試してみようかな・・・(準備がめんどいからやだーってなってたけど ---- * 入力と音周りが必要な場合、別ライブラリに移植していける、という確信が持てたのはよかったと思う。 * つまりピクセル入力ができればどのライブラリに組み込んでも問題ない見込みが高くなったということ。 * 勿論単独で動かすのもできるので、遊ぶのにちょうどいい。 * あと画像描画周りはかなり楽に扱えるように作っているので、自分が遊ぶのにちょうどいいと考えてる。 * 元々メガデモとかでプログラムで描画するのに慣れていたのもあり、Unityでコードで描画出来る環境がないためストレスフルだったので。(一応可能だけどデバッグ用関数扱い * 何十年かの心残りを今解消することができた。ずっと自分の実力が低いヘボグラマだと思っていたので。 ---- * あとハードウェアに近い処理について知見が深まった。 * 具体的にはCPUの計算速度のほか、メモリへのアクセスを容量低くすると劇的に動作が早くなること。 * IntelのCPU限定なのかもしれないけど、他のCPUにL1キャッシュは存在するので役立つこともあるだろう。