ОБНОВЛЕНИЕ:
Большое спасибо всем за ваши ответы.Как предположил Джесси Холл, похоже, это проблема с драйверами (или оборудованием).Я попробовал то же самое приложение в других конфигурациях, и оно работало, как и ожидалось.
Я протестировал приложение на других компьютерах, которые используют один и тот же графический процессор (ATI 4800 HD), но разные версии драйвера, и все они показали одинаковую ошибкуповедение (что похоже на двойную гамма-коррекцию при записи).На этих компьютерах, если необходимо установить D3DRS_SRGBWRITEENABLE в false, чтобы исправить отображение.Кто-нибудь знает, является ли это известной ошибкой на этом оборудовании?
Еще более странным является то, что я получаю одинаковые конечные результаты с этими двумя конфигурациями:
- D3DRS_SRGBWRITEENABLE = FALSE и D3DSAMP_SRGBTEXTURE to TRUE
- D3DRS_SRGBWRITEENABLE = FALSE и D3DSAMP_SRGBTEXTURE to FALSE
В пиксельном отладчике я вижу, что линеаризация применяется правильно в случае 1, но (автоматическая) коррекция при записи дает тот же результат, что и в случае2 (который вообще не выполняет преобразование) ...
// - КОНЕЦ ОБНОВЛЕНИЯ
У меня возникли проблемы с исправлением гамма-коррекции в приложении DirectX9.
Когда я включаю линеаризацию текстуры в сэмплерах (D3DSAMP_SRGBTEXTURE) и запись sRGB для вывода (D3DRS_SRGBWRITEENABLE), похоже, что гамма-коррекция применяется дважды.
Вот мои настройки.Я использовал следующую текстуру (от здесь ), чтобы нарисовать полноэкранный квад:
Результаты были визуально слишком яркими в правой части изображения.Я использовал PIX для отладки одного из этих серых пикселей и, если бы все было настроено правильно, я ожидал бы выходное значение 0,73 (= 0,5 ^ (1,0 / 2,2)).К сожалению, выход пиксельного шейдера составил 0,871 (похоже, что это может быть гамма-коррекция, примененная дважды?).Я вошел в пиксельный шейдер с помощью отладчика, и выборка текстуры вернула значение (0,491, 0,491, 0,491), что должно означать, что линеаризация при чтении работала правильно.
КогдаЯ отключаю D3DRS_SRGBWRITEENABLE, вывод пиксельного шейдера составляет 0,729, что выглядит для меня гораздо более правильным.
Любая идея, откуда происходит это преобразование (в отладчикевыход пиксельного шейдера был 0,491)?Какие другие флаги / состояния рендеринга я должен проверить?
Большое спасибо за вашу помощь!