Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Маскировка исключений с плавающей запятой в современных Win32 Delphi OpenGL приложениях

Delphi , Графика и Игры , OpenGL

При работе с OpenGL в Win32 Delphi приложениях часто рекомендуется маскировать исключения с плавающей запятой. Это связано с тем, что OpenGL может генерировать исключения в результате недопустимых операций или потери точности. В ранних версиях Delphi RTL уже маскировал эти исключения в units OpenGL.

В документации к функции SetExceptionMask указано, что маскирование и снятие маскировки исключений необходимо при взаимодействии с внешним кодом, таким как TWebBrowser, OLEDB, .NET assembly, ActiveX controls и OpenGL.

Однако, многое изменилось с тех пор, как это было написано в 1999 году. Раньше люди использовали Windows 95, nVidia's GeForce еще не было слышно, и все использовали фиксированный конвейер в OpenGL. Сегодня/OpenGL используется для написания и компиляции собственных программ GPU (шидеры) и отправки больших буферов в память видеокарты. Процессор почти не участвует в этом процессе.

Так нужен ли все еще маскировка исключений с плавающей запятой в современных Win32 Delphi OpenGL приложениях?

Ответ: Да, маскировка исключений с плавающей запятой все еще необходима в современных Win32 Delphi OpenGL приложениях. Это связано с тем, что OpenGL и другие библиотеки, использующие числа с плавающей запятой, все еще могут генерировать исключения. Маскирование исключений при вызове библиотеки и снятие маскировки при возврате из вызова - это хорошая практика.

Пример кода на Object Pascal (Delphi) для маскировки исключений с плавающей запятой:

uses
  System.SysUtils,
  System.Math;

var
  FPUControlWord: LongInt;
begin
  // Сохраняем текущее значение FPUControlWord
  FPUControlWord := Get8087CW;

  // Маскируем исключения
  Set8087CW(FPUControlWord and not (exInvalidOp or exDivByZero or exOverflow or exUnderflow or exPrecision));

  // Выполняем операции с плавающей запятой

  // Снимаем маскировку исключений
  Set8087CW(FPUControlWord);
end;

В этом примере мы сохраняем текущее значение FPUControlWord, маскируем исключения с плавающей запятой, выполняем операции с плавающей запятой и затем снимаем маскировку исключений.

В заключение, маскировка исключений с плавающей запятой все еще необходима в современных Win32 Delphi OpenGL приложениях. Это гарантирует стабильную работу приложения и предотвращает непредвиденные сбои.

Создано по материалам из источника по ссылке.

Маскировка исключений с плавающей запятой в современных Win32 Delphi OpenGL приложениях.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: OpenGL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 19:02:53/0.003587007522583/0