作为Android OpenGL部分的新手。我下载了网站Displaying Graphics with OpenGL ES上提供的示例示例
因此运行下载的示例并运行错误并按预期显示输出。 我曾在GLSurfaceview绘制三角形并且工作正常。 绘制三角形的屏幕截图: -
现在随着需求的变化,我必须绘制图像视图的三角形,而不是启动应用程序。 以下是上述要求的屏幕截图
黑色三角形是图像视图,右侧是GLSurfaceView区域,我需要绘制三角形。目前,当我点击图像视图时,它不会绘制图像但会给出一些异常,这里是logcat消息:
by Log Tag libEGL
by Log Message called unimplemented OpenGL ES API
我无法理解我在哪里做错了什么。抓住这一部分。
因此,这种要求可以在Android中使用OpenGL完成。
答案 0 :(得分:0)
听起来你正试图从你的UI线程进行OpenGL调用。 GLSurfaceView
创建一个渲染线程,以及一个对该渲染线程最新的OpenGL上下文。然后,GLSurfaceView
启动的所有渲染都将在此渲染线程中执行。
您无法在没有当前上下文的情况下进行OpenGL调用,除非您专门创建一个,否则UI线程没有。这样做可能会变得毛茸茸,我不推荐这种情况。无论如何,如果您有兴趣阅读它,我前几天回答了一个相关问题,我尝试解释如何创建和使用多个上下文:about opengles and texture on android。
最简洁的方法是在GLSurfaceView.Renderer
实现中存储需要绘制的内容的表示(例如,在您的情况下,3个三角形顶点的坐标)作为成员变量。然后是流程:
Renderer
实现上的方法,该方法在类的成员变量中设置三角坐标。您可能希望使用synchronized
方法,因为这些坐标将由UI线程和呈现线程访问。GLSurfaceView
方法触发requestRender()
的重绘。onDrawFrame()
实现的Renderer
方法将作为响应进行调用。它从成员变量中获取新坐标,并绘制三角形。