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

2024-04-06

作为 android OpenGL 部分的新手。我已经下载了现场给出的示例使用 OpenGL ES 显示图形 http://developer.android.com/training/graphics/opengl/index.html

so run the downloaded sample and its running with an error and display the output as expected. I had do draw the triangle in the GLSurfaceview and its working fine. The screenshot for the triangle drawn:- enter image description here

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

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

by Log Tag libEGL

by Log Message called unimplemented OpenGL ES API

我无法理解我哪里做错了。卡在这部分。

所以,这种需求在Android中可以用OpenGL来完成。


听起来您正在尝试从 UI 线程进行 OpenGL 调用。GLSurfaceView创建一个渲染线程,以及该渲染线程当前的 OpenGL 上下文。所有的渲染都是由GLSurfaceView然后在这个渲染线程中执行。

如果没有当前上下文,则无法进行 OpenGL 调用,并且 UI 线程没有当前上下文,除非您专门创建一个上下文。这样做可能会很麻烦,我不建议在这种情况下这样做。如果您有兴趣阅读它,我前几天回答了一个相关问题,其中我尝试解释如何创建和使用多个上下文:关于 android 上的 opengles 和纹理 https://stackoverflow.com/questions/24953805/about-opengles-and-texture-on-android.

完成您需要的操作的最简洁方法是将需要绘制的内容的表示形式(例如,您的情况下的 3 个三角形顶点的坐标)存储为成员变量GLSurfaceView.Renderer执行。那么流程是:

  1. 为了响应 UI 输入,您调用Renderer在类的成员变量中设置三角形坐标的实现。您可能想使用synchronized方法,因为这些坐标将由 UI 线程和渲染线程访问。
  2. 您触发了重绘GLSurfaceView通过调用其requestRender() method.
  3. The onDrawFrame()的方法Renderer将调用实现作为响应。它从成员变量中获取新坐标,并绘制三角形。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在android中使用OpenGL在按钮上单击绘制形状 的相关文章