Начал изучать десятый директ. Столкнулся с проблемой при загрузке нескольких графических объектов с созданием для каждого вершинного и индексного буферов. Тут уже столкнулся с проблемой: Функция IASwtVertexBuffers загружает массив буферов, но функция IASetIndexBuffer работает только с одним буфером.
Как поступить в этом случае?
Каждый объект создается отдельным классом. Используется D3D10.
Если не сложно, опишите подробнее работу с несколькими буферами (не думаю, что разобрался с ними полностью)
Заранее спасибо.
Всё, что нужно, описано в хелпе ДХСДК. Насколько я понимаю, согласно:
>You may create one or more vertex buffers and, optionally, an index buffer.
Можно задать несколько вертексных буферов, но только один индексный. И выборка из всех вертексных будет идти по этому единственному индексному.
Как это работает очень понятно и хорошо описано в том же самом хелпе, но в разделе, посвящённом ДХ9.
Надеялся, что есть вариант загрузки нескольких индексных буферов, как это можно было делать в d3d9
А разве там это можно было сделать? Как?
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.
>...
оно?
В 9 версии нет конвеера буферов. Устанавливаешь вершинный и индекный буфер, рисуешь примитивы, далее можно устанавливать другие вершинные и индексные буферы. В основной функции рендера вызываются функции ренденга каждого объекта, в котором прописано утановление буферов, рисование примитив.
тьфу, перечитал нулевой пост, тебе надо в IASetIndexBuffer передавать указатель на конкретный буфер из твоего массива созданных и будет тебе счастье
Сделал по другому: Каждый объект создает только вершины и индексы, после инициализации объектов вызывается функция создания буферов. Получается один вершинный и один индексный буфер для всех объектов. При рендере определенного объета рисуется N индексов, начиная с S индекса.
Но такой метод подходит только статических программ, при добавлении нового объекта динамически, придется вызывать функцию создания буфера для всех объектов, что не есть хорошо. Позже посчитаю затрачиваемое время на множество объектов и при добавлении динамических объектов. Может и остановлюсь на этом варианте.
С радостью принял бы алгоритм менее ресурсоемкий :)
Тема в архиве.