No Image

No wgl extensions что делать

597 просмотров
10 марта 2020

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

Если производитель обнаруживал, что OpenGL не может использовать все аппаратные возможности его "железа", он выпускал расширение для OpenGL с поддержкой новых возможностей. Причем это расширение, как правило, появлялось почти на год раньше, чем новая версия DirectX, поддерживающая новые возможности. Так, поддержка вершинных и пиксельных шейдеров для GeForce2 в OpenGL появилась намного раньше 8-й версии DirectX. А когда DirectX 8 все-таки вышел, то выяснилось, что про пиксельные шейдеры GeForce2 он ничего не знает:

Наряду с достоинствами этот подход имеет и недостатки — расширения OpenGL разных производителей часто несовместимы друг с другом, даже когда они выполняют одинаковые функции. Это становится настоящей головной болью, когда программа должна поддерживать большое количество разных видеокарт. С другой стороны, существует множество стандартных расширений, которые поддерживают практически все видеокарты (разумеется, при наличии аппаратной поддержки). Названия этих расширений обычно начинаются с GL_ARB, GL_EXT и GL_SGIS.

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

Для выполнения всех примеров вам потребуются Microsoft Visual C++ 6 и NVIDIA OpenGL SDK, который можно скачать с www.nvidia.com. В составе этого SDK имеется NVIDIA OpenGL Extension Specification, в котором описаны большинство расширений, которые поддерживаются NVIDIA.

Перед тем, как использовать любое OpenGL-расширение, его надо инициализировать. Для начала рассмотрим инициализацию WGL-расширений. Этот класс расширений предназначен для инициализации OpenGL в ОС семейства Windows, а также для выполнения некоторых функций, которые зависят от используемой операционной системы – например, работа со внеэкранными поверхностями (буферами пикселей). В приведенном ниже примере показывается, как проверить поддержку двух расширений WGL_ARB_pixel_format и WGL_ARB_pbuffer и подготовить их к использованию. Этот и все остальные примеры из статьи полностью можно скачать.

Для начала не забудьте настроить Visual C++ для работы с NVSDK (пропишите пути к включаемым файлам и библиотекам). Теперь создайте новый проект и настройте его для работы с OpenGL (подключите библиотеки opengl.lib, glu32.lib, glut32.lib, установите точку входа mainCRTStartup и т.д.)

Напишите простейшее GLUT-приложение, создающее окно:

Не забудьте директивой #include подключить заголовочные файлы glext.h (замена gl.h) и wglext.h. Перед началом работы с WGL-расширениями надо проверить поддержку расширения WGL_ARB_extensions_string, при помощи которого осуществляется инициализация остальных WGL-расширений.

Для это мы объявляем переменную, которая является указателем на функцию wglGetExtensionsStringARB. Обратите внимание, что название типа функции начинается с префикса PFN, далее идет название расширения, а затем окончание ARBPROC (в случае расширений ARB):

Теперь надо получить адрес этой функции. Для этого используется функция wglGetProcAddress. В качества параметра она принимает строку, содержащую название функции, адрес которой надо получить:

В случае удачного вызова она возвращает адрес функции, иначе – NULL.

Теперь при помощи этой функции можно получить список всех WGL-расширений, которые поддерживает данная платформа. Для этого следует вызвать эту функцию, передав ей в качестве параметра контекст текущего устройства WGL. Функция возвращает строку, оканчивающуюся нулем и содержащую список поддерживаемых WGL-расширений, разделенных пробелами. После этого проверим, поддерживаются ли требуемые нам расширения. Для этого можно использовать функцию strstr:

Если все прошло удачно, то, используя функцию wglGetProcAddress, можно получить адреса точек входа нужных нам функций:

Как видно, инициализировать WGL-расширения непосредственно через OpenGL API довольно неудобно, особенно если надо подключить больше десятка различных расширений, каждое из которых содержит больше десятка функций. Но в NV >

В этом случае, инициализировать все необходимые расширения можно с помощью одной функции glh_init_extensions, которой передается список необходимых расширений, разделенных пробелами. В случае успешного завершения функция возвращает True. В противном случае, используя функцию glh_get_unsupported_extensions(), можно получить список неподдерживаемых расширений:

Читайте также:  Sip адаптер для телефона

Это все! Теперь вы можете вызывать функции указанных расширений как обычные функции.

В принципе, инициализация GL-расширений должна была выполняться очень просто, путем включения в проект файла glext.h. Но на практике это не так. Причина этого кроется в том, что файл opengl.lib, поставляемый с Visual C++ 6, не содержит функций GL-расширений (если бы он их содержал, программа бы отказывалась запускаться на видеокартах, драйверы которых не полностью поддерживают все GL-расширения).

