使用OpenGL的顶点缓存扩展

来源:互联网 发布:人民网网络舆情内参 编辑:程序博客网 时间:2024/04/30 23:18
 摘要
本教程要求你已经掌握基本的OpenGL扩展编程知识。
ARB_vertex_buffer_object扩展是于200312月由体系结构审核委员会(Architecture Review BoardARB)通过的,它工作于大多数的图形卡上(需要合适的驱动程序,哪些之后的显卡能支持呢),但是它如何工作呢?
该扩展将顶点数据传输到图形卡的显存中,从而允许对数据进行快速的访问。
初始化
首先,我们需要确保能够使用扩展函数,由于在Windows上,OpenGL头文件和库文件自1.1版本之后就没有更新过,我们需要使用wglGetProcAddress()来获取这些函数。
 
PFNGLBINDBUFFERARBPROC glBindBufferARB = NULL;
PFNGLGENBUFFERSARBPROC glGenBuffersARB = NULL;
PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL;
//检查扩展是否支持
glBindBufferARB=(PFNGLBINDBUFFERARBPROC)wglGetProcAddress("glBindBufferARB");
glGenBuffersARB=(PFNGLGENBUFFERSARBPROC)wglGetProcAddress("glGenBuffersARB");
glBufferDataARB=(PFNGLBUFFERDATAARBPROC)wglGetProcAddress("glBufferDataARB");
/同时需要一个数组用来保存数据。
GLfloat data[] = {-1.0f, 1.0f, 0.0f,
                   -1.0f, -1.0f, 0.0f,
                    1.0f, -1.0f, 0.0f};
GLuint buffer = 0;
创建缓存
这些函数用来创建缓存,和标准的OpenGL纹理操作类似。
glGenBuffersARB(1, &buffer);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glBufferDataARB(GL_ARRAY_BUFFER_ARB,sizeof(data),data,GL_STATIC_DRAW_ARB);
这段代码做了什么呢?glGenBuffersARB创建一个缓存,glBindBufferARB绑定到该缓存,glBufferDataARB将顶点数组上传到图形卡中。
使用缓存
这一部分很简单:)
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffer);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
是吧?
结论
好了,现在你已经具备基本的顶点缓存扩展编程,希望能给你带来用处!
本文原文:http://www.devmaster.net/articles/oglVertexBuffer/
本文源码:下载(目标另存为)
原创粉丝点击