RenderTexture 渲染到纹理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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。

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

转载于:https://my.oschina.net/yizhangxyz/blog/703942

你可能感兴趣的:(RenderTexture 渲染到纹理)