S3のバグについて

よくゲームでオンボードのビデオやマイナーなメーカーのビデオカードが動作対象外に
書いてある事がある。
(メジャーはGeForce,Radeon)
これには3つの理由がある。

1).速度が遅い
2).動作検証してない
3).本当に動かない

2番はメーカーの手抜きであるが、実際のところ3番も結構あると思う。
幸いにもうちにはマイナーなものが揃っているのでその原因を探ってみた。
動作環境は以下の通り。

CPU Celeron466MHz
M/B ECS P6VXA
チップ VT82C694X,686B
OS WindowsMe(4.90,build3000)
DirectX 9.0a(4.09.0000.0901)
ビデオカード S3 Savage3D RevB(8MB)
(6.13.13)
ビデオドライバー 4.11.0001.4005(1999/02/19)
   

古いビデオカードなので1999年が最後のバージョンです。

1.伸縮バグ

bltで画像を引き伸ばすと特定の条件でフリーズする。
g_pDDSBack->Blt(&dr, g_pSprite, &sr, DDBLT_WAIT | DDBLT_KEYSRC , NULL);

drとsrはRECT構造体である。
フリーズする条件は何度かパラメータを変えて実験した結果である。

(1)画面色深度が16ビットカラーである
(2)sr.right-sr.leftがのとき
(3)sr.leftが4で割って余りがもしくは2のとき
(4)dr.right-dr.leftが33以上のとき

横幅が5ピクセルを伸ばすときだけフリーズする。
これより大きかったり小さい時は問題ないみたい。

2.透明色

きちんと透明色指定してもbltの伸縮させるとうまく透明色が抜けない。
例えば透明色をRGB(255,0,255)とした場合で

DDCOLORKEY ddckey;
int color=RGB(255,0,255);
ddckey.dwColorSpaceLowValue = DDColorMatch(g_pSprite, color );
ddckey.dwColorSpaceHighValue = DDColorMatch(g_pSprite, color );
g_pSprite->SetColorKey(DDCKEY_SRCBLT,&ddckey);

という場合である。
どうもbltルーチンの内部で色の計算に間違いがあると思われる。
伸縮の時に色情報にアンチエイリアスがかかっているのではないでしょうか?
これを解決するにはRGB(0,0,0)を透明色として設定すること。

※Savage4やSavage2000,VIAビデオ機能統合チップセットで同じ現象があるか分かりません。

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル