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

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
設計引擎的時候一直在考慮什么時候才可以支持多渲染器,比如d3d9比如軟件渲染器
為了盡可能的讓opengl的API盡可能的與引擎代碼分離
我加上了一個初步封裝了opengl API的類VideoDriver
當前只是簡單的封裝了很多opengl的函數
代碼如下:

  1 public:
  2     ////////////////////////////////////////////////////////
  3     /// 構造,析構引擎視頻驅動(渲染器)
  4     ////////////////////////////////////////////////////////    
  5     VideoDriver();
  6     virtual ~VideoDriver();
  7 public
  8     ////////////////////////////////////////////////////////
  9     /// 獲取當前視頻驅動器類型
 10     ////////////////////////////////////////////////////////      
 11     virtual ENGINE_VIDEODERIVER  GetVideoDriverType()const
 12     {
 13         return ENGINE_VIDEODERIVER_NULL;
 14     }
 15     
 16     ////////////////////////////////////////////////////////
 17     /// 設置,獲取是否啟用豎直同步
 18     ////////////////////////////////////////////////////////         
 19     virtual void UseVerticalSync(bool enabled) = 0
 20     virtual bool IsUseVerticalSync()const = 0
 21     
 22     ////////////////////////////////////////////////////////////
 23     /// 獲取當前幀速  
 24     ////////////////////////////////////////////////////////////
 25     virtual float GetFPS() const = 0;     
 26     
 27     /////////////////////////////////////////////////////////
 28     /// 獲取視頻模式列表,獲取桌面視頻模式
 29     /////////////////////////////////////////////////////////    
 30     virtual int GetVideoMode(VideoMode* mode, int number) = 0;
 31     virtual VideoMode GetDesktopVideoMode()const = 0;        
 32     
 33     ////////////////////////////////////////////////////////
 34     /// 設置,獲取視口
 35     ////////////////////////////////////////////////////////     
 36     virtual void SetViewPort(const Recti &rect) = 0
 37     virtual Recti GetViewPort()const = 0
 38     
 39     //////////////////////////////////////////////////////////
 40     /// 設置投影模式下的視景體 
 41     //////////////////////////////////////////////////////////     
 42     virtual void SetPerspective(float fov, float aspect, float near, float far) = 0;
 43     
 44     //////////////////////////////////////////////////////////
 45     /// 啟用,禁止和查詢剔除功能 
 46     //////////////////////////////////////////////////////////         
 47     virtual void EnableCulling() = 0;
 48     virtual void DisableCulling() = 0;
 49     virtual bool IsEnabledCulling() = 0;
 50     virtual void SetCulling(ENGEIN_CULLING_TYPE type) = 0;
 51     
 52     
 53     //////////////////////////////////////////////////////////
 54     /// 平移,旋轉,縮放
 55     //////////////////////////////////////////////////////////     
 56     virtual void Translate(float x, float y, float z) = 0;
 57     virtual void Translate(const Vector3f &offset) = 0;
 58     virtual void Rotate(float angle, float x, float y,float z) = 0;
 59     virtual void Scale(float x, float y, float z) = 0;
 60     virtual void Scale(const Vector3f& scale) = 0;    
 61   
 62     //////////////////////////////////////////////////////////
 63     /// 設置飛行模式參數 
 64     //////////////////////////////////////////////////////////     
 65     virtual void SetPilotView(float x,float y,float z,float roll,float pitch,float heading) = 0
 66         
 67     ////////////////////////////////////////////////////////
 68     /// 設置,獲取渲染器矩陣操作
 69     ////////////////////////////////////////////////////////    
 70     virtual void  SetTransform(const Matrix4f& mat, ENGINE_MATRIX_TYPE type) = 0;
 71     virtual const Matrix4f& GetTransform(ENGINE_MATRIX_TYPE type)const = 0
 72 
 73     ////////////////////////////////////////////////////////
 74     /// 矩陣保存 
 75     ////////////////////////////////////////////////////////        
 76     virtual void PushMatrix() = 0
 77     virtual void PopMatrix() = 0;
 78     
 79     ////////////////////////////////////////////////////////
 80     /// 啟用2d渲染 
 81     ////////////////////////////////////////////////////////     
 82     virtual void Ortho2D() = 0;     
 83     
 84     //////////////////////////////////////////////////////////
 85     /// 設置當前渲染模式
 86     //////////////////////////////////////////////////////////    
 87     virtual void SetRenderMode(RENDER_MODE mode) = 0;
 88 
 89     //////////////////////////////////////////////////////////
 90     /// 設置,獲取清屏色
 91     //////////////////////////////////////////////////////////         
 92     virtual void  SetClearColor(const Color& color) = 0;
 93     virtual Color GetClearColor()const = 0
 94 
 95     ////////////////////////////////////////////////////////////
 96     /// 設置要清理的緩存類型(見:ENGINE_CLEAR_ACCUM,ENGINE_CLEAR_INDEX等) 
 97     ////////////////////////////////////////////////////////////      
 98     virtual void SetClearBuffer(long buffer_mask) = 0;
 99     
