2009-07-14 9 views
1

DX8のIDirect3DDevie8 :: CopyRectsをDirectX9に移植するにはどうすればよいですか?それが働いていた場合HERESに "交換" のコード... IDirect3DDevice8 :: CopyRects in DirectX 9? C++

StretchRect(m_pD3DSurface, NULL, pBackBuffer, NULL, D3DTEXF_NONE); 

がD3Dデバッガを実行した

//clear the window to blue 
m_pD3DDevice->Clear (0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0); 

//get back buffer 
LPDIRECT3DSURFACE9 pBackBuffer; 
m_pD3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer); 

//start rendering 
m_pD3DDevice->BeginScene(); 
//copy the surface to the screen 
m_pD3DDevice->CopyRects (m_pD3DSurface, NULL, 0, pBackBuffer, NULL); 
//end rendering 
m_pD3DDevice->EndScene(); 

//present the rendered scene to the screen 
m_pD3DDevice->Present(NULL, NULL, NULL, NULL); 

...私は、関数(stretchRect)を発見したが、動作するようには思えません

Direct3D9: (INFO) :======================= Hal SWVP device selected 

Direct3D9: (INFO) :HalDevice Driver Style 9 

Direct3D9: :BackBufferCount not specified, considered default 1 
Direct3D9: :DoneExclusiveMode 
Direct3D9: (INFO) :Failed to create driver indexbuffer 
Direct3D9: (INFO) :Using P4 PSGP 

Direct3D9: (ERROR) :This format is not supported for offscreen plain surfaces. CreateOffscreenPlainSurface fails. 
Game Library.exe has triggered a breakpoint 
Direct3D9: (ERROR) :Invalid source surface interface specified. StretchRect fails CreateOffscreenPlainSurface fails. 
+0

なぜIDirect3DDevice8 :: CopyRectsを使用できませんでしたか? コードがDX8用に書かれている場合は、DX8を使用してください。 IDirect3D8 :: CreateDevice():) – Pod

答えて

2

私はあなたがストレッチレクトを使用したいとは思わない。代わりにIDirect3DDevice9 :: UpdateSurfaceを使ってみましたか?

MSDN IDirect3DDevice9::UpdateSurface

この方法は にCopyRectsに似ているのDirectX 8

+0

SDKから: "デスティネーションサーフェスがオフスクリーンプレーンサーフェスであるがソースが" – gatorfax

0

まず、デバッグランタイムが試して伸ばしたときの表示内容を確認しますか?
次に、HRESULTは何を返しますか?
最後に、テクスチャを使ってこのようなことをする方がはるかに良いでしょう。それは何倍も速く、どちらかを行うことが特に難しいことはありません...

+0

私は、Game Programmingを1つにまとめて使用しています.DireX 8を使用するには十分な年齢です。著者はサーフェスをデモンストレーションしていますので、彼が与えたコードを使用しています。 –

+0

ああ、StretchRectがFAILEDを返しています。 –

+0

DirectXデバッグランタイムがうまく動作していて、失敗した理由を正確に教えてくれるでしょう。これを行うには、スタート - >プログラム - > DirectX SDK - > DXユーティリティ - > DXコントロールパネルに進み、D3Dでデバッグランタイムを選択します。 – Goz

1

あなたのバックバッファのフォーマットは何ですか?あなたの表面のフォーマットは何ですか?

あなたが上に投稿したデバッグ実行時は、何が間違っているかを伝えています。サーフェスフォーマットは何らかの形で互換性がありません。

StretchRectは、デバイス上のサーフェス間のコピー用です。 UpdateSurfaceは、CPUからGPUにコピーするためのものです。正しい関数を使用していますが、何らかの形で互換性のない引数があります。私の本The Direct3D Graphics PipelineからChapter 4. 2D Applicationsを見てみてください。セクション4.9では、StretchRectの使用方法について説明します。

関連する問題