0

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コントロールで機能する必要があります
。IE9WebBrowserコントロールをWindowsフォームまたは別のブラウザーに
埋め込み、wbコントロールをActiveXコントロールを埋め込んだhtmlページに移動します。
ただし、その場合、CreateSurfacePresenterの呼び出しは失敗し、無効な引数エラーが発生します。

IEコントロールがISurfacePresenterを返さないのはなぜですか?

注:
1)IE WebBrowserコントロールはウィンドウプラグインであり、ActiveXはウィンドウレスです。2)埋め込まれたWebBrowserがIE9モードで読み込まれる
ことを確認します(JSからUserAgentを読み取ります) 3)direct3d9exを使用してレンダリングします

4

1 に答える 1

0

残念ながら、元の質問に対する答えが見つかりませんでした。
残念ながら、組み込みの IE ブラウザ コントロールでこのインターフェイスを使用することはできません。 しかし、Mozilla Gecko には、描画できる D3D10 サーフェスを公開するNPAPI AsyncDrawing
と呼ばれる同様のインターフェイスがあり、埋め込まれた Geckoで動作することがわかりました。

于 2013-01-22T07:37:45.530 に答える