在OpenGL中构建窗口系统

时间:2016-07-07 10:24:27

标签: webgl

我正在构建一个工具包,用于使用Emscripten创建本机质量的移动应用程序。主要目标是使这些应用程序在视觉上与使用iOS或Android SDK构建的应用程序无法区分。该工具包大量使用WebGL来呈现视图树。

图形性能是一个反复出现的问题 - 据我所知,我通常是填充式的 - 而且我经常发现自己希望我不必每帧都重绘整个视图树。理想情况下,我想以某种方式在glSwapBuffers()之后丢失帧缓冲内容,然后只重绘在帧之间改变的视图。 (好吧,重绘两次,每次缓冲一次)。这样的方法是否可以实现?据我所知,不是,不管是OpenGL,还是我希望我错了。

或者我想我可以画一个屏幕大小的FBO并简单地复制每一帧的整个事物......但是如果屏幕上有很多移动(比如一个全屏过渡效果)那么我只是加倍了我的填充率。

对此问题的模糊性提前道歉,任何人都可以推荐一些在这种情况下可能有用的技术吗?

2 个答案:

答案 0 :(得分:0)

这些是典型的方式。

  • 将所有UI纹理数据(glphys,ui元素)放在纹理图集中。生成一个包含位置和texcoords的顶点缓冲区。

OR

  • 将UI绘制到纹理(可能使用以前的技术)。 Blit the texture。

不要劝阻你,但是使用emscripten for UI将会有很多工作要做。你需要支持所有unicode的字体渲染,这意味着加载大字体,glphy缓存,表情符号的颜色渲染,从右到左渲染等。你还需要以某种方式支持日语,中文等语言的文本输入。韩语,泰语

答案 1 :(得分:0)

我刚刚发现了WebGLContextAttributes.preserveDrawingBuffer,它正如我希望的那样完全。你好可靠的60fps!