RenderTexture截屏出现白屏问题

当使用renderTexture截取带有scrollView控件 和 clippingNode节点 屏幕的时候,就会出现这个问题。

官方提到过这个issues:https://github.com/cocos2d/cocos2d-x/issues/8875

https://github.com/cocos2d/cocos2d-x/commit/95302e18cc857b28921a9a1f1000e3338e200091

我遇到的问题是:

RenderTexture截屏出现白屏问题

码牌可能过多,因此这里手动写代码创建了一个ScrollView滚动层:

RenderTexture截屏出现白屏问题


RenderTexture有几个不同的create函数用于创建不同的renderbuffer环境,clippingNode需要用到stencilbuffer。 所以创建RenderTexture的时候,要调用那个带有depthStencil format参数的create函数,打开renderTexture源码,发现传入第四个参数不为0,则会多执行renderbuffer相关的代码:

if (depthStencilFormat != 0)
{
     //create and attach depth buffer
    glGenRenderbuffers(1, &_depthRenderBufffer);
    glBindRenderbuffer(GL_RENDERBUFFER, _depthRenderBufffer);
    glRenderbufferStorage(GL_RENDERBUFFER, depthStencilFormat, (GLsizei)powW, (GLsizei)powH);
    glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, _depthRenderBufffer);

    // if depth format is the one with stencil part, bind same render buffer as stencil attachment
    if (depthStencilFormat == GL_DEPTH24_STENCIL8)
   {
       glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, _depthRenderBufffer);
   }
}

总结:

如果大家在roundReport或者FinallReport中截屏分享的话,如果里面带有滚动控件,就要注意这个问题。

解决办法是将:

local screenshot = cc.RenderTexture:create(winSize.width, winSize.height)

改为:

local screenshot = cc.RenderTexture:create(winSize.width, winSize.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888, 0x88F0)

今天遇到了,大家以后可以避免下。