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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
2-1179823907
Lobach
2007-05-22 12:51
2007.06.10
Как получить число из строки


3-1174533472
merko$
2007-03-22 06:17
2007.06.10
Копирование записи в IBTable


15-1179160891
homm
2007-05-14 20:41
2007.06.10
Вылетает DOC программа …


5-1155885569
karachun
2006-08-18 11:19
2007.06.10
Эксперт для создания компонентов


2-1179413597
Dr.M@$
2007-05-17 18:53
2007.06.10
Проблема работы ASM в XP