HTC Touch Diamond の Direct3D Mobile を使い Texture に直接レンダリングしようと
思ったらエラー。cpas を見たら対応していないことに気がつきました。
テクスチャに対して BackBuffer からのコピーは出来たので、必要ならフレーム
バッファをコピーしながら使うことになります。
ちょっと昔の GPU といった感じです。
IDirect3DMobileTexture* iTexture0; CreateTexture( 512, 512, ..., &iTexture0 ) IDirect3DMobileSurface* iSurface0; iTexture0->GetSurfaceLevel( 0, &iSurface0 ); ~ RECT rect; rect.left= 0; rect.top= 0; rect.right= 480; rect.bottom= 480; CopyRects( iBackBuffer, &rect, 1, iSurface0, NULL );
●現在までにわかっている問題点
HTC TouchDiamond (Qualcomm MSM7201A 内蔵 ati core 用 d3dm_ati.dll) で
Direct3DMobile を使用した場合に遭遇した各種症状です。
Emulator の Reference Driver では問題がないので、何らかのバグの可能性が高いと
思われます。
・640×480 window mode/full screen でレンダリングできない
639×480 や 640×479 以下なら大丈夫
・HW T&L の光源が World space ではなく Local space で適用されてしまう
・XYZ_RHW 形式の頂点でレンダリングすると RHW の値が座標値にも影響を与えてしまう
rhw = 1 以外で screen 座標を正しく与えることが出来ない。
・XYZ_RHW 形式(Transform済み頂点)と、そうでない頂点の混在が出来ない。
RHW 無し頂点が出なくなる。
・D3DMTSS_TEXCOORDINDEX が無視される。常に Stage に一致した頂点 uv を参照する。
仕様かもしれません。
・D3DMFVF_TEXCOORDFIXED が指定できない。常に頂点 uv は FLOAT とみなされる。
・Texture の mipmap ありなしと D3DMTSS_MIPFILTER の設定を厳密に合わせないと
テクスチャが真っ白になる。
存在しない miplevel へのアクセスが all 255 になるのかと思ったけど違うようです。
・ZWRITEENABLE を FALSE にできない。症状未確認。
・TextureStage でテクスチャを使用していない描画とテクスチャを使用している描画が
混在しているときに Texture が表示されないことがある。
厳密な発生条件は未検証です。他にも複数の描画で、上書きしているはずの
TextureStage の設定が相互に影響し合っていることがあります。
d3dmclock でも、オプションによって Texture が不要なケースなのにテクスチャを
読み込んで演算で無視するなどやってます。
その他危なそうなものは避けて使っているので他にもあるかもしれません。
関連エントリ
・HTC Touch Diamond で Direct3DMobile その(10) d3dmclock v1.10 3Dクロック 更新
・HTC Touch Diamond で Direct3DMobile その(9) d3dmclock v1.00 3D クロック
・HTC Touch Diamond で Direct3DMobile その(8) ノーマルマップの解説
・HTC Touch Diamond で Direct3DMobile その(7) ノーマルマップを表示する
・HTC Touch Diamond で Direct3DMobile その(6) 頂点性能続き
・HTC Touch Diamond で Direct3DMobile その(5)
・HTC Touch Diamond で Direct3DMobile その(4) 高速化
・HTC Touch Diamond で Direct3DMobile その(3) 実際の頂点性能
・HTC Touch Diamond で Direct3DMobile を使う。その (2)
・HTC Touch Diamond で Direct3DMobile を使う。ハードウエアアクセラレータ