Почему glGetIntegerv для GL_NUM_SHADER_BINARY_FORMATS генерирует GL_INVALID_ENUM? - PullRequest
1 голос
/ 08 января 2012

Я использую официальный порт Android SDL 1.3 и использую его для настройки рендерера GLES2.Это работает для большинства устройств, но для одного пользователя, это не работает.Вывод журнала показывает следующую ошибку:

error  of type 0x500 glGetIntegerv

Я посмотрел 0x500, и это относится к GL_INVALID_ENUM.Я проследил, где проблема возникает в следующем коде внутри библиотеки SDL: (полный исходный код довольно велик, и я вырезал записи и основные строки проверки ошибок, поэтому дайте мне знать, если я не включил достаточно информации здесь)

glGetIntegerv( GL_NUM_SHADER_BINARY_FORMATS, &nFormats );
glGetBooleanv( GL_SHADER_COMPILER, &hasCompiler );
if( hasCompiler )
    ++nFormats;
rdata->shader_formats = (GLenum *) SDL_calloc( nFormats, sizeof( GLenum ) );
rdata->shader_format_count = nFormats;
glGetIntegerv( GL_SHADER_BINARY_FORMATS, (GLint *) rdata->shader_formats );

Сразу после последней строки (glGetIntegerv для GL_SHADER_BINARY_FORMATS), glGetError () возвращает GL_INVALID_ENUM.

1 Ответ

1 голос
/ 16 января 2012

Проблема в том, что расширение GL_ARB_ES2_compatibility неправильно поддерживается в вашей системе.

Под GL_INVALID_ENUM это означает, что он не знает перечисления GL_NUM_SHADER_BINARY_FORMATS и GL_SHADER_BINARY_FORMATS, которые являются частью указанного расширения.

Напротив, GL_SHADER_COMPILER был распознан, что странно.

Вы можете попробовать использовать GL_ARB_get_program_binary и использовать эти два вместо:

#define GL_NUM_PROGRAM_BINARY_FORMATS                                0x87fe
#define GL_PROGRAM_BINARY_FORMATS                                    0x87ff

Обратите внимание, что они отличаются от:

#define GL_SHADER_BINARY_FORMATS                                     0x8df8
#define GL_NUM_SHADER_BINARY_FORMATS                                 0x8df9

Но они должны делать то же самое.

...