我正在使用以下示例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。
答案 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));
}