package Ġcom . shader Test Ċ Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Surface View Ċ import Ġcom . shader Test . Util Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . Float Buffer Ċ import Ġjavax . micro edition . kh ronos . e gl . EGL Config Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 ĊĊ Ċ class ĠShader Texture Renderer Ġ: ĠGL Surface View . Renderer Ġ{ ĊĊ Ċ // Ġ åİŁ åĽ¾ å±ķç¤º é¡¶ çĤ¹ çĿĢ èī² åĻ¨ Ċ // ĠĠĠ Ġprecision Ġmedi ump Ġfloat ; Ċ // ĠĠĠ Ġattribute Ġvec 4 Ġa _ position ; Ċ // ĠĠĠ Ġattribute Ġvec 2 Ġa _ texture Coordinate ; Ċ // ĠĠĠ Ġvarying Ġvec 2 Ġv _ texture Coordinate ; Ċ // ĠĠĠ Ġvoid Ġmain () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġv _ texture Coordinate Ġ= Ġa _ texture Coordinate ; Ċ // ĠĠĠĠĠĠĠ Ġgl _ Position Ġ= Ġa _ position ; Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġvertex Shader Code Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 4 Ġa _ position ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 2 Ġa _ texture Coordinate ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ texture Coordinate ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġv _ texture Coordinate Ġ= Ġa _ texture Coordinate ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Position Ġ= Ġa _ position ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" Ċ Ċ // Ġ åİŁ åĽ¾ å±ķç¤º çīĩ æ®µ çĿĢ èī² åĻ¨ Ċ // ĠĠĠ Ġprecision Ġmedi ump Ġfloat ; Ċ // ĠĠĠ Ġvarying Ġvec 2 Ġv _ texture Coordinate ; Ċ // ĠĠĠ Ġuniform Ġsampler 2 D Ġu _ texture ; Ċ // ĠĠĠ Ġvoid Ġmain () Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġgl _ Frag Color Ġ= Ġtexture 2 D ( u _ texture , Ġv _ texture Coordinate ); Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġfragment Shader Code Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ texture Coordinate ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġsampler 2 D Ġnoise Texture ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġfloat Ġi Time ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Ġfire Imp et us Ġ= Ġ 0 . 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Ġfire Imp et us Inner Ġ= Ġ 0 . 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" vec 2 Ġuv Ġ= Ġvec 2 ( Ġv _ texture Coordinate . x Ġ* 1 0 8 0 ./ 2 3 0 0 . Ġ, v _ texture Coordinate . y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" vec 4 Ġburn Color Out Ġ= Ġvec 4 ( Ġ 0 . 9 2 , 0 . 0 9 , 0 . 0 9 , 1 . );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" vec 4 Ġburn Color Inner Ġ= Ġvec 4 ( Ġ 0 . 8 6 , 0 . 4 4 3 , 0 . 0 8 6 , 1 . );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®© uv çļĦ y åĬ¨ èµ·æĿ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġuv . y Ġ+= Ġi Time ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuv . y Ġ æĺ¯ä¸Ģä¸ª 0 ï½ŀ 1 å¾ªçİ¯ çļĦ åĻ ª çĤ¹ åıĺéĩı ï¼Į ä½ľçĶ¨ æĺ¯ è®© çģ« èĭ Ĺ å¾ªçİ¯ è¿Ĳ åĬ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġuv . y Ġ= Ġmod ( uv . y Ġ, Ġ 1 . 0 );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĻ ª çĤ¹ åĽ¾ åıĸ æł· r , åıĸ æł· åĿĲæłĩ éļı çĿĢ y åĳ¨æľŁ æĢ§ æĶ¹åıĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġnoise Value Ġ= Ġtexture 2 D ( noise Texture , Ġuv ). r ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ¸ ²æŁĵ èĮĥåĽ´ Ġ Ġsmooth æķ´ä¸ª åĽ¾çīĩ Ġv _ texture Coordinate . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġp 1 Ġ= Ġsmooth step ( 0 . 0 , 1 . 0 , v _ texture Coordinate . y Ġ- Ġfire Imp et us );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é¢ľèī² 1 Ġ ç¨ĭ åº¦ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġf 1 Ġ= Ġstep ( noise Value , p 1 );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĨħ èī² Ġ ç¨ĭ åº¦ ï¼Į æ¯Ķ é¢ľèī² 1 å°ĳ fire Imp et us Inner çļĦ è¾¹ ï¼Į ä½Ĩæĺ¯ è¦ģ åģļ smooth step ï¼Į ä¿Ŀè¯ģ é¢ľèī² è¡ Ķ æİ¥ å¹³ æ»ĳ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġf 2 Ġ= Ġsmooth step ( noise Value , p 1 Ġ, p 1 Ġ- Ġfire Imp et us Inner );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é¢ľèī² 1 Ġ= Ġ åĨħ èī² Ġ+ Ġr 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġr 1 Ġ= Ġf 1 Ġ- Ġf 2 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġfloat Ġr 2 Ġ= Ġf 2 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Frag Color Ġ= Ġburn Color Out Ġ* Ġr 1 Ġ+ Ġ Ġburn Color Inner Ġ* Ġr 2 ; "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠ Ġ// ĠGL Surface View çļĦ å®½ é«ĺ ĊĠĠĠ Ġ// ĠThe Ġwidth Ġand Ġheight Ġof ĠGL Surface View ĊĠĠĠ Ġprivate Ġvar Ġgl Surface View Width Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġgl Surface View Height Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġ__ program Id Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġtime Ġ= Ġ 0 f ĊĊĠĠĠ Ġ// Ġ çº ¹ çĲĨ é¡¶ çĤ¹ æķ°æį® ĊĠĠĠ Ġprivate Ġval Ġvertex Data Ġ= Ġfloat ArrayOf (- 1 f , Ġ- 1 f , Ġ- 1 f , Ġ 1 f , Ġ 1 f , Ġ 1 f , Ġ- 1 f , Ġ- 1 f , Ġ 1 f , Ġ 1 f , Ġ 1 f , Ġ- 1 f ) ĊĠĠĠ Ġprivate Ġval ĠV ERT EX _ COMPONENT _ COUNT Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvertex Data Buffer Ġ: ĠFloat Buffer ĊĊĠĠĠ Ġ// Ġ çº ¹ çĲĨ åĿĲæłĩ ĊĠĠĠ Ġ// ĠThe Ġtexture Ġcoordinate ĊĠĠĠ Ġprivate Ġval Ġtexture Coordinate Data Ġ= Ġfloat ArrayOf ( 0 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , Ġ 1 f , Ġ 1 f , Ġ 0 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠ Ġprivate Ġval ĠTEXT URE _ COORD IN ATE _ COMPONENT _ COUNT Ġ= Ġ 2 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtexture Coordinate Data Buffer Ġ: ĠFloat Buffer ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Frame ( gl : ĠGL 1 0 ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æ¸ħ å±ı é¢ľèī² ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġæ¸ ħ å±ı ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Lo action Ġ= ĠGLES 2 0 . glGet UniformLocation (__ program Id , Ġ" i Time ") ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 f ( time Lo action , Ġtime ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® è§Ĩ åı£ ï¼Į è¿ĻéĩĮ è®¾ç½®ä¸º æķ´ä¸ª GL Surface View åĮºåŁŁ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Viewport ( 0 , Ġ 0 , Ġgl Surface View Width , Ġgl Surface View Height ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è°ĥçĶ¨ draw æĸ¹æ³ķ çĶ¨ TRI ANG LES çļĦæĸ¹å¼ı æī§è¡Į æ¸²æŁĵ ï¼Į é¡¶ çĤ¹ æķ°éĩı ä¸º 3 ä¸ª ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Draw Arrays ( GLES 2 0 . GL _ TRI ANG LES , Ġ 0 , Ġvertex Data . size Ġ/ ĠV ERT EX _ COMPONENT _ COUNT ) ĊĠĠĠĠĠĠĠ Ġtime Ġ= Ġ( time Ġ+ Ġ 0 . 0 2 f )% 1 . 0 f ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( gl : ĠGL 1 0 ?, Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ è®°å½ķ GL Surface View çļĦ å®½ é«ĺ ĊĠĠĠĠĠĠĠ Ġ// ĠRecord Ġthe Ġwidth Ġand Ġheight Ġof Ġthe ĠGL Surface View ĊĠĠĠĠĠĠĠ Ġgl Surface View Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠ Ġgl Surface View Height Ġ= Ġheight ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Created ( gl : ĠGL 1 0 ?, Ġconfig : ĠE GL Config ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º GL ç¨ĭåºı ĊĠĠĠĠĠĠĠ Ġval Ġprogram Id Ġ= ĠGLES 2 0 . gl Create Program () ĊĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Ġ= ĠGLES 2 0 . gl Create Shader ( GLES 2 0 . GL _ VERTEX _ SHADER ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Shader = ĠGLES 2 0 . gl Create Shader ( GLES 2 0 . GL _ FRAGMENT _ SHADER ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ é¡¶ çĤ¹ çĿĢ èī² åĻ¨ ä»£çłģ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( vertex Shader , Ġvertex Shader Code ) ĊĠĠĠĠĠĠĠ Ġ// Ġ åĬłè½½ çīĩ æ®µ çĿĢ èī² åĻ¨ ä»£çłģ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( fragment Shader , Ġfragment Shader Code ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¼ĸè¯ĳ é¡¶ çĤ¹ çĿĢ èī² åĻ¨ ä»£çłģ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( vertex Shader ) ĊĠĠĠĠĠĠĠ Ġ// Ġ ç¼ĸè¯ĳ çīĩ æ®µ çĿĢ èī² åĻ¨ ä»£çłģ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( fragment Shader ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ shader ç¨ĭåºı éĻĦ çĿĢ åĪ° GL ç¨ĭåºı ä¸Ĭ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program Id , Ġvertex Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program Id , Ġfragment Shader ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ éĵ¾æİ¥ GL ç¨ĭåºı ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Link Program ( program Id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åºĶçĶ¨ GL ç¨ĭåºı ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( program Id ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ ä¸ī è§Ĵ å½¢ é¡¶ çĤ¹ æķ°æį® æĶ¾ åħ¥ buffer ä¸Ń ĊĠĠĠĠĠĠĠ Ġvertex Data Buffer Ġ= ĠByteBuffer . allocate Direct ( vertex Data . size Ġ* Ġjava . lang . Float . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Float Buffer () ĊĠĠĠĠĠĠĠ Ġvertex Data Buffer . put ( vertex Data ) ĊĠĠĠĠĠĠĠ Ġvertex Data Buffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åŃĹæ®µ a _ position åľ¨ shader ä¸ŃçļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġval Ġa Position Location Ġ= ĠGLES 2 0 . glGet Attrib Location ( program Id , Ġ" a _ position ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ å¯¹åºĶ ä½įç½® çļĦåıĤæķ° ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( a Position Location ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠæĮĩå®ļ a _ position æīĢ ä½¿çĶ¨çļĦ é¡¶ çĤ¹ æķ°æį® ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( a Position Location , ĠV ERT EX _ COMPONENT _ COUNT , ĠGLES 2 0 . GL _ FLOAT , Ġfalse , Ġ 0 , Ġvertex Data Buffer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ çº ¹ çĲĨ åĿĲæłĩ æķ°æį® æĶ¾ åħ¥ buffer ä¸Ń ĊĠĠĠĠĠĠĠ Ġtexture Coordinate Data Buffer Ġ= ĠByteBuffer . allocate Direct ( texture Coordinate Data . size Ġ* Ġjava . lang . Float . SIZE Ġ/ Ġ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Float Buffer () ĊĠĠĠĠĠĠĠ Ġtexture Coordinate Data Buffer . put ( texture Coordinate Data ) ĊĠĠĠĠĠĠĠ Ġtexture Coordinate Data Buffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ åŃĹæ®µ a _ texture Coordinate åľ¨ shader ä¸ŃçļĦ ä½įç½® ĊĠĠĠĠĠĠĠ Ġval Ġa Texture Coordinate Location Ġ= ĠGLES 2 0 . glGet Attrib Location ( program Id , Ġ" a _ texture Coordinate ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ å¯¹åºĶ ä½įç½® çļĦåıĤæķ° ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( a Texture Coordinate Location ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠæĮĩå®ļ a _ texture Coordinate æīĢ ä½¿çĶ¨çļĦ é¡¶ çĤ¹ æķ°æį® ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( a Texture Coordinate Location , ĠTEXT URE _ COORD IN ATE _ COMPONENT _ COUNT , ĠGLES 2 0 . GL _ FLOAT , Ġfalse , Ġ 0 , Ġtexture Coordinate Data Buffer ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º åĽ¾çīĩ çº ¹ çĲĨ ĊĠĠĠĠĠĠĠ Ġval Ġtextures Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Gen Textures ( textures . size , Ġtextures , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġimage Texture Ġ= Ġtextures [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® çº ¹ çĲĨ åıĤæķ° ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glBind Texture ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġimage Texture ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ MIN _ FILTER , ĠGLES 2 0 . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ MAG _ FILTER , ĠGLES 2 0 . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ WRAP _ S , ĠGLES 2 0 . GL _ CLAMP _ TO _ EDGE ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ WRAP _ T , ĠGLES 2 0 . GL _ CLAMP _ TO _ EDGE ) ĊĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( program Id ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Ġ è§£ çłģ åĽ¾çīĩ å¹¶ åĬłè½½ åĪ° çº ¹ çĲĨ ä¸Ń ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠUtil . decode Bitmap From Assets (" noise . png ") ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= ĠByteBuffer . allocate ( bitmap . width Ġ* Ġbitmap . height Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġbitmap . copy Pixels To Buffer ( b ) ĊĠĠĠĠĠĠĠ Ġb . position ( 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexImage 2 D ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġ 0 , ĠGLES 2 0 . GL _ RGBA , Ġbitmap . width , Ġbitmap . height , Ġ 0 , ĠGLES 2 0 . GL _ RGBA , ĠGLES 2 0 . GL _ UNSIGNED _ BYTE , Ġb ) ĊĠĠĠĠĠĠĠ Ġval Ġu Texture Location Ġ= ĠGLES 2 0 . glGet Attrib Location ( program Id , Ġ" u _ texture ") ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( u Texture Location , Ġ 0 ) ĊĊĊĊĠĠĠĠĠĠĠ Ġval Ġtime Lo action Ġ= ĠGLES 2 0 . glGet UniformLocation ( program Id , Ġ" i Time ") ĊĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ å¯¹åºĶ ä½įç½® çļĦåıĤæķ° ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( time Lo action ) ĊĊĠĠĠĠĠĠĠ Ġ__ program Id Ġ= Ġprogram Id ĊĠĠĠ Ġ} Ċ Ċ }