Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: ecspertiza от Октябрь 10, 2012, 11:30



Название: Получение информации о видеокарте
Отправлено: ecspertiza от Октябрь 10, 2012, 11:30
Понадобилось тут получить информацию о видеокарте которая установлена у пользователя. Решил делать через opengl так как вроде способ кроссплатформенный. Там все достаточно просто

Код:
    const GLubyte *m_pVendor;
    const GLubyte *m_pVersion;
    const GLubyte *m_pRenderer;
    const GLubyte *m_pExtensions;

    m_pVendor = glGetString(GL_VENDOR);
    m_pVersion = glGetString(GL_VERSION);
    m_pRenderer = glGetString(GL_RENDERER);

беда только в том что код работает в пределах контекста opengl иначе возвращает 0. Я естественно попробовал вариант в лоб. Создал QGLWidget сделал ему show()(если не сделать show() glGetString  вернет null) и все отрабатывает хорошо, но хотелось бы инфу получать фоном, не показывая разные виджеты юзверю, да и вариант не очень хороший как мне кажется. Решил поиграться с QGLContext, собственно контекст создается, но при этом glGetString все равно возвращает null. Собственно вопрос, как правильно создать контекст, для получения инфы ?


Название: Re: Получение информации о видеокарте
Отправлено: ecspertiza от Октябрь 10, 2012, 11:39
Эммм.. продолжу сам с собой :) Вот так работает

Код:
    QGLPixelBuffer buff(640,480);
    buff.makeCurrent();

    const GLubyte *m_pVendor;
    const GLubyte *m_pVersion;
    const GLubyte *m_pRenderer;

    m_pVendor = glGetString(GL_VENDOR);
    m_pVersion = glGetString(GL_VERSION);
    m_pRenderer = glGetString(GL_RENDERER);

    printf("Vendor: %s\n", m_pVendor);
    printf("version: %s\n", m_pVersion);
    printf("render: %s\n", m_pRenderer);


Название: Re: Получение информации о видеокарте
Отправлено: Igors от Октябрь 10, 2012, 11:42
Попробуйте сначала создать контекст (QGLContext) - после этого gl должен быть живой. Заметим что на Вындоуз создание контекста не требуется - нужно glewInit, во всяком случае в нативном коде


Название: Re: Получение информации о видеокарте
Отправлено: ecspertiza от Октябрь 10, 2012, 11:47
Создание контекста даже не потребовалось(пост выше) :) Но после создания QGLContext все равно идет возврат null, а если после создания вызвать makeCurrent() для контекста, то все отрабатывает отлично, в первый раз я этого не сделал.