bazhenovc
> Да и шипать проект на OpenGL я бы не рискнул, по крайней мере в ближайшие года 3.
А почему не рискнул бы?
> На самом деле там не всё так радужно из-за постоянного рандомного доступа к памяти.
Ты сейчас о чем? Позиция/нормаль/ит.п. должны лежать рядом в текстуре. А если между вертексами, так со Structured буфер ровно то же самое, рандомный доступ.
> Помимо этого D3D11 не умеет MultiDrawIndirect
Да ну, правда?
ronniko
>Какой смысл в этом будет, когда выйдет Mantle API SDK и Directx 12 ?
>К весне-лету по слухам будет Mantle API SDK, а Directx 12 будет в конце 2015.
Mantle SDK работает только на AMD, а DX12 - только на Windows 10.
А что делать людям, которые сидят на nvidia + windows 7-8? А это, между прочим, крупнейший сегмент
рынка на данный момент (и, возможно, еще на много много лет). Да и перспективы Win10 весьма туманны, если микры опять нафакапят
с чем-нить, то никто не будет на неё переходить и dx12 вообще останется за бортом.
Как видишь, это не панацея.
> Мало того что Mantle API и Directx 12 прекрасно побеждают разгрузку CPU, так еще имеют новые техники рендера и большую гибкость.
Да ты кэп. Спасибо хоть картинки больше не пихаешь в каждое свое сообщение.
Mephisto std
MrShoor
> Да ну, правда?
Ты не видишь разницы между DrawIndirect и MultiDrawIndirect?
Просто DrawIndirect:
const DrawArraysIndirectCommand *cmd = (const DrawArraysIndirectCommand *)indirect; DrawInstanced( mode, cmd->first, cmd->count, cmd->instanceCount, cmd->baseInstance);
MultiDrawIndirect:
for (int n = 0; n < drawcount; n++) { const DrawArraysIndirectCommand *cmd; if ( stride != 0) { cmd = ( const DrawArraysIndirectCommand *)( ( uintptr)indirect + n * stride); } else { cmd = ( const DrawArraysIndirectCommand *)indirect + n; } DrawInstanced( mode, cmd->first, cmd->count, cmd->instanceCount, cmd->baseInstance); }
Мусорные вершины можно убрать только использовав MultiDrawIndirect, которого в D3D11 нет, есть только обычный DrawIndirect.
Для справки:
https://www.opengl.org/wiki/GLAPI/glDrawArraysIndirect
https://www.opengl.org/wiki/GLAPI/glMultiDrawArraysIndirect
Mephisto std
> А что делать людям, которые сидят на nvidia + windows 7-8?
Портировать им мобильную версию консольной игры с ведроида, они всё равно неудачники. Плюс для них будет бесплатный переход на Win10, потому причин не делать этого просто нет.
bazhenovc
> Мусорные вершины можно убрать только использовав MultiDrawIndirect, которого в
> D3D11 нет, есть только обычный DrawIndirect.
Бред же. DrawIndirect принимает на вход буфер, а не одну команду (сmd->first, cmd->count, cmd->instanceCount, cmd->baseInstance). Все прекрасно ложится на DrawIndirect, а этот мульти-пульти тут никаким боком. Подозреваю что MultiDrawIndirect еще и client-side, как его другие мульти (без индиректа которые) друзья.
bazhenovc
> > Да ну, правда?
> Ты не видишь разницы между DrawIndirect и MultiDrawIndirect?
Поймали с поличным за руку ...
MrShoor
Нарисуй мне десяток разных мешей с разным количеством полигонов с помощью одного вызова DrawIndirect.
bazhenovc
> Да и шипать проект на OpenGL я бы не рискнул, по крайней мере в ближайшие года
> 3
Mac\Linux ?
innuendo
> Mac\Linux ?
Не целевая аудитория.
bazhenovc
> > Mac\Linux ?
> Не целевая аудитория.
Ну я про порт же :)
innuendo
> Ну я про порт же :)
Как-нибудь в другое время:)
bazhenovc
> Нарисуй мне десяток разных мешей с разным количеством полигонов с помощью одного вызова DrawIndirect.
О боже. Ну ок. Складываешь все меши в один вертекс и индекс буфер. Запоминаешь с какого и до какого индекса находится каждый меш. Каждый объект имеет свои уникальные атрибуты, складываешь их в инстанс буфер. Запоминаешь индекс вершины, где хранятся атрибуты каждого объекта.
Перед отрисовкой создаешь Indirect буфер, заполняешь его структурами:
cmd->first, cmd->count, cmd->instanceCount, cmd->baseInstance
для каждого объекта.
Передаешь этот буфер в DrawIndirect, и вуаля, нарисованы разные объекты с разными лодами в разных местах. Единственное ограничение - либо вся геометрия должна быть индексирована, либо нет, а так же можно выводить только один тип примитива (нельзя смешивать треугольники и линии например).
Тема в архиве.