大坡3D软件开发

关注3D软件技术

用户操作
[即时聊天] [发私信] [加为好友]
蔡军生ID:caimouse
1243894次访问,排名17好友253人,关注者423
C++,3D,VC++软件开发,写技术文章,操作系统开发
caimouse的文章
原创 604 篇
翻译 0 篇
转载 41 篇
评论 942 篇
蔡军生的公告

点击这里给我发消息

MSN: caimouse1976 at sina.com

最近评论
holon:不错,支持一下。

------------------------------
www.arraylist.cn cn域名免费送
IT人的酒吧式交流平台
-----------------------------
tunnel115:lz生日快乐啊
加油写,我是粉条
maray:这个做量的生意还是不错哈~
雇几个C++比较好的大学生做兼职,负责回答问题,哈哈~very nice~
xavierye:发现另外一个源码分析blog:
http://www.cnblogs.com/duguguiyu/archive/2008/10/02/1303095.html
shada:前面两个混帐,没资格评论开源。
用着盗版的Word写文章批评开源的人真不少。
文章分类
收藏
相册
3D引擎
第二人生
谷歌浏览器
开发板
历史回忆
常用连接
人生历程
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 第二人生的源码分析(五十六)OpenGL离屏渲染的实现收藏

新一篇: 第二人生的源码分析(五十七)OpenGL离屏渲染的相关函数 | 旧一篇: 第二人生的源码分析(五十五)OpenGL的API函数管理

我们都知道显示卡有一片内存叫做显存,顾名思义,显存就是显示内容的存储器。意思就是说所有显示到显示器的内容都需要放到这片内存里,然后显示卡再作DAC的动作,最后才能从屏幕里看到输出的内容。现在的显示内存都比较大了,在屏幕里显示一帧图片,已经只占很小一块内存空间了。那也许你会问为什么厂家还在不断推出大显示内存的显示卡呢?难道厂商只是想多挣几块钱吗?呵呵,下面就带你来了解一下大显示内存的优势所在,其实由于显示卡与内存之间,还需要通过数据总线来连接的,其实越多显示内容放在显示卡里面,就会加速显示速度。并且现在的显示卡,还可以一边显示小部份内存,一边让剩余的显示内存就让给CPU在后台操作,生成下一帧的数据,这样显示内存越大,就可以后台生成越多的图片帧数据,这样就可以加速显示。那么在后台生成的显示数据,就叫做离屏渲染。下面就来看看第二人生里是怎么使用这种高级的功能呢?LLRenderTarget类的声明代码如下:
#001 class LLRenderTarget
#002 {
#003 public:
 
是否使用离屏对象。
#004      //whether or not to use FBO implementation
#005      static BOOL sUseFBO;
#006 
#007      LLRenderTarget();
#008      ~LLRenderTarget();
#009 
#010      //allocate resources for rendering
#011      //must be called before use
#012      //multiple calls will release previously allocated resources
 
下面函数分配离屏对象。
#013      void allocate(U32 resx, U32 resy, U32 color_fmt, BOOL depth, U32 usage = GL_TEXTURE_2D, BOOL force_fbo = FALSE);
#014 
#015      //free any allocated resources
#016      //safe to call redundantly
 
下面函数删除离屏对象。
#017      void release();
#018 
#019      //bind target for rendering
#020      //applies appropriate viewport
 
下面函数绑定离屏对象。
#021      void bindTarget();
#022 
#023      //clear render targer, clears depth buffer if present,
#024      //uses scissor rect if in copy-to-texture mode
 
下面函数清除离屏对象内容。
#025      void clear();
#026     
 
下面函数获取显示的视口。
#027       //get applied viewport
#028      void getViewport(S32* viewport);
#029 
 
下面函数设置纹理。
#030      //bind results of render for sampling
#031      void bindTexture();
#032 
 
下面函数显示离屏对象到显示内存。
#033      //flush rendering operations
#034      //must be called when rendering is complete
#035      //should be used 1:1 with bindTarget
#036      // call bindTarget once, do all your rendering, call flush once
#037      void flush();
#038 
 
下面函数判断是否离屏对象是否准备好。
#039      //Returns TRUE if target is ready to be rendered into.
#040      //That is, if the target has been allocated with at least
#041      //one renderable attachment (i.e. color buffer, depth buffer).
#042      BOOL isComplete() const;
#043 
#044 private:
#045      U32 mResX;
#046      U32 mResY;
#047      U32 mTex;
#048      U32 mFBO;
#049      U32 mDepth;
#050      BOOL mUseDepth;
#051      U32 mUsage;
#052 };
#053 
 
上面类LLRenderTarget就通过这些函数来操作离屏对象的。下一次再仔细分析它是通什么样OpenGL函数来实现的。

发表于 @ 2008年05月08日 21:29:52|评论(loading...)|编辑

新一篇: 第二人生的源码分析(五十七)OpenGL离屏渲染的相关函数 | 旧一篇: 第二人生的源码分析(五十五)OpenGL的API函数管理

评论

#book_whitehat 发表于2008-05-09 17:14:35  IP: 211.95.87.*
很好很强大...
不过我更喜欢服务器方面的程序.
要不楼主分析完客户端以后
顺便把服务器也分析了吧
本人万分感谢...
哈哈...
2008-05-09 21:14:52作者回复
除非服务器源码开源。
#hello520 发表于2008-05-11 17:32:28  IP: 61.174.209.*
貌似第二人生的很多地方都做得不是很好哇
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 蔡军生