100     //////////////////////////////////////////////////////////
101     /// 渲染色設置
102     //////////////////////////////////////////////////////////         
103     virtual void SetRenderColor(const Color& color) = 0
104     void SetColor(const Color& color){SetRenderColor(color);}
105     
106     //////////////////////////////////////////////////////////
107     /// 啟用,禁止混合
108     //////////////////////////////////////////////////////////         
109     virtual void SetBlending(bool blend) = 0;  
110     virtual bool GetBlending()const = 0
111     
112     //////////////////////////////////////////////////////////
113     /// 線寬
114     //////////////////////////////////////////////////////////         
115     virtual void  SetLineWidth(float width) = 0;
116     virtual float GetMaxLineWidth()const = 0
117     virtual float GetLineWidth()const = 0
118     
119     //////////////////////////////////////////////////////////
120     /// 點繪制
121     //////////////////////////////////////////////////////////     
122     virtual void DrawPoint(const Vector3f &point) = 0
123     virtual void DrawPoint(float x, float y, float z) = 0;
124 
125     //////////////////////////////////////////////////////////
126     /// 線繪制
127     //////////////////////////////////////////////////////////     
128     virtual void DrawLine(const Point &from, const Point &to) = 0
129     virtual void DrawLine(const Vector2f &p1, const Vector2f &p2)  =0;        
130     virtual void DrawLine(float x1, float y1, float x2, float y2) = 0;         
131     virtual void DrawLine(const Vector3f &p1, const Vector3f &p2) = 0
132     
133     //////////////////////////////////////////////////////////
134     /// 矩形繪制 
135     //////////////////////////////////////////////////////////         
136     virtual void DrawRect(float x, float y, float width, float height) = 0
137     virtual void DrawRect(const Rectf& rect) = 0
138     virtual void DrawRect(const Recti& rect) = 0
139     virtual void FillRect(float x, float y, float width, float height)= 0
140     virtual void FillRect(const Rectf& rect) = 0
141     virtual void FillRect(const Recti& rect) = 0;
142    
143     //////////////////////////////////////////////////////////
144     /// 格子繪制 
145     //////////////////////////////////////////////////////////    
146     virtual void DrawGrid(const Point &pos, const Point &unit, const Point &num) = 0;  
147     virtual void DrawGrid(const Point& pos, const int &row, const int &col, const Point &num) = 0;      
148     
149     //////////////////////////////////////////////////////////
150     /// 三角形繪制
151     //////////////////////////////////////////////////////////      
152     virtual void DrawTriangle(const Trianglef& tri, bool filled) = 0
153     virtual void DrawTriangle(const Vector2f& p1,const Vector2f& p2,const Vector2f& p3,bool filled) = 0;  
154    
155     //////////////////////////////////////////////////////////
156     /// 園繪制
157     //////////////////////////////////////////////////////////    
158     virtual void DrawCircle(const Vector2f& center, float radius, float segments) = 0
159     virtual void DrawCircleSegment(const Vector2f& center,float radius,float t1,float t2,float segments,bool filled) = 0
160 
161     ////////////////////////////////////////////////////////////
162     /// 繪制長方體(參數紋理id,長方體位置,變換矩陣,大小)
163     //////////////////////////////////////////////////////////// 
164     virtual void RenderCube(int texture,const float pos[3],const float mat[12],const float sides[3]) = 0;     
165 public:    
166     ////////////////////////////////////////////////////////////
167     /// 設備預(后)更新 
168     ////////////////////////////////////////////////////////////
169     virtual void PreUpdate() = 0;
170     virtual void PostUpdate() = 0;
171 private:     
172     
173     DECLARE_OBJECT(VideoDriver)
這是初步設計的結果
以后估計會有software video driver
當然其他相關的函數會陸續加入的

