Форум: "Игры";
Текущий архив: 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