精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何用 純C++(ndk)開發安卓應用 ?

開發 后端
如何安裝安卓的開發環境以及怎么設置ndk的環境變量等在前邊的文章已經有了詳細的講解,在這里我就不再說明,如果有不會安裝和設置環境的,請先參考安卓環境搭建的內容。

如何安裝安卓的開發環境以及怎么設置ndk的環境變量等在前邊的文章已經有了詳細的講解,在這里我就不再說明,如果有不會安裝和設置環境的,請先參考安卓環境搭建的內容。

好,假設以及安裝好了ndk,使用純c++開發安卓程序,下邊是詳細的步驟與說明:

1.編寫入口函數

android_main為入口函數,和C++中的main函數是一樣的。這里創建CELLAndroidApp的對象,直接調用main函數。

  1. void android_main(struct android_app* state)  
  2. {  
  3.     CELLAndroidApp    app(state);  
  4.  
  5.        app.main(0,0);  
  6. }  

說明:其中的 CELLAndroidApp是我們設計的一個圖形繪制類,稍后將對其做詳細說明

2.繪制類的實現說明

2.1類的成員說明

  1. protected:  
  2.     EGLConfig        _config;  
  3.     EGLSurface       _surface;  
  4.     EGLContext       _context;  
  5.     EGLDisplay       _display;  
  6.     android_app*     _app;  
  7.     int              _width;  
  8.     int              _height; 

部分參數說明:

_surface:用于繪制圖形,相當于windows繪圖中的位圖

_context:可以看做是opengl對象

_display:用于繪圖的設備上下文,類似于windows繪圖中的dc

2.2 構造函數說明

 

  1. CELLAndroidApp(android_app* app):_app(app)  
  2.     {  
  3.         _surface    =    0;  
  4.         _context    =    0;   
  5.         _display    =    0;  
  6.         _width        =    64;  
  7.         _height        =    48;  
  8.         app->userData        =    this//用戶數據  
  9.         app->onAppCmd         =     handle_cmd; //窗口的創建銷毀等  
  10.         app->onInputEvent     =    handle_input; //回調函數  
  11.     } 

值得注意的是,這里的app中的userData,傳入用戶數據,這里直接傳入this,onAppCmd傳入的handle_cmd回調函數,onInputEvent傳入的事handle_input回調函數

2.3 類中函數main()說明

  1. virtual    void     main(int argc,char** argv)  
  2.     {  
  3.         int ident;  
  4.         int    events;  
  5.         android_poll_source* source;  
  6.  
  7.         while (true)  
  8.         {          
  9.             while ((ident = ALooper_pollAll(0, NULL, &events, (void**)&source)) >= 0)   
  10.             {  
  11.                 if (source != NULL)  
  12.                     source->process(_app, source); //有觸摸事件,調用input函數,相當于dispatchmessage  
  13.  
  14.                 if (_app->destroyRequested != 0)  
  15.                     return;  
  16.             }  
  17.             render();  
  18.         }  
  19.     } 

其中的android_poll_source相當于windows中的消息隊列,用于存放消息,這個函數中模擬了windows中的消息機制。

ALooper_pollAll()函數,用于獲取消息。值得注意的是第一個參數,如果第一個參數傳入0,則不等待,調用后直接返回,類似于windows消息機制中的pickMessage()函數,如果傳入-1,則類似于windows消息機制中的SendMessage()函數。 返回值:如果返回值大于大于等于0表示獲取到數據,如果為-1則表示失敗,未獲取到數據。

其中發source如果不為空,則表示有觸摸事件,則調用process()函數,相當于windows中調用dispatchMessage()函數。

最后,調用render()函數,繪制圖形。

