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

来源:互联网 发布:js删除数组最后一个 编辑:程序博客网 时间:2024/05/22 06:42

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:

1411954477315412.jpg


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:

1411954545421393.jpg


来源网址:http://blog.csdn.net/cbbbc/article/details/39621827

0 0
原创粉丝点击