posted on 2010-04-01 21:05 ccsdu2009 閱讀(338) 評論(3)  編輯 收藏 引用 所屬分類: Game引擎
Comments
  • # re: 蓋莫游戲引擎2.1.1之渲染器設計
    Davy.xu
    Posted @ 2010-04-01 22:56
    不支持RenderTarget?
    Shader怎么辦?  回復  更多評論   
  • # re: 蓋莫游戲引擎2.1.1之渲染器設計
    ccsdu2009
    Posted @ 2010-04-02 08:33
    先簡后難啊  回復  更多評論   
  • # re: 蓋莫游戲引擎2.1.1之渲染器設計
    陳梓瀚(vczh)
    Posted @ 2010-04-02 11:22
    我認為最嚴重的問題是不同的渲染API的最有效工作方法是不一樣的,你得連這些都抽象掉。不能僅僅抽象功能。

    這樣才能給機會給那些為你的引擎開發新渲染API支持的時候,不會因為你封裝的問題導致他們喪失了利用該API的最有效率的慣用法的權利。

    所以一般來說,你只需要在場景里面實現BSP樹,然后讓model.Draw變虛就好了,全過程讓渲染插件自己處理。  回復  更多評論   
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产亚洲精品一区二555| 亚洲特色特黄| 亚洲欧美日韩在线观看a三区| 亚洲国内自拍| 91久久国产综合久久91精品网站| 在线观看欧美日韩| 亚洲高清在线| 中文在线不卡| 欧美一区二区视频97| 久久久久久一区| 欧美成人一区二区三区片免费| 麻豆精品网站| 欧美激情一区在线| 亚洲视频在线观看一区| 久久不射电影网| 欧美国产精品人人做人人爱| 欧美日韩国产精品一区| 国产精品日韩在线播放| 亚洲电影免费| 亚洲无限av看| 久久婷婷久久一区二区三区| 亚洲国产综合在线看不卡| 亚洲免费不卡| 欧美在线网站| 免费看黄裸体一级大秀欧美| 欧美视频你懂的| 国产一区二区在线观看免费播放 | 久久久久久久综合狠狠综合| 免费在线观看日韩欧美| 国产精品亚洲不卡a| 亚洲国产成人91精品| 欧美亚洲在线播放| 亚洲精品乱码久久久久久日本蜜臀| 亚洲欧美视频一区二区三区| 欧美另类一区二区三区| 亚洲国产精品成人综合| 久久不见久久见免费视频1| 亚洲人成精品久久久久| 久久人人爽爽爽人久久久| 国产精品毛片| 亚洲在线网站| 亚洲精品中文字幕有码专区| 国产精品地址| 欧美色精品在线视频| 亚洲黄色高清| 久久亚洲图片| 午夜精品区一区二区三| 欧美三级电影精品| 99精品视频免费| 欧美激情亚洲一区| 久久久久91| 国产视频一区免费看| 午夜一区二区三区不卡视频| 一区二区三区.www| 国产精品成人在线| 亚洲欧美一区二区精品久久久| 亚洲日本视频| 欧美精品久久99| 日韩亚洲国产精品| 亚洲人成啪啪网站| 欧美精品大片| 一区二区三区福利| 亚洲另类在线一区| 欧美视频一区二区三区| 亚洲午夜精品国产| 中文精品在线| 国产精品久久久久久久9999| 国产精品99久久久久久宅男| 在线中文字幕一区| 国产精品女主播| 欧美一区二区三区四区夜夜大片 | 久久精品最新地址| 影音先锋一区| 欧美激情精品久久久久久黑人 | 国产视频久久网| 久久午夜电影网| 美国十次成人| 中文亚洲欧美| 亚洲欧美日韩国产| 一区二区三区中文在线观看 | 狠狠狠色丁香婷婷综合激情| 久久久欧美精品| 免费在线亚洲| 亚洲午夜一二三区视频| 午夜视频一区在线观看| 精品粉嫩aⅴ一区二区三区四区| 欧美jjzz| 欧美人体xx| 欧美在线视频在线播放完整版免费观看| 欧美在线观看网站| 日韩网站在线看片你懂的| 一区二区三区 在线观看视频| 国产亚洲成av人片在线观看桃| 欧美成人a视频| 在线视频一区二区| 久久综合电影一区| 亚洲精品国产欧美| 中文亚洲免费| 一区二区在线视频观看| 日韩午夜剧场| 国产在线精品成人一区二区三区| 欧美激情亚洲另类| 国产欧美日韩亚洲一区二区三区 | 亚洲精品国产无天堂网2021| 亚洲视频高清| 亚洲人成绝费网站色www| 亚洲淫片在线视频| 亚洲人成在线播放| 欧美专区在线| 欧美一区二区三区四区在线| 欧美电影专区| 久久久久久久久一区二区| 欧美日韩三区| 欧美激情第8页| 国产日韩欧美精品一区| 9l国产精品久久久久麻豆| 狠狠色伊人亚洲综合网站色| 亚洲视频免费在线观看| 99精品热6080yy久久| 蜜臀91精品一区二区三区| 久久久久国产精品午夜一区| 国产精品福利在线观看网址| 亚洲精品网址在线观看| 亚洲国产午夜| 久久久女女女女999久久| 久久久久久欧美| 国产一区二区三区久久悠悠色av| 亚洲男人av电影| 午夜免费在线观看精品视频| 欧美吻胸吃奶大尺度电影| 亚洲精品国产精品乱码不99按摩| 亚洲国产精品久久人人爱蜜臀| 久久久久五月天| 欧美大片国产精品| 影音先锋中文字幕一区| 久久综合九色综合欧美狠狠| 免播放器亚洲一区| 亚洲电影免费在线| 美腿丝袜亚洲色图| 亚洲欧洲午夜| 亚洲一级在线观看| 国产精品入口福利| 亚洲欧美精品在线观看| 久久高清免费观看| 精品99一区二区三区| 看欧美日韩国产| 最新日韩在线| 午夜精品久久久99热福利| 国产日韩欧美三区| 久久一区激情| 亚洲精选国产| 午夜精品国产| 国产综合色在线| 狂野欧美一区| 一区二区欧美在线| 久久只精品国产| 亚洲人成网站999久久久综合| 欧美精品亚洲精品| 亚洲女性喷水在线观看一区| 久久另类ts人妖一区二区| 伊人春色精品| 久久综合九色综合久99| 国产精品久久久久久久久久妞妞| 亚洲女人天堂av| 欧美国产日本韩| 亚洲一区美女视频在线观看免费| 国产麻豆视频精品| 你懂的视频欧美| 亚洲午夜精品一区二区| 久久天天躁夜夜躁狠狠躁2022| 亚洲人久久久| 国产乱人伦精品一区二区| 久久久亚洲一区| 亚洲视频香蕉人妖| 免费在线亚洲| 亚洲欧美日韩在线| 亚洲激情社区| 国产午夜亚洲精品理论片色戒| 欧美96在线丨欧| 午夜精品久久久久久久久久久| 欧美激情在线狂野欧美精品| 亚洲综合首页| 日韩视频永久免费| 黄色日韩精品| 国产精品一区二区三区乱码| 欧美极品在线播放| 久久深夜福利| 亚洲欧美综合网| 一本久久精品一区二区| 欧美成人免费小视频| 午夜精彩国产免费不卡不顿大片| 亚洲日本激情| 尤物在线观看一区| 国产视频精品网| 国产精品区一区二区三| 欧美日韩视频在线一区二区观看视频| 久久久免费精品| 久久久久成人网| 久久精品视频免费播放| 香蕉国产精品偷在线观看不卡|