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

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>
            欧美精品1区| 久久久久久噜噜噜久久久精品| 久久综合给合久久狠狠狠97色69| 中文欧美在线视频| 欧美激情精品久久久久久大尺度| 另类图片综合电影| 免费久久99精品国产自| 免费91麻豆精品国产自产在线观看| 在线电影院国产精品| 亚洲自拍高清| 亚洲黄色小视频| 国产女主播在线一区二区| 亚洲电影第1页| 国产欧美精品国产国产专区| 欧美成在线观看| 久久久中精品2020中文| 亚洲福利视频网| 亚洲开发第一视频在线播放| 国产欧美日韩一区二区三区| 欧美丰满少妇xxxbbb| 亚洲欧洲av一区二区三区久久| 国产自产2019最新不卡| 亚洲欧美日韩国产中文在线| 国产视频亚洲精品| 欧美中文字幕视频| 亚洲欧洲日韩在线| 欧美一区二区高清| 91久久视频| 国产伦理一区| 欧美日韩在线播| 麻豆国产va免费精品高清在线| 亚洲精品免费电影| 久久婷婷久久| 久久国产精品99精品国产| 日韩视频不卡中文| 亚洲人成人77777线观看| 好吊视频一区二区三区四区| 久久大逼视频| 夜夜嗨网站十八久久| 亚洲福利av| 影音先锋中文字幕一区| 国产一区二区三区自拍| 国产欧美日韩中文字幕在线| 欧美色中文字幕| 欧美日韩精品欧美日韩精品| 欧美极品在线视频| 免费看亚洲片| 欧美精品色综合| 欧美日韩国产在线播放网站| 欧美—级高清免费播放| 欧美色大人视频| 国产精品一区二区在线观看网站 | 99精品热视频只有精品10| 影音先锋另类| 亚洲乱亚洲高清| 亚洲欧美日本国产有色| 久久国产色av| 亚洲高清一区二| 在线天堂一区av电影| 欧美一区二区三区精品电影| 久久偷看各类wc女厕嘘嘘偷窃| 欧美成人tv| 国产日韩高清一区二区三区在线| 国产午夜精品全部视频在线播放| 伊人婷婷久久| 亚洲视频每日更新| 久久在线播放| 99视频一区二区三区| 久久精品国产第一区二区三区最新章节 | 亚洲欧美日韩精品久久亚洲区| 午夜精品久久久久久久白皮肤| 久久亚洲综合色| 一卡二卡3卡四卡高清精品视频| 亚洲欧美在线观看| 欧美刺激性大交免费视频| 亚洲看片免费| 欧美精品激情blacked18| 蜜臀久久久99精品久久久久久 | 国产精品久久久久三级| 亚洲国产精品99久久久久久久久| 亚洲欧美综合国产精品一区| 亚洲精品123区| 欧美成黄导航| 亚洲精品视频在线| 亚洲国内自拍| 欧美激情第9页| 一区二区精品在线| 日韩视频精品| 国产精品毛片高清在线完整版| 亚洲性感激情| 亚洲综合日韩在线| 国产日韩欧美a| 欧美v日韩v国产v| 欧美成人精品一区二区三区| 亚洲精品五月天| 中文在线一区| 狠狠色丁香婷综合久久| 欧美超级免费视 在线| 乱中年女人伦av一区二区| 亚洲精品视频一区| 亚洲午夜久久久久久久久电影院| 国产精品久久久亚洲一区| 久久狠狠婷婷| 欧美福利视频| 欧美一区二区三区四区在线观看地址 | 欧美日韩亚洲精品内裤| 午夜精品在线看| 美女网站久久| 亚洲男人的天堂在线观看| 欧美一区二区三区视频免费播放| 亚洲欧美成人精品| 最新成人av在线| 久久久精品久久久久| 欧美成人a视频| 久久综合狠狠综合久久综青草 | 欧美日韩国产综合视频在线| 久久精品国产2020观看福利| 久久嫩草精品久久久精品| 亚洲一区国产精品| 欧美大色视频| 麻豆成人91精品二区三区| 国产毛片一区二区| 亚洲永久免费| 亚洲一区二区三区视频| 欧美激情五月| 欧美77777| **网站欧美大片在线观看| 欧美在线播放视频| 久久亚洲精品一区| 亚洲福利视频二区| 欧美h视频在线| 亚洲国产清纯| 中文亚洲视频在线| 国产精品国产| 亚洲自拍电影| 久久综合久久综合这里只有精品| 国产农村妇女毛片精品久久莱园子| 一本到高清视频免费精品| 亚洲欧洲久久| 奶水喷射视频一区| 91久久精品国产91久久| 一区二区三区视频在线看| 国产精品国产成人国产三级| 一区二区三区高清在线| 亚洲欧美日韩一区二区| 国产原创一区二区| 欧美成人精品不卡视频在线观看| 91久久精品国产91久久| 香蕉久久一区二区不卡无毒影院| 国产欧美日韩专区发布| 欧美成人综合在线| 小黄鸭视频精品导航| 欧美mv日韩mv国产网站app| 一区二区三区免费在线观看| 国产精品亚洲综合一区在线观看| 久久久av毛片精品| 亚洲一区二区久久| 亚洲精品久久久久久久久久久久| 欧美日韩黄色一区二区| 久久精品中文| 亚洲一区二区三区高清| 欧美福利网址| 久久夜色精品国产欧美乱极品| 在线一区日本视频| 最新国产乱人伦偷精品免费网站| 国产美女精品免费电影| 欧美三日本三级少妇三2023| 快射av在线播放一区| 欧美在线观看你懂的| 亚洲男同1069视频| 亚洲一区视频| 亚洲无线视频| 亚洲一区二区高清| 亚洲欧美不卡| 久久激情综合| 久久深夜福利免费观看| 久久久亚洲高清| 久久午夜视频| 毛片精品免费在线观看| 久久久精品日韩| 久久综合九色综合欧美狠狠| 欧美激情一二区| 亚洲激情成人网| 亚洲乱码久久| 亚洲午夜性刺激影院| 亚洲欧美卡通另类91av| 欧美一区综合| 久久综合久久久| 欧美性jizz18性欧美| 国产精品欧美在线| 一区二区三区在线看| 亚洲级视频在线观看免费1级| 最新日韩精品| 午夜亚洲性色视频| 男人插女人欧美| 亚洲精品免费在线观看| 亚洲一区影音先锋| 久久久久久成人| 欧美日韩网址| 亚洲第一搞黄网站|