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