Перестали работать некоторые OpenGL приложения и игры, ссылаясь на то, что OpenGL не поддерживается системой. Те, что запускаются, работают очень медленно


Привет друзья. Последние мои статьи были ориентированы на тему графики и видеоадаптеров. Думаю, что тему эту продолжу раскрывать и дальше. В прошлых статьях мы разговаривали про DirectX и шейдеры, сегодня окунемся в мир OpenGL. Узнаем что это такое, где скачать и для чего он нужен. Тема будет рассчитана на тех кто только этих заинтересовался и кому очень интересно узнать что-то новое про компьютеры. Томить не буду начну писать. Приятно вам чтения 🙂

Что такое OpenGL и с чем его едят?

OpenGL — это графический стандарт в области компьютерной графики. На данный момент он является одним из самых популярных графических стандартов во всём мире.

OpenGL переводится как Открытая Графическая Библиотека (Open Graphics Library), это означает, что OpenGL — это открытый и мобильный стандарт. Программы, написанные с помощью OpenGL можно переносить практически на любые платформы, получая при этом одинаковый результат, будь это графическая станция или суперЭВМ.

OpenGL освобождает программиста от написания программ под какое-то конкретное оборудование. Если устройство поддерживает какую-то функцию, то эта функция выполняется аппаратно, если нет, то её реализацией занимается программа-библиотека.

На одном популярном сайте можно найти подробности сего стандарта:

Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг. Говоря более простым языком, вы определяете объекты, задаёте их местоположение в трёхмерном пространстве, определяете другие параметры (поворот, масштаб, …), задаёте свойства объектов (цвет, текстура, материал, …), положение наблюдателя, а библиотека OpenGL позаботится о том чтобы отобразить всё это на экране.

Реализации OpenGL.

Как вы могли понять из выше описанного. Что OpenGL, это всего лишь некая описанная спецификация по 3D графике. Чтобы эту спецификацию преобразить в жизнь необходимо написать (реализовать) код. Код затем упаковывается в специальную библиотеку. И вот таких библиотек существует несколько, от разных программистов.

Первая из этих библиотек называется GLU. Эта библиотека уже стала стандартом и поставляется вместе с главной библиотекой OpenGL. Следующая библиотека, также широко используемая — это GLUT. Это также независимая от платформы библиотека. Она реализует не только дополнительные функции OpenGL, но и предоставляет функции для работы с окнами, клавиатурой и мышкой. Есть ещё одна библиотека похожая на GLUT, называется она GLAUX. Это библиотека разработана фирмой Microsoft для операционной системы Windows. Она во многом схожа с библиотекой GLUT, но немного отстаёт от неё по своим возможностям.

Альтернатива для OpenGL.

Хотя библиотека OpenGL и считается одной из лучших библиотек, но существует она в этой отрасли не одна. Есть у неё один прямой конкурент, о котором я рассказывал в одной из прошлой статей. И этим конкурентом считается Direct3D из пакета DirectX, разработанный фирмой Microsoft. Direct3D создавался исключительно для игровых приложений. Между ними существует множество различий, из наиболее явных можно выделить, что Direct3D осуществляем поддержку начиная с дешёвого оборудования, а OpenGL же поддерживается не на всех графических картах.

Нужно ли устанавливать OpenGL?

В случае если Вы уже установили драйвера на свою видеокарту, то нет. Так как последняя версия OpenGL устанавливается при установке драйверов от вашей графической карты.

Чтобы установить новую версию OpenGL необходимо обновить драйвера вашей видеокарты. Зайдите на сайт производителя Вашей видеокарты: NVIDIA, AMD или прочее. Скачайте последние драйвера для вашей карты, установите их.

Например, моя видеокарта Radeon 7850. Захожу я на сайт www.amd.com нахожу там страничку с моей видеокартой, смотрю технические характеристики.

Как можете заметить, с OpenGL 4.2 мой видеоадаптер дружит. Теперь подбираем драйвера.

Может ли OpenGL работать на одном компьютере с Direct3D?

