возможно, не самый изящный способ решить это
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;
Вы можете хранить несколько сеток в одном буфере вершин. Вы можете повысить производительность, поместив несколько небольших сеток в один буфер. Для действительно больших сеток вам следует использовать отдельные буферы. SetStreamSource
позволяет вам указать смещение буфера вершин для вашей текущей сетки.
pRawDevice->SetStreamSource( 0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride() );
С OpenGL вы можете использовать glVertexPointer ()
, чтобы начать рисование с определенного смещения внутри VBO. не уверен насчет D3D.
TBH, как правило, причина помещения их всех в один большой буфер - экономия на вызовах отрисовки. Стоимость переключения буфера вершин довольно минимальна. Если вы можете объединить их все в 1 буфер вершин и отрендерить 10 объектов в 1 вызове отрисовки, тогда вы окажетесь на большом выигрыше.
Обычно для их объединения вы просто создаете 1 большой буфер вершин со всеми данными вершин, уже преобразованными в мир в нем, один за другим. Затем вы устанавливаете индексный буфер, который отображает их один за другим. Затем у вас есть все, что отрисовывается за минимальное количество вызовов отрисовки. Конечно, если вы перемещаете что-то, что требует обновления части буфера вершин, поэтому это идеальная ситуация для статической геометрии.
Если все объекты одинаковы, вы будете использовать только 1 буфер вершин (с 1 объектом определение в нем) и 1 индексный буфер в любом случае, верно? Матрицы перемещают или оживляют объект ...
Если все объекты разные и движутся / анимируются, я бы просто остановился на отдельных VB. Сомневаюсь, что вы заметите какую-либо разницу, объединив их все вместе.
Ну, по моему опыту, это не имеет большого значения, пока ваши буферы на самом деле не крошечный или действительно огромный. Я подозреваю, что любая неэффективность переключения буферов будет сопровождаться повышением эффективности за счет предоставления драйверу большего количества функций для управления своей памятью с помощью большего количества буферов меньшего размера.