Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DX VertexBuffer [Delphi, Windows]


Buffer ©   (2005-05-26 14:51:00) 

Нет ли возможности сделать так?
Сейчас я заполняю вертексбуффер вот так:

FD3DDevice.CreateVertexBuffer(PrimSize, D3DUSAGE_DYNAMIC,
                             VertexType, D3DPOOL_DEFAULT, VertexBuffer);
VertexBuffer.Lock(0, Primsize, PByte(Vertices), 0);
//тут я забиваю в Vertices информацию.
VertexBuffer.Unlock;

А теперь представим, что я получил соержимое для вертекс буфера в некоторой переменной TempVertices и её содержимое нужно забить в новый вертексбуффер.
Делаю вот так, работает но торомознуто:

FD3DDevice.CreateVertexBuffer(PrimSize, D3DUSAGE_DYNAMIC,
                             VertexType, D3DPOOL_DEFAULT, VertexBuffer);
VertexBuffer.Lock(0, Primsize, PByte(Vertices), 0);
CopyMemory(Vertices,TempVertices,TempVerticesSize);
VertexBuffer.Unlock;

Можно ли сделать эту операцию без CopyMemory? Может как-то сказать, чтобы lock пользовался тем указателем, который ему в Vertices передали и не затирал информацию по этому указателю?
Короче наверное это ламерский вопрос, но все же...


Buffer   (2005-05-27 16:02:00) [1]

Не на каждом кадре, но если уж делается... то 2-3 секунды обеспечены. Правда там пока еще этот массив соберется, но я обошел проблему, собирая массив сразу внутри Lock. Прирост правда не большой. Но Спасибо, посмотрю на "Draw[Indexed]PrimitiveUP". С флагами пробывал, но эффекта нужного не достиг, да и в msdn как-то про них почти ничего и не написано.


Sapersky   (2005-05-27 12:27:00) [2]

Нет такой возможности. В DirectDraw для поверхностей было. В D3D, насколько помню, нет.
Насчёт "тормознуто" - копирование делается на каждом кадре, что ли? Лучше этого избегать, вообще-то... ну есть ещё флаги блокировки вроде D3DLOCK_DISCARD / D3DLOCK_NOOVERWRITE, они в какой-то степени могут помочь (см. SDK).
Если уж так хочется нарисовать без копирования, есть Draw[Indexed]PrimitiveUP функции. Но они заметно тормознее для большого количества вершин (по сравнению со статическими буферами - c динамическими и копированием на каждом кадре не сравнивал, может, и лучше будет).


Наверх

Титульная страница Поиск, карта сайта Написать письмо