Как отключить выходную фильтрацию Direct3D

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

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

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

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

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

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

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

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


person DannyZB    schedule 01.04.2012    source источник
comment
Я предполагаю, что вы делаете смещение на полпикселя, чтобы пиксели совпадали с текселями?   -  person MikeP    schedule 01.04.2012


Ответы (1)


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

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

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

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

person DannyZB    schedule 09.05.2012