2.4 初始化設備函數initDevice()

  1. virtual void     initDevice()  
  2.     {  
  3.         const EGLint attribs[] =  
  4.         {  
  5.             EGL_SURFACE_TYPE, EGL_WINDOW_BIT,  
  6.             EGL_BLUE_SIZE, 8,   
  7.             EGL_GREEN_SIZE, 8,  
  8.             EGL_RED_SIZE, 8,  
  9.             EGL_NONE  
  10.         };  
  11.         EGLint     format;  
  12.         EGLint    numConfigs;  
  13.  
  14.         _display    =    eglGetDisplay(EGL_DEFAULT_DISPLAY);  
  15.  
  16.         eglInitialize(_display, 0, 0);  
  17.  
  18.         eglChooseConfig(_display, attribs, &_config, 1, &numConfigs);   
  19.  
  20.         eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format);  
  21.  
  22.         ANativeWindow_setBuffersGeometry(_app->window, 0, 0, format);   
  23.  
  24.         _surface    =     eglCreateWindowSurface(_display, _config, _app->window, NULL);  
  25.  
  26. #if 0  
  27.         EGLint contextAtt[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE };  
  28.  
  29.         _context     =     eglCreateContext(_display, _config, 0, contextAtt);  
  30. #else  
  31.         _context     =     eglCreateContext(_display, _config, 0, 0);   
  32. #endif  
  33.  
  34.         if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE)  
  35.         {  
  36.             LOGW("Unable to eglMakeCurrent");   
  37.             return;  
  38.         }  
  39.  
  40.         eglQuerySurface(_display, _surface, EGL_WIDTH, &_width);   
  41.         eglQuerySurface(_display, _surface, EGL_HEIGHT, &_height);  
  42.  
  43.         onCreate();  
  44.  
  45.         // Initialize GL state.  
  46.         glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);   
  47.         glEnable(GL_CULL_FACE);  
  48.         glShadeModel(GL_SMOOTH);  
  49.         glDisable(GL_DEPTH_TEST);  
  50.         glViewport(0,0,_width,_height);  
  51.         glOrthof(0,_width,_height,0,-100,100);  
  52.     } 

首先需要說明的是attribs數組,改數組中主要存儲了繪制圖形的一些屬性信息,他們是成對出現的,如EGL_SURFACE_TYPE則表示繪制圖形類型, EGL_WINDOW_BIT則表示繪制到窗口上。

eglGetDisplay()函數:表示獲取一個顯示設備

eglInitialize():表示初始化獲取到的顯示設備

eglChooseConfig():繪制屬性的配置

eglGetConfigAttrib():設置繪制格式

ANativeWindow_setBuffersGeometry():將格式應用到窗口

eglCreateWindowSurface():創建繪圖窗口

eglCreateContext():創建opengl的繪圖上下文

eglMakeCurrent():綁定到繪圖設備上下文

eglQuerySurface():獲取圖片的寬度和高度,具體獲取哪一個根據最后一個參數確定

glHint()、glEnable()和glOrthof()等函數則是與繪圖的投影相關的內容,包括初始化、設置模式等內容。

#p#

2.5 繪制函數render()

  1. virtual    void     render()  
  2.     {  
  3.         if(_display == 0)  
  4.         {  
  5.             return;  
  6.         }  
  7.         glClearColor(0,0,0, 1);   
  8.         glClear(GL_COLOR_BUFFER_BIT);  
  9.  
  10.         glEnableClientState(GL_VERTEX_ARRAY);   
  11.         if(g_arVertex.size() >= 2)  
  12.         {  
  13.             glColor4f(1,1,1,1);   
  14.             glVertexPointer(3,GL_FLOAT,0,&g_arVertex[0]);   
  15.             glDrawArrays(GL_LINE_STRIP,0,g_arVertex.size());  
  16.         }  
  17.  
  18.         eglSwapBuffers(_display,_surface); //雙緩存的交換緩沖區  
  19.     } 

render()函數主要用于繪制點,對主要的幾個函數做如下說明:

glClearColor():用于將屏幕清為黑色

