最近我都在学习OpenGL,学习过程中遇到了VBO和VAO这两个很有用的概念。VBO,全名Vertex Buffer Object。它是GPU里面的一块缓冲区,当我们需要传递数据的时候,可以先向GPU申请一块内存,然后往里面填充数据。最后,再通过调用glVertexAttribPointer把数据传递给Vertex Shader。而VAO,全名为Vertex Array Object,它的作用主要是记录当前有哪些VBO,每个VBO里面绑定的是什么数据,还有每一个vertex attribute绑定的是哪一个VBO。
但是在Cocos2d-x3.2版本下,VAO在IOS和MAC环境下会默认打开。而在Window环境、Android环境和Blackberry环境下,VAO是默认关闭的,这是因为部分Window环境下的显卡或Android、Blackberry设备不支持。
那么,我们当前设备环境是支持,但是Cocos2d-x引擎却默认关闭了,但是我们又很想在这些环境下使用VAO来储存我们的顶点数据,那么我们又该怎样做呢?
经过我一个多小时的努力探索,可以做如下的修改以达到开启VAO。其实开启这个动词很简单,就是把某些代码注释就可以了,哈哈哈!
步骤如下:
1.打开目录..\cocos2d\cocos\base下的ccConfig.h文件。如图1。
图1:
2.打开ccConfig.h文件,搜索关键词CC_TEXTURE_ATLAS_USE_VAO,定位到代码1。
代码1:
#ifndef CC_TEXTURE_ATLAS_USE_VAO
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
#define CC_TEXTURE_ATLAS_USE_VAO 1
#else
/* Some Windows display adapter driver cannot support VAO. */
/* Some android devices cannot support VAO very well, so we disable it by default for android platform. */
/* Blackberry also doesn't support this feature. */
#define CC_TEXTURE_ATLAS_USE_VAO 0
#endif
#endif
从代码1中的,我们很明显看到上面所说的在ISO和MAC环境下开启,在其他环境下关闭的情形。到这里了,那么我们又该怎样做?从代码1中,我们看到Cocos2d-x对默认开启和默认关闭是采用了条件预处理了。那么我们以其道而行之,也就是说在条件下都开启VAO,即“#define CC_TEXTURE_ATLAS_USE_VAO 1”。那么就有了步骤3了。
3.修改代码1,得到代码2。
代码2:
#ifndef CC_TEXTURE_ATLAS_USE_VAO
#define CC_TEXTURE_ATLAS_USE_VAO 1
//#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
// #define CC_TEXTURE_ATLAS_USE_VAO 1
//#else
/* Some Windows display adapter driver cannot support VAO. */
/* Some android devices cannot support VAO very well, so we disable it by default for android platform. */
/* Blackberry also doesn't support this feature. */
// #define CC_TEXTURE_ATLAS_USE_VAO 0
// #endif
#endif
哈哈哈,开启某项功能就是注释代码。
4.重新编译链接程序,最后看到效果图,如图2。 我在电脑和Android手机上运行都可以,如果这都不可以使用VAO,应该是你的设备不支持了。
图2:
如需转载,请标明出处:http://blog.youkuaiyun.com/cbbbc/article/details/39621827