加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

CCClippingNode导致的贴图错误问题

发布时间:2020-12-14 20:19:00 所属栏目:百科 来源:网络整理
导读:此问题我的原文和解决办法: http://stackoverflow.com/questions/28367881/why-i-need-add-empty-ccclippingnode-between-each-slice-part-in-cocos2dx-2-2-6/28367882#28367882 帮助贴: http://blog.csdn.net/jusnxie/article/details/9277121 起先我发现切

此问题我的原文和解决办法:

http://stackoverflow.com/questions/28367881/why-i-need-add-empty-ccclippingnode-between-each-slice-part-in-cocos2dx-2-2-6/28367882#28367882

帮助贴:

http://blog.csdn.net/jusnxie/article/details/9277121


起先我发现切割图片的贴图错误了,但是找不到问题在哪. 于是我自己来回测试,发现每隔一个CCClippingNode创建一个空的CCClippingNode就不会出现这个问题,于是我发现了是openGL缓存的问题,




另外stencil深度需要开启,cpp项目在AppController.mm中,默认新版模板是开启的,老版模板是关闭的,所以我发现我的demo能运行,而老游戏不支持:


改为


EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
                                     pixelFormat: kEAGLColorFormatRGB565
                                     depthFormat: GL_DEPTH24_STENCIL8_OES
                              preserveBackbuffer: NO
                                      sharegroup: nil
                                   multiSampling: NO
                                 numberOfSamples:0 ];





  1. glStencilFunc(GL_NEVER,mask_layer,mask_layer);
  2. glClearStencil(!m_bInverted?0:~0);
  3. glStencilOp(!m_bInverted?GL_ZERO:GL_REPLACE,GL_KEEP,GL_KEEP);
  4. //drawafullscreensolidrectangletoclearthestencilbuffer
  5. //ccDrawSolidRect(CCPointZero,ccpFromSize([[CCDirectorsharedDirector]winSize]),ccc4f(1,1,1));
  6. ccDrawSolidRect(CCPointZero,ccpFromSize(CCDirector::sharedDirector()->getWinSize()),1));
  7. glClear(GL_STENCIL_BUFFER_BIT);

标红的地方是新添加的,效果刚刚

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读