我设法在TextureView上编写了一个显示3D模型的演示,模型可以根据手机的传感器移动。 3D引擎是由C ++编写的,我需要做的是将TextureView的SurfaceTexture提供给3D引擎。 引擎调用函数ANativeWindow_fromSurface来检索本机窗口并在其上绘制3D模型。 3D引擎不是我想在这个问题中讨论的关键点。
现在我想将移动的3D模型录制到视频中。一种方法是使用GL_TEXTURE_EXTERNAL_OES纹理就像grafika一样,使3D引擎绘制框架到oes纹理,并在每次调用updateTexImage()之后将纹理内容绘制到屏幕。但是对于某些限制,我不允许使用这种方式。
我打算直接使用TextureView的SurfaceTexture。我认为诸如attachToGLContext()和detachFromGLContext()之类的函数对我的工作很有用。
有人能给我一些建议吗?
答案 0 :(得分:0)
Grafika的“记录GL应用程序”有三种不同的操作模式:
如果您可以配置渲染到的EGL表面,则方法2和3将起作用。对于方法#3,请记住,在调用eglSwapBuffers()
之前,像素不会进入Surface(即Android Surface,而不是EGL曲面)。
如果引擎代码正在管理EGL表面并为您调用eglSwapBuffers()
,那么事情会更烦人。 SurfaceTexture附加/分离调用将允许您使用来自不同EGL上下文的输出访问GLES纹理,但渲染线程在渲染视图UI时需要它。我不完全确定这是怎么回事。