仕事がない+データ整理のために見つかったバグを修理しているために更新を行っています。
本当にコンビニのバイトとかそういう物をやらないとだめなんだろうか・・・。そういう時期なのかも。
で、blogの記事上は一気に0.02のバージョンを引き上げていますが、この間に一日だけ公開したVer 0.25が含まれていますので。
DirectX8の対応がまずかったらしい
まず初めのVer 0.25での更新項目から。
そもそも、いまどきDirectX8なんて使う人もいなければ資料もまともにない、と言う状態なのでちょっと一部で勘違いをしていた様子です。
最終描画の段階でテクスチャからの描画の処理に抜けがあったようで・・・。DirectX8を使ったプログラムがちょうどテストに含まれていたために発見できたのが良かったです。
たぶんこれでDirectX8に関する問題はほぼ無いはずです。DirectX8自身はDirectX9の機能ダウン版なので(当たり前ですが)、処理にある程度の互換がある物として組んでいますので。
マウス位置がなぜか元の位置で
お次はこれ。マウスカーソルの位置が元々の位置として間違って認識しているようだったのでいろいろと調べてみました。
マウスの座標を取得するための方法は大まかに言って三つくらいあります。
- ウィンドウプロシージャからWM_MOUSEMOVEおよびマウス系メッセージに含まれている座標から取得する
- GetCursorPosを使用してスクリーン座標のマウスカーソル位置を取得してScreenToClientでウィンドウ内の座標として取得する
- DirectInput系を使ってマウスデバイスを初期化してカーソル位置を取得する
今回のはその「どれでもない」(正しくは一番目の変形)ということでびっくりです。
方法が分かれば何とか解決しましたが、別の問題を引き起こさないかちょっと心配です。
オーバーレイウィンドウならぬ?
そして0.26で試験実装したWrapWindowと言う機能。ほとんど使い道はありません。(もちろん、「試験実装」なので何かで使えるのですが)
古いゲームだとGetDCしたまま返さない・・・の上級として、あるタイミングでGetDCによって取得したデバイスコンテキストをキャッシュしておいて、それに常に描画する、と言うパターンが。
これを解決する手法としてこの方法を考え出しました。ただ、再描画のタイミングがちょっと良くないらしく、わざとウィンドウのアクティブ状態を変更するなどが必要なことも。
掲示板に情報が来ないとちょっと寂しい
です。ダウンロードする人はそれなりにいるようなので情報提供があればな~と思います。