glMapBuffer在OpenGL-ES 2.0中未声明

时间:2011-07-04 03:29:11

标签: opengl-es buffer opengl-es-2.0 memcpy

我通过使用kronos和pvrsdk在ununtu 10.10中进行Opengl-es 2.0。现在代码

#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>

========== ||||||||||||||||||||||||||||||||||| == =================

GLfloat *pData = glMapBufferOES (GL_ARRAY_BUFFER, GL_WRITE_ONLY_OES);
            for(i=0; i<triNum[surfnum]; ++i,pData+=9)
            {
                 memcpy(pData, triArray[surfnum][i].pt1, 3*sizeof(GLfloat));
                 memcpy(pData+3, triArray[surfnum][i].pt2, 3*sizeof(GLfloat));
                 memcpy(pData+6, triArray[surfnum][i].pt3, 3*sizeof(GLfloat));
            }
            glUnmapBufferOES (GL_ARRAY_BUFFER);

错误:

src/Hello.cpp: In function 'int main(int, char**)':
src/Hello.cpp:279: error: 'glMapBufferOES' was not declared in this scope
src/Hello.cpp:282: error: 'memcpy' was not declared in this scope
src/Hello.cpp:286: error: 'glUnmapBufferOES' was not declared in this scope

我知道这些都在gl2ext.h中我也包含了这个文件,但仍然给出了错误,我有些遗漏请告诉我。你可以问我任何其他问题或信息。

在我的glext.h中:

/* GL_OES_mapbuffer */
#ifndef GL_OES_mapbuffer
#define GL_OES_mapbuffer 1
#ifdef GL_GLEXT_PROTOTYPES
GL_APICALL void* GL_APIENTRY glMapBufferOES (GLenum target, GLenum access);
GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target);
GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void** params);
#endif
typedef void* (GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access);
typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target);
typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname,     void** params);
#endif

我已经定义了它仍然将这些功能作为未声明的。所以你知道它的任何变化,以便它可以使用。

2 个答案:

答案 0 :(得分:6)

与“普通”OpenGL一样,您必须定义函数指针并显式加载超出“裸骨”的功能。

如果查看标题,你会看到#ifdef GL_GLEXT_PROTOTYPES块,这导致函数原型未生成(实际上,我不确定为什么生成原型的选项存在,它们是对任何人都没有用。) 接下来,您会看到PFNGLMAPBUFFEROESPROC的typedef。这就是你所需要的。

您必须声明一个全局函数指针,例如extern PFNGLMAPBUFFEROESPROC glMapBufferOES;并在启动时初始化它(在检查扩展名的存在之后)。

查看GLEWGlee等库。

(关于memcpy的错误是缺少#include <string.h>

答案 1 :(得分:1)

#include <OpenGLES/ES2/glext.h> 解决了我的问题