glmapbufferOES и glunmapbuffer, необъявленные в opengl-es 2.0 - PullRequest
2 голосов
/ 04 июля 2011

Я делаю кодирование в Ubuntu 10.10 с заголовками kronos, но я застреваю, потому что всякий раз, когда я пытаюсь скомпилировать код, появляется ошибка:

незадекларированный glmapbuffer глунмапбуфер необъявленный

У меня есть 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 ]

4 голосов
/ 05 июля 2011

Суффикс …OES указывает, что эти функции не являются частью базовой спецификации OpenGL-ES, но считаются необязательными функциями, очень похожими на расширения …ARB, упомянутые в стандартных спецификациях OpenGL.Как и в случае стандартного 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);
0 голосов
/ 04 июля 2011

В спецификации OpenGL ES 2.0 указано, что сопоставление объектов буфера "не требуется".Теперь спецификация ES 2.0 является самой странной спецификацией, которую я когда-либо видел, поскольку в ней перечислены функции, которые «не требуются».Но, по крайней мере, это означает, что он не должен присутствовать.Согласно реестру расширения отображение объектов буфера регулируется расширением GL_OES_mapbuffer.

...