Определение поддерживаемой версии OpenGL с помощью модуля QtOpenGL |
Здравствуйте, гость ( Вход | Регистрация )
Определение поддерживаемой версии OpenGL с помощью модуля QtOpenGL |
registr |
24.1.2011, 19:37
Сообщение
#1
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
Столкнулся с интересной проблемой, а потом как показалось даже ужасающий. В модуле QtOpenGL есть специальный метод, чтобы определить поддерживаемую платформой версию OpenGL. В Ассистанте написано мол так, используйте функцию QGLFormat::openGLVersionFlags(), чтобы определить поддерживаемую версию OpenGL на вашей платформе. Теперь через модуль QtOpenGL должна произойти связь с системными реализациями WGL, GLX, AGL и возвращена табличная констанста в 16-системе. На Windows по определению должна быть констаната, соответствующая версии 1.1, так как WGL поддерживате только 1.1
Вместо этого на Виндоус получаю число 3f - его нет в таблице, на ОпенСюзе 11.2 получаю 1f - его тоже нет в таблице. Пробовал через switch(), тогда просто нет совпадений и получаю дефаулт. Как быть? Похоже на баг или у меня кривые руки? |
|
|
Алексей1153 |
24.1.2011, 19:55
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
смотрю в справочнике таблицу - есть константы 0x40 (2.1) и 0x20 (2.0). Ты как-будто бы 1 отнял от числа. Скопируй сюда весь enum QGLFormat::OpenGLVersionFlag
а версии 1.1 соответствует 0x01 кстати, там тип не int, а uint32_t ааа, всё, дошло до меня. Там же комбинация битов! Вот и ответ 3f - это версии от 1.1 до 2.0 включительно Сообщение отредактировал Алексей1153 - 24.1.2011, 19:53 |
|
|
registr |
24.1.2011, 20:06
Сообщение
#3
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
Вот 3f лежит между 0x20 и 0x40. Но это не дает никакой информации. На виддоус должно быть 0x01 по определению, я даже брал функции из OpenGL 1.2, чтобы проверить определяются они или нет. Прбовал через switch()
В ответ получаю знаки вопроса. ааа, всё, дошло до меня. Там же комбинация битов! Вот и ответ 3f - это версии от 1.1 до 2.0 включительно не понял |
|
|
Алексей1153 |
24.1.2011, 20:12
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
3f - это комбинация битовых флагов
свич тут делу не поможет. Только так
|
|
|
registr |
24.1.2011, 20:51
Сообщение
#5
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
QGLFormat::OpenGLVersionFlags f=QGLFormat::openGLVersionFlags();
Т.е. он просуммировал от _1_1 до _2_0. Тогда получается он связался не WGL, а с драйвером видеокарты... Спасибо! |
|
|
Алексей1153 |
24.1.2011, 20:54
Сообщение
#6
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
registr |
24.1.2011, 21:10
Сообщение
#7
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
Раскрывающийся текст точно) Получается из-за хитрых чисел всегда не будет хватать одного разряда, чтобы перейти на следующую версию, поэтому
Сообщение отредактировал registr - 24.1.2011, 21:13 |
|
|
Алексей1153 |
24.1.2011, 21:35
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
не понял, чего хочешь добиться
Сообщение отредактировал Алексей1153 - 24.1.2011, 21:36 |
|
|
registr |
24.1.2011, 21:47
Сообщение
#9
|
Участник Группа: Участник Сообщений: 115 Регистрация: 16.11.2009 Пользователь №: 1234 Спасибо сказали: 8 раз(а) Репутация: 1 |
|
|
|
Алексей1153 |
24.1.2011, 23:08
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
T - минимальная версия, на которую проверяем (1.4)
считали версию V (1F)
если mask<=V , то можно работать Сообщение отредактировал Алексей1153 - 24.1.2011, 23:08 |
|
|
Текстовая версия | Сейчас: 22.12.2024, 9:12 |