在WebBrowser控件中,IViewObjectPresentSite :: CreateSurfacePresenter失败

时间:2012-12-10 14:53:21

标签: internet-explorer-9 activex webbrowser-control mshtml hardware-acceleration

我的ActiveX控件调用IE9的CreateSurfacePresenter来获取ISurfacePresenter界面 我用它来渲染IE9(或更高版本)浏览器曝光的d3d表面,
从而实现硬件加速叠加混合。

一些代码:

CComQIPtr<IViewObjectPresentNotifySite, &IID_IViewObjectPresentNotifySite> m_spIViewObjectPresentSite;
ISurfacePresenter* m_spISurfacePresenter;

HRESULT hr = m_serviceProvider->QueryInterface(IID_IViewObjectPresentSite, (void **) &m_spIViewObjectPresentSite);
if(FAILED(hr))
  return -1;

// ... later...
m_numBuffers=1; // or 2 doesn't matter
hr = m_spIViewObjectPresentSite->CreateSurfacePresenter(
    m_partialScreenD3dDevice, window_width, window_height, m_numBuffers, DXGI_FORMAT_B8G8R8A8_UNORM, VIEW_OBJECT_ALPHA_MODE_IGNORE, &m_spISurfacePresenter);
// !!! this call works for activeX plugin hosted in IE9 browser, but fails (Invalid Argument)
// when hosted in a hosted IE webBrowser control (same html)

这适用于IE9浏览器 但我需要它在嵌入式IE ActiveX控件中工作:
我在Windows窗体或其他浏览器中嵌入了IE9 WebBrowser control 然后我将wb控件导航到嵌入我的ActiveX控件的html页面 但在这种情况下,对CreateSurfacePresenter的调用失败,出现Invalid Argument错误。

为什么IE控件无法返回ISurfacePresenter?

注意:
1)IE WebBrowser控件是一个Windowed插件,我的ActiveX是无窗口的 2)我验证了嵌入式WebBrowser loads in IE9 mode(我从JS读取了UserAgent)
3)我使用direct3d9ex来渲染

1 个答案:

答案 0 :(得分:0)

不幸的是我找不到原来问题的答案 我担心在嵌入式IE浏览器控件中使用此界面是不可能的 但我发现Mozilla Gecko中有一个类似的界面,叫做NPAPI AsyncDrawing 暴露出可以绘制的D3D10表面,它在embedded Gecko中起作用。