我的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来渲染
答案 0 :(得分:0)
不幸的是我找不到原来问题的答案 我担心在嵌入式IE浏览器控件中使用此界面是不可能的 但我发现Mozilla Gecko中有一个类似的界面,叫做NPAPI AsyncDrawing 暴露出可以绘制的D3D10表面,它在embedded Gecko中起作用。