Несколько сеток в одном буфере вершины?

возможно, не самый изящный способ решить это

select  Activity, 
        SUM(Amount) as "Total_Amount",
        2009 AS INCOME_YEAR
from    Activities, Incomes
where Activities.UnitName = ? AND
      Incomes.ActivityId = Activities.ActivityID
GROUP BY Activity
ORDER BY Activity;

UNION

select  Activity, 
        SUM(Amount) as "Total_Amount",
        2008 AS INCOME_YEAR
from Activities, Incomes2008
where Activities.UnitName = ? AND
      Incomes2008.ActivityId = Activities.ActivityID
GROUP BY Activity
ORDER BY Activity;
7
задан Electro 13 October 2009 в 12:08
поделиться

4 ответа

Вы можете хранить несколько сеток в одном буфере вершин. Вы можете повысить производительность, поместив несколько небольших сеток в один буфер. Для действительно больших сеток вам следует использовать отдельные буферы. SetStreamSource позволяет вам указать смещение буфера вершин для вашей текущей сетки.

pRawDevice->SetStreamSource( 0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride() );
5
ответ дан 7 December 2019 в 12:22
поделиться

С OpenGL вы можете использовать glVertexPointer () , чтобы начать рисование с определенного смещения внутри VBO. не уверен насчет D3D.

-2
ответ дан 7 December 2019 в 12:22
поделиться

TBH, как правило, причина помещения их всех в один большой буфер - экономия на вызовах отрисовки. Стоимость переключения буфера вершин довольно минимальна. Если вы можете объединить их все в 1 буфер вершин и отрендерить 10 объектов в 1 вызове отрисовки, тогда вы окажетесь на большом выигрыше.

Обычно для их объединения вы просто создаете 1 большой буфер вершин со всеми данными вершин, уже преобразованными в мир в нем, один за другим. Затем вы устанавливаете индексный буфер, который отображает их один за другим. Затем у вас есть все, что отрисовывается за минимальное количество вызовов отрисовки. Конечно, если вы перемещаете что-то, что требует обновления части буфера вершин, поэтому это идеальная ситуация для статической геометрии.

Если все объекты одинаковы, вы будете использовать только 1 буфер вершин (с 1 объектом определение в нем) и 1 индексный буфер в любом случае, верно? Матрицы перемещают или оживляют объект ...

Если все объекты разные и движутся / анимируются, я бы просто остановился на отдельных VB. Сомневаюсь, что вы заметите какую-либо разницу, объединив их все вместе.

2
ответ дан 7 December 2019 в 12:22
поделиться

Ну, по моему опыту, это не имеет большого значения, пока ваши буферы на самом деле не крошечный или действительно огромный. Я подозреваю, что любая неэффективность переключения буферов будет сопровождаться повышением эффективности за счет предоставления драйверу большего количества функций для управления своей памятью с помощью большего количества буферов меньшего размера.

0
ответ дан 7 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: