1. Главная страница » Компьютеры » No wgl extensions что делать

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

Автор: | 16.12.2019

Как известно, 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(), можно получить список неподдерживаемых расширений:

Читайте также:  Https www mindmeister com

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

В принципе, инициализация 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.

Читайте также:  Eax что это такое


Рисунок 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: использовать специальные исправления для некоторых игр.
    • Кнопка ". ": включение/отключение специальных исправлений.
    Читайте также:  Crystaldiskinfo что это за программа

    Настройки раздела 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

      Добавить комментарий

      Ваш e-mail не будет опубликован. Обязательные поля помечены *