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

Решение проблемы отображения HDR в OpenGL на процессорах AMD на Windows

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

Недавно я столкнулся с проблемой отображения HDR-контента в OpenGL на процессорах AMD под Windows. Несмотря на то, что метод, используемый мной, работал отлично на видеокартах nVidia, на процессорах AMD отображался только SDR-изображение. После тщательного исследования и экспериментов я нашел решение, которое позволяет правильно отображать HDR-контент в OpenGL на процессорах AMD.

Проблема заключалась в том, что фрагментный шейдер на процессорах AMD сжимал значения до 1.0, в то время как на видеокартах nVidia они могли достигать значения около 25.0. Чтобы решить эту проблему, необходимо правильно настроить контекст OpenGL и использовать соответствующие настройки шейдера.

Во-первых, убедитесь, что ваш монитор и его соединение поддерживают HDR. В моем случае это был LG B9 с 12-битным 444 RGB через HDMI.

Затем следуйте приведенным ниже шагам, чтобы создать правильный контекст OpenGL для отображения HDR-контента на процессорах AMD:

  1. Установите атрибуты пиксельного типа и глубины цвета:
const
  PixelAttribList: array[0..20] of Integer = (  //
    WGL_DRAW_TO_WINDOW_ARB, 1, //
    WGL_DOUBLE_BUFFER_ARB, 1,        //
    WGL_SUPPORT_OPENGL_ARB, 1,     //
    WGL_ACCELERATION_ARB, WGL_FULL_ACCELERATION_ARB,  //
    WGL_SWAP_METHOD_ARB, WGL_SWAP_EXCHANGE_ARB, //
    WGL_PIXEL_TYPE_ARB, WGL_TYPE_RGBA_FLOAT_ARB, //
    WGL_RED_BITS_ARB, 16,                          //
    WGL_GREEN_BITS_ARB, 16,                          //
    WGL_BLUE_BITS_ARB, 16,                              //
    WGL_ALPHA_BITS_ARB, 0,                            //
    0);
var
  piFormats: PGLint;
begin
  wglChoosePixelFormatARB(DC, @PixelAttribList, nil, 100, piFormats, @nNumFormats);
  if nNumFormats = 0 then
    exit;
  if not SetPixelFormat(DC, piFormats^, nil) then
    exit;
  hrc:= wglCreateContextAttribsARB(DC, 0, nil);
  if Result <> 0 then
    ActivateRenderingContext(DC, hrc);
end;
  1. Убедитесь, что ваш фрагментный шейдер правильно настроен для HDR. Для этого используйте функцию glsl_get_frag_data и укажите правильные значения для каналов RGB. Например:
glsl_frag_data = vec4(25.0, 25.0, 25.0, 1.0);
  1. Наконец, проверьте, правильно ли ваш контекст OpenGL отображает HDR-контент, используя wglGetPixelFormatAttribivARB. Вы должны получить 16 бит на канал RGB, что является необходимым условием для HDR.

После выполнения этих шагов я смог правильно отображать HDR-контент в OpenGL на процессорах AMD под Windows. Надеюсь, это решение поможет и вам решить подобную проблему.

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

Решение проблемы отображения HDR в OpenGL на процессорах AMD на Windows заключается в правильной настройке контекста OpenGL и шейдеров для поддержки HDR.


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

Получайте свежие новости и обновления по 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 18:59:01/0.0036110877990723/0