简体   繁体   English

如何在DirectShow源过滤器中渲染3D图形

[英]How can I render 3d graphics in a directshow source filter

I need to render a simple texture mapped model as the output of a directshow source filter. 我需要渲染一个简单的纹理映射模型作为DirectShow源过滤器的输出。 The 3d rendering doesnt need to come from Direct3D, but that would be nice. 3d渲染不需要来自Direct3D,但这会很好。 OpenGL or any other provider would be fine assuming I can fit it into the context of the DirectShow source filter. 假设我可以将其适合DirectShow源过滤器的上下文,则OpenGL或任何其他提供程序都可以。

visual studio 2008 c++ Visual Studio 2008年C ++

With direct3d I have found that you can call GetRenderTargetData from the d3d device to get you access to the raw image bytes that you can then copy into the source filters image buffer 使用direct3d我发现您可以从d3d设备调用GetRenderTargetData来访问原始图像字节,然后可以将其复制到源过滤器图像缓冲区中

Here is example code of how to get the d3d render 这是如何获取d3d渲染的示例代码

void CaptureRenderTarget(IDirect3DDevice9* pdev)
{
    IDirect3DSurface9* pTargetSurface=NULL;
    HRESULT hr=pdev->GetRenderTarget(0,&pTargetSurface);
    if(SUCCEEDED(hr))
    {
        D3DSURFACE_DESC desc;
        hr=pTargetSurface->GetDesc(&desc);
        if(SUCCEEDED(hr))
        {
            IDirect3DTexture9* pTempTexture=NULL;
            hr=pdev->CreateTexture(desc.Width,desc.Height,1,0,desc.Format,D3DPOOL_SYSTEMMEM,&pTempTexture,NULL);
            if(SUCCEEDED(hr))
            {
                IDirect3DSurface9* pTempSurface=NULL;
                hr=pTempTexture->GetSurfaceLevel(0,&pTempSurface);
                if(SUCCEEDED(hr))
                {
                    hr=pdev->GetRenderTargetData(pTargetSurface,pTempSurface);
                    if(SUCCEEDED(hr))
                    {
                        //D3DXSaveTextureToFile(L"Output.png",D3DXIFF_PNG,pTempTexture,NULL);
                        D3DLOCKED_RECT data;
                        hr=pTempTexture->LockRect(0, &data, NULL, 0);
                        if(SUCCEEDED(hr))
                        {
                            BYTE *d3dPixels = (BYTE*)data.pBits;                                            
                        }
                        pTempTexture->UnlockRect(0);
                    }
                    pTempSurface->Release();
                }
                pTempTexture->Release();
            }
        }
        pTargetSurface->Release();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM