Android顯示YUV圖像


需要流暢顯示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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM