2.2.1 版本android原生 z 缓冲禁用设置失败(有demo)

androidMesh.zip (31.2 KB)
demo 中的场景在浏览器和微信小游戏平台(真机)均可正确显示,打包android版本真机就错了



截图是两个重叠显示的图片,1图是错误的,zdepth禁用没生效
测试代码 AppActivity.java
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
// TestCpp should create stencil buffer
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
// SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView, this);
SDKWrapper.getInstance().setGLSurfaceView(glSurfaceView);

    return glSurfaceView;
}

如果将glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8); 后两个参数改为0,0,这个简单demo就可以显示正确了,说明zdepth 禁用函数没生效
提示:请关注BatchSpriteMesh 的update函数有一句pass.setDepth(false); 这代码在android原生确实执行了,但没效果,
这两个图的实现方式是使用cc.MeshRenderer,把顶点和索引数据一次性传给cc.MeshRenderer的mesh对象, 使用的纹理和材质都加日志检查了,都是有效的

pass 是 web 对象,要用 effect 来设置,
native effect 漏了暴露 depth 的设置, 需要参考这里加下 native effect 的 api,后面会加上。

https://github.com/cocos-creator-packages/jsb-adapter/blob/v2.2.1-release/engine/jsb-effect.js#L41

好的,谢谢,我试一下

为什么 cullMode BlendFun 这些函数都有,唯独没有setDepth呢,c代码里也没有,你的意思是我在c里加setDepth函数,然后再绑定到js代码供js使用么 是这样吗?

这个能不能不改c代码实现呢?

我在c effect里加了个setDepth并绑定,解决了这个问题, 这个没法通过js代码处理吗