Да. Обе программы включены в версию Windows, работают на высокой скорости и предоставляют много функций для геймеров и видеоредакторов. Поэтому нет поводу переживать, насчёт их совместного «проживания» на вашем компьютере 🙂

Как включить OpenGL?

На этот вопрос нельзя дать однозначной инструкции. Вообще по умолчанию поддержка сей технологии прописывается создателем игры ещё в момент написания кода. И использование скажем DirectX или OpenGL, может настраиваться через определённый пункт в меню игры, либо включать самой игрой по-умолчанию. Поэтому если создатель игры не выпускает дополнительный обновлений и инструкций к ним по установке скажем дополнительных библиотек, то нет смысла Вам думать об этом вопросе . Ну а если какие-то дополнения вышли, скажем на тот же Counter Strike 1.6, энтузиасты написали чит (а чит — это плохо!! атата), то для этого установки необходимо скачать небольшой файл.dll и закинуть в корневую директорию игры, а затем в настройках игры выбрать пункт OpenGL.

За счёт этого игра начинает использовать функции написанные внутри этого файла.

Вывод

Вот и пробежались мы по ещё одной библиотеке для работы с графикой. OpenGL скажем такая специфичная вещь, которая в большей степени применяется в профессиональной деятельности для 3D моделей. В играх по большему счету хватает и функций Direct3D, да даже больше. Взять недавно вышедшую версию 12. Но OpenGL тоже не стоит на месте и с определённым промежутком времени выпускает новые версии из последних — версия 4.5 от 11 августа 2014 года.



узнать версию opengl linux (4)

Самый простой и быстрый способ - использовать диагностический инструмент, такой как GPU Caps Viewer .

Вы также можете использовать glGetString(GL_VERSION) но помните, что версия, которую вы хотите отобразить, является версией данного контекста OpenGL, что не обязательно является самым высоким, что может сделать ваш GPU. Однако, если вы создаете контекст с настройками по умолчанию, вы, вероятно, получите максимально возможный контекст OpenGL в профиле совместимости, так что да, этот метод может быть полезен.

Кроме того, поскольку glGetString(GL_VERSION) относится к данному контексту OpenGL, вам необходимо создать его заранее. На самом деле для вызова любой функции gl* требуется контекст GL.

Действительно, обновление драйверов может дать вам более высокую версию GL, но маловероятно, что основная версия изменится. Например, если у вас будет поддержка GL 3.1, очень вероятно, что последние драйверы дадут вам GL 3.3, но не GL 4.0.

Я использую Windows 7. Я программирую с помощью OpenGL. Но я обнаружил, что есть некоторые возможности, которые я могу использовать. Поэтому я хочу проверить версию OpenGL на моей системе. Я использую код ниже, чтобы проверить его

Const char* version = (const char*)glGetString(GL_VERSION);

Но я получаю нулевой указатель. И если я хочу обновить OpenGL, что мне делать?

попробуйте использовать следующий код, он работает для меня:

Cout << "OpenGL Version: " << glGetString(GL_VERSION) << endl;

Убедитесь, что вы включили строку и iostream в свою программу.

Вам нужен ток контекста GL, прежде чем вы сможете спросить, какая у вас версия.

Итак, сначала создайте контекст, вызовите wglMakeCurrent на нем, и после этого вы сможете вызвать glGetString.

Версия, о которой сообщается, поступает из установленного вами драйвера. Версия OpenGL, которую может поддерживать ваше оборудование, сама по себе не «обновляется» (потому что некоторые аппаратные функции будут отсутствовать, чтобы поддерживать самые последние и самые лучшие).

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

Вам нужно создать контекст OpenGL (WGL) перед вызовом glGetString (GL_VERSION):

