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

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 閱讀(340) 評論(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久久久久久www| 91久久精品网| 国产精品午夜视频| 亚洲精品在线观看免费| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 欧美日韩一区二区三区视频| 久久久久久久网| 国产精品久久久久久久久久久久久 | 亚洲国产天堂久久综合网| 国产精品日本一区二区 | 亚洲东热激情| 精品不卡一区| 欧美一区二区久久久| 亚洲视频1区| 欧美激情中文字幕乱码免费| 欧美成人69av| 精品91久久久久| 久久精品国产一区二区三区免费看 | 欧美日韩国产影院| 欧美激情小视频| 在线播放视频一区| 久久久久久久999| 蜜臀av一级做a爰片久久| 国产一区二区三区奇米久涩| 亚洲欧美色一区| 欧美一级片一区| 国产日韩欧美夫妻视频在线观看| 一区二区三区鲁丝不卡| 在线一区视频| 国产精品高清网站| 亚洲免费中文| 久久国产精品第一页| 国产精品资源在线观看| 亚洲女性裸体视频| 久久久久久亚洲精品不卡4k岛国| 国产欧美综合一区二区三区| 亚洲欧美视频在线| 久久精品一区二区三区中文字幕| 国产一区二区三区成人欧美日韩在线观看 | 久久蜜桃资源一区二区老牛 | 亚洲欧美色一区| 国产欧美日韩在线观看| 久久成人综合视频| 欧美h视频在线| 国产精品久久久久久亚洲毛片| 99xxxx成人网| 欧美伊人久久大香线蕉综合69| 国产欧美日韩另类一区| 久久久久国产一区二区三区| 免费永久网站黄欧美| 91久久久久久久久久久久久| 欧美日韩第一页| 欧美一区视频在线| 欧美成人69av| 亚洲免费综合| 韩日精品在线| 欧美日韩国产一级片| 午夜精品免费视频| 欧美国产精品久久| 亚洲——在线| 在线日韩av永久免费观看| 欧美日本簧片| 欧美一级网站| 亚洲国产婷婷| 久久精品女人天堂| 日韩视频二区| 国内精品久久久久久| 欧美剧在线免费观看网站| 亚洲欧美成人一区二区在线电影| 欧美国产成人精品| 欧美在线一二三四区| 亚洲免费观看| 在线 亚洲欧美在线综合一区| 欧美日韩专区在线| 久久久久欧美| 午夜在线电影亚洲一区| 亚洲欧洲日产国码二区| 久久久无码精品亚洲日韩按摩| 亚洲视频成人| 亚洲精品乱码久久久久| 国产综合久久久久久鬼色| 欧美日韩一区二区在线| 狂野欧美激情性xxxx| 欧美一级成年大片在线观看| 日韩午夜一区| 亚洲国产一区二区视频| 玖玖在线精品| 久久精品视频网| 小黄鸭视频精品导航| 亚洲精品一二三| 一区二区亚洲精品国产| 国产视频一区在线观看| 国产精品一区免费视频| 欧美日韩一区国产| 欧美福利视频在线| 免费一级欧美片在线播放| 久久成人久久爱| 性欧美xxxx大乳国产app| 亚洲自拍电影| 在线一区观看| 亚洲午夜视频在线| 亚洲永久网站| 亚洲一区免费在线观看| 亚洲最新色图| 一本色道88久久加勒比精品| 亚洲精品一区二区在线| 亚洲日本中文字幕区| 亚洲国产精品一区二区第一页| 欧美成人国产| 免费观看成人网| 欧美成人一二三| 欧美成人一区二区三区片免费| 久久夜色精品一区| 欧美不卡在线视频| 亚洲国产精品黑人久久久| 欧美激情2020午夜免费观看| 亚洲成色精品| 亚洲人成人一区二区三区| 日韩午夜激情av| 亚洲午夜精品国产| 亚洲欧美在线aaa| 久久国产精品久久久| 久久九九热re6这里有精品| 久久亚洲综合色一区二区三区| 久久一区二区三区av| 女同性一区二区三区人了人一 | 亚洲国产高清一区二区三区| 亚洲国产成人久久综合| 亚洲精品久久久久| 亚洲午夜精品在线| 欧美在线视频不卡| 久久亚洲图片| 亚洲欧洲久久| 亚洲一区欧美二区| 久久夜色精品国产| 欧美精品麻豆| 国产日韩欧美综合在线| 在线观看91精品国产入口| 亚洲人体1000| 午夜欧美精品久久久久久久| 久久久无码精品亚洲日韩按摩| 亚洲第一二三四五区| 亚洲私人影吧| 久久天天综合| 国产精品v亚洲精品v日韩精品| 国产日韩一区二区| 日韩亚洲欧美在线观看| 欧美在线视频导航| 91久久精品美女高潮| 午夜亚洲性色福利视频| 欧美成人精品福利| 国产欧美韩日| 一区二区三区四区国产精品| 久久精品免费播放| 99成人精品| 久久日韩粉嫩一区二区三区| 国产精品久久| 亚洲免费观看高清完整版在线观看| 午夜精品一区二区三区四区| 欧美激情一区二区三级高清视频| 亚洲午夜久久久久久尤物| 麻豆成人91精品二区三区| 国产精品爽黄69| 99国产精品| 免费不卡视频| 欧美在线视频免费| 国产精品扒开腿做爽爽爽软件| 在线观看一区| 久久久久久久一区二区| 亚洲视频免费观看| 欧美第一黄网免费网站| 在线欧美视频| 久久看片网站| 欧美怡红院视频一区二区三区| 欧美日韩一区二区免费视频| 亚洲福利专区| 美女精品一区| 久久不射电影网| 国产精品一区二区三区久久久| 中文网丁香综合网| 亚洲人成亚洲人成在线观看| 狂野欧美激情性xxxx欧美| 激情亚洲成人| 久久婷婷国产综合精品青草| 亚洲女女女同性video| 国产精品乱码人人做人人爱| 一本到高清视频免费精品| 欧美黄在线观看| 欧美aaaaaaaa牛牛影院| 亚洲激情国产精品| 欧美大尺度在线观看| 久久影院午夜片一区| 狠狠色综合网站久久久久久久| 久久福利电影| 久久久噜噜噜久久| 玉米视频成人免费看| 欧美成人一区二区| 欧美精品18+| 亚洲午夜一二三区视频|