单个网页中有多个OpenGL ppapi插件

时间:2015-07-19 13:50:54

标签: google-chrome opengl ppapi

我正在使用以下示例ppapi插件,该插件使用openGL渲染旋转立方体:https://chromium.googlesource.com/chromium/src/ppapi/+/master/examples/gles2_spinning_cube

我能够将其嵌入在Chrome中运行的网页中,并且一切正常。我的html页面的代码与此处的代码相同:https://chromium.googlesource.com/chromium/src/ppapi/+/master/examples/gles2_spinning_cube/gles2_spinning_cube.html

但是,如果我添加另一个embed html元素以在同一页面上加载相同的插件两次,则只有第二个embed显示旋转的多维数据集。第一个嵌入在停止之前呈现单个帧。

<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是否支持同一网页上的多个ppapi插件?如果这应该工作正常,那么有人可以帮我确定为什么会发生 - 这是因为我有多个OpenGL上下文或什么? Fwiw,我在Ubuntu上,如果有必要,我可以尝试在Windows / Mac上进行比较。我正在使用--register-pepper-plugin和Chrome。

最终我想在CEF(https://bitbucket.org/chromiumembedded/cef)中使用它,但由于这不适用于Chrome,我想首先了解此问题的底部,然后转到CEF。

1 个答案:

答案 0 :(得分: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));
}