Поэтому инициализация GL-расширений выполняется аналогично инициализации WGL-расширений с единственным отличием – для получения списка GL-расширений используется функция glGetString(GL_EXTENSIONS).

Если же вы используете NVIDIA OpenGL Helper Library, то никакой разницы в инициализации GL и WGL расширений нет – функция glh_init_extensions умеет инициализировать оба вида расширений.

Использование расширений OpenGL на примере GL_EXT_separate_specular_color

Рассмотрим небольшую программу, которая рисует на экране вращающийся чайник с нанесенной текстурой. Клавишей F1 можно включать/выключать вращение. При нажатой левой кнопке мыши можно вращать чайник, а при правой – перемещать. Клавишей F2 можно сменить плоскость, в которой перемещается чайник.

Текстура чайника хранится в файле wood.tga. Для его загрузки используется библиотека NV_UTIL из состава NVSDK, которая содержит множество процедур для работы с наиболее распространенными графическими форматами. Перед использованием этой библиотеки нужно подключить к проекту библиотеку nv_util.lib.

Функции для работы с файлами формата TGA находятся в файле nv_tga.h в пространстве имен tga. Следовательно, для доступа к ним надо использовать либо директиву using namespace tga, либо указывать перед названием функций и типов этой библиотеки префикс tga.

Загрузка файла в память осуществляется функцией tga::read, которой передается имя файла. Функция возвращает указатель на структуру tga::tgaImage. Нас интересуют следующие поля структуры:
· GLsizei width – ширина рисунка;
· GLsizei height – высота рисунка;
· GLubyte *pixels – указатель на массив пикселей;
· GLenum format – формат пикселей рисунка.

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

Хотя в примерах NVSDK это нигде не показано, я считаю, что перед удалением указателя надо удалить из памяти еще и указатель на массив пикселей (pixels), иначе он останется находится в памяти до окончания работы программы.

Теперь можно использовать эту информацию для создания текстуры.


Рисунок 1.

Как видно из рис. 1, на экране отсутствуют блики. Это связано с тем, что при наложении текстуры для каждой точки на основе материала и источника цвета рассчитывается результирующий цвет, а потом на него накладывается текстура. Так как у нас диффузный цвет материала и блика совпадают, то блика просто не видно – он сливается с цветом материала, а затем на получившейся цвет накладывается текстура.

Но что делать, если надо получить блик именно белого цвета на деревянном чайнике. Одно из решений проблемы – наложение текстуры на чайник в 2 прохода. Сначала мы рисуем чайник с наложенной текстурой с отключенными бликами, а затем, на втором проходе, рисуем блики без текстуры. Пример реализации этого алгоритма можно найти в книге М. Красного "OpenGL. Графика в проектах Delphi" (глава 4, пример 83).

Однако самый оптимальный способ – использовать расширение GL_EXT_separate_specular_color, которое позволяет использовать новую модель освещения: SPEPARATE_SPECULAR_COLOR_EXT. В этом случае цвета вычисляются по другому алгоритму: сначала рассчитывается цвет материала без учета бликов, затем на полученный цвет накладывается текстура. После этого на результирующий цвет накладываются блики.

Для того чтобы заставить программу использовать эту модель освещения, в нее достаточно добавить всего несколько строк.

Прежде всего в процедуру Init() добавим инициализацию расширения и сроку для включения режима освещения GL_SEPARATE_SPECULAR_COLOR_EXT. Для этого используется процедура glLightModeli с новыми параметрами.

Читайте также:  Составить уравнение плоскости проходящей через три точки

Параметр GL_SEPARATE_SPECULAR_COLOR_EXT включает режим наложения бликов после наложения текстуры. Для возвращения к классической схеме вычисления цвета достаточно вызвать функцию с параметром GL_SINGLE_COLOR_EXT.


Рисунок 2.

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

Расширение GL_SEPARATE_SPECULAR_COLOR_EXT поддерживается всеми видеокартами NVIDIA, за исключением видеокарт семейства Riva128/128ZX.

Заголовок
Сообщение
  • Отменить
  • Сохранить
  1. Цитата
  2. Войдите
  3. Цитата
  4. Править
  5. Удалить Удалено
  6. Вы уверены?
  7. Да
  8. Нет
  9. Восстановить
  10. Просмотреть в редакторе

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

Настройки раздела Video:

  • Список доступных плагинов.
  • Test: проверка выбранного плагина на работоспособность.
  • Configure: настройка выбранного плагина.
  • about: информация о плагине и его разработчиках.

