Обновленная видеокарта не обновляется opengl32.dll

#windows #delphi #opengl #textures

#Windows #delphi #opengl #Текстуры

Вопрос:

Я пытался нарисовать текстуру на квадрате в течение прошлой недели, но безрезультатно. Квадрат рисуется, но текстуры нет. Я использую OpenGL, Delphi XE3 и Windows 10.

Проблема заключается в функции glGenerateMipmap. В моей старой версии opengl нет функций MipMap. Поэтому я заменил свою карту на что-то более новое (OGL 4.6), у которого теперь есть функции. Но она все еще не работает.

Проблема в том, что старая opengl32.dll не изменилась и по-прежнему не имеет функций.

Итак, вопрос: как программа находит функции MipMap? Возможно ли обновить opengl32.dll с новой функциональностью как-то? Или моей программе нужно ссылаться на какую-то другую DLL? Или следует обновить модуль winapi.opengl?

Согласно khronos, текстура не будет отображаться, если не настроена MipMap. https://www.khronos.org/opengl/wiki/Common_Mistakes#Creating_a_complete_texture

Я пытаюсь связать функцию glGenerateMipmap в DLL с:

   procedure glGenerateMipmap (target: GLenum); stdcall; external OpenGL32; 
  

Которая будет компилироваться, но прерывается при запуске.

Комментарии:

1. Установка нового оборудования волшебным образом не приводит к установке нового программного обеспечения. Вам необходимо обновить библиотеку DLL OpenGL вашего приложения отдельно.

2. В этом нет ничего волшебного. Когда я обновляю свои драйверы, я ожидаю, что драйверы будут обновлены.

Ответ №1:

Хорошо, что opengl32.dll это не изменилось, потому что это не должно меняться. opengl32.dll является компонентом ОС. Единственное, что должно касаться этого файла, — это сама Windows, например, во время обновления.

Windows предлагает общую реализацию OpenGL, которая всегда должна быть доступна (может прибегать к программному рендерингу). Эта общая реализация поддерживает только OpenGL 1.1, поэтому opengl32.dll экспортирует только базовые функции API OpenGL 1.1. В дополнение к этому, другие реализации OpenGL могут быть подключены к системе в виде устанавливаемого драйвера клиента (ICD). При установке драйверов для вашего графического процессора поставщик графического процессора обычно устанавливает и регистрирует такой ICD для запуска OpenGL с использованием вашего графического процессора. Когда контекст OpenGL создается с помощью WGL API, ОС ищет и загружает подходящий ICD и настраивает ваш контекст OpenGL для взаимодействия с этим ICD. Функции API OpenGL 1.1, экспортируемые в opengl32.dll , на самом деле просто пересылаются в ICD.

ICD может (и обычно предлагает) предлагать дополнительные функциональные возможности по сравнению с базовым API OpenGL 1.1, который предоставляется через opengl32.dll . Чтобы получить доступ к такой дополнительной функциональности, вам необходимо вручную загрузить соответствующие функции через wglGetProcAddress() . Поскольку писать весь код, например, для загрузки всего OpenGL 4.6 core profile API, довольно утомительно, обычно используется библиотека, такая как GLEW или glad, чтобы позаботиться об этом…

Для Delphi, я думаю, может быть интересным dglOpenGL.

Комментарии:

1. Спасибо за информацию. Это примерно то, что я предполагал, но я надеялся на простой путь вперед. Я думаю, что нет.