在Android上使用OpenGL在按钮上单击绘制形状

时间:2014-07-25 11:01:53

标签: android opengl-es opengl-es-2.0

作为Android OpenGL部分的新手。我下载了网站Displaying Graphics with OpenGL ES上提供的示例示例

因此运行下载的示例并运行错误并按预期显示输出。 我曾在GLSurfaceview绘制三角形并且工作正常。 绘制三角形的屏幕截图: - enter image description here

现在随着需求的变化,我必须绘制图像视图的三角形,而不是启动应用程序。 以下是上述要求的屏幕截图

enter image description here

黑色三角形是图像视图,右侧是GLSurfaceView区域,我需要绘制三角形。目前,当我点击图像视图时,它不会绘制图像但会给出一些异常,这里是logcat消息:

by Log Tag libEGL

by Log Message called unimplemented OpenGL ES API

我无法理解我在哪里做错了什么。抓住这一部分。

因此,这种要求可以在Android中使用OpenGL完成。

1 个答案:

答案 0 :(得分:0)

听起来你正试图从你的UI线程进行OpenGL调用。 GLSurfaceView创建一个渲染线程,以及一个对该渲染线程最新的OpenGL上下文。然后,GLSurfaceView启动的所有渲染都将在此渲染线程中执行。

您无法在没有当前上下文的情况下进行OpenGL调用,除非您专门创建一个,否则UI线程没有。这样做可能会变得毛茸茸,我不推荐这种情况。无论如何,如果您有兴趣阅读它,我前几天回答了一个相关问题,我尝试解释如何创建和使用多个上下文:about opengles and texture on android

最简洁的方法是在GLSurfaceView.Renderer实现中存储需要绘制的内容的表示(例如,在您的情况下,3个三角形顶点的坐标)作为成员变量。然后是流程:

  1. 在响应UI输入时,您调用Renderer实现上的方法,该方法在类的成员变量中设置三角坐标。您可能希望使用synchronized方法,因为这些坐标将由UI线程和呈现线程访问。
  2. 您可以通过调用GLSurfaceView方法触发requestRender()的重绘。
  3. onDrawFrame()实现的Renderer方法将作为响应进行调用。它从成员变量中获取新坐标,并绘制三角形。