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

Вниз

DirectDraw - есть ли ограничения на размер и к-во поверхностей ?   Найти похожие ветки 

 
Blondin   (2006-07-12 11:03) [0]

Добрый день.
Пишу небольшое приложение с исп. DirectDraw.
Для анимации все кадры пихал в одну bmp, ее грузил на поверхность,
а при выводе копировал из нее нужные кадры (BltFast) на первичную.
На некоторых машинах работает2 прекрасно, на некоторых анимация
не выводится.
 Давно еще я читал (но непомню где), что некоторые видеокарты
не позволяют работать со вторичн. проверхностью, если она
больше первичной. Так ли это ?
 Допустим я каждый кадр анимации загружу на отдельную поверхность,
но кадров много, получиться несколько сотен пов., будет ли оно
работать, нет ли ограничений на их к-во ?

Спасибо.


 
Sapersky   (2006-07-12 13:54) [1]

Вообще видеокарты с ограничением на размер поверхности наверняка уже вымерли. Но можно на всякий случай проверить флаг DDCAPS2_WIDESURFACES в DDCaps.dwCaps2.
Сам сталкивался с такой вещью - ограничение макс. размера поверхности, с которой можно сделать stretch (= макс. размеру текстуры, напр. 2048*2048; видимо, stretch реализован через D3D). Но если без stretch - всё работало независимо от размера.
Возможно, большая поверхность не влезает в видеопамять, и из-за этого проблемы, хотя теоретически их не должно быть, за исключением меньшей скорости.
По количеству поверхностей - вроде ограничений нет. Но создание множества мелких поверхностей медленнее (может занять несколько секунд - в книге Краснова был пример на эту тему), чем одной большой.


 
Blondin   (2006-07-12 15:06) [2]

Спасибо, с флагом поиграюсь.

>Вообще видеокарты с ограничением на размер поверхности наверняка уже вымерли
я пробовал на радеоне 9000 - не выводилось.


 
Blondin   (2006-07-13 12:09) [3]

Получилось !
при создании пов. указал флаг DDCAPS2_WIDESURFACES
и все пошло

Sapersky, великое спасибо !


 
Sapersky   (2006-07-13 16:19) [4]

Если всё работает - это хорошо, но я вообще-то имел в виду не флаг при создании поверхности, а проверку вроде такой:

Var DDCaps : TDDCaps;

ZeroMemory(@DDCaps, SizeOf(TDDCaps));
DDCaps.dwSize := SizeOf(TDDCaps);
DDraw.GetCaps(@DDCaps, nil);

If (DDCaps.dwCaps2 and DDCAPS2_WIDESURFACES) = 0 then ShowMessage("Большие поверхности не поддерживаются");

А если при создании поверхности, то это получился (в зависимости от того, в dwCaps или в dwCaps2) какой-то другой флаг. Какой именно - можно посмотреть в DirectDraw.pas, с учётом того, что
DDCAPS2_WIDESURFACES            = $00001000;
Например, для ddsCaps.dwCaps:
DDSCAPS_TEXTURE                         = $00001000;
Для ddsCaps.dwCaps2:
DDSCAPS2_CUBEMAP_POSITIVEY              = $00001000;


 
Don Nikola ©   (2006-07-15 04:10) [5]

Кстати, можно пихать кадры в простыню не горизонтально, а вертикально, так вроде пооптимальнее будет - не будет размазанных на пару метров кадров, да и проблем со слишком широкими поверхностями не должно возникать.


 
Blondin   (2006-07-17 13:37) [6]

Sapersky   (13.07.06 16:19) [4]

да, действительно, стормозил я конкретно.
пока обнаружил, что также везде работает, если для большой
поверхности при создании указать размещение в системной памяти.
скорость для меня приемлема, пока остановлюсь на этом



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

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

Наверх




Память: 0.46 MB
Время: 0.039 c
15-1179179108
PHPdeveloper
2007-05-15 01:45
2007.06.10
FF и js


2-1179393807
koha
2007-05-17 13:23
2007.06.10
TCompressionStream не возвращает поток в TMemoryStream - почему?


2-1179659324
ari_9
2007-05-20 15:08
2007.06.10
как из контекста устройства (HDC) получить битмап ?


2-1179643152
А.Брей
2007-05-20 10:39
2007.06.10
Переменная


15-1178804267
Desdechado
2007-05-10 17:37
2007.06.10
Шаблоны документов и их наполнение из БД





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский