{"id":10941,"date":"2021-10-07T23:08:12","date_gmt":"2021-10-07T15:08:12","guid":{"rendered":"https:\/\/www.bookcard.net\/wordpress\/?p=10941"},"modified":"2021-10-07T23:08:12","modified_gmt":"2021-10-07T15:08:12","slug":"android_studio_ndk_opengl_es","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es\/","title":{"rendered":"Android Studio NDK-OpenGL ES\u5e03\u5c40"},"content":{"rendered":"<figure id=\"attachment_10942\" aria-describedby=\"caption-attachment-10942\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10942\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES.jpg\" alt=\"Android Studio NDK-OpenGL ES\u5e03\u5c40\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-10942\" class=\"wp-caption-text\">Android Studio NDK-OpenGL ES\u5e03\u5c40<\/figcaption><\/figure>\n<p>\u300eAndroid Studio NDK\u300f\u63d0\u4f9b\u300eEGL\u300f\u9023\u63a5\u300eOpenGL\u300f, \u300eEGL\u300f\u88ab\u8a2d\u8a08\u51fa\u4f86,\u4f5c\u7232 OpenGL \u548c\u539f\u751f\u7a97\u53e3\u7cfb\u7d71\u4e4b\u9593\u7684\u6a4b\u6881\u300eMicrosoft Windows\u300f\u300eMac OS X Quatz\u300f\u5dee\u7570.\u7528\u7d71\u58f9\u63a5\u53e3\u540c\u539f\u751f\u8996\u7a97\u806f\u63a5. \u8de8\u5e73\u81faAPI\u66f4\u6613\u65bc\u79fb\u503c. \u6240\u4ee5OpenGL\u6bd4DirectX\u66f4\u5f97\u4eba\u9418\u610f.<\/p>\n<ol>\n<li><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_c_ndk\/\">\u4f7f\u7528NDK<\/a><\/li>\n<li><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es_cmakelists_libglesv1_cm\/\">\u7de8\u8b6fOpenGL ES<\/a><\/li>\n<li>\u8f09\u5165\u5171\u4eab\u5eab&#8221;app.so&#8221;,\u300eapp\u300f\u7cfb\u4f60\u5eab\u540d.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">static {<\/p>\n<p>System.loadLibrary(&#8220;app&#8221;);<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"4\">\n<li>\u9996\u5148\u4fee\u6539\u5e03\u5c40\u300exml\u300f\u6dfb\u52a0\u300eSurfaceView\u300f,\u800c\u975e\u300eGLSurfaceView\u300f.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">\u00a0&lt;android.view.SurfaceView<\/p>\n<p>android:layout_width=&#8221;match_parent&#8221;<\/p>\n<p>android:layout_height=&#8221;match_parent&#8221;<\/p>\n<p>android:id=&#8221;@+id\/surface_view&#8221; \/&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"5\">\n<li>\u4fc2\u300exml\u300f\u6dfb\u52a0\u300e\u5168\u5c4f\u6a23\u5f0f\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">&lt;style\u00a0 name=&#8221;FullscreenTheme&#8221;\u00a0 parent=&#8221;android:Theme.NoTitleBar.Fullscreen&#8221;\u00a0 &gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"6\">\n<li>\u4fc2\u300ejava\u300f\u52a0\u300eandroid.view.SurfaceHolder.Callback\u300f\u7528\u849e\u884c\u300eSurfaceView\u300f\u300e\u5275\u5efa\u300f\u300e\u6539\u8b8a\u300f\u300e\u92b7\u6bc0\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @Override<\/p>\n<p>public void surfaceCreated(SurfaceHolder surfaceHolder) {<\/p>\n<p>new Thread(this).start();\/\/\u6e32\u67d3,\u555f\u52d5\u7dda\u7a0b\u00a0 Runnable.run()<\/p>\n<p>}<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @Override<\/p>\n<p>public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {<\/p>\n<p>}<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0@Override<\/p>\n<p>public void surfaceDestroyed(SurfaceHolder surfaceHolder) {<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"7\">\n<li>\u4fc2\u300ejava\u300f\u52a0\u300eRunnable\u300f\u7528\u849e\u884cOpenGL \u6e32\u67d3\u7dda\u7a0b, \u300eEGL\u300f\u540c\u300eOpenGL\u300f\u4ee3\u78bc\u9700\u64fa\u540c\u58f9\u7dab\u7a0b. \u5514\u7cfbeglSwapBuffers()\u8fd4\u56deEGL_BAD_SURFACE.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">\u00a0\u00a0\u00a0 @Override<\/p>\n<p>public void run() {<\/p>\n<p>init( );<\/p>\n<p>while (true) {<\/p>\n<p>update(0);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"8\">\n<li>\u4fc2\u300exml\u300f\u70baGoogle Play\u52a0\u7248\u672c\u904e\u6ffe<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">&lt;uses-sdk\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:minSdkVersion=&#8221;9&#8243;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 android:targetSdkVersion=&#8221;19&#8243; \/&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"9\">\n<li>\u4fc2\u300etxt\u300f\u7a69\u5eab\u6587\u6a94<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">find_library( OpenGL-lib libGLESv1_CM.so\u00a0 )<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">find_library( OpenEGL-lib libEGL.so )<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">find_library( Android-lib libandroid.so )<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"10\">\n<li>\u4fc2\u300etxt\u300f\u9023\u9023\u63a5\u5eab\u6587\u6a94<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">target_link_libraries(app<\/p>\n<p>${OpenGL-lib}<\/p>\n<p>${OpenEGL-lib}<\/p>\n<p>${Android-lib})<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"11\">\n<li>\u52a0\u5165\u982d\u6587\u6a94<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"288\">#include &lt;GLES\/gl.h&gt;<\/td>\n<td width=\"288\">\u6a19\u6e96OpenGL\u982d\u6587\u6a94<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">#include &lt;GLES\/glext.h&gt;<\/td>\n<td width=\"288\">OpenGL\u67b6\u9910\u5eab<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">#include &lt;EGL\/egl.h&gt;<\/td>\n<td width=\"288\">EGL\u982d\u6587\u6a94<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">#include &lt;EGL\/eglext.h&gt;<\/td>\n<td width=\"288\">EGL\u67b6\u9910\u5eab<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">#include &lt;android\/native_window_jni.h&gt;<\/td>\n<td width=\"288\">\u539f\u751f\u8996\u7a97\u5eab<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u300eAndroid Studio NDK\u300f\u63d0\u4f9b\u300eEGL\u300f\u9023\u63a5\u300eOpenGL\u300f, \u300eEGL\u300f\u88ab\u8a2d\u8a08\u51fa\u4f86,\u4f5c\u7232 Op &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Android Studio NDK-OpenGL ES\u5e03\u5c40<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,62],"tags":[2,50],"class_list":["post-10941","post","type-post","status-publish","format-standard","hentry","category-android","category-opengl","tag-android","tag-opengl","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/comments?post=10941"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10941\/revisions"}],"predecessor-version":[{"id":10943,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10941\/revisions\/10943"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=10941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=10941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=10941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}