{"id":10983,"date":"2021-10-29T23:42:03","date_gmt":"2021-10-29T15:42:03","guid":{"rendered":"https:\/\/www.bookcard.net\/wordpress\/?p=10983"},"modified":"2022-01-31T09:08:18","modified_gmt":"2022-01-31T01:08:18","slug":"android_studio_ndk_opengl_es_surfaceview","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es_surfaceview\/","title":{"rendered":"Android Studio NDK-OpenGL ES\u5c01\u88ddSurfaceView"},"content":{"rendered":"<figure id=\"attachment_10984\" aria-describedby=\"caption-attachment-10984\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_SurfaceView.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10984\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_SurfaceView.jpg\" alt=\"Android Studio NDK-OpenGL ES\u5c01\u88ddSurfaceView\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_SurfaceView.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_SurfaceView-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_SurfaceView-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-10984\" class=\"wp-caption-text\">Android Studio NDK-OpenGL ES\u5c01\u88ddSurfaceView<\/figcaption><\/figure>\n<p>\u4fc2\u300eAndroid OpenGL ES\u300f\u7528\u300eSurfaceView\u300f\u849e\u7540\u300eOpenGL ES\u300f\u6e32\u67d3. \u4e4b\u524d\u300eSurfaceView\u300f\u4ee3\u78bc\u64fa\u4fc2\u300eMainActivity.java\u300f.\u66f4\u4f73\u65b9\u6cd5\u4fc2\u300eSurfaceView\u300f\u300eRunnable\u300f\u300eSurfaceHolder.Callback\u300f\u5c01\u88dd\u6210\u55ae\u7368\u300eGameView calss\u300f.\u4ee5\u4fdd\u6301\u4ee3\u78bc\u300e\u7c21\u6f54\u300f\u540c\u57cb\u300e\u91cd\u7528\u300f.<\/p>\n<ol>\n<li>\u65b0\u5efa\u300ejava\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">\u300eFile-&gt;New-&gt;Java Class\u300f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"2\">\n<li>\u5c01\u88dd\u300eRunnable\u300f\u300eCallback\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">public class GameView extends SurfaceView implements Runnable,SurfaceHolder.Callback{<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"3\">\n<li>\u300eSurfaceView\u300f\u8b8a\u91cf<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">int view_width,view_height;<\/p>\n<p>public SurfaceHolder surfaceHolder;<\/p>\n<p>public Surface surface;\/\/\u7528\u849e\u6e32\u67d3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"4\">\n<li>\u69cb\u9020\u51fd\u6578<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">public GameView(Context context) {<\/p>\n<p>super(context);<\/p>\n<p>init(context);\/\/ \u8a2d\u7f6e\u6e32\u67d3<\/p>\n<p>}<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">public GameView(Context context, AttributeSet attrs) {<\/p>\n<p>super(context);<\/p>\n<p>init(context);\/\/ \u8a2d\u7f6e\u6e32\u67d3<\/p>\n<p>}<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">public GameView(Context context, AttributeSet attrs, int defStyleAttr) {<\/p>\n<p>super(context);<\/p>\n<p>init(context);\/\/ \u8a2d\u7f6e\u6e32\u67d3<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"5\">\n<li>\u521d\u6b64\u6e32\u67d3\u8bbe\u7f6e<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">public void init(Context context){<\/p>\n<p>this.surfaceHolder = getHolder();<\/p>\n<p>this.surfaceHolder.addCallback(this);<\/p>\n<p>this.surface = surfaceHolder.getSurface();<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"6\">\n<li>\u5275\u5efa\u8868\u5c64,\u555f\u52d5\u6e32\u67d3\u7dda\u7a0b run()<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">@Override<\/p>\n<p>public void surfaceCreated(SurfaceHolder surfaceHolder){<\/p>\n<p>new Thread(this).start();<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"7\">\n<li>\u8868\u5c64\u6539\u8b8a, \u7576\u624b\u6a5f\u65b9\u5411\u6539\u8b8a\u89e6\u767c, \u4fc2\u6e38\u6232\u8981<a href=\"https:\/\/www.bookcard.net\/wordpress\/android_game_portrait_landscape\/\">\u7981\u6b62\u65cb\u8f49\u65b9\u5411<\/a>.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">\u00a0@Override<\/p>\n<p>public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height){<\/p>\n<p>view_width = width;<\/p>\n<p>view_height = height;<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"8\">\n<li>\u8868\u5c64\u92b7\u6bc0<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">@Override<\/p>\n<p>public void surfaceDestroyed(SurfaceHolder surfaceHolder) {<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"9\">\n<li>\u6e38\u6232\u904b\u7b97\u6e32\u67d3\u7dda\u7a0b<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">@Override<\/p>\n<p>public void run() {<\/p>\n<p>AssetManager assetManager = getContext().getAssets();<\/p>\n<p>Lib.init(assetManager, surface, view_width, view_height);<\/p>\n<p>while (true) {\/\/ \u8acb\u6c42\u6e32\u67d3<\/p>\n<p>Lib.update();<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4fc2\u300eAndroid OpenGL ES\u300f\u7528\u300eSurfaceView\u300f\u849e\u7540\u300eOpenGL ES\u300f\u6e32\u67d3. \u4e4b\u524d\u300eS &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es_surfaceview\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Android Studio NDK-OpenGL ES\u5c01\u88ddSurfaceView<\/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],"class_list":["post-10983","post","type-post","status-publish","format-standard","hentry","category-android","category-opengl","tag-android","entry"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10983","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=10983"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10983\/revisions"}],"predecessor-version":[{"id":10985,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10983\/revisions\/10985"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=10983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=10983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=10983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}