报一个3.13.1 Sprite3D的bug

1.新建一个Sprite3D加到场景中 运行完动画 调用director的end方法 director被释放掉
2. 重新生成director 然后新建场景加载一个Sprite3D节点 会报错在GLProgram里面的_director是野指针 ,断点跟踪发现指向的是第一次创建的director而不是新建的director。
3.猜测是director end的时候有些3d的数据没释放 导致,不加载Sprite3D节点(只有2d节点)的时候 是不会出问题的.

Director::end()方法目前实现得不好,请不要使用。

那如果需要销毁CCEAGLView 有什么好的办法呢

因为我是跟native的view结合比较紧密 使用完了 需要清除掉cocos的view

引擎本身也是渲染到一个iOS的view的。你用完直接把这个view删除了就可以了。具体的删除方法得在proj.ios下的RootViewController.mm或者AppController.mm里去做。我自己没实现过,无法给具体的实现方式。只能给一个思路。

ios的view是已经删除了的 ,现在是发现一些数据结构引擎没有清理干净,比如
Sprite3DMaterial* Sprite3DMaterial::createBuiltInMaterial(MaterialType type, bool skinned)
{
/////
if (_diffuseMaterial == nullptr)
createBuiltInMaterial();
这个方面里面是通过_diffuseMaterial这个静态成员变量来控制是否重新生成GLProgram的 ,director->end的时候把glProgram都清理了 重新生成一个director去跑sprite3d的时候回导致无法调用createBuiltInMaterial()方法。希望写3d模块的大大能够指导下3d模块的数据要怎么全部清理掉。

嗯,引擎的设计没有很好地考虑这部分内容。目前也不打算改了,因为会带来太多不兼容和问题,而且这不是常见的用法。所以估计得自己去修改了。

好吧,看来只能把3d部分的代码都理一遍了,谢谢