Существует ли способ изменить пиксели заднего буфера d3d9?

У меня есть возможность получить данные о пикселях заднего буфера хуком метода EndScene()

HRESULT MyEndScene(IDirect3DDevice9* self)
{
    D3DLOCKED_RECT d3dlr;
    D3DPRESENT_PARAMETERS d3dpp;
    IDirect3DSwapChain9* pSwapChain;
    self->GetSwapChain(0, &pSwapChain);
    pSwapChain->GetPresentParameters(&d3dpp);  
    MyReset(self, &d3dpp); // меняет флаг параметров
    D3DSURFACE_DESC desc;
    LPDIRECT3DSURFACE9 back_buffer = NULL;
    self->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &back_buffer);
    back_buffer->GetDesc(&desc);
    back_buffer->LockRect(&d3dlr, NULL, D3DLOCK_NO_DIRTY_UPDATE | D3DLOCK_READONLY);

    //тут я могу получить указатель на данные о пикселях d3dlr.pBits

    back_buffer->UnlockRect();
    back_buffer->Release();
    return oEndScene(self);
}

Эти данные я могу читать, но если я их изменю, ничего не произойдет. Существует ли какой-нибудь способ напрямую менять RGBA байты пикселей заднего буфера перед вызовом Present так, что бы менялось изображение?


Ответы (0 шт):