#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. Спасибо за информацию. Это примерно то, что я предполагал, но я надеялся на простой путь вперед. Я думаю, что нет.