Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];

Вниз

Сглаживание при вызове метода 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 вся ветка

Форум: "Media";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
2-1284656353
Первокурсница
2010-09-16 20:59
2010.12.12
Модификация записей в Access с помощью Delphi


15-1283632175
Юрий
2010-09-05 00:29
2010.12.12
С днем рождения ! 5 сентября 2010 воскресенье


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


2-1284824389
Festil
2010-09-18 19:39
2010.12.12
Влияние действий друг на друга


15-1282711293
12
2010-08-25 08:41
2010.12.12
Идиотские рекламы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский