【cocos2d-x-3.3beta0】android版本如何使用GL_ALPHA_TEST

因为需要用到3D图层,启用Depth_test和Alpha_test。在CCDirector中有找到setDepthTest的接口,但是没有setAlphaTest的接口。
于是只能调用GL的接口实现。代码如下:

(引擎使用的cocos2d-x-3.3beta0)

 
void Level::onEnter() 
{ 
Director::getInstance()->setDepthTest(true); 
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, 0.1f); 
Layer::onEnter(); 
} 

void Level::onExit() 
{ 
Layer::onExit(); 
Director::getInstance()->setDepthTest(false); 
glDisable(GL_ALPHA_TEST); 
} 

在windows上是没有问题的,效果如下:

但是编译android版时出错,找不到 GL_ALPHA_TEST。
看了下代码,发现GL_ALPHA_TEST是定义在
external\win32-specific\gles\include\OGLES\GL\glew.h
编译android是找不到的。

后面搜了下那几个demo的代码,发现有这样的:

 
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) 
glEnable(GL_ALPHA_TEST); 
glAlphaFunc(GL_GREATER, _alphaThreshold); 
#else 
auto program = GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_ALPHA_TEST_NO_MV); 
GLint alphaValueLocation = glGetUniformLocation(program->getProgram(), GLProgram::UNIFORM_NAME_ALPHA_TEST_VALUE); 
program->use(); 
program->setUniformLocationWith1f(alphaValueLocation, _alphaThreshold); 
#endif 

看起来启用GL_ALPHA_TEST用下面那段代码代替了。我试了,虽然可以编过,但是在手机上依然无效。

不过这里感觉很奇怪,glew本身是跨平台的,为何编译android用不了?
另外Director::getInstance()->setDepthTest(true);这句话也有问题。
在手机上第一次打开游戏是OK的,但是按home键退出再回到游戏后,Depth_test就失效了。

不知道有没有哪位大侠遇到过这个问题?求解救/_\

另附上场景搭建的代码:

 
 auto marisa = Sprite::create("textures/marisa.png"); 
 marisa->setAnchorPoint(Vec2(0.5, 0)); 
 marisa->setPosition3D(Vec3(origin.x - 100, origin.y - 200, 0)); 
 this->addChild(marisa, 0); 

 auto mare = Sprite::create("textures/mare.png"); 
 mare->setAnchorPoint(Vec2(0.5, 0)); 
 mare->setPosition3D(Vec3(origin.x + 200, origin.y - 200, -1000)); 
 this->addChild(mare, 0); 

 auto ground = Sprite::create("textures/ground.png"); 
 ground->setPosition3D(Vec3(origin.x, origin.y - 200, 0)); 
 ground->setRotation3D(Vec3(-90, 0, 0)); 
 this->addChild(ground, 0); 

 // Set camera 
 setCameraMask((unsigned short)CameraFlag::USER1); 
 auto camera = Camera::createPerspective(60, visibleSize.width / visibleSize.height, 1, 5000); 
 camera->setCameraFlag(CameraFlag::USER1); 
 camera->lookAt(Vec3(0, 0, 0), Vec3(0, 1, 0)); 
 camera->setPosition3D(Vec3(0, 0, 500)); 
 addChild(camera); 

Depth test按home键切换到后台再切换到前台后失效的问题只要在没帧的回调(如onDraw)中设置就可以解决。但是启用alpha测试依旧无解…