RenderTexture 渲染到纹理

cocos2d里面有个CCRenderTexture,用于将指定对象渲染到纹理。在unity3d里面也有同样的技术。

今天查阅了相关资料,再看了一下cocos2d的源码,发现他实际上用的是FBO(帧缓存对象)渲染到纹理技术,即我们可以为帧缓存关联一个纹理附件,然后将帧缓存里面的内容放到纹理附件里面。

在cocos2d里面使用步骤大致如下:

1 创建texture:初始化的时候生成一个空的texture。并指定纹理数据的宽和高。

2 创建FBO:用glGenFramebuffers生成帧缓存FBO framebuffer。

3 记录之前的FBO:glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_oldFBO);              

4 关联texture到FBO:绑定刚才生成的framebuffer(glBindFramebuffer), 用glFramebufferTexture2D 将texture关联到FBO。(当然可以为FBO创建深度缓存,这部分没仔细看)

以下内容通过命令队列执行

5 推送命令绑定FBO:RenderTexture begin 渲染开始的时候再次使用glBindFramebuffer。指定渲染到渲染缓存。注意这部分是推送到render command queue里面执行的。

6 推送命令渲染物体:调用待渲染的物体的visit,将渲染命令推送到render。

7 执行渲染:利用render进行渲染,执行上面5、6条的命令。

8 恢复之前的FBO:RenderTexture end,渲染结束的时候,通过glBindFramebuffer(GL_FRAMEBUFFER, _oldFBO);绑定到老的FBO。

这样就通过帧缓存将东西渲染到了纹理。

点赞
收藏

评论区

加载中...

相关推荐

React - Fiber原理

浏览器渲染屏幕刷新率(FPS)浏览器的正常绘制频率是60次/秒,小于这个值时,用户会感觉到卡顿绘制一次的称为一帧,平均每帧16.6ms帧每个帧的开头包括样式计算、布局和绘制js的执行是单线程,js引擎和页面渲染引擎都占用主线程,GUI渲染和Javascript执行两者是互斥的如果某个js任务执行时间过长,浏览器会推迟渲染,每

Unity Shader 序列帧动画

shader中的序列帧动画属于纹理动画中的一种,主要原理是将给定的纹理进行等分,再根据时间的变化循环播放等分中的一部分。UnityShader内置时间变量名称类型描述\_Timefloat4(t/20,t,2t,3t)  其中t为自该场景加载所经过时间\_SinTimefloat4(t/8,t/4,t/2,t) 

Unity渲染教程的GAD中文翻译版本地址。

Unity渲染教程(一):矩阵:http://gad.qq.com/program/translateview/7181958Unity渲染教程(二):着色器基础:http://gad.qq.com/program/translateview/7173930Unity渲染教程(三):使用多张纹理贴图:http://g

Unity3D开发之Unity5版本自写Shader没有雾的效果问题

原本项目是Unity4.6版本的,升级到Unity5之后发现原本的雾不再看见了,然后查了一下相关资料,发现官方是改变了雾的渲染。这里有相关的官方方式:http://forum.unity3d.com/threads/officialchanginghowfogisdoneinunityshaders.261217/里面有比较重

Lite2D的渲染线程尝试

项目地址   https://github.com/dreamyouxi/Lite2D(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fdreamyouxi%2FLite2D)注意:1.GL只能和一个线程相关,所以纹理产生,初始化等都要放到渲染线程

Unity性能优化整理

纹理优化SpritePacker通过细分导入到Unity的纹理,利用自带的SpritePacker将时间段内需要同时绘制在屏幕上的纹理合并到一个图集中,可以减少Drawcall的开销UGUI优化Canvas1._分离Canvas_画布(Canvas)是U

RenderTexture 渲染到纹理 - HelloWorld