glClear():清空顏色緩沖區

glEnableClientState():啟動定點數組

glVertexPointer():制定定點緩沖區

glDrawArrays():繪制點數組

eglSwapBuffers():類似雙緩存的交換緩沖區

2.6 handle_cmd()函數

  1. static void     handle_cmd(android_app* app, int32_t cmd)  
  2.     {  
  3.         CELLAndroidApp*    pThis    =    (CELLAndroidApp*)app->userData;  
  4.         pThis->cmd(app,cmd);  
  5.     }  

2.7 handle_input()函數

  1. static void     handle_input(android_app* app, AInputEvent* event)  
  2.     {  
  3.         CELLAndroidApp*    pThis    =    (CELLAndroidApp*)app->userData;  
  4.         pThis->input(app,event);  
  5.     }  

2.8 input()函數

  1. virtual    int     input(struct android_app* app, AInputEvent* event)  
  2.     {  
  3.         int32_t    evtType    =    AInputEvent_getType(event);  
  4.         switch(evtType)  
  5.         {  
  6.         case AINPUT_EVENT_TYPE_KEY:   
  7.             break;  
  8.         case AINPUT_EVENT_TYPE_MOTION:   
  9.             {  
  10.                 int32_t    sourceId    =     AInputEvent_getSource(event);  
  11.                 if(AINPUT_SOURCE_TOUCHSCREEN == sourceId)  
  12.                 {  
  13.                     int32_t id = AMotionEvent_getAction(event);   
  14.                     switch(id)  
  15.                     {  
  16.                     case AMOTION_EVENT_ACTION_MOVE:  
  17.                         {  
  18.                             size_t    cnt = AMotionEvent_getPointerCount(event);   
  19.                             forint i = 0 ;i < cnt; ++ i )  
  20.                             {  
  21.                                 float x = AMotionEvent_getX(event,i);  
  22.                                 float y = AMotionEvent_getY(event,i);  
  23.                                 float3 pt;  
  24.                                 pt.x = x;  
  25.                                 pt.y = y;  
  26.                                 pt.z = 0;  
  27.                                 g_arVertex.push_back(pt);  
  28.                             }  
  29.  
  30.                         }  
  31.                         break;  
  32.                     case AMOTION_EVENT_ACTION_DOWN:  
  33.                         {  
  34.                             size_t    cnt = AMotionEvent_getPointerCount(event);  
  35.                             forint i = 0 ;i < cnt; ++ i )  
  36.                             {  
  37.                                 float x = AMotionEvent_getX(event,i);  
  38.                                 float y = AMotionEvent_getY(event,i);  
  39.                             }  
  40.                         }  
  41.                         break;  
  42.                     case AMOTION_EVENT_ACTION_UP:  
  43.                         {  
  44.                             size_t    cnt = AMotionEvent_getPointerCount(event);  
  45.                             forint i = 0 ;i < cnt; ++ i )  
  46.                             {  
  47.                                 float x = AMotionEvent_getX(event,i);  
  48.                                 float y = AMotionEvent_getY(event,i);  
  49.                             }  
  50.                         }  
  51.                         break;  
  52.                     }  
  53.                 }  
  54.                 else if(AINPUT_SOURCE_TRACKBALL == sourceId)  
  55.                 {  
  56.                 }  
  57.             }  
  58.             break;  
  59.         }  
  60.         return    0;  
  61.     } 

該函數主要用于對輸入進行判斷,以確定是吉鍵盤、鼠標或遙感等,根據具體輸入做相應的操縱,這里就不再做過多的說明

AMotionEvent_getPointerCount():如果是多點觸控,則將各個點保存到vector中。

