OpenGL—双EGLSurface绘图

来源:互联网 发布:中国量子计算机 知乎 编辑:程序博客网 时间:2024/05/10 10:32

背景介绍:

在android多屏互动开发中遇到需要将一部分绘图信息显示在手机上,另一部分信息显示在HDMI上,同时两个屏幕间可以有一些基本的动画互动,与Windows中多显的效果一样,在拖动过程中,一部分信息显示在显示器1中,另一部分信息显示在显示器2中。需要这功能在当前的Android系统中是不支持的,这时则需要采用双EGLSurface的方案。

实现:


由上图可以看到,首先分别创建出两个Surface,对于Surface0则是用于最终显示在内建的显示器中的,对于Surface1的是用于显示在HDMI上的,当渲染开始时,首先先将Surface0调用eglMakeCurrent用于当前的OpenGL绘图,也就是接下来的数据都将绘制在Surface0中,最后调用eglSwapBuffer将当前的Surface0信息显示当当前的屏幕中,接着将继续调用eglMakeCurrent将在一开始就创建好的Surface1设置为当前的OpenGL绘图,这样接下来的绘图都将绘制到Surface1中,最后也调用eglSwapBuffer将Surface1显示到屏幕中。这时候才算完成一帧的绘制,也就是在原本绘制一帧的流程中绘制了两屏的数据。
通过这种方式就能实现在两屏中进行动画的互动,也就是在在Surface0绘图的时候,首先将两屏的数据全部绘制到fbo中,然后将一半的纹理显示在Surface0中,另一半的纹理显示在Surface1中,能够简单的实现动画操作,同时也不会存在同步的问题。

优缺点:

1. 通过这种双EGLSurface的方案,这样能够完美实现动画操作,但是由于一帧要绘制两屏数据,这会导致显示性能问题。
2. 绘图中每帧需要两次的makeCurrent,同时还需要分别设置不同的窗口视口等信息,这会影响系统的绘制性能。
0 0