#include #include #pragma comment (lib, "opengl32.lib") LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); int WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd) { MSG msg = {0}; WNDCLASS wc = {0}; wc.lpfnWndProc = WndProc; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND); wc.lpszClassName = L"oglversionchecksample"; wc.style = CS_OWNDC; if(!RegisterClass(&wc)) return 1; CreateWindowW(wc.lpszClassName,L"openglversioncheck",WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,640,480,0,0,hInstance,0); while(GetMessage(&msg, NULL, 0, 0) > 0) DispatchMessage(&msg); return 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_CREATE: { PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), 1, PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER, //Flags PFD_TYPE_RGBA, //The kind of framebuffer. RGBA or palette. 32, //Colordepth of the framebuffer. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, //Number of bits for the depthbuffer 8, //Number of bits for the stencilbuffer 0, //Number of Aux buffers in the framebuffer. PFD_MAIN_PLANE, 0, 0, 0, 0 }; HDC ourWindowHandleToDeviceContext = GetDC(hWnd); int letWindowsChooseThisPixelFormat; letWindowsChooseThisPixelFormat = ChoosePixelFormat(ourWindowHandleToDeviceContext, &pfd); SetPixelFormat(ourWindowHandleToDeviceContext,letWindowsChooseThisPixelFormat, &pfd); HGLRC ourOpenGLRenderingContext = wglCreateContext(ourWindowHandleToDeviceContext); wglMakeCurrent (ourWindowHandleToDeviceContext, ourOpenGLRenderingContext); MessageBoxA(0,(char*)glGetString(GL_VERSION), "OPENGL VERSION",0); wglDeleteContext(ourOpenGLRenderingContext); PostQuitMessage(0); } break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }

Пакет файлов под названием OpenGL в большинстве случаев требуется пользователям для корректного запуска определенных игр на компьютере под управлением операционной системы Windows 7. Если данный драйвер отсутствует или его версия устарела, программы просто не будут включаться, а на экране отобразится соответствующее уведомление с просьбой инсталляции или обновления ПО. В этой статье мы максимально развернуто расскажем о загрузке новых библиотек OpenGL.

В первую очередь стоит разобраться, каким же образом инсталлируется рассматриваемый компонент на ПК. Все необходимые файлы ставятся вместе с драйверами графического адаптера. Поэтому сперва следует обновить программное обеспечение этого комплектующего, а потом переходить к разбору альтернативного метода.

Когда у вас установлен самый свежий драйвер на видеокарту и обновлений больше нет, при этом все равно появляется уведомление о необходимости обновления OpenGL, сразу переходите к третьему способу. Если и этот вариант не принес никаких результатов, значит, ваше оборудование не поддерживает последние библиотеки. Рекомендуем задуматься о выборе новой видеокарты.

Способ 1: Обновление драйверов видеокарты в Windows 7

Как уже было сказано выше, компоненты OpenGL ставятся вместе с файлами графического адаптера. В Windows 7 присутствует несколько методов их обновления. Каждый из них подходит в разных ситуациях и требует от пользователя выполнения определенных действий. Перейдите к статье по ссылке ниже, чтобы детально ознакомиться со всеми способами. Выберите подходящий и воспользуйтесь предоставленными инструкциями. По завершении процесса достаточно перезагрузить компьютер и проверить работоспособность игр или других программ, которые требовали наличия свежей версии библиотеки.

Способ 2: Обновление компонентов в фирменной утилите видеокарты

Сейчас основными производителями графических адаптеров являются AMD и NVIDIA. У каждого имеется собственный софт, который обеспечивает корректную работу с операционной системой и позволяет обновлять ПО. Обладателям видеокарт NVIDIA советуем обратиться к материалу по следующей ссылке, чтобы разобраться с установкой новой версии драйвера OpenGL в GeForce Experience .

Владельцам карточек от AMD нужно ознакомиться с другими статьями, поскольку в данном случае все действия выполняются в Catalyst Control Center либо в Radeon Software Adrenalin Edition , в зависимости от типа установленного ПО.

Способ 3: Обновление DirectX

