Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.12;
Скачать: CL | DM;

Вниз

Сглаживание при вызове метода blt поверхности DirectX в Висте   Найти похожие ветки 

 
Дмитрий Белькевич ©   (2008-04-12 15:46) [0]

Вызываю IDirectDrawSurface.Blt для переноса изображения с некоторой экранной поверхности на первичную. При этом размеры области для переноса на первичной поверхности и изначальной поверхности чаще всего не совпадают.
В Win XP и более старых включается хардварный стретч, и видюха сама качественно растягивает либо сжимает изображение. В Висте же для стретча применяется алгоритм "ближайший сосед". Стретч быстрый, но некачественный.

Можно ли в Висте как-то включить качественный алгоритм сглаживания при изменении размера изображения?


 
Дмитрий Белькевич ©   (2008-04-12 15:54) [1]

Уточнения. IDirectDrawSurface.Blt ошибок не возвращает. DDCAPS_BLTSTRETCH драйвер умеет.


 
Sapersky   (2008-04-12 18:10) [2]

Меня в своё время интересовал вопрос, как отключить сглаживание - так и не нашёл на него ответа. В конечном итоге перешёл на D3D7. Проблем с аппаратной поддержкой никаких - если карта умеет DDCAPS_BLTSTRETCH, то почти наверняка и D3D, и даже наоборот, некоторые (интегрированные на i810-815) могут выводить полигоны с текстурами, но не умеют масштабировать поверхности. Фильтрация легко включается/выключается.
С т.з. сложности реализации, если размеры поверхностей у вас меньше обычного макс. размера текстуры (2048*2048) - тоже никаких проблем, можете посмотреть вот это:
http://sapersky.narod.ru/files/D3D7_sprite_sample_04.rar
Если больше (или вам нужна работоспособность на старичках вроде TNT с их макс. 512*512), картинку нужно "порезать" на тайлы соотв. размера.


 
Дмитрий Белькевич ©   (2008-04-15 00:55) [3]

Спасибо. Интересная идея. Жаль, ограничения размеров не всегда приемлемы.
При разрезании на тайлы дырок между текстурами не получится? Или от карточек зависит?


 
Sapersky   (2008-04-15 18:29) [4]

До сего момента пребывал в уверенности, что нет никаких дырок. Сейчас собрал пример:
http://sapersky.narod.ru/files/D3D7_image_tiling.rar
и обнаружил, что хоть и не "дырки", но стыки видны. Вряд ли виновата конретная карточка, скорее, причина - сам алгоритм билинейной фильтрации, не может он выбирать сэмплы из соседней текстуры, только из текущей.
Однако данный пример - экстремальный случай, текстура специально режется на мелкие тайлы 16*16; на практике, если использовать реальный макс. размер текстуры - стыки почти (а если масштаб при выводе <= 1 - то и совсем) не видны.

Кстати, у DDraw на некоторых картах (Радеоны, интеловские интегрированные) тоже имеются проблемы с масштабированием больших картинок. Работать работает, но начинаются немотивированные тормоза, такое ощущение, что драйвер частично переключается на софтвер. Видимо, DDraw-масштабирование в этих "железках" реализовано через наложение текстуры.


 
Дмитрий Белькевич ©   (2008-04-15 21:35) [5]

>До сего момента пребывал в уверенности, что нет никаких дырок

Я просто по игрушкам помню - часто дырки были заметны.

>Вряд ли виновата конретная карточка, скорее, причина - сам алгоритм билинейной фильтрации,

Пример еще не забирал, но скорее всего - из-за фильтрации проблемы. Из-за того, что краевые пиксели не с чем сглаживать.

>стыки почти (а если масштаб при выводе <= 1 - то и совсем) не видны.

У нас область весьма специфическая - медицина. Могут быть вопросы. Даже из-за одного пикселя посередине изображения. Было бы на самом крае - еще туда-сюда, на краях данных практически никогда не бывает.
Но вот в центре...

>Работать работает, но начинаются немотивированные тормоза, такое ощущение, что драйвер частично переключается на софтвер.

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

Спасибо за участие в обсуждении, в любом случае...


 
Sapersky   (2008-04-16 20:32) [6]

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

В принципе, можно попробовать побороться со стыками, например, делать вокруг каждой текстуры бордюр из пикселей соседей, потом как-то подкручивать текстурные координаты, задействовать альфа-блендинг...
Но более простым вариантом, наверное, будет использование в случае Висты софтверного масштабирования (FastLIB->FastSize.Bilinear, например), т.к. Виста автоматически подразумевает мощный компьютер, который с софтвером легко справится.


 
Дмитрий Белькевич ©   (2008-04-16 22:43) [7]

Sapersky, можно ли лично как-то связаться?


 
Дмитрий Белькевич ©   (2008-04-17 00:01) [8]

Нашел, отпишу - есть вопросы.



Страницы: 1 вся ветка

Текущий архив: 2010.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
15-1283783209
ocean
2010-09-06 18:26
2010.12.12
Wifi


15-1283511204
DVM
2010-09-03 14:53
2010.12.12
Помогите с переводом на английский одного слова


15-1283514271
tesseract
2010-09-03 15:44
2010.12.12
www магазинчики


2-1284721761
set
2010-09-17 15:09
2010.12.12
Куб


2-1284042092
ZV
2010-09-09 18:21
2010.12.12
TServerSocket, как узнать IP клиента при подключении.