QindieGL (эмулятор OpenGL через Direct3D9)
Название: QindieGL (OpenGL wrapper)
Тип: библиотека-wrapper
API: Direct3D 9.0c
Начало разработки: 15 мая 2011
Окончание разработки: как надоест
Текущая версия: 1.0 ревизия 3
Лицензия: GPL v2
I. Что это такое?
Это библиотека, эмулирующая OpenGL API средствами Microsoft Direct3D 9.0c. Эмуляция не является полной — некоторые возможности пока не реализованы. Однако уже имеющийся функционал позволяет играть в некоторое количество OpenGL-игр.
II. Зачем это может понадобиться?
1) Существуют кривые драйвера (особенно этим грешат мобильные радеоны), в которых нет нормальной поддержки OpenGL, а Direct3D поддерживается. Тогда для игры в OpenGL-игру понадобится этот враппер.
2) Возможность легкого портирования OpenGL-игры на Direct3D или, что более актуально, создание мультиграфического рендера — достаточно подставлять ей нужную библиотеку при запуске. В будущем, вероятно, будет создана статическая библиотека для линковки, что позволит внедрять враппер в движок напрямую, обходясь без манипуляций с DLL.
3) Для прикола. Мне было интересно посмотреть, как OpenGL-игры работают на «чужом» API и даже «не подозревают» об этом. =)
III. Установка и настройка
1) Добавьте в реестр информацию из файла setup.reg
2) Положите файл opengl32.dll в папку с исполняемым файлом игры
3) Запускайте игру
4) Если хотите вернуться к обычному OpenGL-режиму, удалите файл opengl32.dll из папки с игрой
1) Некоторые античитерские программы распознают такие библиотеки как читы, поэтому убедитесь, что отключили античитерское защитное ПО. Не рекомендуется экспериментировать с играми, распространяемыми через Steam — можете лишиться аккаунта из-за Valve Anti-Cheat.
2) Некоторые разрешения экрана, поддерживаемые OpenGL, не поддерживаются Direct3D. Прежде чем выбрать нестандартное разрешение, убедитесь, что оно присутствует в списке «Свойства экрана» — «Дополнительно» — «Адаптер» — «Список всех режимов».
III. Список поддерживаемых игр и движков
- Quake 2 (в режиме OpenGL)
- Half-Life (в режиме OpenGL; там также есть свой Direct3D-рендерер)
- Xash
- Quake 3
- Serious Sam: First Encounter*
- Serious Sam: Second Encounter* (в режиме OpenGL; там также есть свой Direct3D-рендерер)
- Doom 3**
- GLQuake***
- Extrasensoric
- Tux Racer
- Return to Castle Wolfenstein
- Unreal Tournament****
- Doom2 (Doomsday)
- Kingpin
- Может работать и с другими.
* — не поддерживаются эффекты светорассеивания в связи с тем, что враппер не умеет читать буфер глубины
** — нормально работает только 2D — меню, PDA и т.п. Остальное пока рисуется с глюками, хотя в целом играбельно.
*** — нужно отключить Z-trick (например, написать в консоли gl_ztrick «0»)
**** — нужно отключить Z-trick (открыть «OpenGlDrv.ini» и поставить «UseZTrick» в 0)
IV. Поддерживаемые функции
Аккумулятор — нет
Альфа-тест — да
Альфа-блендинг — да
Begin/End — да
Текстурные объекты — да
Дисплейные списки — нет
Culling — да
Clip planes — да
Освещение — да (частично*)
Материалы — да
Вершинные массивы — да
Вычислители — нет
Туман — да
Распаковка пикселей — да
Упаковка пикселей — да (частично**)
Размер точек — да
Толщина линий — нет
Штриховка — нет
Трафарет — да
Индексный режим — нет
Логические операции — нет
Матрицы — да
Сохранение и восстановление атрибутов — да
Приоритеты текстур — да
Чтение пикселей — да (частично***)
Копирование пикселей — нет
Запись пикселей — нет
Переключение ReadBuffer/DrawBuffer — нет
Выбор — нет
Фидбэк — нет
Отсечение (scissor) — да
Polygon Mode — да (частично****)
Polygon Offset — да (частично****)
Генерация текстурных координат — да*****
Множественные контексты — нет
wglUseFontBitmaps/wglUseFontOutlines — нет
Мультисэмплинг — в настройках враппера******
* — не поддерживается модель двустороннего освещения и спотлайты.
** — пока поддерживается упаковка только в RGB и RGBA.
*** — не поддерживается чтение буфера глубины и трафарета.
**** — только для обеих граней одновременно.
***** — фича реализована программно и может снизить производительность. Используется SSE, если поддерживается (можно отключить, параметр «UseSSE»).
****** — параметр «MultiSample». Поставьте его, например, в 8. При включении сглаживания могут возникнуть артефакты со шрифтами в некоторых играх.
V. Поддерживаемые расширения
GL_ARB_multitexture
GL_ARB_texture_border_clamp
GL_ARB_texture_cube_map
GL_ARB_texture_env_add
GL_ARB_texture_env_combine
GL_ARB_texture_env_dot3*
GL_ARB_texture_mirrored_repeat
GL_ARB_texture_non_power_of_two
GL_ARB_transpose_matrix
GL_ATI_texture_mirror_once
GL_EXT_abgr
GL_EXT_bgra
GL_EXT_blend_color
GL_EXT_blend_minmax
GL_EXT_blend_subtract
GL_EXT_compiled_vertex_array
GL_EXT_draw_range_elements
GL_EXT_multi_draw_arrays
GL_EXT_fog_coord
GL_EXT_packed_pixels
GL_EXT_secondary_color
GL_EXT_texture3D
GL_EXT_texture_cube_map
GL_EXT_texture_env_add
GL_EXT_texture_env_combine
GL_EXT_texture_env_dot3*
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_lod
GL_EXT_texture_lod_bias
GL_EXT_stencil_two_side
GL_EXT_stencil_wrap
GL_IBM_texture_mirrored_repeat
GL_NV_blend_square
GL_NV_texgen_reflection**
GL_SGIS_multitexture**
GL_SUN_multi_draw_arrays
WGL_ARB_extensions_string
WGL_EXT_swap_control
* — только режим GL_DOT3_RGBA; GL_DOT3_RGB считается эквивалентным GL_DOT3_RGBA.
** — фича реализована программно и может снизить производительность. Используется SSE, если поддерживается (можно отключить, параметр «UseSSE»).
*** — только функции glSelectTexture, glMTexCoord2f и glMTexCoord2fv (достаточные для работы мультитекстурирования в GLQuake и Quake2).
Ну, как обычно:
Автор не несет ответственности за любые программные и/или аппаратные сбои, которые могут произойти в связи с установкой и использованием враппера.
НЕ УСТАНАВЛИВАЙТЕ библиотеку в папку «WINDOWS/System32»!
OpenGL 4.5
Информация о программе
Описание
OpenGL — это, своего рода, интерфейс для создания приложений, использующих 2D и 3D графику. Это спецификация с набором API, которую используют разработчики программ, а инженеры реализуют данные функции при производстве видеокарт.
Аббревиатура OpenGL расшифровывается как Open Graphics Library или открытая графическая библиотека. Программное обеспечение позволяет создавать кроссплатформенные визуальные эффекты, которые одинаково отображаются на Windows, MacOS, Unix и PS3.
Набор библиотек OpenGL 4.5 насчитывает более 300 функций, которые позволяют создавать 3D сцены с помощью примитивов. Также спецификации содержат инструменты для оптимизации моделей в трехмерном пространстве, стирания невидимых поверхностей, работы с цветами и оттенками, текстурирования и сглаживания. Программное обеспечение помогает реалистично настраивать свет, применять эффекты дыма, тумана и др.
Функции и особенности OpenGL 4.5:
- Спецификации для 2D и 3D графики;
- Отображение моделей и сцен на Windows, MacOS, Unix и PS3;
- Работа с окнами посредством библиотеки GLUT;
- Локальный и сетевой рендеринг (GLX);
- Настройка освещения и детальная проработка цвета;
- Инструменты для оптимизации и просмотра трехмерных моделей;
- Отсутствие русской локализации.
Поддерживаемые системы (x64/x32):
OpenGL software rendering alternatives
I need to software render OpenGL in Windows and have already found about Mesa3D, which doesn’t provide DLLs and I’m having some pain to build. Are there alternatives available?
3 Answers 3
That depends on what OpenGL version you wish to accelerate. Depending on your needs, there are some alternatives available. I’ve listed those I’m aware of below:
OpenGL 1.0 & 1.1
Windows (since Windows NT 3.5) actually includes an OpenGL software implementation to begin with. If you haven’t installed any other software rasterizer, this ought to be your default implementation. The Microsoft software rasterizer supports either OpenGL 1.0 or 1.1, depending on your platform, but will not accelerate anything newer than that. If your desired OpenGL version is covered by 1.0 or 1.1 (however unlikely), the solution should be sufficient. I’m unsure as to what extent the default Windows OpenGL software implementation covers the OpenGL ES 1.x frameworks through its OpenGL 1.0 or 1.1 support.
OpenGL 1.4
Furthermore, in Windows Vista, Microsoft included an emulation layer which may translate OpenGL into Direct3D; thus supporting up-to OpenGL 1.4. Additionally, this should mean that Windows Vista (and up?) runtimes may accelerate most parts of OpenGL SC. I’ve never used this emulator myself, and was quite surprised to hear about it, but it may be of interest to someone having to run one of these old frameworks in a Windows environment. Note that the standard Windows OpenGL software rasterizer (OpenGL 1.0 or 1.1) is also included in Windows Vista and above.
OpenGL ES 2.0
Additionally, there’s the ANGLE project which accelerates WebGL and OpenGL ES 2.0 by translating OpenGL ES 2.0 invocations to DirectX 9 and 11. Their development notes also mention that an OpenGL ES 3.0 solution is in the works. Never having used ANGLE, I cannot offer a verdict.
OpenGL 3.1
In addition to those mentioned above, Mesa 3D (which supports up to OpenGL 3.1) feature three software implementations:
Since I know very little of swrast (the original Mesa project software rasterizer) and softpipe (a reference driver) I’ll refrain from going into these. The third implementation, llvmpipe, and probably the one that may interest you the most, is a high-speed software implementation that uses multithreading and JIT compilation to speed up simulation with native- and SIMD instructions.
Настраиваем Windows для программирования OpenGL
Пост ориентирован на новичков. В нем не рассматривается настройка Visual Studio. Он научит вас настраивать некоторые текстовые редакторы на компиляцию OpenGL приложений, либо выполнять это из консоли вручную.
Недавно, наконец, вышло 8-е издание книги OpenGL programming guide, которую я ждал уже более чем 2 года. Чуть раньше я познакомился с замечательным текстовым редактором Sublime Text 2 и решил настроить его вместо установки тяжелой Visual Studio.
Итак, для начала нам нужен компилятор — я остановился на G++. Он является частью GCC, а его порт под Windows называется MinGW. С него и начнем:
MinGW
Качаем с официального сайта инсталлятор и запускаем его. Можно выбрать выкачивание свежих пакетов сразу при установке, либо обновить их вручную позже. Компиляторы Fortran, Ada и ObjC нам не понадобятся, их можно не ставить. MSYS Basic System может пригодится, его ставим. В качестве адреса я указал » C:\MinGW «, но если вас это смущает — можете выбрать другой, например, » C:\Program Files\Common Files\MinGW «.
После установки следует добавить к системной переменной PATH две новые папки: » MinGW\bin » и » MinGW\msys\1.0\bin «. Для этого заходим в Пуск -> Панель управления -> Система -> Дополнительные параметры системы; Во вкладке Дополнительно тыкаем внизу кнопку Переменные среды. Из списка системных переменных выбираем Path, и через точку с запятой дописываем полные адреса к папкам » MinGW\bin » и » MinGW\msys\1.0\bin «.
Если вы не выбирали выкачивание свежих пакетов при установке, следует обновить нужные пакеты вручную. Для этого открываем консоль (Win+R -> cmd ), и пишем следующие команды:
Обновит информацию о доступных пакетах,
Отобразит полные имена пакетов gcc и g++,
Обновит эти пакеты до последних доступных для MinGW версий.
Теперь, когда у нас есть компилятор, мы можем приступить к установке необходимых OpenGL библиотек.
Freeglut
Поскольку OpenGL это API, которое относится исключительно к графике — в него не входят функции по созданию окон или обработки устройств ввода. Тем более, решение этой задачи зависит от операционной системы. По-этому ее вынесли в отдельную библиотеку и назвали GLUT — OpenGL Utility Toolkit. Однако, последний релиз этой библиотеки был очень давно и сейчас ее подменила freeglut.
Качаем с официального сайта бинарники под MinGW. Распаковываем, freeglut.dll из папки bin кидаем в » C:\Windows\System32 » (для х86) или » C:\Windows\SysWOW64 » (для х64), или любую другую папку, которая указана в PATH. Содержимое папок include и lib можно скопировать либо в » MinGW\include » и » MinGW\lib » (так будет проще), либо в отдельные созданые папки » MinGW\freeglut\include » и » MinGW\freeglut\lib «.
На этом с freeglut все. Для его подключения нужно добавить #include
Библиотека glew позволяет определять что видеокарта поддерживает, а что — нет. Ее установка немного сложнее для нашего случая.
Качаем с официального сайта исходники, поскольку бинарники заточены под Visual Studio и нам не подойдут. Теперь эти исходники нужно скомпилировать. Я в этом практически ничего не понимаю, по-этому обратился к гуглу и нашел помощь здесь:
Распаковываем скачанный архив, открываем консоль, заходим в полученную папку и пишем следующие команды:
В результате в папке lib появилось 3 файла: glew32.dll , glew32.dll.a и glew32.a .
glew32.dll копируем туда же, куда ранее скопировали freeglut.dll , остальные 2 — в папку » MinGW\lib » либо » MinGW\glew\lib «.
Из папки include копируем содерижмое в » MinGW\include » или » MinGW\glew\include «.
На этом с glew все. Для его подключения нужно добавить #include , но сделать это необходимо перед подключением других gl библиотек.
Проверяем работоспособность
Создаем минимальный test.cpp:
Обратите внимание на функцию glutInitContextVersion — она завершит выполнение программы если ей не удалось создать контекст для указаной версии OpenGL. Чтобы узнать версию OpenGL, которую поддерживает ваша видеокарта, можно заглянуть в ее спецификацию либо скачать бинарники glew с официального сайта и запустить glewinfo.exe из папки bin . Он сгенерирует файл glewinfo.txt , в котором будет детально расписано что ваша видеокарта поддерживает, а что — нет. Иногда функционал можно расширить установкой более свежего видеодрайвера.
Открываем консоль, заходим в папку с test.cpp и пишем следующую команду:
В случае, если вы создавали отдельные папки freeglut и glew , здесь необходимо дополнительно указать соответствующие дополнительные папки include и lib . Тогда пример команды выглядит так:
Флаг -Wl,—subsystem,windows указывает компилятору что он должен создать графическое приложение, а не консольное.
Если все получилось, должен получится файл test.exe , который при запуске создает белое окно 512х512.
Когда вы захотите поделится своим приложением, убедитесь что вместе с исполняемым файлом передаете используемые библиотеки — freeglut.dll и glew32.dll .
Sublime Text 2
Ну и напоследок, приведу пример настройки Sublime. Скачать его можно отсюда, вводные видео-уроки на английском языке можно глянуть здесь.
После установки открываем файл настройки билда С++:
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\C++\C++.sublime-build »
Сохраняем его копию как
» C:\Users\%Username%\AppData\Roaming\Sublime Text 2\Packages\User\C++\С++ OpenGL.sublime-build «
Строчку
дополняем подключением библиотек:
Аналогично, строчку
дополняем до
Если вы создавали отдельные папки под freeglut и glew, эти команды следует дополнить указанием адресов дополнительных папок include и lib .
Для того чтобы Sublime не отказывался выводить кириллицу в свою консоль, после
добавляем
Теперь, когда у нас открыт test.cpp , выбираем Tools -> Build system -> C++ OpenGL.
Нажимаем Ctrl+B для компиляции, Ctrl+Shift+B для компиляции и запуска.
UPD: Когда дело дошло до кода с gl-функциями из последних версий, выяснилось, что подключение заголовочного файла GL/gl.h недостаточно. В нем содержится устаревшая версия 1.1, и этот файл больше не обновляется. В дополнение к нему необходимо подключить GL/glext.h (последнюю версию которого надо скачать отсюда) и GL/wglext.h (отсюда). Для линукса последний файл заменяется GL/glxext.h (ссылка). Скачанными файлами нужно заменить их устаревшие версии по адресу » MinGW/include/GL/ «.