Manuke Station BBS

RSS
投稿者 題名 内容 URL

Vista/非Aero環境でSetPixelが使えない?

投稿者: Manuke 投稿日:
会社のおしごとで担当しているプログラムに、先週不具合報告がありました。
Windows VistaのAeroをオフにすると、画面が正しく描画されないとのこと。
調査してみたら、SetPixel(点を描くAPI)を呼んだときのX座標を512で割った余りが
256~511の範囲にあると、描画が行われないということが判明しました。
(ウィンドウ直書き時のみで、ビットマップに対してのSetPixelは大丈夫そう)

# 「Aeroをオフ」と言うより、恐らく「デスクトップコンポジションをオフ」だと想像。

どうやら自分のプログラムが原因ではないみたいでした。
GeForceとIntelチップセット内蔵GPUの両方で再現するので、ビデオカードドライバのせ
いでもなさそう。
そう思ってちょっとググってみたら……これ、既知のバグだったようです。
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=3228018&SiteID=7
とか、
http://gorry.haun.org/diary/direct.cgi?2007121402
とか……。

会社での再現率100%なので、ここまで酷いバグが放置されていることに驚きました。
SetPixelはデバイスコンテキストに点を打つ基本的なAPIですから。
しかも、ノートPCのようにマシンが非力でAeroを実行できない場合、Vista Home Basic
のようにAeroがそもそもAeroをオンにできない場合には、ユーザ側で対処の方法が存在
しません。
Vista発売から一年半にもなろうとしているのに、マイクロソフトはこんな重篤なバグを
どうして修正しないんでしょうか?

担当の同僚に頼んでマイクロソフトに質問してもらったら、
・以前にも同様の報告は受けていた。
 (MS側のサポートの人は当初、もう直ってると思っていた模様)
・現状でも再現することを確認した。
・Aeroをオンにする以外の回避方法は把握していない。
・再度報告を上げ直したが、いつ直るのかは確約できない。
という素敵な状態に……。orz

仕方ないので、そのプログラムでSetPixelしてる箇所は1x1ピクセルサイズの矩形塗りつ
ぶしに置き換えて対処しました。
なんだか凄く悲しい気分になりましたが(笑)、マイクロソフト側の対応がいつになるか
分からない状態では、こちらで対策を取るしかないので。
お客さんに「Vistaのバグだから諦めてください」なんて言えません(^^;)

と言うわけで、Windowsのプログラムを開発されている方、ご自身のプログラムでSetPixel
を呼び出していないか確認されることをお勧めしますー。
とりあえず、ウチのサイトで配布しているソフト(『X88000』とか、『C.H.A.O.S.』と
か)は大丈夫でした。
あと、これからVistaマシンを購入検討されている方、Aeroが動かないマシンはできるだ
け避けた方が良いかと思います。
特に最近流行のNettop/Netbookのように非力なマシンは、ダウングレード権を使ってXP
にした方が何かと幸せかも(^^;)