是否有可能从Blink公开WebGL上下文?

时间:2016-12-15 20:35:34

标签: opengl webgl blink xwalkview

我想做的事情与https://www.mapbox.com/blog/mapbox-unity/相同,但在XWalk视图中有三个.js。

简而言之,据我所知,mapbox插件是一个控制器,可以访问Mapbox视图的OpenGL上下文和Unity视图的OpenGL上下文。然后插件在Unity OpenGL上下文中对地图的纹理进行渲染。

在我的情况下,我不使用Unity而是使用Three.js。通过将WebGL中的OpenGL上下文与另一个活动的另一个OpenGL上下文共享,我看到了一种方法。它需要:

  • 通过Blink和XWalk
  • 之间的绑定从webGL公开OpenGL上下文
  • 使用XWalk Java扩展来共享从OpenGL上下文到另一个活动的纹理缓冲区。

重要说明:

  • 目标平台:iOS,Android,(由于MapboxGL不支持Windows(使用D3D),后卫将阻止在Windows手机等D3D平台上运行。
  • mapboxGL-JS不是一个选项,因为我需要离线地图和其他原生功能。

1 个答案:

答案 0 :(得分:1)

由于WebGL可能在其他API(即D3D)上运行,因此无法从WebGL获取OpenGL上下文。但是,要使用Three.js实现类似的功能,您可以使用mapbox-gl-js。只需将地图渲染到屏幕外画布(不添加到DOM),并将其用作Three.js场景中平面的纹理。

粗略地说,它可能看起来像这样:

const map = new Map({ /* options */ });
const texture = new THREE.CanvasTexture(map.getCanvas(), /* ... */);

map.on('render', () => {
    requestAnimationFrame(render);
    texture.needsUpdate = true;
});

function render() {
    myThreejsRenderer.render(mySceneWhichUsesTexture, camera);
}