Как создать массив поверхностей IDirect3DSurface9 (поверхности D3D) в C ++?

Если я хочу создать поверхность D3D, я делаю это, как показано ниже. Аналогично, если я хочу создать массив поверхностей D3D типа IDirect3DSurface9 *, как мне это сделать в 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);

QUERY :: Как мне создать массив устройств D3D на C ++?

2

Решение

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);
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]