OpenGL: Extensions (Расширения). (комментарии)
Это сообщение сгенерировано автоматически.
в OpenGL 3.x вызов glGetString( GL_EXTENSIONS ) -- ошибка.
вместо этого есть glGetStringi
для совместимости можно написать такую обвязку:
std::string GetExtensions(void ) { std::string ret = ""; int numExt = 0; glGetIntegerv( GL_NUM_EXTENSIONS, &numExt ); for ( int i = 0; i < numExt; ++i ) { ret += reinterpret_cast<const int8 *>( glGetStringi( GL_EXTENSIONS, i)); if ( i + 1 < numExt ) ret += " "; } return ret; }
main
> Прекрасная статья!
Статье тыщу лет...
можно еще проще:
char *cString = (char *) glGetString(GL_EXTENSIONS);
if ((strstr(cString, "GL_ARB_shader_objects" ) == NULL)
{.....................}
WanRus
> можно еще проще:
нельзя так.
потому что может появится потом расширение к примеру GL_ARB_shader_objects_with_very_cool_features_non_compatible
при котором GL_ARB_shader_objects не обязан присутствовать и твоя проверка - FAIL.
пишите правильно
Вставлю свои 5 копеек:
int glgExtensionSupportedGL2(const char *name) { char *str = ( char *)glGetString( GL_EXTENSIONS); if ( str == NULL) return GLG_EXT_ERROR; stringstream ss( str); string token; while ( ss >> token) { if ( token == name) return GLG_EXT_SUPPORTED; } return GLG_EXT_NOTSUPPORTED; } int glgExtensionSupportedGL3( const char *name) { GLint n = 0; glGetIntegerv( GL_NUM_EXTENSIONS, &n); for ( int i = 0; i < n; i++) { if ( !strcmp( name, ( const char *)glGetStringi( GL_EXTENSIONS, i))) return GLG_EXT_SUPPORTED; } return GLG_EXT_NOTSUPPORTED; } int wglgExtensionSupported( const char *name) { char *str = ( char *)wglGetExtensionsStringARB( wglGetCurrentDC( )); if ( str == NULL) return GLG_EXT_ERROR; stringstream ss( str); string token; while ( ss >> token) { if ( token == name) return GLG_EXT_SUPPORTED; } return GLG_EXT_NOTSUPPORTED; }
main
> а юзать, например, как это сделано в некоторых демках XProgera
Это как?
main
Можно и так, но тут я вижу проблему, например расширение может быть на стадии разработки, но функции уже доступны - может работать чтото не так как надо... Лучше уж перестраховаться и не использовать такое...
> Посмотри на дату, когда сообщение сгенерировано ))
Бот просто эстонец... :)
Статья от 15 февраля 2002...
Спасибо за статью.
Сегодня вот очень помогло.
Вот почему у wgl надо передавать HDC? Что, на одной машине в одном HDC может поддерживать, а в дргуом не-не-не?
MarkoPolo
Да.
@!!ex
О.о
MarkoPolo
HDC может быть не только окна, но ещё MemoryDC или даже принтера.
Правка: ну и соотвественно для них будет софтварная реализация от МС
Тема в архиве.