glmapbufferOES和glunmapbuffer在opengl-es 2.0中未声明

时间:2011-07-04 08:56:13

标签: c++ c opengl-es buffer opengl-es-2.0

我正在使用kronos标头在ubuntu 10.10中进行编码,但是我被卡住了,因为无论何时我尝试编译代码,都会出现错误:

glmapbuffer未声明 glunmapbuffer未声明

我的头文件中有gl2.h和gl2ext.h。任何人都可以告诉我

如果我这样做,我还能做些什么:

    glBindBuffer(GL_ARRAY_BUFFER, uiVBO[surfnum]);
    glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat)*triNum[surfnum], NULL, GL_STATIC_DRAW);
    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);//clean up behind us

2 个答案:

答案 0 :(得分:4)

后缀…OES表示这些函数不是核心OpenGL-ES规范的一部分,但被视为可选功能,非常类似于标准OpenGL规范中提到的…ARB扩展。与标准OpenGL一样,访问扩展的方法(如果可用)取决于目标平台。

但是在您的情况下,由于您尝试在标准桌面Linux上进行编译,因此如果您坚持映射缓冲区,我建议采用以下解决方法。

/* before using glMapBufferOES */
#ifdef SYSTEM_HAS_STD_OPENGL
#define glMapBufferOES glMapBuffer
#define glUnmapBufferOES glUnmapBuffer
#endif

当然,您可以使用数据填充代理数组,将其提供给glBufferData而不是映射:

glBindBuffer(GL_ARRAY_BUFFER, uiVBO[surfnum]);
size_t buf_size = 9*sizeof(GLfloat)*triNum[surfnum];
GLfloat * const pData = malloc(buf_size);
for(i=0; i<triNum[surfnum]; ++i) {
    memcpy(pData+i*9,   triArray[surfnum][i].pt1, 3*sizeof(GLfloat));
    memcpy(pData+i*9+3, triArray[surfnum][i].pt2, 3*sizeof(GLfloat));
    memcpy(pData+i*9+6, triArray[surfnum][i].pt3, 3*sizeof(GLfloat));
}
glBufferData(GL_ARRAY_BUFFER, buf_size, pData, GL_STATIC_DRAW);
free(pData);

答案 1 :(得分:0)

缓冲区对象映射的OpenGL ES 2.0 Specification状态是“不需要”。现在,ES 2.0规范是我见过的最奇怪的规范,因为它列出了“不需要”的功能。但至少,它意味着它不必存在。根据{{​​3}},缓冲区对象映射由GL_OES_mapbuffer扩展控制。