Не самым эффективным, но иногда работающим методом является установка новых компонентов библиотеки DirectX. Порой в ней находятся подходящие файлы, которые позволяют нормально функционировать необходимым играм или программам. Сначала нужно узнать, какой DirectX уже установлен на вашем компьютере. Для этого ознакомьтесь с инструкцией в статье ниже.

На данный момент последней версией для ОС Виндовс 7 является DirectX 11. Если у вас инсталлирована более ранняя библиотека, советуем обновить ее и проверить работоспособность ПО. Развернуто на эту тему читайте в другом материале.

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

Иногда для запуска приложения или игры в ОС Windows может потребоваться название пакета установленных в операционной системе программ.

А, значит, и ответить на вопрос, как узнать какой установлен.

Зная точную версию этого пакета, первоначально используемого только для игровых целей, но затем применяемого и для поддержки проигрывания мультимедиафайлов, и для выполнения других задач, можно понять, достаточно ли ресурсов вашего ПК, или требуется обновление (самой программы или элементов компьютера).

Что даёт новая версия?

Значительная часть программного обеспечения работает только в соответствующей среде – с нужными драйверами и пакетами программ.

Например, Adobe Photoshop требует установленного ПО OpenGL, а практически все современные игры не будут запускаться без .

Точное знание мультимедийного пакета (а также ресурсов компьютера) позволяет избежать следующих проблем:

  • Покупки или скачивания приложений, которые не поддерживаются системой;
  • Попыток установить более ранние версии DirectX.

Для большинства приложений, требующих специального программного обеспечения типа DirectX, оно идёт в комплекте. А в процессе установки предлагается её установить на компьютере или обновить.

Но, если автоматического обновления не происходит , но программа по какой-то причине не запускается, потребуется узнать мультимедийный пакет, чтобы понять, не является ли причиной проблемы его несовместимость с приложением.

Простой способ определения

Узнать версию DirectX на недавно установленной системе довольно просто – в современных ОС пакет уже идёт в комплекте с Windows. И определить разновидность можно по названию системы:

  • В одной из самых распространённых систем Windows 7 встроенным является DirectX 10, подходящий для большинства графических приложений, игр и мультимедийных файлов;
  • В устаревшей Windows XP по умолчанию была установлена 9-я разновидность пакета, которую часто приходилось обновлять для запуска более современных программ;
  • В Windows 8 встраивался DirectX 11;
  • В комплекте с последней, десятой «Виндоус» могла идти как 11-я, так и 12-я версия программы.

Определение с помощью встроенных средств

Для точного определения версии DirectX с помощью встроенного средства диагностики, требуется:

  1. Открыть меню выполнения команд, для чего следует нажать одновременно клавиши Windows+«R»;
  2. Ввести команду dxdiag;
  3. В открывшемся после выполнения команды окне на первой вкладке найти информацию о программе, которая находится внизу списка.

Совет! Так как система показывает только целые значения, то иногда показанная информация о DirectX 11 может означать, что на самом деле в системе установлена версия 11.1 или 11.2. Однако в большинстве случаев такие подробности не имеют значения.

Ещё одним местом, где узнать версию DirectX, является панель управления видеокарты, если она установлена.

Например, у продукции компании NVidia такая информация выдаётся при просмотре сведений о системе.

Кроме того, есть специальные утилиты , тоже выдающие все нужные сведения о системе, включая и версию . Например, ранее называвшаяся Everest.

Бесплатные версии этой утилиты можно найти в Интернете и установить на свой компьютер – в дальнейшем она понадобится не только для определения, какой версии у вас DirectX.

Можно найти похожие возможности и у других утилит.

Что делать дальше?

Итак, информация, какая версия программного пакета установлена, получена. И теперь, для того чтобы ваша программа или игра запустилась, необходимо знать её минимальные требования.

Их можно найти в Интернете на сайте производителя или на форумах, где часто размещается информация об играх ещё до их попадания на прилавок.

С одной стороны, для запуска большинства программ достаточно установить самую последнюю версию, которая наверняка поддерживает и все предыдущие. Или хотя бы DirectX 11.

