Установить отдельные пиксели на заднем буфере - PullRequest
1 голос
/ 31 августа 2010

Я хочу иметь возможность устанавливать отдельные пиксели заднего буфера в моей программе эффективным способом. Это то, что я называю в моей функции рендеринга:

void render_frame(void)
{
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);

    d3ddev->BeginScene();

    d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &surface);
    D3DLOCKED_RECT locked;
    surface->LockRect(&locked, NULL, 0);
    *(BYTE*)locked.pBits=42;
    surface->UnlockRect();
    surface->Release();

    d3ddev->EndScene();

    d3ddev->Present(NULL, NULL, NULL, NULL);

}

Однако всегда происходит сбой. Если я закомментирую часть, где я назначаю первый байт 42, он не падает. Так что же я делаю не так, я не могу назначить значения буферу, указанному bPits, так как поверхность заблокирована?

Только что обнаружил, что locked.pBits - это нулевой указатель. Тогда почему LockRect потерпел неудачу?

1 Ответ

3 голосов
/ 31 августа 2010

Чтобы заблокировать задний буфер, вам необходимо указать флаг при создании устройства:

D3DPRESENT_PARAMETERS d3dpp;
(...)
d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;

Однако, как указано в спецификациях Direct3D, это может серьезно ухудшить производительность.Лучше рисовать текстурированные треугольники.

...