cocos2d-x 3.4 使用了遮罩后导致白屏

  1. 升级了到了3.4后,游戏中直接白屏了!将游戏中遮罩效果去掉后,又好了。
    能给一个解决方案么?

在什么平台下运行白屏?能提供下重现的Demo吗?

就是在游戏中使用了ClippingNode

在PC上,目前还不知道ios,android上面会不会有问题。游戏中使用了一个ClippingNode ,就是出现白屏

官方测试例里面也会这样吗?

官方里面没有出现 ,我这边也是讲引擎升到3,4后才出现的。场景里面包含一些UI的界面。

查了一下是STENCIL buffer 不可用。
我看到PC上创建window的时候,默认以GLContextAttrs GLView::_glContextAttrs = {5, 6, 5, 0, 16, 0};来创建的,并没有创建STENCIL buffer,所以我把默认值改为了 {5, 6, 5, 0, 16, 8};就好了。

我有一个问题,
我知道后续通过
void GLView::setGLContextAttrs(GLContextAttrs& glContextAttrs)
{
_glContextAttrs = glContextAttrs;
}
将_glContextAttrs改为了{8, 8, 8, 8, 24, 8};当时这时候widnow都已经创建了 ,这样修改能生效么?

调用setGLContextAttrs前窗口还没生成。

你可以看一下这一系列的渲染流程的教程:http://cn.cocos2d-x.org/tutorial/show?id=2213

SimulatorWin.cpp那里就把GLViewImpl创建出来了,但是那时候还没把_glContextAttrs设置为{8, 8, 8, 8, 24, 8},感觉那里有问题。

请问如何解决呀?

我看到PC上创建window的时候,默认以GLContextAttrs GLView::_glContextAttrs = {5, 6, 5, 0, 16, 0};来创建的,并没有创建STENCIL buffer,所以我把默认值改为了 {5, 6, 5, 0, 16, 8};就好了。

3.4的倒是没有看,3.3的看了下,其实clippingnode无效之前各种坑,其实就是没有设置opengl的模板缓冲区大小,3.3的代码中appdelegate.cpp中

void AppDelegate::initGLContextAttrs()
{
//set OpenGL context attributions,now can only set six attributions:
//red,green,blue,alpha,depth,stencil
GLContextAttrs glContextAttrs = {8, 8, 8, 8, 24, 8};

GLView::setGLContextAttrs(glContextAttrs);

}


这里的最后一个stencil其实就是opengl中的模板缓冲区,那他在哪里被调用的呢,是在application的run中调用的<pre class="brush:cpp; toolbar: true; auto-links: false;">

int Application::run()
{
    initGLContextAttrs();
    if(!applicationDidFinishLaunching())
    {
        return 1;
    }
    
    long lastTime = 0L;
    long curTime = 0L;
    ........


在这里窗口都还没有生成呢,窗口生成是在createWithRect这个时候