Как узнать поддерживает ли видеокарта opengl

Обновлено: 06.07.2024

Нашел как определить версию поддерживаемую установленным драйвером - через glGetString( GL_VERSION ). А вот как определить какую максимальную версию OpenGL поддерживает видеокарта?

Очевидно, что поддерживает или не поддерживает видеокарта все спецификации конкретной версии OpenGL - знает разве что производитель этой видеокарты.
Если же вы хотите заниматься садо-мазо, то вариант только один - вытаскивать идентификатор карты доступными способами и хранить собственные списки.
Только зачем.

создай контекст через wglCreateContext (не через wglCreateContextAttribs) . он будет с максимальной версией гл.

slava73
>Нашел как определить версию поддерживаемую установленным драйвером - через glGetString( GL_VERSION ). А вот как определить какую >максимальную версию OpenGL поддерживает видеокарта?
так выше драйвера не прыгнешь ведь.
Пользователь знает что он приобрёл. Соответственно догадывается где взять драйвер. И уж вряд ли производители видео напишут драйвера без последней версии поддержки OpenGL. А если и напишут без поддержки последней версии, что вряд ли, то где тогда брать драйвера? Даже если и знать, что видеокарта поддерживает такую-то версию.

KKH
ты бред написал, все видеокарты делают сразу с закладом на будущее. Кроме того драва могут быть старыми

slava73
Видеокарта никакую версию OpenGL не поддерживает, потому что видеокарта вообще ничего не знает про OpenGL. OpenGL это API.
Вот какую поддержку сделают в драйвере, такая и будет.

HolyDel
>создай контекст через wglCreateContext (не через wglCreateContextAttribs) . он будет с максимальной версией гл.
Не правда, зависит от дров.
Вот у меня wglCreateContext создавал контекст OpenGL 1.1, пока дрова не обновил.

nes
> Не правда, зависит от дров.
ну я неточно выразился. максимальная версия поддерживаемая системой (видеокарта + драйвера)

Radeon HD от 2xxx и GeForce от 8xxx поддерживают 3.3, HD от 5xxx - OpenGL 4.4 (теоретически - драйвера ещё не дописаны, и даже 4.3 ещё вроде не готова). NVidia не знаю, не слежу за ней. Осталось только в коде узнать название карты и распарсить его.

N1
> зачем парсить информацию, которая для этого не предназанчена, когда есть способ
> проверить на практике, поддерживается ли нужная версия текущим адаптером с
> текущим драйвером.
Так ему пофигу на драйвер, ему нужна версия, которую карта может потянуть, если бы был нужный драйвер. А то часто можно встретить на картах Radeon HD 4xxx поддерживаемую версию 2.0 или 2.1, хотя, если бы был нормальный драйвер, было бы 3.3. Сейчас драйверы уже вроде почти догнали версию OpenGL. А на новых, ещё не вышедших картах, будут только новые драйверы, поэтому для них GL_VERSION будет возвращать более близкие к максимальным значения.
Итог: надо определять версию двумя способами: парсить строку и через GL_VERSION. И брать максимальную из них. Если строка неизвестна, то ориентироваться только на GL_VERSION. Результат не всегда будет точным, но ближе, чем просто через GL_VERSION.
А вообще зачем это надо?


он либо сам не придумал, либо имел ввиду все таки версию с учетом поддержки и драйвером и видеокартой. на второй вариант он получил ответ выше, про создание контекста.

даже в софте типа OpenGL extension viewer показывается только то, что поддерживается комбинацией текущего GPU и драйвера. вряд ли ТС сможет придумать валидную причину, зачем его приложению нужна именно версия, теоретически поддерживаемая железом. нет драйвера - нет поддержки, и все. всякий парсинг имен видеокарты - это вообще бред наркомана. есть device id. если нужна база GPU с поддерживаемыми фишками - они уже существуют.

N1
Может он хочет контрибутить в nouveau?

war_zes
>ты бред написал, все видеокарты делают сразу с закладом на будущее. Кроме того драва могут быть старыми
ого, и как же из старых драйверов вызвать функции новых ? Никогда не слышал о том, что видеокарты работали работали и вдруг по команде свыше стали в два раза быстрее работать (если конечно речь не про баги).

N1
>надеюсь, у тебя нет доступа к компилятору.
тебе не повезло. Я начальник отдела и у меня работают 2 программиста с доступом к компилятору, которые кодят весь мой бред пока я занят своими делами.

>The only way to know if your OpenGL implementation supports a particular version is to attempt to create a context with that version and see if you get a >valid context as a result. wglCreateContextAttribsARB will either return the version you requested (or a backwards-compatible higher version), or it will fail
>(On failure wglCreateContextAttribsARB returns NULL).

Я не про в OpenGL, хвастать не буду, но если у меня нет функционала (API), который может создать контекст последней весии GL, то возвращался всегда fail. Может подскажешь как без обновления драйвера получить true ?

Видеокарта никакую версию OpenGL не поддерживает, потому что видеокарта вообще ничего не знает про OpenGL. OpenGL это API.
Вот какую поддержку сделают в драйвере, такая и будет.
По вашему выходит если драйвер поддерживает, то даже на riva tnt я смогу юзать все функции opengl 3.0 ? вряд ли ТС сможет придумать валидную причину, зачем его приложению нужна именно версия, теоретически поддерживаемая железом.
Если поддержка зависит только от драйвера, то причин действительно нет. Если же и от видяшки, то как минимум мне надо знать как писать графическое приложение, какие функции и расширения OpenGL использовать, чтобы оно корректно работало на всех системах, где планируется его запуск.

slava73
> то даже на riva tnt я смогу юзать все функции opengl 3.0 ?

Имеется ввиду, что драйвер может не поддерживать в той или иной мере фичи . Ориентация на видеокарту - это не тру подход

Читайте также: