Обновленная видеокарта не обновляет opengl32.dll - PullRequest
1 голос
/ 07 апреля 2019

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

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

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

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

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

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

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

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

1 Ответ

4 голосов
/ 07 апреля 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...