我的ActiveX控件調用IE9的CreateSurfacePresenter來獲得ISurfacePresenter接口。
我用它渲染到IE9(或更高版本)瀏覽器暴露的d3d表面,
,從而實現硬件加速的疊加混合。IViewObjectPresentSite :: CreateSurfacePresenter在WebBrowser控件中失敗
一些代碼:
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控件的工作:
我嵌入IE9 WebBrowser control在Windows的形式,或在另一個瀏覽器,
我瀏覽WB控制嵌入我的ActiveX控件的HTML頁面。
但是在這種情況下,對CreateSurfacePresenter的調用失敗,出現無效參數錯誤。
爲什麼IE控件無法返回ISurfacePresenter?
備註:
1)IE WebBrowser控件是一個Windowed插件,我的ActiveX是無窗口的。
2)我驗證的嵌入式web瀏覽器loads in IE9 mode(我讀了JS的用戶代理)
3)我用direct3d9ex呈現