crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Определение поддерживаемой версии 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
#include <QtGui>
#include <QIODevice>

void getOGLVersion();

int main(int argc, char** argv)
{  
   QApplication app(argc, argv);

   getOGLVersion();

   //...

   return app.exec();

void getOGLVersion()
{
   int i=(int)QGLFormat::openGLVersionFlags();
   QFile a("info.txt");
   a.open(QIODevice::WriteOnly);
   QTextStream out(&a);
   out << hex << i;
   a.close();
}

Вместо этого на Виндоус получаю число 3f - его нет в таблице, на ОпенСюзе 11.2 получаю 1f - его тоже нет в таблице. Пробовал через switch(), тогда просто нет совпадений и получаю дефаулт. Как быть? Похоже на баг или у меня кривые руки?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 24.1.2011, 20:12
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


3f - это комбинация битовых флагов

QGLFormat::OpenGL_Version_1_1 |
QGLFormat::OpenGL_Version_1_2 |
QGLFormat::OpenGL_Version_1_3 |
QGLFormat::OpenGL_Version_1_4 |
QGLFormat::OpenGL_Version_1_5 |
QGLFormat::OpenGL_Version_2_0


свич тут делу не поможет. Только так

QGLFormat::OpenGLVersionFlag f=QGLFormat::openGLVersionFlags(); 

if(f & QGLFormat::OpenGL_Version_1_1 )
{
}
else
if(f & QGLFormat::OpenGL_Version_1_2 )
{
}
else
if(f & QGLFormat::OpenGL_Version_1_3 )
{
}
else
...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 14:51