【Cocos2d-x 3.2】在Cocos2d-x中开启VAO(为Vertex Array Object)

2014-09-29 09:38:2745 次阅读

最近我都在学习OpenGL,学习过程中遇到了VBO和VAO这两个很有用的概念。VBO,全名VertexBufferObject。它是GPU里面的一块缓冲区,当我们需要传递数据的时候,可以先向GPU申请一块内存,然后往里面填充数据。最后,再通过调用glVertexAttribPointer把数据传递给VertexShader。而VAO,全名为VertexArrayObject,它的作用主要是记录当前有哪些VBO,每个VBO里面绑定的是什么数据,还有每一个vertexattribute绑定的是哪一个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:


2.打开ccConfig.h文件,搜索关键词CC_TEXTURE_ATLAS_USE_VAO,定位到代码1。

代码1:

1
2
3
4
5
6
7
8
9
10
#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,即“#defineCC_TEXTURE_ATLAS_USE_VAO1”。那么就有了步骤3了。


3.修改代码1,得到代码2。

代码2:

1
2
3
4
5
6
7
8
9
10
11
#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.csdn.net/cbbbc/article/details/39621827

你可能感兴趣的:(【Cocos2d-x 3.2】在Cocos2d-x中开启VAO(为Vertex Array Object))