ПрограммированиеФорумГрафика

Загрузка нескольких буферов(индес, вершины) в D3D10

#0
14:50, 6 фев 2011

Начал изучать десятый директ. Столкнулся с проблемой при загрузке нескольких графических объектов  с созданием для каждого вершинного и индексного буферов. Тут уже столкнулся с проблемой: Функция IASwtVertexBuffers загружает массив буферов, но функция IASetIndexBuffer работает только с одним буфером.
Как поступить в этом случае?

Каждый объект создается отдельным классом. Используется D3D10.
Если не сложно, опишите подробнее работу с несколькими буферами (не думаю, что разобрался с ними полностью)
Заранее спасибо.

#1
14:59, 6 фев 2011

Всё, что нужно, описано в хелпе ДХСДК. Насколько я понимаю, согласно:
>You may create one or more vertex buffers and, optionally, an index buffer.
Можно задать несколько вертексных буферов, но только один индексный. И выборка из всех вертексных будет идти по этому единственному индексному.

Как это работает очень понятно и хорошо описано в том же самом хелпе, но в разделе, посвящённом ДХ9.

#2
15:09, 6 фев 2011

Надеялся, что есть вариант загрузки нескольких индексных буферов, как это можно было делать в d3d9

#3
15:52, 6 фев 2011

А разве там это можно было сделать? Как?

#4
15:58, 6 фев 2011

DirectX Documentation for C++
>Multi-Stream Multi-Index Rendering
>The Direct3D 10 codepath also allows the use of vertex streams that are stored at different frequencies. In order to access this vertex data stored >at different frequencies, multiple index buffers are needed. Note that there is no API to allow users of Direct3D 10 to set more than one index >buffer at a time. To perform this multi-stream multi-index rendering, some fancy shader work must be done.
>...
оно?

#5
16:01, 6 фев 2011

В 9 версии нет конвеера буферов. Устанавливаешь вершинный и индекный буфер, рисуешь примитивы, далее можно устанавливать другие вершинные и индексные буферы. В основной функции рендера вызываются функции ренденга каждого объекта, в котором прописано утановление буферов, рисование примитив.

#6
17:14, 6 фев 2011

тьфу, перечитал нулевой пост, тебе надо в IASetIndexBuffer передавать указатель на конкретный буфер из твоего массива созданных и будет тебе счастье

#7
3:32, 7 фев 2011

Сделал по другому: Каждый объект создает только вершины и индексы, после инициализации объектов вызывается функция создания буферов. Получается один вершинный и один индексный буфер для всех объектов. При рендере определенного объета рисуется N индексов, начиная с S индекса.

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

С радостью принял бы алгоритм менее ресурсоемкий :)

ПрограммированиеФорумГрафика

Тема в архиве.