0

openGL で回転キューブをレンダリングする次の例の ppapi プラグインを使用しています: https://chromium.googlesource.com/chromium/src/ppapi/+/master/examples/gles2_spinning_cube

これを Chrome で実行されている Web ページに埋め込むことができ、すべて正常に動作します。私のhtmlページのコードはここと同じです: https://chromium.googlesource.com/chromium/src/ppapi/+/master/examples/gles2_spinning_cube/gles2_spinning_cube.html

ただし、別のembedhtml 要素を追加して同じプラグインを同じページに 2 回読み込むとembed、回転する立方体が表示されるのは 2 回目だけです。最初の埋め込みは、停止する前に 1 つのフレームをレンダリングします。

<embed id="plugin" type="application/x-ppapi-example-gles2-spinning-cube" width="800" height="600"/>
<embed id="plugin2" type="application/x-ppapi-example-gles2-spinning-cube" width="800" height="600"/>

Chrome は同じ Web ページで複数の ppapi プラグインをサポートしていますか? これが正常に機能するはずである場合、誰かがこれが起こっている理由を特定するのを手伝ってもらえますか?これは、複数の OpenGL コンテキストまたは何かがあるためですか? Fwiw、私は Ubuntu を使用しており、必要に応じて Windows/Mac で比較することができます。Chrome で --register-pepper-plugin を使用しています。

最終的にはこれを CEF ( https://bitbucket.org/chromiumembedded/cef )で使用したいのですが、これは Chrome では機能しないため、まずこの問題の根底に到達してから、CEF に進みます。

4

1 に答える 1

1

はい、Chrome は同じページで複数の ppapi プラグインをサポートしています。これは、ppapi サンプル コードで glSetCurrentContextPPAPI への呼び出しが欠落していたためです。次のようになっているはずです。

void DemoInstance::Paint(int32_t result) {
  if (result != PP_OK || !context_)
    return;

  glSetCurrentContextPPAPI(context_->pp_resource()); // missing from example

  cube_.UpdateForTimeDelta(0.02f);
  cube_.Draw();
  context_->SwapBuffers(callback_factory_.NewCallback(&DemoInstance::Paint));
}
于 2015-07-21T19:36:23.653 に答える