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

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>
            亚洲国产精品成人| 亚洲主播在线| 日韩一区二区电影网| 欧美呦呦网站| 国产精品午夜视频| 亚洲影音一区| 一区二区日韩| 欧美日韩亚洲综合一区| 在线观看亚洲专区| 欧美mv日韩mv国产网站| 久久精品日产第一区二区| 国产亚洲精品美女| 久久久噜噜噜久久中文字幕色伊伊| 亚洲视频免费观看| 国产精品免费网站| 久久国产视频网| 性欧美办公室18xxxxhd| 国产一级久久| 久久综合色综合88| 另类春色校园亚洲| 亚洲精品视频二区| 亚洲精品中文字| 欧美日韩免费在线视频| 亚洲一区成人| 午夜精品久久久久久久| 国内精品视频在线播放| 欧美11—12娇小xxxx| 欧美大片一区二区| 亚洲私人影院在线观看| 亚洲自拍另类| 永久555www成人免费| 亚洲国产成人精品女人久久久| 欧美激情亚洲精品| 亚洲欧美视频在线观看| 久久久精品视频成人| 亚洲国产精品久久久久婷婷884| 亚洲激情图片小说视频| 国产精品高潮呻吟久久| 久久蜜桃av一区精品变态类天堂| 久久综合九色综合欧美狠狠| 99精品欧美一区二区蜜桃免费| 亚洲一级特黄| 亚洲国产精品一区| 一区二区高清视频| 伊人久久大香线蕉av超碰演员| 91久久精品www人人做人人爽 | 欧美成人三级在线| 亚洲午夜精品久久| 久久爱另类一区二区小说| 亚洲全部视频| 午夜精品一区二区三区四区| 激情成人综合网| 一区二区三区日韩在线观看| 国产一区二区三区自拍| 亚洲日本免费| 狠狠综合久久av一区二区小说| 亚洲人成久久| 在线观看欧美黄色| 亚洲线精品一区二区三区八戒| 在线观看一区二区精品视频| 亚洲素人在线| 亚洲精品午夜| 久久久久久亚洲精品中文字幕| 一区二区三区四区精品| 久久久久久香蕉网| 欧美一区二区在线看| 欧美激情第9页| 久久综合狠狠综合久久综合88| 欧美日一区二区三区在线观看国产免 | 国产精品播放| 欧美承认网站| 国产亚洲成精品久久| 亚洲作爱视频| 一本到高清视频免费精品| 久久亚洲视频| 久久综合图片| 国产综合香蕉五月婷在线| 亚洲一级二级在线| 亚洲影视在线播放| 欧美日韩在线视频一区| 亚洲区一区二区三区| 亚洲精品国产拍免费91在线| 久久久久女教师免费一区| 欧美一区二区网站| 国产精品夜色7777狼人| 一区二区三区四区蜜桃| 中文日韩在线视频| 欧美日韩一区二区在线| 亚洲精品激情| 亚洲天堂av在线免费| 欧美日韩国产综合久久| 亚洲精品一区二区三区av| 日韩视频在线观看国产| 欧美精品在线一区二区三区| 亚洲激情视频在线| 亚洲美女电影在线| 欧美区一区二| 日韩网站在线| 亚洲欧美一级二级三级| 国产精品自拍在线| 欧美一区二区福利在线| 久久婷婷麻豆| 在线精品视频一区二区三四| 玖玖玖免费嫩草在线影院一区| 欧美成人小视频| 亚洲人成精品久久久久| 欧美日韩网址| 香蕉成人久久| 欧美18av| 在线一区日本视频| 国产精品免费观看视频| 欧美专区日韩专区| 亚洲成人在线网| 亚洲五月六月| 国产一区二区福利| 蜜桃av一区二区三区| 亚洲激情欧美| 欧美一级片久久久久久久| 黄页网站一区| 欧美精品一区二区三区在线看午夜| 日韩一区二区免费高清| 欧美中文字幕第一页| 亚洲国产日韩在线一区模特| 欧美日韩免费观看一区三区| 午夜精品美女久久久久av福利| 欧美第一黄色网| 亚洲欧美日韩精品在线| 在线成人av网站| 欧美色视频在线| 久久久久久欧美| 一本久道久久综合中文字幕| 久久久999精品免费| 日韩午夜电影| 国产一区二区精品久久91| 蜜桃av噜噜一区| 亚洲一区高清| 亚洲国产一区二区精品专区| 午夜激情综合网| 亚洲人妖在线| 国产一区二区精品久久91| 欧美巨乳在线| 久久久亚洲综合| 中文久久精品| 亚洲国产婷婷香蕉久久久久久99| 欧美在线观看一区| 99热在线精品观看| 尤物在线精品| 国产欧美欧洲在线观看| 欧美日韩免费视频| 免费精品视频| 欧美一级一区| 中国亚洲黄色| 亚洲国内高清视频| 老司机一区二区| 欧美在线观看网址综合| 亚洲无线视频| 一本色道久久综合亚洲二区三区 | 午夜精品福利一区二区蜜股av| 亚洲国产精品久久| 韩日成人在线| 国产精品一区久久久久| 欧美日韩成人在线播放| 免费欧美电影| 久久这里有精品视频| 欧美与欧洲交xxxx免费观看 | 黑人巨大精品欧美一区二区小视频| 欧美日韩专区在线| 欧美日韩国产在线播放| 欧美国产综合视频| 欧美国产日韩亚洲一区| 欧美3dxxxxhd| 欧美成人黄色小视频| 久久综合九九| 欧美**人妖| 麻豆精品国产91久久久久久| 久久久人成影片一区二区三区观看 | 日韩视频―中文字幕| 91久久国产综合久久91精品网站| 欧美激情精品久久久| 免费成人黄色片| 免费在线欧美黄色| 欧美电影在线观看完整版| 欧美/亚洲一区| 亚洲高清在线观看| 亚洲高清免费视频| 亚洲精品乱码久久久久久黑人| 亚洲高清在线精品| 亚洲欧洲精品一区| 中文久久精品| 欧美一区二区三区的| 久久av一区| 男人天堂欧美日韩| 欧美精品v日韩精品v韩国精品v| 欧美精品一区二区在线观看| 欧美日韩国产高清视频| 国产精品美女xx| 加勒比av一区二区| 亚洲精品久久| 亚洲欧美国产不卡| 久久久久天天天天|