Как отключить Direct3D выходную фильтрацию - PullRequest
2 голосов
/ 01 апреля 2012

Я использую DirectX9 для рендеринга видео на экран. Используемая библиотека SlimDX.

Созданное программное обеспечение используется для маркировки плохих пикселей на устройстве вывода, поэтому крайне важно, чтобы не было фильтрации / сглаживания текстур.

Я отключил все параметры фильтрации текстур, отключил сглаживание и выровнял текстуру по экрану в соотношении 1: 1 между буфером и обработанной текстурой. Дело в том, что на некоторых устройствах DirectX, кажется, выполняет некоторую билинейную фильтрацию / размытие на выходе.

Мне нужно, чтобы весь вывод был блочным, с фильтрацией -0-. Поскольку весь код изменения размера работает с самим элементом управления (без изменения размера буфера и т. Д.), У меня нет возможности изменить размер этого буфера.

Странно то, что это происходит только на некоторых устройствах, но не на всех.

Как мне сказать DirectX не сглаживать то, что он передает элементу управления? (отключить любую фильтрацию текстур, выполняемую для заднего / переднего буфера)

Заранее спасибо за любую помощь (:

Для тех, кто не понимает, от чего я пытаюсь избавиться - Когда разрешение визуализированного изображения ниже, чем разрешение нарисованной области, Direct3D создает плавный переход между пикселями. Я хочу, чтобы каждый пиксель отображался в виде простого прямоугольника без какой-либо фильтрации, где я могу найти настройки, управляющие этим поведением?

1 Ответ

3 голосов
/ 09 мая 2012

Я просмотрел его в Интернете, и, похоже, нигде нет правильного объяснения этого поведения.

Что происходило:
Поведение DirectX по умолчанию в WindowsXP и более ранних версиях заключалось в том, чтобы сгладить все выходные данные рендеринга (если элемент управления / экран, на который вы рендеринге, не совпадает с размером, заданным для буфера)

Начиная с WindowsVista, поведение по умолчанию - оставлять пиксели как есть (что в основном означает растянутый прямоугольник, представляющий каждый пиксель)

Так как это поведение самого драйвера, пользователь абсолютно не контролирует это: Единственное решение - сбросить буферный буфер каждый раз, когда изменяется размер элемента управления, чтобы сохранить рендеринг для каждого пикселя. Обойти это невозможно - в противном случае DirectX имеет контроль над техникой изменения размера

...