【问题标题】:Multiple OpenGL ppapi plugins in a single webpage单个网页中的多个 OpenGL ppapi 插件
【发布时间】:2015-07-19 13:50:54
【问题描述】:

我正在使用以下示例 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 上进行比较。我在 Chrome 中使用 --register-pepper-plugin。

最终我想将它与 CEF (https://bitbucket.org/chromiumembedded/cef) 一起使用,但由于它不适用于 Chrome,我想先了解这个问题的根源,然后再转到 CEF。

【问题讨论】:

    标签: google-chrome opengl ppapi


    【解决方案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));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多