Рендеринг видео с использованием Direct3D

У нас есть старое приложение, использующее DirectDraw 8. Оно записывает пиксель за пикселем напрямую в видеопамять, и все в порядке.
Теперь мне нужно перенести его в приложение Windows Store.

Media Foundation, по-видимому, является рекомендуемым путем для рендеринга видео и прошел через «образец воспроизведения видео на C ++ для Windows Media Engine (Windows 8.1)», но даже Media Foundation использует DirectDraw для рендеринга видео.

    ComPtr<ID3D11Texture2D> backBuffer;
DX11SwapChain->GetBuffer(0, IID_PPV_ARGS(&backBuffer));

m_spMediaEngine->TransferVideoFrame(backBuffer.Get(), nullptr, &m_rcTarget, &m_bkgColor);

DX11SwapChain->Present(1, 0);

Так что прошел образцы Direct3D и смог получить backBuffer. Но все образцы, кажется, имеют дело с рисованием линий и т. Д.
и ни один на настройке отдельных пикселей.

Как мне взять в руки пиксели? т.е. установить BackBuffer [somepixel] = someRGBA

0

Решение

UpdateSubresource работал нормально для меня. Я мог получить около 60 FPS, что было неплохо.

    // get a pointer directly to the back buffer
swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), &Backbuffer);

// Width and Height
swapchain->GetDesc1(&scd);
Width = scd.Width;
Height = scd.Height;

TextureData = new UINT32[Width * Height];void CMyClass::Render()
{
UINT n, i;
UINT  *psrc;
psrc = TextureData;
i = ScreenColourI & 255;
ScreenColourI += 1;

for (n=0; n<Width*Height; n++)
{
*psrc++ = (i<<16) | (i<<8) | i ;
i++;
i &= 255;
}

myID3D11DeviceContext->UpdateSubresource (Backbuffer.Get(), 0, NULL, TextureData, Width*4, 0);

// switch the back buffer and the front buffer
swapchain->Present(1, 0);

}
0

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

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

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