2.9 cmd()函數

  1. virtual int    cmd(struct android_app* app, int32_t cmd)  
  2.     {  
  3.         switch(cmd)  
  4.         {  
  5.         case APP_CMD_SAVE_STATE:  
  6.             break;  
  7.         case APP_CMD_INIT_WINDOW:  
  8.             initDevice();  
  9.             break;  
  10.         case APP_CMD_TERM_WINDOW:  
  11.             shutDownDevice();  
  12.             break;  
  13.         case APP_CMD_GAINED_FOCUS:  
  14.             break;  
  15.         case APP_CMD_LOST_FOCUS:  
  16.             break;  
  17.         }  
  18.         return    0;  
  19.     } 

根據傳入的命令,對窗口做相應的處理。

APP_CMD_INIT_WINDOW:表示初始化窗口

2.10 shutDownDevice()函數

  1. virtual void     shutDownDevice()  
  2.     {  
  3.         onDestroy();  
  4.  
  5.         if (_display != EGL_NO_DISPLAY)  
  6.         {  
  7.             eglMakeCurrent(_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);  
  8.             if (_context != EGL_NO_CONTEXT)  
  9.             {  
  10.                 eglDestroyContext(_display, _context);  
  11.             }  
  12.             if (_surface != EGL_NO_SURFACE)  
  13.             {  
  14.                 eglDestroySurface(_display, _surface);  
  15.             }  
  16.             eglTerminate(_display);  
  17.         }  
  18.         _display = EGL_NO_DISPLAY;  
  19.         _context = EGL_NO_CONTEXT;  
  20.         _surface = EGL_NO_SURFACE;  
  21.     } 

關閉設備,主要是將與設備相關的綁定清除,釋放綁定。

 

編寫完上邊的代碼后,編譯程序,將程序導入到模擬器中,最終運行的效果圖如下:

好了,該說的基本都說玩了,下邊附上源碼地址,趕緊去嘗試吧:

 示例程序下載

 
 
責任編輯:林師授 來源: OpenG
相關推薦

2021-04-04 08:00:39

C++編程語言軟件開發

2010-01-28 10:33:10

C++開發程序

2024-05-06 11:19:20

內存池計算機編程

2017-12-09 21:08:35

C++人工智能機器學習

2013-02-22 09:28:45

MEAP軟件移動應用開發HTML5

2011-09-26 17:02:05

安卓蜂窩冰激凌三明治

2010-01-28 09:44:08

C++應用程序

2017-11-27 17:29:43

深度學習TensorFlow安卓設備

2013-05-02 13:06:05

C++遇到iOS應用開SQLITE

2021-09-23 14:41:58

鴻蒙HarmonyOS應用

2010-01-26 11:06:50

C++開發

2018-06-04 09:30:07

編程語言安卓應用開發

2010-01-25 16:41:08

C++應用程序

2010-01-14 11:14:47

C++應用程序

2012-07-16 10:21:23

iPhone

2010-01-26 15:51:06

C++變量

2014-06-26 15:17:17

安卓應用保存數據

2021-06-02 09:07:33

手機存儲垃圾清理雪豹速清

2010-01-22 16:35:41

C++開發

2013-07-19 15:39:25

點贊
收藏

51CTO技術棧公眾號

