Столкнулся с интересной проблемой, а потом как показалось даже ужасающий. В модуле 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();
}
смотрю в справочнике таблицу - есть константы 0x40 (2.1) и 0x20 (2.0). Ты как-будто бы 1 отнял от числа. Скопируй сюда весь enum QGLFormat::OpenGLVersionFlag
а версии 1.1 соответствует 0x01
кстати, там тип не int, а uint32_t
ааа, всё, дошло до меня. Там же комбинация битов! Вот и ответ
3f - это версии от 1.1 до 2.0 включительно
Вот 3f лежит между 0x20 и 0x40. Но это не дает никакой информации. На виддоус должно быть 0x01 по определению, я даже брал функции из OpenGL 1.2, чтобы проверить определяются они или нет. Прбовал через switch()
switch(QGLFormat::openGLVersionFlags())
{
case QGLFormat::OpenGL_Version_1_1:
QMessageBox::information(0, "OpenGL info", "Version 1.1");
break;
// ... так до 2.1
default: QMessageBox::information(0, "OpenGL info", "???");
}
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
...
QGLFormat::OpenGLVersionFlags f=QGLFormat::openGLVersionFlags();
Т.е. он просуммировал от _1_1 до _2_0. Тогда получается он связался не WGL, а с драйвером видеокарты...
Спасибо!
QGLFormat::OpenGLVersionFlags f=QGLFormat::openGLVersionFlags();
if(f < QGLFormat::OpenGL_Version_1_1 )
{ // 0
}
else
if(f < QGLFormat::OpenGL_Version_1_2 )
{ // 1.1
}
else
if(f < QGLFormat::OpenGL_Version_1_3 )
{ // 1.2
}
else
...
не понял, чего хочешь добиться
T - минимальная версия, на которую проверяем (1.4)
T=
00001000
mask=((T-1) | T) =
00001111
V =
00011111
Не понял, зачем так мудрить. Чем плох код поста 7.
registr, это разный код. В №7 - перебор значений, а в №10 - определение, что версия в системе больше или равна версии, использованной в программе
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)