青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿

根據我對msvc系列和mingw編譯器的了解
具體差異如下:
1.在編譯源文件過程中,2者對涉及的相關頭文件有所不同
比如:
#ifdef G_MSVC
#include 
<GEngine/Template/Vector.hpp>
#endif 
這是蓋莫引擎中math.hpp包含的頭文件
其中有一個函數:
    ////////////////////////////////////////////////////////
    
/// 給定差量t(0<=t<=1)獲取線性插值點p(0) = p1,p(1) = p2
    //////////////////////////////////////////////////////// 
    template<class T>
    
static Vector3<T> GetPoint(const Vector3<T> &from,const Vector3<T> &to,float t);
在編譯的Math的時候MinGW需要先"編譯"Vector文件
2.2者在處理函數返回值上的不同
比如:
int GetValue()
{
}
msvc需要顯式的給定函數返回值
而mingw不需要(具有默認值)
3.對待函數參數的不同
比如
template<class T>
void Add(T a,T a);
4.基本數據結構類型有所不同
5.在獲取原始數據上的區別如下:
const int     MAXINT    = std::numeric_limits<int>::max;
const double  MAXDOUBLE = (std::numeric_limits<double>::max)();
6.其他請大家補充吧
posted @ 2010-06-26 18:57 ccsdu2009 閱讀(2675) | 評論 (8)編輯 收藏
 
     摘要: 這是最新設計的蓋莫音頻音頻(API)(c++)(1.5.5)當前提供一個簡易版本的播放器(使用了Skinse界面庫)界面如下:當前提供的功能如下:蓋莫音頻API1.5.5 功能更為強勁蓋莫音頻引擎(API) 是使用標準c++寫的音頻播放軟件支持devc++,codeblock,vc6,vc7.1,vc8.,vc9編譯器平臺支持xp,vista,win7 當前支持ogg,mp3,wav,au,aif...  閱讀全文
posted @ 2010-06-24 19:57 ccsdu2009 閱讀(2104) | 評論 (6)編輯 收藏
 
這是剛改動的蓋莫游戲引擎-UI小圖
可以看出
好看了很多

具體的做法就是每一個控件對象都有一個對于的渲染描述符
包含控件邊框和控件背景

當然只有改動控件的描述配置就可以改變控件的外觀了(典型的裝飾器啊)

具體小圖如下:

1.


下一步我并不打算加入更多的控件(控件很多?)
還是先做做UI編輯器吧
提高一下生產率吧

posted @ 2010-06-24 14:51 ccsdu2009 閱讀(1569) | 評論 (4)編輯 收藏
 
本著簡單,易用的設計原則
我給蓋莫引擎加入了一個簡單的插件系統
插件基類如下:
class Plugin : public virtual RefCount 
{
public:
    
virtual ~Plugin(){}
    
virtual PLUGIN_FORMAT GetFormat()const  = 0;
    
virtual engine_string GetMaker()const = 0;
    
virtual engine_string GetDescription()const = 0;
    
virtual void  GetVersion(int &main,int &sub,int &pitch) = 0;
private:    
    
virtual bool Init(void* data) = 0;
    
virtual void Deinit(void* data) = 0;
    friend 
class PluginFactory;
};

可以看出基本的插件方法有獲取插件格式,插件作者,插件描述,插件版本等
下面的是簡單的插件工廠
////////////////////////////////////////////////////////////
/// 定義引擎插件工廠(管理器)
////////////////////////////////////////////////////////////
class GAPI PluginFactory : public Singleton<PluginFactory>
{
public:
    
bool RegisterPlugin(Plugin* plugin);
    
void UnRegisterPlugin(Plugin* plugin);
};
這是一個簡單的單件
它只有2個函數注冊和反注冊插件
使用的時候只要獲取插件指針
然后傳入插件工廠注冊之后即可使用
(注冊的本質就是根據插件類型設置必要的插件上下文數據)

這種插件方法有它的弊端 不過在我看來最大的好處就是簡單咯

