![](/img/trans.png)
[英]How do I load, render and transform 2D images using Direct3D 11 API?
[英]Render video using direct3D
我們有一個使用DirectDraw 8的舊應用程序。它將一個像素一個像素地直接寫入視頻內存,一切都很好。 現在,我需要將其移植到Windows商店應用中。
Media Foundation似乎是渲染視頻的推薦途徑,並經歷了“ Media Engine本機C ++視頻播放示例(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
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.