2

Intel 945GSE チップセットを搭載した Atom N270 を実行する Windows CE 6 を使用しています。Direct3D Mobile 用の小さなテスト アプリケーションを作成しましたが、奇妙な動作が発生しています。Draw*Primitive はフレームごとに 1 回しか呼び出せません。複数回呼び出すと、Present が失敗したかのように白い画面が表示されるか (エラーは表示されません)、最初の呼び出しのみが処理されたように見えます。

メッセージ処理を省略した場合、レンダリング ループの本体は次のようになります。

HandleD3DMError(pD3DMobileDevice->Clear(0,0,D3DMCLEAR_TARGET | D3DMCLEAR_ZBUFFER ,0xA50AB0F,1.0f,0),_T("Clear"));
if(HandleD3DMError(pD3DMobileDevice->BeginScene(),_T("BeginScene")))
{
    HandleD3DMError(pD3DMobileDevice->SetTexture(0,pTexture), _T("SetTexture"));
    HandleD3DMError(pD3DMobileDevice->SetStreamSource(0,m_pPPVVB[0],sizeof(PrimitiveVertex)),_T("SetStreamSource Failed"));
    HandleD3DMError(pD3DMobileDevice->SetIndices(pIndexBuffer),_T("SetIndices failed"));
    HandleD3DMError(pD3DMobileDevice->DrawIndexedPrimitive(D3DMPT_TRIANGLELIST,0,0,NUM_TRIS*3,0,NUM_TRIS/2),_T("Draw Primitive 1"));
    //HandleD3DMError(pD3DMobileDevice->DrawIndexedPrimitive(D3DMPT_TRIANGLELIST,0,0,NUM_TRIS*3,NUM_TRIS/2 * 3,NUM_TRIS/2),_T("Draw Primitive 2"));

    HandleD3DMError(pD3DMobileDevice->SetStreamSource(0,0,0),_T("SetStreamSource Null Failed"));
    HandleD3DMError(pD3DMobileDevice->SetIndices(0),_T("SetIndices Null failed"));

    HandleD3DMError(pD3DMobileDevice->EndScene(),_T("EndScene"));
}
HandleD3DMError(pD3DMobileDevice->Present(0,0,0,0),_T("Present Failed"));

2 つの線を切り替えてDrawIndexedPrimitive()、両方ともそれぞれ 4 つの三角形をレンダリングできますが、これは正しいことです。ただし、両方が存在する場合、何もレンダリングされません。このHandleD3DMError()関数は、エラーが発生したときにメッセージ ボックスを表示します。これも初期化を通じてすべて行われます。エラーは常に表示されません。

さまざまなプリミティブ タイプを描画し、インデックスのない頂点バッファーを描画しようとしましたが、成功しませんでした。単一のバッファーを使用して 10,000 個の三角形を描画できますが、複数のバッファーを使用しようとすると失敗します (複数の描画呼び出しの問題に関連していると思います)。

MSDN のドキュメントには、Draw 呼び出しに関する制限については言及されていません。複数の Draw 呼び出しを行う必要があるケースについても言及しています。私が見た公式のサンプルも、フレームごとに一度だけ Draw*() を呼び出します。

BeginScene()1 つのフレームでEndScene()何度も試行しても、何もレンダリングされず、クリアされた色もレンダリングされません。

必要に応じて、すべてのソースを提供できます。

誰でも私にできる助けに感謝します。

乾杯

4

0 に答える 0