2

D3Dサーフェスを作成する場合は、次のようにします。同様に、タイプIDirect3DSurface9 *のD3Dサーフェスの配列を作成する場合、C ++でどのように実行しますか?

IDirect3DSurface9** ppdxsurface = NULL;
IDirect3DDevice9 * pdxDevice = getdevice(); // getdevice is a custom function which gives me //the d3d device. 

pdxDevice->CreateOffscreenPlainSurface(720,480,
                                                D3DFMT_A8R8G8B8,
                                                D3DPOOL_DEFAULT,
                                                pdxsurface,
                                                NULL);

クエリ::C++でD3Dデバイスの配列を作成するにはどうすればよいですか?

4

1 に答える 1

5

ppdxsurfaceが正しく宣言されていない場合は、ポインタへのポインタだけでなく、ポインタオブジェクトへのポインタを指定する必要があります。それはIDirect3DSurface9*、ではなく、であるものとしますIDirect3DSurface9**

IDirect3DSurface9* pdxsurface = NULL;
IDirect3DDevice9* pdxDevice = getdevice();

pdxDevice->CreateOffscreenPlainSurface(720, 480,
   D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
   &pdxsurface, // Pass pointer to pointer
   NULL);

// Usage:
HDC hDC = NULL;
pdxsurface->GetDC(hDC);

サーフェスの配列を作成するには、ループで呼び出すだけです。

// Define array of 10 surfaces
const int maxSurfaces = 10;
IDirect3DSurface9* pdxsurface[maxSurfaces] = { 0 };

for(int i = 0; i < maxSurfaces; ++i)
{
   pdxDevice->CreateOffscreenPlainSurface(720, 480,
      D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
      &pdxsurface[i],
      NULL);
}

または、std::vector動的配列が必要な場合は、次を使用します。

std::vector<IDirect3DSurface9*> surfVec;

for(int i = 0; i < maxSurfaces; ++i)
{
   IDirect3DSurface9* pdxsurface = NULL;
   pdxDevice->CreateOffscreenPlainSurface(720, 480,
      D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,
      &pdxsurface,
      NULL);
   surfVec.push_back(pdxsurface);
}
于 2012-11-01T17:03:20.620 に答える