Настройки плагина Pete’s OpenGL2 Driver 2.9:

Настройки раздела Resolution & Colors:

  • Fullscreen mode: работа в полноэкранном режиме.
  • Desktop resolution: настройка разрешения для полноэкранного режима.
  • Color depth: настройка глубины цвета.
  • Window mode: работа в оконном режиме.
  • Window size: настройка разрешения для оконного режима.
  • Use Window size in Fullscreen mode (Widescreen fix): использование настроек разрешения оконного режима для работы в полноэкранном режиме.
  • Internal X/Y resolution: настройка разрешения текстур. Высокие настройки обеспечивают более качественное изображение.
  • Stretching mode: настройка масштабирования изображения.
  • Render mode: настройка режима рендера.

Настройки раздела Textures:

  • Texture filtering: настройка фильтрации текстур. Обеспечивает более качественное изображение. Может ухудшить графику в некоторых играх, которые используют 2D задники, например, Resident Evil.
  • Hi-Res textures: настройка использования текстур высокого разрешения. Обеспечивает более качественное изображение.
  • Gfx card vram: настройка объема памяти графического адаптера. По умолчанию установлено автоматическое определение (рекомендуется).
  • Use pixel shader for ‘PSX texture window’ emulation: использовать пиксельные шейдеры для эмуляции текстурного окна.

