RenderTexture截屏出现白屏问题
当使用renderTexture截取带有scrollView控件 和 clippingNode节点 屏幕的时候,就会出现这个问题。
官方提到过这个issues:https://github.com/cocos2d/cocos2d-x/issues/8875
https://github.com/cocos2d/cocos2d-x/commit/95302e18cc857b28921a9a1f1000e3338e200091
我遇到的问题是:
码牌可能过多,因此这里手动写代码创建了一个ScrollView滚动层:
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)
今天遇到了,大家以后可以避免下。