下面是簡單的視頻播放插件咯
////////////////////////////////////////////////////////////
/// 定義引擎視頻播放器(全局唯一)
////////////////////////////////////////////////////////////
class VideoPlayer : public Plugin
{
public
    
///////////////////////////////////////////////////////
    
/// 構造,析構視頻播放器
    
///////////////////////////////////////////////////////
    VideoPlayer(){}
    
virtual ~VideoPlayer(){}
       
///////////////////////////////////////////////////////
    
/// 播放指定視頻
    
///////////////////////////////////////////////////////
    virtual bool Play(const engine_string& video) = 0
    
    
///////////////////////////////////////////////////////
    
/// 視頻更新每幀調用 
    
///////////////////////////////////////////////////////    
    virtual bool Update() = 0
    
    
///////////////////////////////////////////////////////
    
/// 停止并卸載視頻
    
///////////////////////////////////////////////////////
    virtual void Stop() = 0
    
    
///////////////////////////////////////////////////////
    
/// 獲取,設置視頻當前音量(0-1)
    
///////////////////////////////////////////////////////    
    virtual float GetVolume()const = 0
    
virtual void  SetVolume(float volume) = 0;
};

posted @ 2010-06-23 14:10 ccsdu2009 閱讀(1570) | 評論 (0)編輯 收藏
 
1.先說下Ui的input部分
在GUI部分輸入輸出通常是需要采用回調函數來處理的
比如:

void G_CALL MousePosCallBack(int x,int y)
{
    UIWidgetManager::Instance().OnMouseMove(x, y);
}
所以我就先給引擎的Input部分加入了幾個輸入輸出回調函數以方便使用

2.然后上幾個UI小圖

當鼠標劃過按鈕時:
.

相關的代碼:
void RenderGUI();

RefPtr
<Device> device;
RefPtr
<Input>  input;
Panel 
*panel = NULL; 
ProgressBar 
*progressbar = NULL;
Button 
*button1 = NULL;
Button 
*button2 = NULL;
Button 
*button3 = NULL;
Button 
*button4 = NULL; 
 
void G_CALL MouseStateCallBack(int mouse,int action)
{
    
int x,y;
    input
->GetMousePosition(x,y); 
    
if(action == KEY_PRESS && mouse == MOUSE_BUTTON_LEFT)
    
{
        UIWidgetManager::Instance().OnLeftButtonDown(x,y);          
    }

    
else if(action == KEY_PRESS && mouse == MOUSE_BUTTON_RIGHT)
    
{
        UIWidgetManager::Instance().OnRightButtonDown(x,y);  
    }

    
else if(action == KEY_RELEASE && mouse == MOUSE_BUTTON_LEFT)
    
{
        UIWidgetManager::Instance().OnLeftButtonUp(x,y); 
    }

    
else if(action == KEY_RELEASE && mouse == MOUSE_BUTTON_RIGHT)
    
{
        UIWidgetManager::Instance().OnRightButtonUp(x,y);    
    }

}


void G_CALL MousePosCallBack(int x,int y)
{
    UIWidgetManager::Instance().OnMouseMove(x, y);
}

 
bool G_CALL IsShiftPressed()
{
    
return false;
}


bool G_CALL IsAltPressed()
{
    
return false;
}


bool G_CALL IsCtrlPressed()
{
    
return false
}
 

void SettingPanel();

int main()
{
    device 
= InitDevice("UI測試1");
    input 
= device->GetInput();
    input
->AttachMouseState(&MouseStateCallBack);
    input
->AttachMousePos(&MousePosCallBack);
    core::TextDesc::SetDefaultFont(engine_string(
"simhei.ttf"));
    
    UIWidgetManager::Instance().Initialize(
&IsShiftPressed,&IsAltPressed,&IsCtrlPressed);
    UIWidgetManager::Instance().AppResized(
640,480);
    SettingPanel();
    BEGIN_LOOP(device)
       glClearColor(
0.1,0.1,0.2,1.0f);
       glClear( GL_COLOR_BUFFER_BIT 
| GL_DEPTH_BUFFER_BIT );   
       RenderGUI();    
    END_LOOP(device)
    
    
return 0;
}


