一、通過(guò)使用Jni調(diào)用CPP的方式使用OpenGLES
1状土、在Android Studio(本人采用 2.3 版本) 新建一個(gè)工程汽抚,勾選 Include C++ support易结,如圖所示:
如果沒(méi)有Include C++ support選項(xiàng)精算,先要下載NDK并配置好
2瓢宦、接下來(lái)就一路點(diǎn)下去創(chuàng)建一個(gè)新的工程即可。創(chuàng)建完成后殖妇,會(huì)產(chǎn)生一個(gè)CPP目錄并且有一個(gè)ndk-lib.cpp的目錄刁笙,以及CMakeLists.txt文件,CMakeLists.txt文件是cmake編譯用的文件谦趣,我們將默認(rèn)的cpp文件改成triangle-lib.cpp疲吸,刪除創(chuàng)建的MainActivity中加載的庫(kù)(如果在創(chuàng)建工程是創(chuàng)建了Activity的話),修改CMakeLists.txt文件前鹅。如下所示:
其中摘悴,add_library 方法是將當(dāng)前的CPP文件編譯成靜態(tài)或動(dòng)態(tài)庫(kù),第一個(gè)參數(shù)是庫(kù)的名稱舰绘,第二個(gè)參數(shù)是類型蹂喻,第三個(gè)參數(shù)是編譯時(shí)需要添加的文件,可以多個(gè)文件捂寿,換行添加就好口四。
find_library 方法是加載已經(jīng)存在的庫(kù),截圖中的庫(kù)是默認(rèn)添加的CPP使用的log庫(kù)
target_link_libraries方法則是鏈接時(shí)需要添加的庫(kù)秦陋,第一個(gè)參數(shù)是需要鏈接的庫(kù)蔓彩,后面可以跟 -llog -landoid -lEGL -lGLESv3這樣的方式加載所需要的庫(kù)。
3驳概、自定義一個(gè)View赤嚼,繼承于GLSurfaceView,初始化時(shí)作以下設(shè)置:
4顺又、上圖中的TriangleRender是自定義的Renderer更卒,代碼如下圖所示:
5、上圖中的TriangleLib是一個(gè)用于管理native方法的類稚照,代碼如下圖所示:
其中System.loadLibrary("triangle-lib") 中的名稱跟前面add_library方法中庫(kù)的名稱要一致蹂空。
此時(shí),Java層的代碼已經(jīng)完全實(shí)現(xiàn)锐锣。接下來(lái)我們需要對(duì)native方法進(jìn)行實(shí)現(xiàn)腌闯。
6、在triangle-lib.cpp中實(shí)現(xiàn)TriangleLib定義的native方法,native方法就是使用OpenGLES 的API進(jìn)行繪制
7雕憔、在Activity中使用自定義的View,然后在Manifest文件中對(duì)應(yīng)的Activity標(biāo)簽下面添加對(duì)應(yīng)的庫(kù)糖声,如下圖所示:
8斤彼、至此編譯即可運(yùn)行
二分瘦、使用Java版OpenGLES API
1、在JNI調(diào)用CPP的第4步完成琉苇,將自定義的Renderer中使用的TriangleLib類使用一個(gè)新的Java類來(lái)替代嘲玫。
2、在新建的 Java類中調(diào)用Java版的OpenGLES API實(shí)現(xiàn)繪制
3并扇、接下來(lái)實(shí)現(xiàn)上面的第7去团、8步