{"id":10950,"date":"2021-10-09T02:18:34","date_gmt":"2021-10-08T18:18:34","guid":{"rendered":"https:\/\/www.bookcard.net\/wordpress\/?p=10950"},"modified":"2021-10-09T02:18:34","modified_gmt":"2021-10-08T18:18:34","slug":"android_studio_ndk_opengl_es_egl","status":"publish","type":"post","link":"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es_egl\/","title":{"rendered":"Android Studio NDK-OpenGL ES\/EGL\u6e32\u67d3"},"content":{"rendered":"<figure id=\"attachment_10951\" aria-describedby=\"caption-attachment-10951\" style=\"width: 1280px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_EGL.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-10951\" src=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_EGL.jpg\" alt=\"Android Studio NDK-OpenGL ES\/EGL\u6e32\u67d3\" width=\"1280\" height=\"800\" srcset=\"https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_EGL.jpg 1280w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_EGL-300x188.jpg 300w, https:\/\/www.bookcard.net\/wordpress\/wp-content\/uploads\/2021\/10\/Android_Studio_NDK_OpenGL_ES_EGL-768x480.jpg 768w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-10951\" class=\"wp-caption-text\">Android Studio NDK-OpenGL ES\/EGL\u6e32\u67d3<\/figcaption><\/figure>\n<p>OpenGL EGL\u4f5c\u70ba\u5e73\u81fa\u5187\u95a2 API, \u4eca\u7a0b\u5e8f\u5187\u8996\u300eLinux X Window\u300f\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><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es\/\">\u5e03\u5c40OpenGL ES<\/a><\/li>\n<li>\u5148\u52a0\u5165\u982d\u6587\u6a94<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"290\">#include &lt;GLES\/gl.h&gt;<\/td>\n<td width=\"290\">\u6a19\u6e96OpenGL\u982d\u6587\u6a94<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">#include &lt;GLES\/glext.h&gt;<\/td>\n<td width=\"290\">OpenGL\u5be6\u7528\u67b6\u9910\u5eab<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">#include &lt;EGL\/egl.h&gt;<\/td>\n<td width=\"290\">EGL\u5eab<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">#include &lt;EGL\/eglext.h&gt;<\/td>\n<td width=\"290\">EGL\u67b6\u9910\u5eab<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">#include &lt;android\/native_window_jni.h&gt;<\/td>\n<td width=\"290\">\u539f\u751f\u8996\u7a97\u5eabANativeWindow<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"5\">\n<li>\u519a\u8fa6\u721bEGL\u7a0b\u5f0f\u9996\u5148\u8abf\u7528\u300eeglGetDisplay()\u300f, \u5f97\u5230\u300eEGLDisplay\u300f\u7b49\u540c\u300e\u539f\u751f\u8996\u7a97\u300f, \u300eEGLDisplay\u300f\u4fc2\u6574\u6578\u7d22\u5f15.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"6\">\n<li>\u7d22\u5f15\u5927\u65bc\u96f6\u5373\u6210\u529f, \u56e0\u70ba\u7b49\u65bc\u96f6\u5931\u6557.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"288\">EGL_NO_DISPLAY<\/td>\n<td width=\"288\">0\u5931\u6557<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"7\">\n<li>\u521d\u59cbEGL\u7a0b\u5f0f, \u5e77\u7372\u5f97\u300emajor\u300f\u4e3b\u7248\u865f , \u300eminor\u300f\u526f\u7248\u865f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">EGLint major,minor;<\/p>\n<p>eglInitialize(display,&amp;major,&amp;minor)\u00a0 ;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"8\">\n<li>\u5931\u6557\u8fd4\u56deEGL_FALSE, \u67e5\u932f\u8aa4\u78bceglGetError()<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"288\">EGL_BAD_DISPLAY<\/td>\n<td width=\"288\">\u975e\u6709\u6548EGLDisplay<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGL_NOT_INITALIZED<\/td>\n<td width=\"288\">\u672a\u80fd\u521d\u59cb<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"9\">\n<li>\u7a69\u300esurface\u300f\u6e32\u67d3\u914d\u7f6e<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">EGLBoolean eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"10\">\n<li>EglChooseConfig()\u51fd\u5f0f\u53c3\u6578<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"288\">\u53c3\u6578<\/td>\n<td width=\"288\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGLDisplay dpy<\/td>\n<td width=\"288\">\u300e\u539f\u751f\u8996\u7a97\u300f\u7d22\u5f15<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGLint *attrib_list<\/td>\n<td width=\"288\">\u6307\u5b9a\u5c6c\u6027\u5217\u8868, \u4ee5EGL_NONE\u7d50\u5c58<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGLConfig *configs<\/td>\n<td width=\"288\">\u8fd4\u56de\u914d\u7f6e\u5217\u8868<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGLint config_size<\/td>\n<td width=\"288\">\u6307\u5b9a\u914d\u7f6e\u5217\u8868\u9577\u5ea6<\/td>\n<\/tr>\n<tr>\n<td width=\"288\">EGLint *num_config<\/td>\n<td width=\"288\">\u8fd4\u56de\u914d\u7f6e\u9577\u5ea6<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"11\">\n<li>\u300eEGLConfig\u300f\u5c6c\u6027<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"196\">\u5c6c\u6027<\/td>\n<td width=\"199\">\u63cf\u8ff0<\/td>\n<td width=\"180\">\u503c<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_SURFACE_TYPE<\/td>\n<td width=\"199\">EGL\u6e32\u67d3\u8868\u9762\u985e\u578b<\/td>\n<td width=\"180\">EGL_WINDOW_BIT<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_RENDERABLE_TYPE<\/td>\n<td width=\"199\">OpenGL\u7248\u672c<\/td>\n<td width=\"180\">EGL_OPENGL_ES_BIT<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_RED_SIZE<\/td>\n<td width=\"199\">\u7d05\u8272\u91cf\u4f4d<\/td>\n<td width=\"180\">8Bit<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_GREEN_SIZE<\/td>\n<td width=\"199\">\u7da0\u8272\u91cf\u4f4d<\/td>\n<td width=\"180\">8Bit<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_BLUE_SIZE<\/td>\n<td width=\"199\">\u85cd\u8272\u91cf\u4f4d<\/td>\n<td width=\"180\">8Bit<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_ALPHA_SIZE<\/td>\n<td width=\"199\">\u900f\u660e\u91cf\u4f4d<\/td>\n<td width=\"180\">8Bit<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_DEPTH_SIZE<\/td>\n<td width=\"199\">\u6df1\u5ea6\u91cf\u4f4d<\/td>\n<td width=\"180\">16Bit<\/td>\n<\/tr>\n<tr>\n<td width=\"196\">EGL_NONE<\/td>\n<td width=\"199\">\u5c6c\u6027\u5217\u8868\u4ee5EGL_NONE\u7d50\u5c58<\/td>\n<td width=\"180\">0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5c6c\u6027\u5217\u8868<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">EGLint\u00a0\u00a0\u00a0 attrib_array[32];<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"12\">\n<li>\u8a2d\u5b9a\u300eEGLConfig\u300f\u5c6c\u6027<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"290\">attrib_array[0] = EGL_SURFACE_TYPE;<\/td>\n<td width=\"290\">attrib_array[1] = EGL_WINDOW_BIT;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[2] = EGL_RENDERABLE_TYPE;<\/td>\n<td width=\"290\">attrib_array[3] = EGL_OPENGL_ES_BIT;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[4] = EGL_RED_SIZE;<\/td>\n<td width=\"290\">attrib_array[5] = 8;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[6] = EGL_GREEN_SIZE;<\/td>\n<td width=\"290\">attrib_array[7] = 8,<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[8] = EGL_BLUE_SIZE;<\/td>\n<td width=\"290\">attrib_array[9] = 8;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[10] = EGL_ALPHA_SIZE;<\/td>\n<td width=\"290\">attrib_array[11] = 8;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[12] = EGL_DEPTH_SIZE;<\/td>\n<td width=\"290\">attrib_array[13] = 16;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[14] = EGL_NONE;<\/td>\n<td width=\"290\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"13\">\n<li>\u64da attrib_array \u8fd4\u56de\u6700\u96b9\u914d\u7f6econfig<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">EGLint\u00a0\u00a0\u00a0 config_number = 32;<\/p>\n<p>EGLConfig config_array[32];<\/p>\n<p>EGLConfig\u00a0 config;\/\/ \u914d\u7f6e<\/p>\n<p>eglChooseConfig(display,attrib_array,config_array,config_number,&amp;config_number);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"14\">\n<li>\u5339\u914d\u6700\u4f73\u914d\u7f6e<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">for(int i=0;i&lt;config_number;++i)\u00a0\u00a0\u00a0 {<\/p>\n<p>eglGetConfigAttrib(openGL-&gt;display, config_array[i],EGL_RED_SIZE, &amp;red);<\/p>\n<p>eglGetConfigAttrib(openGL-&gt;display, config_array[i],EGL_GREEN_SIZE, &amp;green);<\/p>\n<p>eglGetConfigAttrib(openGL-&gt;display, config_array[i],EGL_BLUE_SIZE, &amp;blue);<\/p>\n<p>eglGetConfigAttrib(openGL-&gt;display, config_array[i],EGL_ALPHA_SIZE, &amp;alpha);<\/p>\n<p>eglGetConfigAttrib(openGL-&gt;display, config_array[i],EGL_DEPTH_SIZE, &amp;depth);<\/p>\n<p>if( red == 8 &amp;&amp; green == 8 &amp;&amp; blue == 8 &amp;&amp; alpha == 8 &amp;&amp; depth == 16){<\/p>\n<p>openGL-&gt;config = config_array[i];\/\/ \u6700\u4f73\u914d\u7f6e<\/p>\n<p>break;<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"15\">\n<li>\u751f\u6210\u6e32\u67d3\u8996\u7a97<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">EGLSurface eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"16\">\n<li>eglCreateWindowSurface()\u51fd\u5f0f\u53c3\u6578<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"290\">\u53c3\u6578<\/td>\n<td width=\"290\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGLDisplay dpy<\/td>\n<td width=\"290\">\u300e\u539f\u751f\u8996\u7a97\u300f\u7d22\u5f15<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGLConfig config<\/td>\n<td width=\"290\">\u6700\u4f73\u914d\u7f6e<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGLNativeWindowType win<\/td>\n<td width=\"290\">SurfaceView<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">const EGLint *attrib_list<\/td>\n<td width=\"290\">\u5c6c\u6027\u5217\u8868<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"17\">\n<li>\u6e32\u67d3\u8996\u7a97\u5c6c\u6027<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"177\">\u8996\u7a97\u5c6c\u6027<\/td>\n<td width=\"198\">\u63cf\u8ff0<\/td>\n<td width=\"215\">\u503c<\/td>\n<\/tr>\n<tr>\n<td width=\"177\">EGL_RENDER_BUFFER<\/td>\n<td width=\"198\">\u6e32\u67d3\u7de9\u5b58<\/td>\n<td width=\"215\">EGL_SINGLE_BUFFER\u300e\u55ae\u7de9\u5b58\u300fEGL_BACK_BUFFER\u300e\u96d9\u7de9\u5b58\u300f<\/td>\n<\/tr>\n<tr>\n<td width=\"177\">EGL_NONE<\/td>\n<td width=\"198\">\u5c6c\u6027\u5217\u8868\u4ee5EGL_NONE\u7d50\u5c58<\/td>\n<td width=\"215\">0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"18\">\n<li>\u5c6c\u6027<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"290\">attrib_array[0] = EGL_RENDER_BUFFER;<\/td>\n<td width=\"290\">attrib_array[1] = EGL_BACK_BUFFER;<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">attrib_array[2] = EGL_NONE;<\/td>\n<td width=\"290\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"19\">\n<li>\u751f\u6210\u6e32\u67d3\u8996\u7a97<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">surface_draw = eglCreateWindowSurface(display,config,nativeWindow,attrib_array);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"20\">\n<li>\u7372\u5f97\u932f\u8aa4\u78bc<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"290\">\u932f\u8aa4\u78bcEGLint error = eglGetError();<\/td>\n<td width=\"290\">\u7c21\u4ecb<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGL_BAD_MATCH<\/td>\n<td width=\"290\">\u8996\u7a97\u5514\u5339\u914dEGLConfig\u5514\u652f\u6301\u6e32\u67d3<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGL_BAD_CONFIG<\/td>\n<td width=\"290\">\u8996\u7a97\u5514\u5339\u914dEGLConfig\u7cfb\u7d71\u6664\u652f\u6301<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGL_BAD_NATIVE_WINDOW<\/td>\n<td width=\"290\">\u539f\u751f\u8996\u7a97\u53e5\u67c4\u5187\u6548<\/td>\n<\/tr>\n<tr>\n<td width=\"290\">EGL_BAD_ALLOC<\/td>\n<td width=\"290\">\u5187\u6cd5\u5206\u914d\u8cc7\u6e90<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"21\">\n<li>\u95dc\u806f\u63cf\u8ff0\u8868, \u5c06\u300eEGLContext\u300f\u300eEGLSurface\u300f\u8207\u7576\u524d\u7dda\u7a0b\u95dc\u806f, \u300eEGL\u300f\u540c\u300eOpenGL\u300f\u4ee3\u78bc\u9700\u64fa\u540c\u58f9\u7dab\u7a0b. \u5514\u7cfbeglSwapBuffers()\u8fd4\u56de<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"580\">eglMakeCurrent(display,surface_draw,surface_draw,context);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"22\">\n<li>\u300eNative\u300f\u5c64\u7528\u300eANativeWindow \u300f\u849e\u6e32\u67d3.\u901a\u904e\u300eSurface\u300f\u5f97\u5230\u300eANativeWindow\u300f.<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">ANativeWindow* ANativeWindow_fromSurface(JNIEnv* env, jobject surface)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ol start=\"23\">\n<li>Android \u300ejava\u300f\u5c64\u7528\u300eSurfaceView\u300f\u849e\u6e32\u67d3, \u63d0\u53d6\u300eSurface\u300f\u7540\u300eNative\u300f<\/li>\n<\/ol>\n<table>\n<tbody>\n<tr>\n<td width=\"575\">SurfaceView surfaceView = (SurfaceView)findViewById(R.id.surface_view);<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">SurfaceHolder \u00a0\u00a0\u00a0\u00a0surfaceHolder = surfaceView.getHolder();<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">surfaceHolder.addCallback(this);<\/td>\n<\/tr>\n<tr>\n<td width=\"575\">Surface\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0surface = surfaceHolder.getSurface();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>OpenGL EGL\u4f5c\u70ba\u5e73\u81fa\u5187\u95a2 API, \u4eca\u7a0b\u5e8f\u5187\u8996\u300eLinux X Window\u300f\u300eMicrosoft W &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.bookcard.net\/wordpress\/android_studio_ndk_opengl_es_egl\/\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">Android Studio NDK-OpenGL ES\/EGL\u6e32\u67d3<\/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-10950","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\/10950","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=10950"}],"version-history":[{"count":1,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10950\/revisions"}],"predecessor-version":[{"id":10952,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/posts\/10950\/revisions\/10952"}],"wp:attachment":[{"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/media?parent=10950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/categories?post=10950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bookcard.net\/wordpress\/wp-json\/wp\/v2\/tags?post=10950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}