Opengl extensions viewer что это за программа
Opengl extensions viewer что это за программа
OpenGL – это спецификация интерфейса, общая для всех видов оборудования и операционных систем. (И конкурент DirectX.) От того, насколько оборудование компьютера и установленные драйверы соответствуют этой спецификации, будет зависеть работоспособность графических приложений: CAD систем, игр или графических редакторов. OpenGL постоянно пополняется новыми расширениями, которые программисты добавляют для улучшения работы графических адаптеров или в порядке освоения новых видов оборудования, поскольку технический прогресс в этой области продолжается.
Для того, чтобы проверить, в какой мере это соответствие соблюдается, есть утилита OpenGL Extensions Viewer.
Базовые статистические данные о системе
Утилита сообщает пользователю основную информацию о его видеокарте и имеет еще несколько других функций. Меню расположено с левой стороны окна. Пользователь сразу узнает:
Ему также сообщаются самые основные сведения о состоянии OpenGL, DirectX и Vulkan (дальнейшее развитие OpenGL, не получившее пока повсеместного распространения). Здесь же есть ссылки для получения самых последних версий драйверов.
Расширения GL
В списках расширений перечислены все доступные на данной машине, указаны их версии, даже компилятор, который был использован для сборки шейдеров. Эти сведения помогут в диагностике проблем, связанных с работой приложений. Если приложение обращается к какой либо функции и не может найти ее или сталкивается с устаревшей версией, то оно так или иначе сообщает о проблеме.
В системных требованиях к приложению, игре и т. п. могут быть явно указаны версии OpenGL и даже конкретные расширения, так что можно еще до установки программы сверить наличные возможности компьютера с требованиями софта. Это дает пользователю очень большую экономию времени – если ему с самого начала будет ясно, что надо заменить видеокарту, а потом устанавливать программу, то не придется ломать голову над непонятным поведением и сбоями приложении или системе. Уже в этом проявляется огромная польза утилиты.
Режимы отображения
Пользователь может узнать все доступные режимы работы дисплея. Каждый из них совместим с определенным приложением, например, любимые многими старые игры, могут не работать, если видеокарта не поддерживает в точности то разрешение или глубину цвета, под которые писалось приложение. Даже неверная частота развертки может приводить к помехам или полному искажению картинки.
Пиксельные форматы описываются с помощью множества флагов и констант, которым должно соответствовать оборудование и драйверы. Утилита дает возможность посмотреть на фактическое положение дел у пользователя.
Тест производительности видеокарты
OpenGL Extensions Viewer позволяет тестировать видеосистему компьютера с выбором версии OpenGL или провести тесты для всех версий. Во время теста на экран выводится вращающийся куб с логотипом OpenGL. Качество можно оценивать непосредственно. Чем реалистичнее смотрится куб, и чем меньше «тормозит» изображение, тем лучше работает видеокарта. При выполнении теста проверяются все шейдеры: вершинные, пиксельные и геометрические (если используются видеокартой).
Путем выбора разрешения и настройки других параметров, и повторных тестов, пользователь может добиться хорошего компромисса между качеством изображения и производительностью компьютера для любого приложения, чтобы потом использовать эти настройки для комфортной работы.
База данных видеокарт
Просмотрщик OpenGL предоставляет пользователю данные не только о его видеокарте. Можно узнать о том, какие возможности есть по каждому известному производителю. В левой колонке собраны изготовители видеокарт, в средней модели по каждому производителю. В правой колонке отображаются расширения GL, которые обеспечивают на данный момент конкретные выбранные видеокарты.
Эта база данных дает пользователю возможность быстро подобрать нужную видеокарту, исходя из его требований, лучше сказать, из тех, которые необходимы программам, выбранным пользователем для работы или игр. Если тот или другой софт требует определенного расширения, то можно выбрать его в правой колонке (можно использовать фильтр). Это приведет к отображению всех видеокарт, которые поддерживают выбранное расширение и пользователю остается выбрать нужную модель.
Однако пользователю необходимо также свериться с документацией на свою системную плату, чтобы убедиться, что интерфейс выбранной карты соответствует системной плате (AGP, PCI Express, версия и т. п.). Но и это еще не все. Следует знать профиль карты, «механику», впишется ли новая видеокарта в своем слоте с другими платами или, например, радиаторами мостов или другими геометрическими особенностями железа. Многие видеокарты имеют кулеры (почти все современные видеокарты), радиаторы, и кожухи для направления воздуха, что сильно увеличивает их габариты.
Необходимо также проверить степень нагруженности блока питания. Видеокарты, особенно мощные, являются очень существенной нагрузкой и требуют много энергии, иногда сопоставимой с остальным оборудованием компьютера. Все эти сведения можно найти на официальных сайтах производителей или воспользоваться технической поддержкой на языке пользователя, если имеется местное представительство компании.
Формирование отчета
Отчет создается просмотрщиком для того оборудования, которое стоит у пользователя. В левой части списка отображается соответствие спецификации GL. Если версия спецификации не полностью поддерживается, то она отмечена красным кружочком. Например, на картинке выше видно, что на данном компьютере используется довольно слабенькая видеокарта.
В правой колонке находится сам отчет о состоянии всех параметров. Он состоит из заголовка, в котором указан производитель, марка, версия, компилятор расширений. Затем идет перечень максимальных ограничений и дальше все поддерживаемые расширения. Этот отчет можно отправить в службу техподдержки, если пользователь не слишком продвинут технически, чтобы самостоятельно разобраться в проблемах.
Если что-либо не поддерживается, например, новая технология Vulkan (дальнейшее развитие GL), то в отчете перечисляются обнаруженные ошибки.
Отправка отчета
Отчет о поддерживаемых расширениях, собранный утилитой, можно отправить заинтересованной стороне анонимно при помощи кнопки «Submit». Или его можно сохранить и отправить другим способом, например, по электронной почте.
Достоинства
Недостатки
Утилита OpenGL Extensions Viewer от компании Realtech поможет пользователям разобраться с проблемами своей видеокарты и приложений, которые не хотят на ней работать.
OpenGL Extensions Viewer 6 | realtech VR
New version 6.0 for Windows, now available, 20th Anniversary of OpenGL Extensions Viewer, with CPUID
New version for Mac, CPUID, and Apple Silicon native support, Metal and other improvements.
A reliable software which displays useful information about the current OpenGL 3D accelerator and new Vulkan 3D API. This program displays the vendor name, the version implemented, the renderer name and the extensions of the current OpenGL 3D accelerator.
Check our FAQ question, updated (November 2021).
6.3.2
— Changed debug.log to glview.log
— Added more information on failed rendering context not being initialized
— Other bug fixes and improvements.
— Address issue with GDI only devices.
— Address HDR rendering test on Vulkan
— Address compability with nVidia when starting the rendering tests without multisampling.
6.2.07
— New OpenGL code, and preparing for Vulkan rendering tests
— Translation to russian, french in the PC version.
— Android version has now CPU reporting and Vulkan reporting.
— Android Vulkan Database
— Support for virtual renderer (without monitors)
— Vulkan extensions database browser.
— Entirely rewritten interface in WPF, optimized for Windows 10, search functions, new high definitions icons, new vendors icons and more.
— Vulkan extensions database browser
— New generated database, up to 10,000 renderers, with version and more
— Faster loading times,
— New CPUID section with processor name and number.
— Many bug fixes and improvements.
— Updated video memory size using AMD and nVidia GL Extensions. This now reports more than 4GB size. Adding GPU processor clock for AMD video cards.
— nVidia and AMD drivers version are now reported properly.
— Fixed an issue with WMI ‘AdapterRAM’ crashing at startup.
— Improved database navigation.
5.2.0 (2019-03)
— Updated processor detection : Added more processor family.
— Version is displayed when starting the application.
— Improved database navigation.
5.1.4 (2019-01)
— Improved Vulkan Support
— Support for high density screens
— Improved database
OpenGL Extension Viewer is reliable software which displays the vendor name, the version implemented, the renderer name, and the extensions of the current OpenGL 3D accelerator. Many OpenGL extensions, as well as extensions to related APIs like GLU, GLX, and WGL, have been defined by vendors and groups of vendors. The extension registry is maintained by SGI and contains specifications for all known extensions, written as modifications to the appropriate specification documents. The registry also defines naming conventions, guidelines for creating new extensions and writing suitable extension specifications, and other related documentation.
OpenGL Extensions Viewer is free of charge and was awarded by Softpedia as 100% FREE No Spyware, No Adware, No Viruses
You can download the latest version of OpenGL Extensions Viewer (GLview) from those selected stores for free
Or, if you run Windows 7 or later, click here to download for Windows:
Download For Windows
SHA-256 Checksum: glview634-setup.exe 0435E2225F68C27344AB4E0CDC2E655F52B790CE747C57090C45DDCA7FD6F113
Also available, DirectX Extensions Viewer on Windows Store
USER MANUAL
OpenGL
Display system information and core feature test.
Extensions
Display extensions, sorted by vendor. If you have an Internet connection, you can retrieve from OpenGL.org the extensions’s specifications that explain the available extensions. You can click on extension and press ‘Search’ for getting extension’s specification from severals different databases. You can also use the left button mouse.
Pixel Formats
Display all supported pixel format
Report
Create a report based from current configuration.
Report
The OpenGL diagnostic tool performs some OpenGL initialisation and graphical test. It will use the desktop resolution. So in case of slow downs or initialisation errors, use a smaller desktop resolution.
OpenGL 1.1 : use the standard OpenGL without extension usage.
OpenGL 1.2 : OpenGL test using GL_lock_array and glDrawElement.
OpenGL 1.3 : OpenGL using GL_lock_array and multitexturing.
OpenGL 1.4 : OpenGL test using GL_lock_array and multitexturing using a DOT3 shading and an ARB vertex program code.
OpenGL 1.5 : OpenGL test using Vertex Buffer Object.
OpenGL 2.0 : OpenGL test using a GLSL 1.0 program.
OpenGL 2.1 : OpenGL test using pixel buffer object.
OpenGL 3.0 : OpenGL test using OpenGL 3.0 Forward Context (only supported under Windows).
Credits
execom / main code.
arekkusu / cocoa code.
genevois / web site / graphist.
OpenGL EXTENSIONS
A very extensive list of details of all extensions available of your system, which OpenGL functions are implemented and more.
A core feature set check also show how well from OpenGL version 1.2 to 4.0 are implemented in your system.
More than 450 extensions reported and collected since 2000!
OpenGL Extensions Viewer has been suggested by OpenGL.org
in the OpenGL technical FAQ (see 23.050) (**)
and by nVidia as Developer Resources.
Vulkan Extensions are available in the Vulkan Report Section
RENDERER DATABASE
A database of all known renderers for Windows and MacOSX is available. If an renderer is being updated, you can submit to the server. You can also update to the latest database directly from the application.
Q> I’m using a software that requires OpenGL 2.1, but I’m not able to find the driver to load
A> You can’t really download OpenGL but only download display drivers that have OpenGL. Check with OpenGL Extensions Viewer what version it shows. If it reporting ‘GDI Renderer’, it means that something is blocking OpenGL from working. Sometimes an environement variable with QT_OPENGL solves the problem.
Q> I’ve downloaded the latest version of OpenGL, because it was necessary to play a certain game. This game requires OpenGL 2.1 or above. but once I open, it says it is version 1.1
A> As said, it means something is blocking OpenGL to works. For example, opening an OpenGL software thru a remote distance, or virtual machine doesn’t works most of the time. Check with OpenGL Extensions Viewer to see which version is installed, especially the DirectX version. If you have DirectX 11, there is good chance that OpenGL is compatible but a software, or resolution is blocking it.
Initial released in 2000
Available for iOS, Android, Windows 7 and above, macOS
Программы для Windows
OpenGL Extension Viewer – это качественное программное обеспечение, в котором пользователь может получить такую информацию, как имя разработчика, версию, название рендера и расширения установленного ускорителя Open GL 3D. Кроме того, многие расширения для соответствующих API, вроде GLU, GLX и WGL, получили свое определение именно по поставщикам или группам разработчиков.
Реестр заданных расширений адаптирован для SGI и включает спецификации для всех популярных расширений, созданных в качестве изменения имеющихся документов спецификации. Реестр также определяет соглашения о названиях, дает полезные советы по генерированию новых расширений, написанию подробных спецификаций и соответствующей документации. Важно заметить, что столь полезная программа не содержит никакой рекламы, не говоря уже о вирусах или шпионском ПО. После запуска утилиты пользователь сможет обратиться к одному из следующих ее разделов:
— OpenGL;
— расширения;
— режимы отображения;
— пиксель-формат;
— отчеты;
— тесты;
— база данных.
Первый раздел отображает системную информацию и дает доступ к основному функциональному тестированию, тогда как во втором расширения отсортированы по производителю. При наличии сетевого подключения можно получить с ресурса OpenGL.org спецификации, объясняющие функционирование доступных расширений. Для этого достаточно выделить одно из них и запустить поиск.
Дополнительно стоит отметить наличие базы данных Renderer, в которой содержатся все известные средства визуализации Windows и MacOS. Остается добавить, что программа доступна также для таких мобильных платформ, как Android и iOS. Скачать OpenGL Extension Viewer на русском бесплатно по ссылке ниже.
Opengl extension viewer как пользоваться?
Cкачать OpenGL для Windows 7 x64
OpenGL – это спецификация интерфейса, общая для всех видов оборудования и операционных систем. (И конкурент DirectX.) От того, насколько оборудование компьютера и установленные драйверы соответствуют этой спецификации, будет зависеть работоспособность графических приложений: CAD систем, игр или графических редакторов. OpenGL постоянно пополняется новыми расширениями, которые программисты добавляют для улучшения работы графических адаптеров или в порядке освоения новых видов оборудования, поскольку технический прогресс в этой области продолжается.
Для того, чтобы проверить, в какой мере это соответствие соблюдается, есть утилита OpenGL Extensions Viewer.
Базовые статистические данные о системе
Утилита сообщает пользователю основную информацию о его видеокарте и имеет еще несколько других функций. Меню расположено с левой стороны окна. Пользователь сразу узнает:
Ему также сообщаются самые основные сведения о состоянии OpenGL, DirectX и Vulkan (дальнейшее развитие OpenGL, не получившее пока повсеместного распространения). Здесь же есть ссылки для получения самых последних версий драйверов.
Расширения GL
В списках расширений перечислены все доступные на данной машине, указаны их версии, даже компилятор, который был использован для сборки шейдеров. Эти сведения помогут в диагностике проблем, связанных с работой приложений. Если приложение обращается к какой либо функции и не может найти ее или сталкивается с устаревшей версией, то оно так или иначе сообщает о проблеме.
В системных требованиях к приложению, игре и т. п. могут быть явно указаны версии OpenGL и даже конкретные расширения, так что можно еще до установки программы сверить наличные возможности компьютера с требованиями софта. Это дает пользователю очень большую экономию времени – если ему с самого начала будет ясно, что надо заменить видеокарту, а потом устанавливать программу, то не придется ломать голову над непонятным поведением и сбоями приложении или системе. Уже в этом проявляется огромная польза утилиты.
Режимы отображения
Пользователь может узнать все доступные режимы работы дисплея. Каждый из них совместим с определенным приложением, например, любимые многими старые игры, могут не работать, если видеокарта не поддерживает в точности то разрешение или глубину цвета, под которые писалось приложение. Даже неверная частота развертки может приводить к помехам или полному искажению картинки.
Пиксельные форматы описываются с помощью множества флагов и констант, которым должно соответствовать оборудование и драйверы. Утилита дает возможность посмотреть на фактическое положение дел у пользователя.
Тест производительности видеокарты
OpenGL Extensions Viewer позволяет тестировать видеосистему компьютера с выбором версии OpenGL или провести тесты для всех версий. Во время теста на экран выводится вращающийся куб с логотипом OpenGL. Качество можно оценивать непосредственно. Чем реалистичнее смотрится куб, и чем меньше «тормозит» изображение, тем лучше работает видеокарта. При выполнении теста проверяются все шейдеры: вершинные, пиксельные и геометрические (если используются видеокартой).
Путем выбора разрешения и настройки других параметров, и повторных тестов, пользователь может добиться хорошего компромисса между качеством изображения и производительностью компьютера для любого приложения, чтобы потом использовать эти настройки для комфортной работы.
База данных видеокарт
Просмотрщик OpenGL предоставляет пользователю данные не только о его видеокарте. Можно узнать о том, какие возможности есть по каждому известному производителю. В левой колонке собраны изготовители видеокарт, в средней модели по каждому производителю. В правой колонке отображаются расширения GL, которые обеспечивают на данный момент конкретные выбранные видеокарты.
Эта база данных дает пользователю возможность быстро подобрать нужную видеокарту, исходя из его требований, лучше сказать, из тех, которые необходимы программам, выбранным пользователем для работы или игр. Если тот или другой софт требует определенного расширения, то можно выбрать его в правой колонке (можно использовать фильтр). Это приведет к отображению всех видеокарт, которые поддерживают выбранное расширение и пользователю остается выбрать нужную модель.
Однако пользователю необходимо также свериться с документацией на свою системную плату, чтобы убедиться, что интерфейс выбранной карты соответствует системной плате (AGP, PCI Express, версия и т. п.). Но и это еще не все. Следует знать профиль карты, «механику», впишется ли новая видеокарта в своем слоте с другими платами или, например, радиаторами мостов или другими геометрическими особенностями железа. Многие видеокарты имеют кулеры (почти все современные видеокарты), радиаторы, и кожухи для направления воздуха, что сильно увеличивает их габариты.
Необходимо также проверить степень нагруженности блока питания. карты, особенно мощные, являются очень существенной нагрузкой и требуют много энергии, иногда сопоставимой с остальным оборудованием компьютера. Все эти сведения можно найти на официальных сайтах производителей или воспользоваться технической поддержкой на языке пользователя, если имеется местное представительство компании.
Формирование отчета
Отчет создается просмотрщиком для того оборудования, которое стоит у пользователя. В левой части списка отображается соответствие спецификации GL. Если версия спецификации не полностью поддерживается, то она отмечена красным кружочком. Например, на картинке выше видно, что на данном компьютере используется довольно слабенькая видеокарта.
В правой колонке находится сам отчет о состоянии всех параметров. Он состоит из заголовка, в котором указан производитель, марка, версия, компилятор расширений. Затем идет перечень максимальных ограничений и дальше все поддерживаемые расширения. Этот отчет можно отправить в службу техподдержки, если пользователь не слишком продвинут технически, чтобы самостоятельно разобраться в проблемах.
Если что-либо не поддерживается, например, новая технология Vulkan (дальнейшее развитие GL), то в отчете перечисляются обнаруженные ошибки.
Отправка отчета
Отчет о поддерживаемых расширениях, собранный утилитой, можно отправить заинтересованной стороне анонимно при помощи кнопки «Submit». Или его можно сохранить и отправить другим способом, например, по электронной почте.
Достоинства
Недостатки
Утилита OpenGL Extensions Viewer от компании Realtech поможет пользователям разобраться с проблемами своей видеокарты и приложений, которые не хотят на ней работать.
Скачать OpenGL Extensions Viewer бесплатно
Загрузить последнюю версию программы с официального сайта
Расскажи друзьям в социальных сетях
OpenGL через Direct3d 9 от Microsoft
vedmyshЗаметка носит исключительно исследовательский характер. Практической пользы от нее в настоящее время пожалуй нет. Что называется — для истории. Итак, как выяснилось, в свое время Microsoft действительно реализовал враппер, который транслировал вызовы OpenGL в Direct3d 9. И речь не о Generic имплементации от SGI, которая присутствует в opengl32.dll со времен Windows 95/NT.
Немного этой самой истории. Выход Windows Vista стал знаковым для разработчиков графических приложений под Windows. Что бы не говорили о самой ОС реализованная в ней WDDM архитектура видеодрайвера действительно была прорывом.
В то же время фанатики OpenGL начали что-то подозревать (c). Напрасно. Никто и не думал ущемлять права OpenGL под Windows. Во всяком случае в финальной версии мы получили полноценную поддержку OpenGL. Ну да не суть. Один из постов в этой теме настолько интересен, что я даже позволю себе его процитировать:
As the ex-development lead for this project, I can tell you the following without breaking my NDA:- The new Vista OpenGL driver is a single file «ogldrv.dll», code-named «MSOGL» which takes the place of the ICD.
— The intent here is two-fold: 1) reduce the work of driver developers and 2) reduce the security risk presented by the ICD driver model.- This is not an overt attempt to kill OpenGL; far from it. By eliminating the need to write two different sets of drivers (ICD and DDI), Microsoft has taken a large burden off the s of ATI, NVIDIA, 3D Labs, etc., while ensuring performance and expansibility continue.- MSOGL sits between OpenGL32.dll and D3D. It translates OpenGL calls into D3D calls. This is done using MANY different techniques and at several different levels to ensure the highest possible performance.
When I left the project, we were well over 80% performance on average compared to the native OpenGL driver.- It is still possible to use an old ICD driver on Vista, but this disables D3D rendering of the desktop, which basically takes you back to XP theming of the desktop. This is because D3D cannot share the rendering context with OpenGL. Ideally, most games would run in full-screen OpenGL mode, so the intended audience for this driver is the content creation, CAD/CAM, etc. crowd (AutoCAD, Maya, 3DS Max, Pro Engineer, etc.)
— When I left, the driver supported over 80% of OpenGL 1.
4, with plans to continue implementing support for extensions most used by the target applications. We were even able to run Doom 3 in some limited modes over 6 months ago (some functions were NULLed out for testing).
И действительно, вплоть до Windows 8.1 в системе присутствует файл ogldrv.dll. Если заглянуть в его экспорты, становится ясно, что он действительно создан в соответствии с соглашениями ICD (Instalable client driver) архитектуры. Что это за зверь? Если очень коротко, ICD позволяет конкретным вендорам реализовывать собственные имплементации OpenGL — зачастую ускоряемые GPU. Наряду с Generic имплементацией 1.1 в opengl32.
dll (как в 32 разрядной версии так и 64 разрядной) присутствует вспомогательный код, позволяющий найти и выполнить инициализацию необходимого драйвера. Причем далее все вызовы OpenGL API будут пробрасываться в конкретный ICD драйвер. Реализуется это через поле glDispatchTable в TEB(thread environment block) потоков.
Останавливаться на этом не буду (возможно когда-нибудь), скажу лишь, что glDispatchTable отличное место для установки OpenGL хуков.
Механизм поиска нужного драйвера из opengl32.dll претерпевал значительные изменения в процессе эволюции Windows. В данный момент для этого используются D3DKMT* функции, уже упомянутой WDDM архитектуры. Реализованы они в библиотеке gdi32.dll. Сам процесс более или менее документирован.
Таким образом используя D3DKMTOpenAdapterFromHdc, D3DKMTQueryAdapterInfo и KMTQAITYPE_UMOPENGLINFO, D3DKMTCloseAdapter мы легко получаем тот или иной ICD драйвер, установленный в системе. К слову D3DKMT функции связаны не только с OpenGL. На мой взгляд наибольший интерес представляет D3DKMTEscape функция. И раз уж мы заговорили о хуках, стоит так же упомянуть возможность перехвата функционала Direct3D в user mode драйвере Direct3D.
Идея заключается в перехвате двух функций драйвера — OpenAdapter и CreateDevice, c последующей подменой содержимого D3DDDI_DEVICEFUNCS. Впрочем я опять отвлекся 🙂
Но даже обладая знанием о том, каким образом происходит поиск и загрузка нужной библиотеки, мне не удалось найти простого способа (без излишних усилий) загрузить содержимое ogldrv.dll. Тогда я подошел к проблеме следующим образом:
Оба варианта работоспособны. Однако здесь меня подстерегала небольшая проблема. А именно, вызов функции wglCreateContext (процедуры инициализации OpenGL приложения в этой заметке рассматриваться не будет) завершался ошибкой. После увлекательного процесса реверсинженеринга удалось выяснить, что под капотом, wglCreateContext (opengl32.dll) вызывает не экспортируемую функцию CreateAnyContext, в которой выполняется некоторая проверка флагов, которая и приводит к ошибке загрузки. Достаточно было исправить эту проверку (один байт) в opengl32.dll (да, знаю, это не самое красивое решение проблемы) и я получил желаемое. Исправленный opengl32.dll (в зависимости от разрядности) я поместил в каталог запускаемых приложений:
Первые два скриншота сделаны в программе OpenGL Extension Viewer. Последний — экран настроек из Quake 3.Судя по всему враппер полностью реализует функционал OpenGL версии 1.4.Как уже было отмечено ранее, в Windows 10 файл(ы) ogldrv.dll отсутствуют. Однако ogldrv.dll и opengl32.dll из Windows 8.1 прекрасно работают и в Windows 10.Вероятнее всего первоначально имплементация OpenGL из ogldrv.dll использовалась в том случае, если в системе не был установлен иной ICD драйвер.vedmyshРаботаю с libcurl. Натыкаюсь на ответ аффтара (иначе не назвать) CURL на в общем то резонную «критику». Я конечно понимаю, пост 2006 года. Может все уже изменилось… Но:From Daniel Stenberg Date Tue, 5 Sep 2006 16:34:00 +0200 (CEST)On Tue, 5 Sep 2006, Christian Grade wrote > the truth is: the multi-interface isn’t designed in way that it *would be> sanely thread-safe* or *could be made sanely thread-safe easily*. The multi interface is thread-safe, but only from one thread at a time. I’veexplained this before.Уот. Гениально! Изобретательно! True thread safety! Не поспорить. К слову речь идет об multi api CURL.
Оригинал тут. Начинаю дико уставать от всех этих мега-библиотек созданных с помощью костыльно ориентированного программирования…
Page 3
vedmyshЕсть такая компания — RAD game tools. На мой взгляд наиболее известными ее продуктами стали Miles Sound System и Bink/Smack video. Но речь сейчас не о них. А о продукте Pixomatic.
Это программная реализация растеризатора уровня DirectX9 и DirectX7. То есть все вычисления и рендеринг выполняются на стороне процессора. В настоящее время упоминание о pixomatic присутствует только на китайских страницах сайта RAD game tools.
Исходя из информации опубликованной в википедии в 2005 году pixomatic был приобретен intel и вероятнее всего был благополучно заброшен. Трудился над продуктом в том числе и уважаемый мною Майк Абраш. Продукт весьма специфичный, однако кое где он таки был использован. Причем тайтлы достаточно известные.
Например Epic’ки реализовали на нем программный рендеринг для Unreal Engine 2 в Unreal Tournament 2003/2004, Microsoft использовала в Microsoft Flight Simulator 2004 и Microsoft Train Simulator. Вот вам парочка отзывов со страницы pixomatic:
«Pixomatic is great! With Unreal Tournament 2003, it gives us a reliable way to run well on the millions of PC’s which lack decent 3D hardware acceleration or drivers.»
Tim Sweeney, Epic Games
«Pixomatic wast just the thing we needed at the end of Lionheart. We were under intense pressure to get the game done and there was no way we could match the incredible optimization effort that has gone into Pixomatic. Rad Game Tools and Michael Sartain were also incredibly helpful in getting Pixomatic working in Lionheart in as little time as possible.»
Lars Brubaker, CEO, Reflexive Entertainment Inc.
Для версии 3 в составе pixomatic существовал полноценный Direct3D 9 и Direct3D 8 враппер. Однако, из-за несовпадения интерфейса, нельзя было просто так взять и поместив библиотеки pixomatic в каталог приложения заставить его их использовать. Это исправимо. Все, что нужно — создать простейшую библиотеку-враппер, которая будет «пробрасывать» инциализацию Direct3D 8 и 9 в реализацию от pixomatic. Вот, что в итоге получилось:
На скриншотах оригинальные примеры из DirectX SDK 8 и 9 запущены с использованием реализации от pixomatic.
Собственно архив со всем необходимым можно скачать тут.
Не лишним будет напомнить, что ни в коем случае не следует заменять системные библиотеки на соответствующие из данного архива. И конечно же, автор заметки не несет никакой ответственности за весь возможный вред/ущерб, который вы можете себе причинить при использовании этих библиотек.
Каталог src архива содержит исходные коды библиотек врапперов для pixomatic.
Каталог pixomatic3 содержит наиболее позднюю версию реализации Direct3D 9 (pixo9.dll). В подкаталоге test находятся несколько примеров DirectX SDK 9.
Каталог pixomatic содержит legacy версии (dx9pixo.dll, pixomatic.dll) реализации Direct3D 8 и Direct3D 9. Соответствующие test* подкаталоги аналогично содержат тесты DirectX SDK соответствующих версий.
В качестве бонуса в архиве присутствуют утилиты и библиотеки необходимые для того, чтобы запустить реализацию OpenGL-через-Direct3D из соответствующей заметки.
Для того, чтобы «активировать» реализацию opengl от microsoft запускать целевое приложение необходимо через соответствующую утилиту-инжектор, которая загрузит соответствующий же glfix* модуль.
Page 4
vedmyshЕще немного о QuickSync и достижениях. Разработанное приложение: декодируем и рисуем 25 честных h264 fullhd потоков (30 кадров в секунду, порядка 300+ Мбит в секунду), стабильный fps 100+ кадров в секунду, аппаратный декодер Intel, DirectX 11, многопоточность. И это не предел.
Для сравнения — как это все начиналось. Хотя задачи на тот момент были несколько иные.
Инициализация OpenGL в Windows
Сегодня мы узнаем всё (реально всё), что нужно, чтобы запустить программу на C/C++, использующую OpenGL на Windows. Прикреплённые проекты сделаны в Visual Studio 2019. В уроке мы рассмотрим полную инициализацию OpenGL.
Список библиотек я брал из вики для OpenGL. Для урока я выбрал наиболее простые варианты в настройке.
Версия 4.6, которую мы будем рассматривать вышла довольно давно (июль 2017). Поэтому, у вас не должно возникнуть проблем, но, на всякий случай, установите последнюю версию драйверов. Драйвера, поддерживающие OpenGL 4.6, для видеокарт AMD и NVidia вышли в 2018. Аппаратная поддержка доступна начиная c AMD Radeon HD 5000 (2009г.) и NVidia GeForce 400 (2010г.). Драйвера для встроенных адаптеров Intel вышли в первой половине 2019г. В случае, если ваша видеокарта не поддерживает четвёртую версию OpenGL, рекомендую обратить внимание на Mesa3D — это программная реализация OpenGL.
Так как OpenGL является кроссплатформенным API, то не существует стандартного способа инициализации. Для использования OpenGL в программе необходимо сделать две вещи: создать OpenGL контекст и загрузить функции OpenGL API. Для каждой из этих задач существуют разные библиотеки.
Начнём мы с загрузки OpenGL функций.
Загрузка функций OpenGL API
В спецификации OpenGL описываются множество разных функций. Например, самая первая OpenGL функция, которую мы будем использовать: glGenVertexArrays. Необходимо чтобы наша программа узнала, что такая функция существует. Для этого мы будем использовать одну из библиотек: GLEW или glatter.
В спецификации имена OpenGL функций выглядят так: GenVertexArrays, BindVertexArray, BeginQuery. В реальном коде к этим именам нужно добавлять префикс gl (зависит от библиотеки, в некоторых это не так): glGenVertexArrays, glBindVertexArray, glBeginQuery, glUseProgram.
GLEW (OpenGL Extension Wrangler)
Скачиваем GLEW (первый файл для Windows, на данный момент это glew-2.1.0-win32.zip). Распаковываем в любую папку. В настройках проекта добавляем папку include и lib (lib\Release\x64). Из папки bin\Release\x64 копируем файл glew32.dll в папку с нашим проектом.
У меня все библиотеки лежат в папке: C:\prog\libs, соотвественно, путь к glew: C:\prog\libs\glew-2.1.0. Свойства проекта в Visual Studio открываются через пункт меню Проект → Свойства (Project → Properties) или через контекстное меню проекта в обозревателе решений.
В коде после создание контекста (об этом ниже) нужно вызвать функцию glewInit. Вот весь код, касающийся GLEW:
#include // включаем заголовочный файл #pragma comment( lib, «glew32.lib» ) // добавляем статичную библиотеку // Не забудьте ещё скопировать dll в папку с проектом int main(int argc, char* argv[]) < // создание контекста OpenGL glewInit(); >
После вызова glewInit мы можем пользоваться функциями OpenGL.
По поводу имени библиотеки GLEW. GLEW расшифровывается как OpenGL Extension Wrangler. Wrangler — пастух. Соотвественно, название библиотеки можно понимать как: тот, кто управляет расширенями OpenGL. Про расширения мы будем говрить позже.
glatter
Второй вариант — glatter. Скачиваем и распаковываем. Если вы не пользовались github, то проходите по ссылке, нажимайте зелёную кнопку Clone or download (справа) → Download Zip. После разархивирования, добавляем папку include к проекту:
Теперь в коде осталось только включить заголовочный файл и можно вызывать OpenGL функции. Инициализировать ничего не надо (вызов функций можно делать только после создания OpenGL контекста):
Я не смог найти значение названия библиотеки glatter. Автор из Германии и там это слово есть — одна из форм слова «блестящий».
Другие библиотеки для загрузки OpenGL API
Существуют и другие библиотеки для загрузки OpenGL функций, но они требуют больше действий чем GLEW или glatter. Некоторые из этих вариантов: GL3W (использует скрипт на Python для генерациий заголовочных файлов OpenGL), glLoadGen (использует Lua скрипт), Galogen (командная утилита), Glad (приложение на Python или веб страница). В этих библиотеках используются дополнительные зависимости.
Кроме того, вы можете самостоятельно загрузить OpenGL функции, не используя вышеперечисленные библиотеки. В Windows для этого используется функция wglGetProcAddress. В качестве аргумента мы передаём имя функции (в виде строки char*), которую мы хотим получить, а возвращает она, соответственно, адрес этой функции. При таком способе вам нужно будет самостоятельно загружать каждую OpenGL функцию. wglGetProcAddress объявлена в wingdi.h, а для её использования необходимо подключить библиотеки Opengl32.lib, Opengl32.dll. Это информация для общего развития, в дальнейших уроках мы будем пользоваться только GLEW или glatter.
Теперь мы переходим к созданию контекста OpenGL.
Создание OpenGL контекста
Что такое OpenGL контекст мы поговорим в следующем уроке. Сейчас нам важно, что OpenGL контекст привязывается к окну. Так как OpenGL — кросплатформенная API, а в разных операционных системах окна создаются совершенно по-разному, это означает, что и создание контекста происходит по-разному. В спецификации OpenGL ничего не сказано, как создавать контекст. Существуют разные библиотеки для решения этой задачи. Мы рассмотрим freeglut, SDL2 и GLFW. Эти библиотеки отвечают за создание окна, OpenGL контекста, смену кадров, очередь сообщений.
Важно: При создании проекта для любой библиотеки выбирайте консольное приложение. Все библиотеки используют консольное приложение и самостоятельно создают окна. При этом, мы будем использовать следующую форму main:
int main(int argc, char* argv[])
freeglut требует аргументы arc и argv, а SDL2 требует именно этот вариант main. Для GLFW аргументы main не имеют значения.
Также, обратите внимание, в какой момент вызывается glewInit (после создания контекста).
Ещё одна ремарка: во всех случаях необходимо подключить библиотеку OpenGL32.lib. В ней определены самые старые функции OpenGL (ещё с первой версии), такие как, glClear, glClearColor. Архиктура не имеет значения, x86 и x64 должны использовать один и тот же файл.
Приложения на всех библиотеках имеют одинаковую структуру:
Скачиваем GLFW (Graphics Library Framework). Под заголовком Windows pre-compiled binaries выбираем 64-bit Windows binaries. Распаковываем. У меня это папка C:\prog\libs\glfw-3.3.2.bin.WIN64. Заголовочные файлы, как обычно в папке include, а библиотеки в lib-vc2019. Нужно скопировать glfw3.dll в папку с вашим проектом.
В программе с GLFW мы используем следующие функции: glfwInit, glfwCreateWindow, glfwMakeContextCurrent, glfwWindowShouldClose, glfwGetKey, glfwSetWindowShouldClose, glfwSwapBuffers, glfwPollEvents, glfwTerminate.
Сначала инициализируем GLFW, создаём окно и присваиваем ему контекст. При создании окна с помощью glfwCreateWindow мы указываем ширину/высоту окна и заголовок, остальные аргументы не важны. Затем инициализируем GLEW.
В основном цикле мы проверяем, была ли нажата клавиша Escape, и если да, то устанавливливаем закрывающий флаг (его мы проверяем в условии цикла с помощью glfwWindowShouldClose). Обратите внимание, что для управления вводом GLFW определяет свои константы (GLFW_KEY_ESCAPE, GLFW_PRESS), их имена говорят сами за себя.
Затем, в основном цикле мы очищаем буфер кадра, выводим содержимое на экран и проверяем события в очереди событий.
После окончания основного цикла мы вызываем glfwTerminate.
glClearColor задаёт цвет, которым будет заполняться фоновый буфер (это 2д картинка, в которой происходит рисование кадра) при очистке. glClear очищает фоновый буфер. Здесь мы очищаем только цвет — GL_COLOR_BUFFER_BIT. Ещё мы можем очищать буфер глубины, но об этом позже.
glfwSwapBuffers выводит содержимое на экран. Имя функции — swap buffers — поменять буферы местами. В других библиотеках тоже есть подобная функция.
Библиотека SDL (Simple DirectMedia Layer), помимо OpenGL, имеет возможности для работы с 2д графикой и звуком.
Переходим. В разделе Development Libraries выбираем файл SDL2-devel-2.0.10-VC.zip. Распаковываем архив и настраиваем папки проекта.
#include #include #pragma comment( lib, «glew32.lib») #pragma comment( lib, «SDL2.lib») #pragma comment( lib, «SDL2main.lib») #pragma comment( lib, «OpenGL32.
type == SDL_QUIT) < quit = true; >> glClearColor(0.5f, 0.5f, 0.5f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); SDL_GL_SwapWindow(window); > SDL_GL_DeleteContext(context); SDL_DestroyWindow(window); SDL_Quit(); return 0; >
В SDL2 мы используем следующие функции: SDL_Init, SDL_CreateWindow, SDL_GL_CreateContext, SDL_PollEvent, SDL_GL_SwapWindow, SDL_GL_DeleteContext, SDL_DestroyWindow, SDL_Quit. Сначала мы инициализируем SDL, используя флаг SDL_INIT_EVERYTHING (everything — всё), который говорит, что мы хотим инициализировать все системы SDL: графику, звук, таймеры, устройства ввода. В нашем случае можно обойтись только SDL_INIT_VIDEO. После этого мы создаём окно и OpenGL контекст.
В основном цикле мы проверяем очередь событий (SDL_PollEvent), очищаем буфер и выводим содержимое на экран с помощью смены кадров (SDL_GL_SwapWindow).
Если произошло событие SDL_QUIT, мы заканчиваем цикл, изменяя переменную quit, затем удаляем контекст, окно, и освобождаем все ресурсы.
freeglut
Я упоминаю здесь freeglut (The Open-Source OpenGL Utility Toolkit) только для соотстветсвия с английской версией урока, который я писал несколько лет назад. На данный момент рекомендую использовать GLFW или SDL. freeglut больше подходит для Linux.
FreeGLUT основывается на библиотеке GLUT, которая была создана в 1994г. (да и устарела GLUT уже как двадцать лет).
Проходим по Ссылке и ищем там «Download freeglut 3.0.0 for MSVC» в разделе freeglut 3.0.0 MSVC Package. После распаковки архива указываем в своём проекте пути к заголовчным файлам и библиотеке. Также, необходимо скопировать freeglut.dll в папку с проектом.
#include #include #pragma comment( lib, «glew32.lib» ) #pragma comment( lib, «freeglut.lib» ) #pragma comment (lib, «OpenGL32.lib») int width = 640; int height = 480; void displayFunc(void); int main(int argc, char* argv[]) < glutInit(&argc, argv); glutInitWindowSize(width, height); int first program»); glewInit(); glutDisplayFunc(displayFunc); glutMainLoop(); exit(0); >void displayFunc(void)
Здесь мы используем функции из freeglut: glutInit, glutInitWindowSize, glutCreateWindow, glutDisplayFunc, glutMainLoop, glutSwapBuffers. Собственно, инициализируем саму библиотеку, задаём размер окна и затем создаём его, указываем функцию, которая будет вызываться каждый кадр (displayFunc), запускаем основной цикл. В каждом кадре мы очищаем буфер и выводим содержимое буфера на экран с помощью glutSwapBuffers.
Заключение
В прикреплённом решении для Visual Studio 2019 есть три проекта для GLFW, SDL, freeglut. Везде используется GLEW. В данных проектах есть все нужные файлы: включаемые файлы и библиотеки, и они находятся в папках проектов. В следующих уроках вам нужно будет самостоятельно добавлять библиотеки. Я постраюсь поддерживать код для GLFW/SDL2 в связке с GLEW.
Я бы, конечно, хотел добавить проекты для VSCode и Linux, но не уверен, что это кому-нибудь нужно, а на проверку и написание уходит много времени.
Теперь, когда есть основа программы, версию OpenGL можно проверить с помощью функции glGetString:
const GLubyte* version = glGetString(GL_VERSION);
Значение можно посмотреть в отладчике или привести тип и вывести в консоль (все приложения GLFW, SDl2 и freeglut — консольные).
За рамками урока, как обычно, осталась проверка возвращаемых значений разных функций. Если возникнут проблемы, пишите в комментарии (это позволит дополнить урок), отвечу, по возможности, быстро.