2009-10-13 10 views

Odpowiedz

5

Można przechowywać wiele oczek w jednym buforze wierzchołków. Możesz uzyskać pewną wydajność, umieszczając kilka małych oczek w jednym buforze. W przypadku naprawdę dużych oczek należy używać oddzielnych buforów. SetStreamSource pozwala określić przesunięcie bufora wierzchołków dla bieżącej siatki.

pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride()); 
-2

Z OpenGL można użyć glVertexPointer(), aby rozpocząć rysowanie od pewnego przesunięcia wewnątrz VBO. nie jestem pewien co do D3D.

2

TBH Powodem umieszczenia ich wszystkich w jednym dużym buforze jest zaoszczędzić na połączeniach ciągnienia. Koszt przełączania bufora wierzchołków jest dość minimalny. Jeśli możesz połączyć je wszystkie w jeden bufor wierzchołków i wyrenderować 10 obiektów w 1 losowaniu, to masz dużą wygraną.

Zwykle w celu ich scalenia wystarczy utworzyć 1 duży bufor wierzchołków z wszystkimi danymi werteksów, które już zostały przekształcone w świat, jeden po drugim. Następnie ustawiasz bufor indeksu, który renderuje je jeden po drugim. Następnie masz wszystko, co rysuje się przy minimalnym remisie. Oczywiście, jeśli przeniesiesz jedną rzecz wymagającą aktualizacji części bufora wierzchołków, dlatego jest to idealna sytuacja dla geometrii statycznej.

Jeśli wszystkie obiekty są takie same, użyjesz tylko jednego bufora wierzchołków (z definicją 1 obiektu) i 1 bufora indeksowego tak czy inaczej? Matryce przesuwają lub ożywiają obiekt ...

Jeśli wszystkie obiekty są różne i poruszają się/animują, to po prostu przykleiłbym się do poszczególnych VB. Wątpię, byś zauważył jakąkolwiek różnicę, łącząc je wszystkie razem.

0

Cóż, moje doświadczenie jest takie, że nie ma tak wielkiej różnicy, o ile twoje bufory nie są naprawdę małe lub naprawdę ogromne. Podejrzewam, że wszelkie nieefektywności w przełączaniu buforów byłyby powiązane ze wzrostem wydajności, dając kierowcy więcej możliwości zarządzania pamięcią z mniejszymi buforami.

Powiązane problemy