Главная страница
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.009 c
15-1283507963
Медвежонок Пятачок
2010-09-03 13:59
2010.12.12
про кита


15-1282803046
xayam
2010-08-26 10:10
2010.12.12
Модераторам/администраторам


2-1285150130
картман
2010-09-22 14:08
2010.12.12
работа с файлами


2-1284977449
123456
2010-09-20 14:10
2010.12.12
работа с treeview


2-1284885575
Telebot
2010-09-19 12:39
2010.12.12
TWebBrowser грузит сильно ЦП (более 50%) и ест много памяти