2014-11-13 2 views
0

Я блокирую backbuffer в direct3D 9 и копируя изображение на него. Я заметил на одном компьютере, что когда изображение растянуто на экране, оно становится размытым. На другом компьютере, на котором я тестировал, он полностью нефильтрованный (пикселированный). Есть ли способ указать, как бэкбуффер отбирается на экран, или он контролируется чем-то другим?Direct3D 9 Сэмплирование буферизатора

Я попытался

Device->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT); 

Однако это не имело никакого эффекта; Я думаю, что это влияет только на текстуры.

ответ

1

SetSamplerState не влияет на отображение обратного буфера на экран. Большинство водителей AFAIK будут использовать точечную выборку, что означает, что пиксели будут потеряны или удвоены, что приведет к ухудшению качества. Кстати, какой был GPU/драйвер на машине, где он выглядел отлично (вы не можете/не должны зависеть от этого поведения повсюду)?

Правильный способ сделать это - скопировать изображение в текстуру и визуализировать screen aligned quad, чтобы вы могли использовать аппаратную выборку, чтобы сгладить результат для вас.

Если по какой-либо причине вы не можете использовать передачу текстуры + рендеринга, вы можете использовать IDirect3DDevice9::StretchRect для фильтрации изображения при копировании в буфер обмена. Чтобы фактически загрузить изображение из системной памяти, вам придется использовать другую поверхность, либо заблокировать, либо скопировать ее, либо используя D3DXLoadSurfaceFromMemory.

+0

На компьютере, который сглаживал backbuffer, был графический процессор NVidia, а тот, который сделал его пиксельным, был ATI. Я знаю, что более типично отображать текстуру на квадрат с выравниванием по экрану, но я должен использовать backbuffer по разным причинам. Если драйвер отвечает за выбор буфера, а не Direct3D, то, полагаю, у меня нет контроля над этим, если я не изменю размер буфера. – user3124047

+0

Отредактировано альтернативным методом для фильтрации копий поверхности на поверхность. – Ani

+0

StretchRect кажется быстрее, чем блокировка backbuffer, и это позволяет мне выбирать тип выборки! Благодаря! – user3124047