我用的viewport弄的 但是2,3,4 都没,只有第一个视图渲染成功,
代码如下
IDirect3DSurface9 * pBackBuffer = NULL;
lRet = m_pDirect3DDevice->GetBackBuffer(0,0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);
////清屏
//m_pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
////开始渲染
//m_pDirect3DDevice->BeginScene();
////正式绘制
//m_pDirect3DDevice->StretchRect(m_pDirect3DSurfaceRender, NULL, pBackBuffer, &m_rtViewport, D3DTEXF_LINEAR);
////结束绘制
//m_pDirect3DDevice->EndScene();
D3DVIEWPORT9 viewport1 = { 0, 0, m_Width / 2, m_Height / 2, 0.0f, 1.0f };
D3DVIEWPORT9 viewport2 = { m_Width / 2, 0, m_Width / 2, m_Height / 2, 0.0f, 1.0f };
D3DVIEWPORT9 viewport3 = { 0, m_Height / 2, m_Width / 2, m_Height / 2, 0.0f, 1.0f };
D3DVIEWPORT9 viewport4 = { m_Width / 2, m_Height / 2, m_Width / 2, m_Height / 2, 0.0f, 1.0f };
Draw(&viewport4, pBackBuffer);
Draw(&viewport2, pBackBuffer);
Draw(&viewport1, pBackBuffer);
Draw(&viewport3, pBackBuffer);
//释放buff
pBackBuffer->Release();
void Direct3DPlayer::Draw(D3DVIEWPORT9* viewport, IDirect3DSurface9* Buffer)
{
m_pDirect3DDevice->SetViewport(viewport);
m_pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, 0x0000ffff, 1.0f, 0);
// Begin the scene
if (SUCCEEDED(m_pDirect3DDevice->BeginScene()))
{
// Draw
HRESULT Ret;
Ret = m_pDirect3DDevice->StretchRect(m_pDirect3DSurfaceRender, NULL, Buffer, (const RECT*)viewport, D3DTEXF_LINEAR);
// End the scene
m_pDirect3DDevice->EndScene();
////显示翻转
m_pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}
}
在线等!或者给个其他方式进行多视图播放视频,另外我这个是读取本地yuv420数据