Обращение к свойству Handle после уничтожения объекта в DelphiDelphi , Графика и Игры , OpenGLDelphi игнорирует флаг CS_OWNDC при создании компонента TFrame, wglMakeCurrent впоследствии терпит неудачу Если вы хотите использовать OpenGL в RAD Studio 2009 и иметь несколько Rendering Contexts, вы можете создать компонент GLMaster, унаследованный от TFrame, который будет предоставлять DC, и компонент GLMonitor, действующий как камера. Однако при попытке создать OpenGL RC в переопределенном GLMaster.Loaded внутри условия "если не (csDesigning в ComponentState) тогда" вы можете столкнуться с проблемами. Проблема заключается в том, что Delphi молча предоставляет созданным компонентам другие хэндлы и, следовательно, другие DC, даже если вы предоставляете флаг OWNDC. Это может привести к тому, что при попытке получить DC для вызова wglMakeActive будет получен недействительный хэндл, и вы получите сообщение об ошибке доступа. Чтобы решить эту проблему, вы можете переопределить CreateParams для компонента GLMaster и добавить флаг CS_OWNDC. Это должно гарантировать, что компонент получит собственный DC. Кроме того, вы можете переопределить Loaded для своего компонента, чтобы инициализировать OpenGL после того, как все ссылки станут действительными. Однако, если вы все еще сталкиваетесь с проблемами, вам может потребоваться переместить инициализацию OpenGL в обработчик OnShow главного формы и очистку в обработчик OnClose главного формы. Это гарантирует, что компоненты будут инициализированы после загрузки из файла .dfm и будут правильно очищены при закрытии приложения. Пример кода на Object Pascal (Delphi) для переопределения CreateParams:
Пример кода на Object Pascal (Delphi) для переопределения Loaded:
Пример кода на Object Pascal (Delphi) для инициализации OpenGL в обработчике OnShow главного формы:
Пример кода на Object Pascal (Delphi) для очистки OpenGL в обработчике OnClose главного формы:
В заключение, следует отметить, что при работе с OpenGL в Delphi важно правильно управлять хэндлами и DC, чтобы избежать ошибок доступа и других проблем. Переопределение CreateParams и Loaded, а также правильное использование обработчиков OnShow и OnClose главного формы могут помочь вам решить проблемы, связанные с инициализацией и очисткой OpenGL в ваших компонентах. При использовании OpenGL в RAD Studio 2009 возникают проблемы с созданием нескольких Rendering Contexts из-за того, что Delphi игнорирует флаг CS_OWNDC при создании компонента TFrame, что приводит к неудаче wglMakeCurrent. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |