package Ġcom . jad yn . medi akit . video . encode Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Utils Ċ import Ġandroid . util . Size Ċ import Ġcom . jad yn . ai . kot l ind . utils . create Float Buffer Ċ import Ġcom . jad yn . medi akit . gl .* Ċ import Ġjava . nio . Int Buffer Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 Ċ Ċ /** Ċ Ġ*@ version : Ċ Ġ*@ File Description : Ġ çĶ¨æĿ¥ ç¼ĸçłģ çļĦ GPU ç¨ĭåºı Ċ Ġ*@ Author : J ing Ċ Ġ*@ Since : 2 0 1 9 / 4 / 1 0 Ċ Ġ*@ Change List : Ċ Ġ*/ Ċ class ĠEncode Program ( private Ġval Ġsize : ĠSize ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĢ Ĳ è¡Į è§£éĩĬ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠĠ 1 ãĢģ 4 * 4 çļĦ çŁ©éĺµ ĊĠĠĠĠ Ġ* ĠĠ 2 ãĢģ 4 ç»´ åĲĳ éĩı ĊĠĠĠĠ Ġ* ĠĠ 3 ãĢģ 2 ç»´ åĲĳ éĩı ĊĠĠĠĠ Ġ* ĠĠ 4 ãĢģ varying Ġ ä¿® é¥ ° ä»İ é¡¶ çĤ¹ çĿĢ èī² åĻ¨ ä¼łéĢĴ åĪ° çīĩ åħĥ çĿĢ èī² åĻ¨ è¿ĩ æĿ¥ çļĦæķ°æį® ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠV ERT EX _ SHADER Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Ġvec 4 Ġposition ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattribute Ġvec 2 Ġa TexCoord ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvarying Ġvec 2 Ġv TexCoord ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv TexCoord Ġ= Ġa TexCoord ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl _ Position Ġ= Ġposition ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸Ģä¸ĭ ä¸º ä»£çłģ çļĦ éĢ Ĳ è¡Į è§£éĩĬ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ 1 ãĢģ float Ġ ç²¾ åº¦ ä¿® é¥ ° ï¼Į Ġmedium Ġ 1 6 bit ï¼Į çĶ¨äºİ çº ¹ çĲĨ åĿĲæłĩ ĊĠĠĠĠ Ġ* Ġ 2 ãĢģ varying Ġ ä¿® é¥ ° ä»İ é¡¶ çĤ¹ çĿĢ èī² åĻ¨ ä¼łéĢĴ åĪ° çīĩ åħĥ çĿĢ èī² åĻ¨ è¿ĩ æĿ¥ çļĦæķ°æį® ĊĠĠĠĠ Ġ* Ġ 3 ãĢģ äºĮ ç»´ çº ¹ çĲĨ å£°æĺİ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ 4 ãĢģ ä½¿çĶ¨ texture 2 D åıĸ åĩº çº ¹ çĲĨ åĿĲæłĩ çĤ¹ ä¸ĬçļĦ çº ¹ çĲĨ åĥı ç´ł åĢ¼ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠFR AG MENT _ SHADER Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprecision Ġmedi ump Ġfloat ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvarying Ġvec 2 Ġv TexCoord ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuniform Ġsampler 2 D Ġtexture ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvoid Ġmain () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl _ Frag Color Ġ= Ġtexture 2 D ( texture , Ġv TexCoord ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĊĊĠĠĠ Ġprivate Ġvar Ġprogram : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġval Ġvertex Buffer Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 f , Ġ 1 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 f , Ġ- 1 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ- 1 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 1 f , Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcreate Float Buffer ( data ) ĊĠĠĠĠĠĠĠ Ġbuffer . position ( 0 ) ĊĠĠĠĠĠĠĠ Ġbuffer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġindex Buffer Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġint ArrayOf ( 0 , Ġ 1 , Ġ 2 , Ġ 0 , Ġ 3 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġallocate Ġ= ĠInt Buffer . allocate ( data . size ). put ( data ) ĊĠĠĠĠĠĠĠ Ġallocate . position ( 0 ) ĊĠĠĠĠĠĠĠ Ġallocate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtex Buffer Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġcreate Float Buffer ( float ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 0 f ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġbuffer . position ( 0 ) ĊĠĠĠĠĠĠĠ Ġbuffer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġpos Handle : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġtex Handle : ĠInt Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġtexture Handle : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġvar Ġtexture ID Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĊĠĠĠ Ġfun Ġbuild () Ġ{ ĊĠĠĠĠĠĠĠ Ġprogram Ġ= Ġcreate Program ( VERTEX _ SHADER , ĠFR AG MENT _ SHADER ) ĊĠĠĠĠĠĠĠ Ġinit Location () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġpos Handle Ġ= Ġget Attrib Location ( program , Ġ" position ") ĊĠĠĠĠĠĠĠ Ġtex Handle Ġ= Ġget Attrib Location ( program , Ġ" a TexCoord ") ĊĊĠĠĠĠĠĠĠ Ġtexture Handle Ġ= Ġget UniformLocation ( program , Ġ" texture ") ĊĊĠĠĠĠĠĠĠ Ġtexture ID Ġ= Ġbuild Texture Id ( GLES 2 0 . GL _ TEXTURE _ 2 D ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġ// Ġ å¼ĢåĲ¯ çº ¹ çĲĨ éĢı æĺİ æ·· åĲĪ ï¼Į è¿Ļæł· æīįèĥ½ ç»ĺ åĪ¶ éĢı æĺİ åĽ¾çīĩ Ċ // ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable ( GL 1 0 . GL _ BLEND ) Ċ // ĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Blend Func ( GL 1 0 . GL _ ONE , ĠGL 1 0 . GL _ ONE _ MINUS _ SRC _ ALPHA ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Viewport ( 0 , Ġ 0 , Ġsize . width , Ġsize . height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrender Bitmap ( b : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GL 1 0 . GL _ COLOR _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® å½ĵåīį æ´»åĬ¨ çļĦ çº ¹ çĲĨ åįķåħĥ ä¸º çº ¹ çĲĨ åįķåħĥ 0 ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Active Texture ( GLES 2 0 . GL _ TEXTURE 0 ) ĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ çº ¹ çĲĨ ID ç»ĳå®ļ åĪ° å½ĵåīį æ´»åĬ¨ çļĦ çº ¹ çĲĨ åįķåħĥ ä¸Ĭ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glBind Texture ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġtexture ID ) ĊĊĠĠĠĠĠĠĠ ĠGL Utils . tex Image 2 D ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġ 0 , Ġb , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġb . recycle () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ é¡¶ çĤ¹ åĿĲæłĩ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( pos Handle ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( pos Handle , Ġ 3 , ĠGLES 2 0 . GL _ FLOAT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġ 1 2 , Ġvertex Buffer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ çº ¹ çĲĨ åĿĲæłĩ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( tex Handle ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( tex Handle , Ġ 2 , ĠGLES 2 0 . GL _ FLOAT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġ 0 , Ġtex Buffer ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( tex Handle , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Draw Elements ( GLES 2 0 . GL _ TRI ANG LES , Ġ 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ UNSIGNED _ INT , Ġindex Buffer ) ĊĠĠĠĠĠĠĠ Ġun Bind Texture ( GLES 2 0 . GL _ TEXTURE _ 2 D ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrelease () Ġ{ ĊĠĠĠĠĠĠĠ Ġrelease Texture ( int ArrayOf ( texture ID )) ĊĠĠĠ Ġ} Ċ }