0

我的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呈現

回答

0

不幸的是我沒有找到一個答案,我原來的問題。
恐怕在嵌入式IE瀏覽器控件中使用這個接口是不可能的。
但是我發現在Mozilla Gecko中有一個類似的界面,叫做NPAPI AsyncDrawing
,它暴露了你可以繪製的D3D10表面,它在embedded Gecko中工作。