Настройки раздела Framerate:

  • Show FPS display on startup: показывать данные FPS при запуске.
  • Кнопка ". ": настройка горячих клавиш для изменения настроек плагина "на лету".
  • Default keys: сбросить настройки горячих клавиш по умолчанию.
  • Show/hide gpu menu: показать/скрыть меню настроек плагина.
  • Show/hide gpu infos: показать/скрыть окно с информацией о плагине.
  • Toggle selected option up: переключить выбранную опцию на один пункт вверх.
  • Toggle selected option down: переключить выбранную опцию на один пункт вниз.
  • Select previous option: выбрать предудыщую опцию.
  • Select next option: выбрать следующую опцию.
  • Toggle pause: включить паузу.
  • Turn off FPS limit while pressed: выключить ограничение FPS при зажатии клавиши.
  • Use FPS limit: использовать ограничение FPS.
  • Use Frame skipping: использовать пропуск кадров.
  • Auto-detect FPS/Frame skipping limit: автоматически определять ограничения для FPS и пропуска кадров.
  • FPS limit (10-200): настройка ограничения FPS вручную.
  • Настройки раздела Compatibility:

    • Off-Screen drawing: настройка закадровой отрисовки. Высокие настройки обеспечивают более лучшую совместимость.
    • Framebuffer effects: настройка эффектов буфера кадров. Высокие настройки обеспечивают более лучшую совместимость.
    • Framebuffer upload: настройка загрузки буфера кадров. Высокие настройки обеспечивают более лучшую совместимость.

    Настройки раздела Full screen filters:

    • Screen filtering: фильтр сглаживания изображения. Обеспечивает более качественное изображение.
    • Shader effects: настройка шейдерных эффектов, которые различным образом влияют на изображение. Например, изменение цвета, сглаживание для 2D игр, добавление ЭЛТ эффектов, и т.д. Различные шейдеры можно найти в сети.
    • Shader level: настройка степени интенсивности шейдера. При высокой интенсивности шейдер сглаживания будет сильнее сглаживать изображение, шейдер цветности будет выдавать более яркое изображение, и т.д.
    • Flicker-fix border: настройка для исправления проблемы с мерцанием по краям экрана.
    • Кнопка ". ": вручную указать папку с кастомными шейдерами.

    Настройки раздела Misc:

    • Scanlines: использования эффекта черезстрочной развёртки.
    • MDEC filter: использование фильтрации для видеороликов. Обеспечивает более качественное изображение.
    • Disable screensaver: отключает использование экранной заставки и режима пониженного энергопотребления.
    • GF4/WinXP crash fix: исправление падения для видеокарт GeForce4 под Windows XP. Неактуальна, т.к. устарела.
    • Special game fixes: использовать специальные исправления для некоторых игр.
    • Кнопка ". ": включение/отключение специальных исправлений.
    Читайте также:  Бесплатная регистрация в инстаграме через компьютер

    Настройки раздела Default Settings:

    • Fast: набор настроек по умолчанию для "быстрой работы". Неактуальны, т.к. устарели.
    • Nice: набор настроек по умолчанию для "красивой картинки". Неактуальны, т.к. устарели.

    Настройки раздела Sound:

    • Список доступных плагинов.
    • Test: проверка выбранного плагина на работоспособность.
    • Configure: настройка выбранного плагина.
    • about: информация о плагине и его разработчиках.
    • Sound enabled: настройка включения/отключения звука.

    Настройки плагина P.E.Op.S. DSound Audio Driver 1.9:

    Настройки раздела General settings:

    • Mode: настройка режима работы плагина. По умолчанию установлен режим высокой совместимости (рекомендуется).
    • Volume: настройка громкости.
    • Reverb: настройка реверберации. Высокие настройки обеспечивают более качественный звук.
    • Interpolation: настройка интерполяции. Высокие настройки обеспечивают более качественный звук.

    Настройки раздела XA music:

    • Enable XA playing: включить проигрывание музыки в формате XA.
    • Change XA speed, if it is playing too fast: изменять скорость проигрывания музыки в формате XA, если она проигрывается слишком быстро.

    Настройки раздела Misc:

    • SPU IRQ – wait for CPU action: прерывания аудиопроцессора – ждать ответа (действий) ЦП. Данная настройка необходима для игр Valkyrie Profile и Metal Gear Solid со включенным режимом плагина "SPUasync".
    • SPU IRQ – handle irqs in decoded sound buffer areas: прерывания аудиопроцессора – обрабатывать прерывания в декодируемых участках аудиобуфера.
    • Mono sound mode: настройка проигрывания звука в монофоническом режиме.
    • Enable developer debug mode: включить режим разработчика для отладки.
    • Enable sound recording window: включить окно для записи звука.

    Настройки раздела Cdrom:

    • Список доступных плагинов.
    • Test: проверка выбранного плагина на работоспособность.
    • Configure: настройка выбранного плагина.
    • about: информация о плагине и его разработчиках.

    Настройки плагина ePSXe CDR WNT/W2K core 1.7.0:

    • Select Cdrom letter: выбор дисковода, из которого эмулятор будет считывать диск PSX.
    • Enable subchannel read from cdrom: включить чтение субканальных данных. Опция может помочь, если игра отказывается запускаться из-за защиты от копирования.

    Настройки раздела Bios:

    • Здесь отображается место, в котором располагается файл BIOS.
    • Select: указать путь к файлу BIOS.

    Настройки раздела Memcards:

    • Здесь отображается место, в котором располагается файл карты памяти для первого и второго слота.
    • Enable: включить использование карты памяти для первого и второго слота.
    • Select: указать путь к файлу карты памяти для первого и второго слота.

    Настройки раздела Game Pad:

    Элементы раздела меню File:

    • Run CDROM: запустить игру PSX из дисковода.
    • Run ISO: запустить игру PSX из ISO образа.
    • Run PS-EXE: запустить хомбрю приложение.
    • Run BIOS: запустить BIOS.
    • Change Disc: смена диска. (для игр на нескольких дисках)
    • CDROM: опция смены диска для дисковода.
    • ISO: опция смены диска для ISO образа.
  • Exit: закрыть эмулятор.
  • Элементы раздела меню Run:

    • Continue: продолжить работу эмулятора (в случае, если после запуска была нажата клавиша ESC).
    • Reset: перезагрузить эмулятор.
    • Save State (F1): аналог быстрого сохранения.
    • Slot 1: выполнить "быстрое сохранение" в слот 1.
    • Slot 2: выполнить "быстрое сохранение" в слот 2.
    • Slot 3: выполнить "быстрое сохранение" в слот 3.
    • Slot 4: выполнить "быстрое сохранение" в слот 4.
    • Slot 5: выполнить "быстрое сохранение" в слот 5.
  • Load State (F3): аналог быстрой загрузки.
    • Slot 1: выполнить "быструю загрузку" из слота 1.
    • Slot 2: выполнить "быструю загрузку" из слота 2.
    • Slot 3: выполнить "быструю загрузку" из слота 3.
    • Slot 4: выполнить "быструю загрузку" из слота 4.
    • Slot 5: выполнить "быструю загрузку" из слота 5.
    • Enable Logs: используется разработчиками для отладки. Интереса для обычного пользователя не представляет.
    • Элементы раздела Options:

      • Auto load ppf files enabled: автоматически загружать файлы-патчи в формате ppf.
      • Cheat codes: открыть окно с настройкой чит-кодов.

      • Cheat Codes Available: список с доступными чит-кодами.
      • Cheat Codes Enabled: список со включенными чит-кодами.
      • Enable ->: включить выбранный чит-код.
      • Инструкции / Playstation
      Комментировать
      597 просмотров
      Комментариев нет, будьте первым кто его оставит

      Это интересно
      Adblock
      detector