GLSurfaceView、Opengl、SurfaceTexture
- 学习opengl es在android实践编程
- 使用Opengl、MediaCodec以及MediaMuxer对GLSurfaceView内容进行编码生成视频
- 视频实时传输
MediaCodec编码需要Input Surface,解码configure中设置output surface
使用Opengl接口前必须先使用EGL创建Opengl的上下文运行环境(即EGLContext)
而且EGLContext和线程一一对应,线程之间可以共享EGLContext。
GLSurfaceView已经为我们创建好了EGL上下文运行环境。
在使用OpenGL命令(如createProgram等)前需要确定EGL的环境(即EGLContext创建和EGLContext与EGLSurface建立联系(使用makeCurrent)。
线程之间共享了EGLContext也就可以可以共享Program以及TextureID等等。
OpenGL绘制相当于在view上了打了一个洞直接绘制在surface上。如果你想要做一个层级比较深的界面使用SurfaceView可能会更好。
FBORender中方法2创建EGLCore对象要是不传入sharedcontext会出现如下错误:
D MALI : gles_state_set_error_internal:75: [MALI] GLES ctx: 0x78ce22aa48, error code:0x501
D MALI : gles_state_set_error_internal:76: [MALI] GLES error info: is not a value generated by OpenGL
1 . 获取 EGL Display对象:eglGetDisplay()
2 . 初始化与 EGLDisplay之间的连接:eglInitialize()
3 . 获取 EGLConfig对象:eglChooseConfig()
4 . 创建 EGLContext实例:eglCreateContext()
5 . 创建 EGLSurface实例:eglCreateWindowSurface()
6 . 连接 EGLContext和EGLSurface:eglMakeCurrent()
7 . 使用 OpenGL ES API 绘制图形:gl_*()
8 . 切换 front buffer 和 back buffer送显:eglSwapBuffer()
9 . 断开并释放与 EGLSurface 关联的 EGLContext 对象:eglRelease()
10 . 删除 EGLSurface对象
11 . 删除 EGLContext对象
12 . 终止与 EGLDisplay之间的连接
1 . 不同线程对全局变量EGLContext进行makeCurrent是不是可以达到不同线程之间共享上下文?
==>不可以,因为EGLContext是单线程的,类似于JNI中的JNIENV变量。需要再通过eglCreateContext带sharecontext创建一个新的EGLContext。
2 . 在同一个线程中eglGetCurrentContext和eglCreateContext得到的EGLContext有什么区别?