我试图在android中使用opengl es 2.0。我使用GLSurfaceView作为我的主视图。这是个问题。我想连续画几个点。那是当我点击视图时,我画了一个点并调用requestRender。但是我不想存储我触发的所有点,因为它们会有很多。所以我的onDrawFrame()只有一个句子,也许是这样的:
GLES20.glDrawArrays(GLES20.GL_POINTS,8,1);
问题是,这个逻辑在我的android虚拟机上运行良好,但是当我绘制一个新点时,我绘制的所有东西都消失了。
有没有办法保留我在GLSurfaceView上绘制的所有点,然后继续绘制而不保存所有点?
答案 0 :(得分:0)
您需要每帧重绘整个屏幕。输出通常是双缓冲或三缓冲,因此您无法依赖先前内容的可用性。始终以glClear()
电话开始。
实现目标的一种方法是渲染到FBO上,然后将FBO渲染到屏幕上。你可以在Grafika" record GL app"中找到一个例子。活动,它实际上是使用它,因此它可以渲染每个帧两次(一次到屏幕,一次到视频编码器),以及在网络上的各种示例。基本的想法是你要渲染到GLES纹理上,而不是直接渲染到Surface中,所以没有双缓冲来对抗。
答案 1 :(得分:0)
如果已在GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT)
方法中使用过onFrameRedraw()
,请删除它,而应在渲染器的onSurfaceCreated()
方法中使用它。