?

Log in

No account? Create an account
30 мар, 2007 @ 17:28 Direct3d: Несколько буферов вершин
Скажите, пожалуйста, как лучше организовать работу с буфером вершин в Direct3D. Насколько целесообразно для каждого объекта формировать свой буфер, и в функции рендеринга писать что-то вроде:

d3d_device -> SetFVF(Vertex::FVF);

for (i=0; i < object_count; i++)
{
d3d_device -> SetStreamSource(0, Quad[i], 0, sizeof(Vertex));

...
d3d_device -> SetTransform...

d3d_device -> DrawPrimitive(D3DPT_TRIANGLEFAN, 0, 2);
}

Является ли вызов функции SetStreamSource дорогостоящим?

Если же обычная техника состоит в использовании одного буфера, то каким образом динамически удалять из него нужные объекты и т.д.? Приходится заново заполнять буфер после каждого изменения сцены?

Заранее спасибо.
topright:
[User Picture Icon]
From:sim0nsays
Date:Март, 30, 2007 15:21 (UTC)
(Ссылка)
SetStreamSource не бесплатный, а CreateVertexBuffer - очень дорогой.
В этом и надо находить баланс, то есть главный приоритет - делать как можно меньше CreateVertexBuffer, а потом уже стрататься делать как можно меньше vertex buffer switch.
В случае динамической сцены - как раз и уводить всю динамику в создание новых VB и уничтожение старых. Пореже.
(Ответить) (Ветвь дискуссии)
[User Picture Icon]
From:topright
Date:Март, 30, 2007 16:10 (UTC)
(Ссылка)
Понятно, спасибо.
(Ответить) (Уровень выше) (Ветвь дискуссии)
[User Picture Icon]
From:boher
Date:Март, 30, 2007 19:15 (UTC)
(Ссылка)
Добавлю от себя, что стоит почитать про Батчинг, например статью http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf .
(Ответить) (Ветвь дискуссии)