Но тут возникает две проблемы:

  1. Устаревшие видеокарты не поддерживают 11-е издание драйвера;
  2. Некоторые игры требуют для запуска конкретную версию пакета.

В этом случае придётся ставить ту DirectX, которая указана в требованиях.

И, если система по умолчанию установила более новую, и за счёт этого, по мнению системы, не требующую обновления версию (что может вызвать конфликт программного обеспечения и привести к отказу запуска), следует полностью удалить пакет и поставить новый , совместимый с вашей программой.

Найти и скачать их можно совершенно бесплатно на сайте производителя.

Тематические видео:

  1. В драйверах для видеокарт NVIDIA, поставляемых в составе операционной системы Windows, поддержка OpenGL обычно отсутствует. Приложения будут использовать программный рендеринг Windows OpenGL (враппер в Direct3D в Windows Vista). Проверить наличие в системе драйвера OpenGL можно с помощью утилит OpenGL Extensions Viewer и GPU Caps Viewer . Если они показывают, что поставщик OpenGL — Microsoft, значит в системе нет драйвера OpenGL . Загрузите и установите последнюю версию драйвера для видеокарты с сайта NVIDIA.
  2. В новой версии драйвера могла быть добавлена поддержка новой версии API OpenGL , неизвестная приложению. Например, драйвер сообщает приложениях о поддержке OpenGL версии 2.0, а приложение/игра проверяет поддержку версии OpenGL в формате 1.Х. Для решения проблемы можно с помощью RivaTuner в настройках OpenGL на закладке «Совместимость» (Compatibility) форсировать сообщаемое драйвером значение версии OpenGL (OpenGL version string override) на поддерживаемую приложением, например на 1.5 . Эта опция не влияет на исполнение OpenGL видеокартой, но по той же причине могут перестать работать приложения, требующие OpenGL версии 2.0. Более гибкий способ — создать для проблемного приложения профиль драйвера с помощью утилиты nHancer , указав нужную версию в опции «Reported OpenGL Version» на закладке «Compatibility».
  3. Проблема может возникать, если в системе по какой-либо причине установлены несколько драйверов OpenGL . В реестре по адресу HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers (HKLM\Software\Microsoft\Windows\CurrentVersion\OpenGLdrivers для Windows 9x-ME) проверьте, что имеется единственный подраздел RIVATNT и ключ Dll в этом разделе имеет значение nvoglnt (имеется единственный ключ со значением nvopengl.dll для Windows 9x-ME). Если имеются иные подразделы, например ati2dvag (OpenGL драйвер ATI), их следует удалить, предварительно экспортировав в файл .reg .
  4. Реализация OpenGL 2.0 для графических процессоров GeForce FX и выше в драйвере NVIDIA требует поддержки центральным процессором расширений SSE . Если эти расширения недоступны, драйвер OpenGL ICD не будет инициализирован, OpenGL приложения будут закрываться или будет использован программный рендеринг. Проверить инициализацию драйвера можно с помощью утилит OpenGL Extensions Viewer и GPU Caps Viewer , проверить поддерживаемые процессором расширения можно с помощью утилит CPU-Z или Sandra . Если процессор не поддерживает SSE , можно или использовать более ранние версии драйвера (до 75.ХХ), или с помощью RivaTuner в настройках OpenGL на закладке «Совместимость» (Compatibility) включить режим «NV25 Emulation mode» вместо стоящего по-умолчанию «Max acceleration». В крайнем случае можно воспользоваться OpenGL -> Direct3D враппером GLDirect или TitaniumGL . Иногда процессор поддерживает SSE , но поддержка не работает из-за устаревшего BIOS материнской платы. Особенно данная проблема характерна для систем с процессорами AMD Athlon XP и Duron. Обновление BIOS материнской платы может восстановить поддержку SSE .
  5. Если в системе есть несколько видеокарт на базе разных графических процессоров NVIDIA, то OpenGL драйвер будет поддерживать лишь OpenGL поддерживаемой всеми видеокартами версии.