void SettingPanel()
{
    panel 
= new Panel(Rectf(10,75,180,180),NULL);
    
    button1 
= new Button(panel,L"寮€濮嬫父鎴?);
    button2 = new Button(panel,L"淇濆瓨娓告垙");
    button3 
= new Button(panel,L"杞藉叆娓告垙");
    button4 
= new Button(panel,L"閫€鍑烘父鎴?);
    progressbar = new ProgressBar(panel,Rectf(150,90,40,220),UI_DIRECTION_VERTICAL);
    progressbar
->SetPercentage(65.0f);
      
    panel
->AddChildWidget(button1);
    panel
->AddChildWidget(button2);
    panel
->AddChildWidget(button3);
    panel
->AddChildWidget(button4);
 
    panel
->AddChildWidget(progressbar);
    
    button1
->SetSize(Vector2f(120,40));
    button2
->SetSize(Vector2f(120,40));
    button3
->SetSize(Vector2f(120,40));
    button4
->SetSize(Vector2f(120,40));
    button1
->SetPosition(Vector2f(20,90));
    button2
->SetPosition(Vector2f(20,150));
    button3
->SetPosition(Vector2f(20,210));
    button4
->SetPosition(Vector2f(20,270));  
    
    UIWidgetManager::Instance().AddWidget(panel);      
}


void RenderGUI()
{
    
float precent = progressbar->GetPercentage();
    precent 
+= 1.0f;
    
if(precent >= 100.0f)
        precent 
= 0.0f;
    progressbar
->SetPercentage(precent);    
    UIWidgetManager::Instance().Update();      
}




對于UI部分基本上所有的常見器件都需要一個一個設計
一次性做完太難了
而且設計的不好就需要重新設計
所以我決定先設計以下幾個器件 Widget,Panel,StaticText,SliderBar
其余的等把基本框架做成熟了再做吧
posted @ 2010-06-19 17:57 ccsdu2009 閱讀(1506) | 評論 (1)編輯 收藏
 
當前引擎基本框架功能都已經完備了
接下來的開發將不再強調功能上的大而全
想強調精致,易用性

將優先考慮虛擬仿真上的易用喔


posted @ 2010-06-16 17:27 ccsdu2009 閱讀(287) | 評論 (0)編輯 收藏
 
當前在做引擎的GUI部分
設計的的首要原則是先做出來,如果有什么問題以后再改

當然GUI消息事件是這樣設計的
事件和聽者是2個模板
///////////////////////////////////////////////////////////
/// 定義引擎事件基類模板
///////////////////////////////////////////////////////////
template<class EventType = int>
class Event : NonCopyable
{
public:
    
///////////////////////////////////////////////////////
    
/// 事件基類構造函數
    
///////////////////////////////////////////////////////
    Event(const EventType& type):type_(type){}    
    
    
////////////////////////////////////////////////////////
    
/// 事件基類析構函數
    
////////////////////////////////////////////////////////
    virtual ~Event(){}
    
    
////////////////////////////////////////////////////////
    
/// 獲取事件類型
    
////////////////////////////////////////////////////////
    EventType GetEventType()const{return type_;}
private:
    
////////////////////////////////////////////////////////
    
/// 數據成員變量
    
////////////////////////////////////////////////////////
    EventType type_;    
};

////////////////////////////////////////////////////////////
/// 定義事件聽者基類 
////////////////////////////////////////////////////////////
template<class Event,class Object>
class EventListener
{    
public
    
    
////////////////////////////////////////////////////////
    
/// 事件聽者虛析構函數
    
////////////////////////////////////////////////////////
    virtual ~EventListener(){}
    
    
////////////////////////////////////////////////////////
    
/// 消息派送
    
////////////////////////////////////////////////////////
    virtual bool Dispatch(const Event& message,Object* object= 0
};

可以看出這并不屬于GUI部分
在GUI中有
typedef Event<UI_EVENT> UIEvent; 
typedef EventListener
<UIEvent,Widget> UIEventListener; 

每一個控件可能都需要處理消息
所以控件有一個函數
    ////////////////////////////////////////////////////////
    
/// 消息處理
    
////////////////////////////////////////////////////////
    virtual bool Process(const UIEvent& event);


來響應消息事件


基本的GUI事件有2類 一個是鼠標事件 一個是按鍵事件
所有有2個對象
class KeyEvent
class MouseEvent
對于鼠標還有幾個派生的對象比如雙擊事件等

控件需要處理UI事件那么在GUI的某個部分需要生成UI事件
當然事件的生產在UIWidgetManager中
啟用管理器的事件載入Input指針參數
然后不斷檢查鼠標和按鍵狀態生成相關事件然后傳遞給相關控件

我認為GUI設計有點難度
但是相對來說GUI編輯器應該更難
小注:理想的編輯器應該是這樣
通過編輯器生成控件配置文件(比如xml)
使用的時候只需要調用配置文件動態生成對等的控件,當然包含事件處理嘍

最后上一個半成品的圖圖

(cppblog似乎對firefox兼容不好?)

下一篇說控件Surface和Border部分
posted @ 2010-06-08 18:48 ccsdu2009 閱讀(1802) | 評論 (9)編輯 收藏
 
也許你在使用c++的時候會出現問題:has no member named '...'
意思就是類沒有成員變量XXA
實際上類是具有成員變量XX的
問題的原因在于工程中定義的變量和系統頭文件定義的宏沖突所致
解決方案有2個
1.
#ifdef XXX
#undef XXX
#endif
2.包含對象定義所在頭文件于調用系統頭文件之前.

這里的XXX在具體情況中可能為GetObject,LoadImage等等
posted @ 2010-06-08 16:55 ccsdu2009 閱讀(25274) | 評論 (2)編輯 收藏
 
GUI系統 布局管理器
1.布局管理器存在的理由:可以避免手動或者逐個調整控件位置
2.布局管理器的基本功能:調整同一容器下同一層次下各個控件的位置
3.布局管理器的基本接口:
       A.控件加入
       B.控件移除
       C.控件排列
4.布局管理器和控件的關系
       A.一個布局管理器負責1個或則多個控件的排列
       B.具有控件容器語義的控件(例如面板)持有一個布局管理器
5.合適調用布局管理之布局?
      A.持有的控件尺寸變化,移動或者用戶顯示的調用之時
6.可能的布局管理器類型
      A>流式,中央布局,盒子,復雜類型,...

7.簡單的布局管理器接口
///////////////////////////////////////////////////////////
/// UI布局信息基類
///////////////////////////////////////////////////////////
class UILayoutInfo
{
public:
    UILayoutInfo(){}
    
virtual ~UILayoutInfo(){}
public:
    
virtual engine_string GetLayouttType()const = 0;
};

///////////////////////////////////////////////////////////
/// 定義UI布局管理器基類
///////////////////////////////////////////////////////////
class UILayouter
{
public:
    UILayouter(){}
    
virtual ~UILayouter(){}
public:
    
////////////////////////////////////////////////////////
    
/// 增加一個窗體到布局管理區
    
////////////////////////////////////////////////////////
    virtual UILayouter& AddWidget(Widget* widget) = 0;
    
virtual UILayouter& AddWidget(Widget* widget,const UILayoutInfo&)
    {
        AddWidget(widget);
        
return *this;
    }

    
////////////////////////////////////////////////////////
    
/// 控件移除和重新排列
    
////////////////////////////////////////////////////////    
    virtual UILayouter& RemoveWidget(Widget* widget) = 0;
    
virtual UILayouter& Arrange(Widget* parent) = 0;
};

所有類型的布局管理器都需要繼承于UILayouter
其成員函數Arrange負責調配parent控件下的所有控件單元.

需要說明的是當容器控件加入一個新的控件的時候,其布局管理器就會調用AddWidget負責把新的控件加入布局管理器對象

舉一個UI面板的例子:
////////////////////////////////////////////////////////////
/// UI面板(容器)
////////////////////////////////////////////////////////////
class G_DLL_API Panel : public Widget
{
public:
    Panel(
const Rectf& rect,Widget* parent,const engine_string& text = "Panel");
    
virtual ~Panel();
public:
    
////////////////////////////////////////////////////////
    
/// 加入一個子窗體
    
////////////////////////////////////////////////////////
    Panel& AddChildWidget(Widget* widget)
    {
        windows_.push_back(widget);
        layouter_
->AddWidget(widget);
        
return *this;
    }
    Panel
& AddChildWidget(Widget* widget,const UILayoutInfo& info)
    {
        windows_.push_back(widget);
        layouter_
->AddWidget(widget,info);
        
return *this;
    }

    
////////////////////////////////////////////////////////
    
/// 控件移除
    
////////////////////////////////////////////////////////
    Panel& RemoveChildWidget(Widget* widget)
    {
        windows_.remove(widget);
        layouter_
->RemoveWidget(widget);
        
return *this;
    }

    
////////////////////////////////////////////////////////
    
/// 控件排列
    
////////////////////////////////////////////////////////
    Panel& ArrangeChildren()
    {
        layouter_
->Arrange(this);
        
return *this;
    }

    
////////////////////////////////////////////////////////
    
/// 加載布局管理器
    
////////////////////////////////////////////////////////
    Panel& SetLayouter(UILayouter* layouter);
在我設計的時候主要參考了2個GUI庫,glooey,opengl gui lib
目前商業上使用的開源CEGUI過于復雜 比很多游戲引擎都大 讓人難以容忍
posted @ 2010-06-02 17:14 ccsdu2009 閱讀(2071) | 評論 (4)編輯 收藏
 

引擎之GUI將會是當前引擎開發的當務之急(做完這個我想使用引擎做游戲)
那么GUI屆時將提供那里功能和特點呢?
如下:
1.可以使用腳本(當前為xml配置GUI屬性)
2.統一的GUI畫面風格
3.配備專有的GUI編輯器
4.盡可能的和引擎保持獨立以便讓第三方使用和學習
5.必要的控件裝飾器和布局管理器設計以增強UI設計的便利
6.使用信號插槽處理消息(似乎都是這樣做的)
7.應該最少支持vc9,devc++2個編譯器
7.做完之后的風格表現應該不遜于下圖:

使用xml配置之后變成了;

另外一組圖面:


2.

GUI庫網上很多
但是我覺得還是自己弄一個比較好
附注L:去年我設計了半個GUI庫后面放棄了問題太多嘍
posted @ 2010-06-01 14:36 ccsdu2009 閱讀(1679) | 評論 (9)編輯 收藏
僅列出標題
共38頁: First 25 26 27 28 29 30 31 32 33 Last 
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            影音先锋在线一区| 午夜精品福利在线| 亚洲精品小视频在线观看| 亚洲一区二区三区四区五区午夜| 欧美成人精品在线观看| 欧美一区二区三区在| 国产精品盗摄久久久| 一区二区三区日韩欧美精品| 牛人盗摄一区二区三区视频| 久久成人精品视频| 国产亚洲一区二区三区| 久久aⅴ国产紧身牛仔裤| 中国女人久久久| 欧美午夜不卡视频| 一本色道久久综合亚洲精品小说 | 亚洲日本中文字幕区| 亚洲影视在线| 国产精品视频专区| 性做久久久久久| 午夜影院日韩| 亚洲欧美综合v| 国产精品s色| 午夜精品福利一区二区三区av | 欧美诱惑福利视频| 欧美一区二区高清在线观看| 国产精品日韩欧美一区| 香蕉久久夜色| 欧美一级大片在线免费观看| 国内久久视频| 欧美r片在线| 欧美日韩第一区日日骚| 亚洲视频精选在线| 亚洲欧美制服另类日韩| 激情久久久久久久| 亚洲国产精品一区制服丝袜| 欧美日韩123| 午夜精品视频在线观看| 午夜一级久久| 亚洲欧洲在线一区| 亚洲人成在线影院| 国产精品免费在线| 久久嫩草精品久久久精品一| 欧美激情一区二区三区全黄| 亚洲一区二区免费看| 欧美一二三区精品| 亚洲韩国精品一区| 99re6热只有精品免费观看| 国产精品一区二区久久| 久久香蕉精品| 欧美精品在欧美一区二区少妇| 亚洲在线一区二区三区| 久久九九精品| 亚洲免费在线电影| 久久人91精品久久久久久不卡| 一本久道久久综合中文字幕| 亚洲欧美日本视频在线观看| 1000部国产精品成人观看| 在线视频中文亚洲| 精品999日本| 亚洲四色影视在线观看| 黄色一区三区| 中文在线资源观看网站视频免费不卡| 国产日韩亚洲欧美| 亚洲高清av| 韩国欧美国产1区| 一区二区不卡在线视频 午夜欧美不卡在 | 午夜欧美精品| 99在线精品视频在线观看| 久久精品卡一| 欧美一区二区三区婷婷月色| 欧美精品粉嫩高潮一区二区| 久久亚洲二区| 国产精品午夜春色av| 亚洲黄色性网站| 西西人体一区二区| 亚洲一区在线观看视频| 欧美成人精品在线播放| 久久人人精品| 国产视频一区免费看| 亚洲午夜电影网| 一区二区三区日韩在线观看| 美女999久久久精品视频| 久久久久国产免费免费| 国产欧美日韩在线视频| 一区二区三区日韩精品| 国产精品99久久久久久久久 | 在线播放豆国产99亚洲| 性做久久久久久久久| 久久国产天堂福利天堂| 国产欧美三级| 亚洲欧美日本国产有色| 欧美伊人精品成人久久综合97| 欧美精品一区二区三区在线看午夜 | 亚洲一区二区黄| 亚洲一区二区3| 欧美午夜视频| 亚洲一区在线观看视频 | 中国女人久久久| 欧美伦理91i| 亚洲激情专区| 亚洲最新视频在线播放| 欧美激情一区二区三区不卡| 亚洲黑丝在线| 亚洲色图制服丝袜| 欧美网站大全在线观看| 中文有码久久| 久久久国产精品亚洲一区 | 牛牛影视久久网| 亚洲国产日本| 欧美另类一区二区三区| 亚洲午夜电影网| 欧美亚洲免费电影| 一区精品在线播放| 久久免费少妇高潮久久精品99| 欧美福利在线| 亚洲精品男同| 国产精品白丝jk黑袜喷水| 亚洲综合精品| 乱中年女人伦av一区二区| 亚洲欧洲日韩女同| 欧美日韩一区二区国产| 午夜精品视频在线| 免费看精品久久片| 在线一区日本视频| 国产一区亚洲一区| 欧美激情91| 亚洲一区区二区| 另类图片综合电影| 亚洲一区三区视频在线观看 | 一区二区高清在线观看| 久久精品国产v日韩v亚洲| 欧美大片在线观看| 亚洲综合电影一区二区三区| 国产一区二区三区在线观看免费| 麻豆精品一区二区av白丝在线| 一区二区三区国产在线| 久久久噜噜噜久噜久久| 一本综合久久| 伊大人香蕉综合8在线视| 欧美国产日韩一二三区| 欧美一区二区三区日韩| 亚洲日韩成人| 老司机免费视频久久| 亚洲免费一在线| 亚洲人成在线观看一区二区| 国产欧美一区二区精品忘忧草| 免费中文日韩| 香蕉成人久久| 99精品国产在热久久| 欧美韩日视频| 久久久久久婷| 午夜日韩在线| 一区二区三区四区精品| 在线色欧美三级视频| 国产亚洲一区二区在线观看| 欧美日韩一区在线视频| 欧美护士18xxxxhd| 另类天堂av| 欧美专区日韩专区| 亚洲伊人观看| 亚洲私拍自拍| 亚洲最黄网站| 亚洲精选91| 亚洲高清激情| 欧美激情一区| 亚洲福利视频网| 亚洲第一主播视频| 美女主播视频一区| 能在线观看的日韩av| 玖玖玖国产精品| 久久人人九九| 久久免费视频这里只有精品| 午夜影院日韩| 亚洲欧美一区在线| 亚洲欧美色婷婷| 亚洲欧美日韩精品| 亚洲欧美精品suv| 亚洲永久免费av| 性8sex亚洲区入口| 性欧美办公室18xxxxhd| 午夜在线不卡| 久久激情网站| 久久夜色精品亚洲噜噜国产mv | 久久久青草青青国产亚洲免观| 欧美在线一二三| 久久亚洲综合色一区二区三区| 欧美亚洲在线播放| 久久久久.com| 欧美风情在线观看| 欧美日韩成人在线播放| 国产精品99免费看 | 久久精品一本久久99精品| 欧美在线资源| 浪潮色综合久久天堂| 欧美激情精品久久久久久变态| 亚洲国产精品毛片| 亚洲视频免费在线观看| 欧美在线观看视频在线| 男人的天堂成人在线| 国产精品草草|