glmapbufferOES и glunmapbuffer не объявлены в opengl-es 2.0

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

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

person Sudhanshu Gupta    schedule 04.07.2011    source источник
comment
Вы смотрели на эти два заголовочных файла? Те, к которым я могу получить доступ в Khronos, не содержат этих двух методов. khronos.org/registry/gles/api/2.0/gl2ext.h khronos.org/registry/gles/api/2.0/gl2 .ч   -  person Bob    schedule 04.07.2011
comment
@bob yaah, я видел это, но думаю khronos.org/registry/ gles/api/2.0/gl2ext.h содержит glMapBufferOES и glUnmapBufferOES. Тот, что содержит /* GL_OES_mapbuffer */, если вы имеете в виду что-то другое, уточните меня.   -  person Sudhanshu Gupta    schedule 05.07.2011


Ответы (2)


Суффикс …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);
person datenwolf    schedule 05.07.2011
comment
Привет, datenwolf. Я изменил вопрос из-за ошибок, поэтому не могли бы вы взглянуть на это. - person Sudhanshu Gupta; 06.07.2011
comment
@surbhi: Трудно сказать, в чем именно проблема, только по этому коду. Сообщение об ошибке, которое вы получаете, связано с тем, что Mesa сообщает вам, что созданный вами контекст EGL не будет аппаратно ускорен. Чтобы понять, почему ничего не появляется, мне нужно увидеть: настройку преобразования, загруженные шейдеры (OpenGL-ES 2 требует, чтобы вы загружали шейдеры) и схему функции рисования. - person datenwolf; 06.07.2011
comment
хорошо, тогда я набираю здесь весь код, пожалуйста, скажите мне, где мне не хватает, потому что только после этого я могу идти дальше, и спасибо за ваши ответы - person Sudhanshu Gupta; 06.07.2011

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

person Nicol Bolas    schedule 04.07.2011
comment
Необязательная функциональность очень распространена во встроенных средах. Например, встроенный графический процессор может иметь вычислительные возможности, но у всей системы слишком мало оперативной памяти для поддержки определенных возможностей, поэтому он отключен. - person datenwolf; 04.07.2011
comment
@Nicol @datenwolf Я каким-то образом отредактировал вопрос, что еще мне сделать, чтобы он работал. Скажите мне, пожалуйста ,. Спасибо за ваши советы - person Sudhanshu Gupta; 05.07.2011