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

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>
            亚洲午夜激情网页| 另类成人小视频在线| 99精品久久| 久久乐国产精品| 欧美日韩二区三区| 亚洲激情另类| 你懂的国产精品| 久久精品中文字幕一区二区三区 | 久久精品国产第一区二区三区最新章节| 老**午夜毛片一区二区三区| 国产一区二区剧情av在线| 亚洲午夜久久久久久久久电影院| 亚洲成人在线视频播放 | 日韩午夜三级在线| 亚洲综合不卡| 夜夜嗨av一区二区三区四季av | 欧美承认网站| 亚洲精品字幕| 亚洲欧洲日韩综合二区| 欧美精品日日鲁夜夜添| 欧美激情第1页| 日韩午夜三级在线| 一本色道久久综合亚洲精品高清| 欧美日韩亚洲综合| 亚洲欧美日韩人成在线播放| 亚洲男女自偷自拍| 国产一区二区三区日韩欧美| 亚洲国产精品国自产拍av秋霞| 久久精品国产99精品国产亚洲性色 | 亚洲欧美日韩久久精品| 亚洲黄色av| 欧美日韩在线不卡| 性色av一区二区三区| 欧美一区二区三区久久精品茉莉花 | 日韩视频中文字幕| 国产精品高潮在线| 久久久久九九九九| 男女精品网站| 午夜精品久久久久久久久| 欧美一区二区三区四区视频| 一区二区三区四区五区视频| 国产精品igao视频网网址不卡日韩 | 国产精品久久久久久久久久直播| 亚洲欧美日韩精品久久久| 欧美一级夜夜爽| 亚洲精品国产拍免费91在线| 亚洲少妇最新在线视频| 一区二区三区在线不卡| 亚洲国产片色| 国产亚洲精品高潮| 亚洲精品一区二区三区樱花| 国产视频欧美视频| 亚洲三级毛片| 国模大胆一区二区三区| 亚洲激情专区| 亚洲欧美日本日韩| 玖玖精品视频| 欧美一区二区三区久久精品| 欧美成人首页| 久久国产精品第一页| 欧美激情a∨在线视频播放| 欧美在线免费| 欧美日韩在线高清| 欧美成人xxx| 国产香蕉久久精品综合网| 最新高清无码专区| 国产一区二区三区无遮挡| 日韩视频精品| 极品尤物av久久免费看| 一区二区三区欧美日韩| 亚洲国产精品尤物yw在线观看| 亚洲午夜久久久久久久久电影网| 亚洲福利视频免费观看| 午夜精品理论片| 99国产精品一区| 免费成人黄色片| 久热精品在线视频| 日韩天堂在线观看| 久久精品电影| 久久aⅴ国产紧身牛仔裤| 欧美午夜理伦三级在线观看| 久久婷婷麻豆| 欧美午夜在线观看| 亚洲另类视频| 日韩一级二级三级| 欧美国产一区二区在线观看 | 亚洲自拍啪啪| 一区二区三区欧美| 欧美精品成人| 亚洲精品在线一区二区| 亚洲人成网站在线播| 久久午夜精品一区二区| 麻豆精品在线视频| 亚洲成人在线| 久久综合网络一区二区| 欧美成人午夜77777| 黄色亚洲大片免费在线观看| 久久不射2019中文字幕| 麻豆精品视频在线观看| 亚洲电影免费观看高清| 欧美精品福利| 夜夜嗨av一区二区三区| 亚洲欧美制服另类日韩| 国产精品男人爽免费视频1| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲精品国产精品国自产观看浪潮 | 91久久午夜| 久久综合狠狠综合久久综合88| 免费毛片一区二区三区久久久| 狠狠爱www人成狠狠爱综合网| 久久精品九九| 亚洲国产成人精品久久| 一本大道久久精品懂色aⅴ | 久久久久在线观看| 国产丝袜一区二区三区| 久久国产手机看片| 欧美国产日韩精品| 国产精品99久久99久久久二8 | 一区二区三区蜜桃网| 国产精品久久久久久久久免费| 午夜精品国产| 欧美激情一级片一区二区| 日韩视频在线播放| 国产精品羞羞答答xxdd| 久久久久九九九九| 亚洲精选视频在线| 欧美尤物一区| 91久久一区二区| 欧美四级剧情无删版影片| 欧美一区三区三区高中清蜜桃| 欧美国产激情二区三区| 亚洲欧美国产毛片在线| 在线精品视频一区二区三四| 欧美日韩精品一区二区天天拍小说 | 亚洲综合第一页| 一区二区国产精品| 久久久夜夜夜| 99在线精品观看| 国产日韩一区二区三区在线播放| 免费看av成人| 欧美亚洲尤物久久| 亚洲美洲欧洲综合国产一区| 久久性天堂网| 亚洲高清电影| 久久嫩草精品久久久精品| 亚洲性xxxx| 亚洲日韩中文字幕在线播放| 国产一区二区视频在线观看| 欧美视频二区| 欧美国产先锋| 农村妇女精品| 久久另类ts人妖一区二区| 亚洲图片欧洲图片日韩av| 最新高清无码专区| 欧美激情91| 牛人盗摄一区二区三区视频| 久久99在线观看| 欧美一区亚洲一区| 亚洲一区二区三区影院| 99国产一区二区三精品乱码| 亚洲第一福利视频| 精品成人在线| 激情小说亚洲一区| 亚洲综合欧美日韩| 夜夜嗨av一区二区三区四季av| 亚洲日本中文| 亚洲激情第一区| 亚洲成人在线视频播放| 好看的日韩视频| 国产九九视频一区二区三区| 欧美无乱码久久久免费午夜一区 | 欧美人成网站| 欧美成人中文| 欧美国产综合视频| 欧美xx69| 欧美激情在线播放| 欧美www视频在线观看| 免费一级欧美在线大片| 玖玖国产精品视频| 亚洲欧美日韩综合| 91久久中文字幕| 亚洲狼人综合| 亚洲少妇一区| 亚洲一区二区三区中文字幕在线| 中文亚洲免费| 午夜欧美大片免费观看| 欧美一级视频免费在线观看| 久久激情视频| 麻豆精品视频在线| 欧美风情在线| 国产精品久久久999| 国产精品亚洲а∨天堂免在线| 国产精品第2页| 国产曰批免费观看久久久| 国内精品久久久久久久影视蜜臀| 在线观看日韩www视频免费| 亚洲国产欧美另类丝袜| 亚洲一区二区三区色| 久久久久久夜| 亚洲高清在线视频|