永久久久久久| 国产日本欧美在线观看| 在线 丝袜 欧美 日韩 制服| 欧美美女日韩| 日韩美女视频一区二区| av日韩中文字幕| 日本中文字幕在线| 日本a口亚洲| 日韩一卡二卡三卡国产欧美| 日韩欧美亚洲天堂| 淫片在线观看| 91伊人久久大香线蕉| 国产精品夜间视频香蕉| 久久久久香蕉视频| 成人羞羞在线观看网站| 欧美精品一区二区三| 国产精品igao| av最新在线| 亚洲丝袜自拍清纯另类| 欧美精品人人做人人爱视频| 99产精品成人啪免费网站| 在线综合欧美| 欧美日韩国产成人在线观看| 成人无码www在线看免费| 日韩久久99| 色悠悠久久综合| 国产肉体ⅹxxx137大胆| 五月婷婷在线视频| 国产香蕉久久精品综合网| 国产日本一区二区三区| 国产精品一区二区三区在线免费观看 | 岛国av免费观看| 91国内外精品自在线播放| 亚洲一区二区三区四区在线观看| 亚洲精品在线视频观看| 性xxxx视频播放免费| 国产精品影音先锋| 国产精品亚洲自拍| 成人午夜精品视频| 午夜在线精品| 久久久影视精品| 久久久久久久中文字幕| 一区二区三区国产精华| 色999日韩欧美国产| 国产高清一区二区三区四区| 欧美成a人免费观看久久| 欧美变态tickle挠乳网站| 亚洲欧美日本一区二区| 国产精品第一国产精品| 在线视频你懂得一区二区三区| 一本大道熟女人妻中文字幕在线| 丁香高清在线观看完整电影视频| 亚洲综合在线免费观看| 神马午夜伦理影院| 黄色网址视频在线观看| 中文字幕亚洲区| 亚洲国产婷婷香蕉久久久久久99| 欧美少妇另类| 久久免费偷拍视频| 免费日韩电影在线观看| 国内av一区二区三区| 久久精品在这里| 欧美影视一区二区| 国产一级网站视频在线| 日本一区二区三区免费乱视频| 欧洲久久久久久| a黄色在线观看| 中文字幕亚洲区| 日韩精品手机在线观看| 日本大胆在线观看| 亚洲第一久久影院| 1024精品视频| 成人国产一区| 欧美放荡的少妇| 少妇高潮一69aⅹ| 国产精品传媒| 亚洲欧洲在线播放| xxxxx99| 综合久久综合| 午夜免费在线观看精品视频| 99超碰在线观看| 久久精品72免费观看| 91在线视频成人| 欧美在线 | 亚洲| 久久这里只有精品视频网| 四虎永久国产精品| 中文国产字幕在线观看| 精品久久久国产精品999| 人人爽人人av| 日韩欧美另类中文字幕| 日韩va亚洲va欧洲va国产| 久久久久久国产免费a片| 亚洲大全视频| 欧美一级片在线播放| 亚洲一区中文字幕在线| 国产一区二区在线视频| 久久av一区二区| 欧美黄色激情| 精品久久久久久久久久ntr影视| www.日本xxxx| 超碰成人免费| 在线看福利67194| 日本一二三区视频| 久久精品国产秦先生| 九色综合日本| 黄色在线免费看| 色哟哟日韩精品| 韩国三级在线播放| 欧美一级精品| 97婷婷大伊香蕉精品视频| 一级片免费观看视频| 99国产欧美久久久精品| 黄色www在线观看| 成人私拍视频| 精品日韩在线观看| 欧洲美女女同性互添| 国产亚洲福利| 91久久国产综合久久蜜月精品| 欧美老女人性开放| 亚洲一卡二卡三卡四卡无卡久久 | 日本欧美一区| 亚洲激情电影中文字幕| 欧美性生交大片| 久久永久免费| 国产精品一区二区你懂得| 看女生喷水的网站在线观看| 日本福利一区二区| aa片在线观看视频在线播放| 欧美在线首页| 91精品视频在线| www.视频在线.com| 狠狠久久亚洲欧美专区| 国产av一区二区三区传媒| 999国产精品999久久久久久| 国产成+人+综合+亚洲欧洲| 人妻精品无码一区二区| 亚洲自拍偷拍麻豆| 亚洲精品一二三四| 国产精品伦理久久久久久| 国产精品国产三级国产aⅴ浪潮 | 美女av一区二区| 最新黄色网址在线观看| 成人av网址在线观看| 国产女主播av| 精品久久亚洲| 欧美成年人网站| 99产精品成人啪免费网站| 成人欧美一区二区三区在线播放| 91欧美视频在线| 欧美精品尤物在线观看| 国产精品pans私拍| 国产高清免费在线播放| 在线观看91精品国产入口| 波多野吉衣中文字幕| 蜜桃视频一区| 日韩电影免费观看在| 成人做爰视频www| 日韩午夜在线视频| 97在线视频人妻无码| 亚洲免费色视频| 久久久久中文字幕亚洲精品| 欧美午夜一区| 国产日韩精品一区观看| 精品三级久久| 亚洲天堂av在线免费观看| 自拍偷拍精品视频| 中文字幕中文在线不卡住| 男人午夜视频在线观看| 国产一区日韩一区| 国产精品高清一区二区三区| av剧情在线观看| 亚洲男人天堂古典| 天天爱天天做天天爽| 国产精品高清亚洲| 美女又黄又免费的视频| 在线欧美福利| 日本一区二区在线| 91精品国产色综合久久不卡粉嫩| 欧美丰满少妇xxxx| 三级理论午夜在线观看| 精品视频全国免费看| 中文字幕观看av| 成人av在线播放网站| 不卡影院一区二区| 久久久久久久久国产一区| 亚洲影视中文字幕| 在线免费看h| 日韩视频―中文字幕| 秋霞视频一区二区| 欧美亚洲综合网| a级片在线观看免费| 99久久国产综合精品麻豆| 一区二区成人网| 怡红院精品视频在线观看极品| 欧美激情第一页在线观看| 亚洲图片小说区| 97香蕉超级碰碰久久免费软件 | 欧美黑人国产人伦爽爽爽| 天堂中文在线资源| 在线观看欧美日本| 久久久美女视频| 中文久久乱码一区二区| 日本久久久久久久久久| 免费观看久久久4p| 男女视频网站在线观看| 日韩a一区二区| 好吊色欧美一区二区三区视频 | 国产一区成人| 免费看啪啪网站| 亚洲图区在线| 99re在线国产| 亚洲电影二区| 欧美在线视频一区二区| 美女91在线| 丝袜美腿亚洲一区二区| 少妇人妻偷人精品一区二区| 欧美精品日日鲁夜夜添| 亚洲 欧美 成人| 一区二区高清在线| 国产在线免费看| 国产日产欧产精品推荐色| 午夜剧场免费看| 激情综合色播激情啊| 久草在在线视频| 一区二区三区国产盗摄| 人人妻人人澡人人爽欧美一区 | 国产一线二线三线女| 日韩精品1区| 欧美精品一区二区视频| 91精品国产自产精品男人的天堂| 91精品久久久久久久久久久| 欧美精品高清| 欧美在线观看网站| а√天堂资源官网在线资源| 欧美精品免费在线观看| 在线观看免费版| 在线观看日韩视频| 日本不卡免费播放| 日韩av综合网| 视频国产在线观看| 日韩av在线网站| 污视频网站免费观看| 精品国产一区久久| 亚洲男人第一天堂| 欧美α欧美αv大片| 亚洲精品无码久久久| 精品国产区一区| 老熟妇高潮一区二区高清视频| 欧美大片一区二区| 亚洲精品字幕在线| 欧美成人一区二区三区在线观看| a在线观看视频| 日韩亚洲欧美在线观看| 国产男女裸体做爰爽爽| 欧美久久高跟鞋激| 99久久精品国产一区色| 日韩欧美在线综合网| 成 人 免费 黄 色| 精品欧美黑人一区二区三区| 粉嫩av一区二区夜夜嗨| 欧美大片在线观看一区二区| 成人久久久精品国产乱码一区二区| 日韩精品中文字幕一区二区三区| 亚洲第一天堂网| 亚洲黄页网在线观看| 爽爽视频在线观看| 亚洲一二三在线| 黄av在线播放| 国内免费精品永久在线视频| 美女高潮在线观看| 国产成人福利网站| 亚洲高清影院| 成人羞羞视频免费| 日韩极品在线| 亚洲国产精品综合| 亚洲综合专区| 黄页免费在线观看视频| 视频一区免费在线观看| 亚洲成人天堂网| 国产精品白丝jk黑袜喷水| www.男人天堂| 中国色在线观看另类| 欧美成人片在线观看| 精品国产乱码久久久久久天美| 波多野结衣视频免费观看| 欧美精品高清视频| 日本免费一区视频| 国产午夜精品美女视频明星a级| 麻豆视频在线免费观看| 69影院欧美专区视频| 2019年精品视频自拍| 69堂成人精品视频免费| 亚洲免费福利一区| 看一级黄色录像| 蘑菇福利视频一区播放| 一本一本大道香蕉久在线精品| 日韩少妇一区二区| 国产欧美精品区一区二区三区| 暗呦丨小u女国产精品| 亚洲成av人片一区二区梦乃| 伊人久久久久久久久久久久| 91麻豆精品国产91久久久使用方法 | 日本中文字幕伦在线观看| 色综合久久久久久中文网| 台湾佬成人网| 风间由美久久久| 久久国产成人精品| 日韩精品xxxx| 国产馆精品极品| 欧洲性xxxx| 黑人精品xxx一区| 精品人妻伦一区二区三区久久 | av片在线观看免费| 国产成人精品一区| 国产图片一区| 免费观看中文字幕| 日本不卡123| 日本aaa视频| 亚洲第一激情av| 国产偷拍一区二区| 视频在线一区二区| 日韩精选视频| 国产伦精品一区二区三区视频孕妇 | 黄色成人在线观看网站| 久久久人人爽| 一区在线视频观看| 美女被艹视频网站| 亚洲视频资源在线| 亚洲精品国产精品乱码视色| 亚洲精品福利在线观看| 牛牛精品视频在线| 成人黄色在线免费观看| 中文字幕一区二区三区久久网站| 亚洲国产高清av| 国产喂奶挤奶一区二区三区| 亚洲永久精品在线观看| 精品999久久久| av中文字幕电影在线看| 高清视频一区二区三区| 国产精品扒开腿做爽爽爽软件| 日本亚洲一区二区三区| 亚洲精品免费播放| 国产成人毛毛毛片| 欧美成人午夜激情| 久久9999免费视频| 桥本有菜av在线| 国产乱码精品一区二区三区av| 亚洲视频重口味| 91精品国产91综合久久蜜臀| 精品视频在线一区二区| 92国产精品视频| 国产一区久久| 黄色性生活一级片| 欧美丝袜第一区| 国产在线一二| 国产精品成人品| 久久裸体网站| 五月天六月丁香| 亚洲综合视频在线观看| 成人久久久精品国产乱码一区二区| 欧美极品在线播放| 精品少妇一区| 黄色国产精品视频| 国产精品少妇自拍| 国产叼嘿视频在线观看| 国外成人在线直播| 神马久久av| xxxx一级片| 亚洲人成在线观看一区二区| 亚洲精品国产片| 91爱爱小视频k| 日韩精品午夜| 免费在线观看日韩av| 天天av天天翘天天综合网色鬼国产 | 国产福利一区二区三区在线视频| 久热精品在线观看| 亚洲欧美国内爽妇网| 亚洲狼人综合| 男女视频网站在线观看| 中文字幕不卡在线| 999免费视频| 欧美中文字幕视频| 欧美国产一级| 黄色在线免费播放| 欧洲色大大久久| 成人区精品一区二区不卡| 国产色综合一区二区三区| 久久一区激情| 免费又黄又爽又色的视频| 日韩国产欧美精品在线| 91成人在线网站| 日本精品免费在线观看| 中文字幕一区二区三区在线播放| 色窝窝无码一区二区三区| 国产高清视频一区三区| 欧美久久视频| 日本美女xxx| 亚洲精品一区二区三区福利| 日韩精品三区| 无码熟妇人妻av在线电影|