单个网页中的多个 OpenGL ppapi 插件
Multiple OpenGL ppapi plugins in a single webpage
我正在使用以下示例 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。
是的,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));
}
我正在使用以下示例 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。
是的,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));
}