如何设置GLSurfaceView不干净我之前画过的东西?

时间:2015-07-29 06:41:18

标签: android opengl-es glsurfaceview fbo

我试图在android中使用opengl es 2.0。我使用GLSurfaceView作为我的主视图。这是个问题。我想连续画几个点。那是当我点击视图时,我画了一个点并调用requestRender。但是我不想存储我触发的所有点,因为它们会有很多。所以我的onDrawFrame()只有一个句子,也许是这样的:

GLES20.glDrawArrays(GLES20.GL_POINTS,8,1);

问题是,这个逻辑在我的android虚拟机上运行良好,但是当我绘制一个新点时,我绘制的所有东西都消失了。

有没有办法保留我在GLSurfaceView上绘制的所有点,然后继续绘制而不保存所有点?

2 个答案:

答案 0 :(得分:0)

您需要每帧重绘整个屏幕。输出通常是双缓冲或三缓冲,因此您无法依赖先前内容的可用性。始终以glClear()电话开始。

实现目标的一种方法是渲染到FBO上,然后将FBO渲染到屏幕上。你可以在Grafika" record GL app"中找到一个例子。活动,它实际上是使用它,因此它可以渲染每个帧两次(一次到屏幕,一次到视频编码器),以及在网络上的各种示例。基本的想法是你要渲染到GLES纹理上,而不是直接渲染到Surface中,所以没有双缓冲来对抗。

答案 1 :(得分:0)

如果已在GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)方法中使用过onFrameRedraw(),请删除它,而应在渲染器的onSurfaceCreated()方法中使用它。