需要流暢顯示YUV圖像需要使用Opengl庫調用GPU資源,網上在這部分的資料很少。實際上Android已經為我們提供了相關的Opengl方法
主體過程如下:
1、建立GLSurfaceView
2、建立Render
4、設置GLSurfaceView的Render為你創建的Render,並設置RenderMode為RENDERMODE_WHEN_DIRTY
3、把數據推入Render
而在Render中需要實現3個方法
1、void onSurfaceCreated(GL10 gl, EGLConfig config)
2、void onDrawFrame(GL10 gl)
3、void onSurfaceChanged(GL10 gl, int width, int height)
onSurfaceCreated需要一些初始化工作,括號內是具體方法:
生成Textures的ID(glGenTextures)->綁定需要操作的Texture(glBindTexture)->設置相關參數(glTexParameterf)->操作下一個Texture....
->建立Shader(glCreateShader)->導入Shader代碼字符串(glShaderSource)->編譯Shader(glCompileShader)->檢查編譯狀態(glGetShaderiv)->下一個Shader....
->建立Program(glCreateProgram)->綁定Shader(glAttachShader)->綁定屬性(glBindAttribLocation)->鏈接Program(glLinkProgram)->檢查Program鏈接狀態(glGetProgramiv)
->取得attribute變量、uniform變量的句柄->告訴Opengl在rendering的時候使用這個Program(glUseProgram)
onDrawFrame在視圖刷新的時候會被使用
綁定需要操作的Texture(glBindTexture)->設置Texture內容(glTexImage2D)->操作下一個Texture....
清緩存->指定頂點屬性數組(glVertexAttribPointer)->使能頂點數組(glEnableVertexAttribArray)
->激活Opengl的Texture(glActiveTexture)->綁定需要操作的Texture(glBindTexture)->設置紋理單元的一致變量(glUniform1i)->操作下一個Texture....
繪圖!!!!(glDrawArrays)
在將數據准備完成的時候,使用requestRender()就會調用onDrawFrame