Я пишу системный менеджер частиц с SlimDX/D3D11 и обнаружил некоторые проблемы с постоянными буферами.
Мой системный менеджер частиц может одновременно рисовать несколько систем частиц с разными физическими характеристиками и основан на Образец 3D-частиц XNA. Общая идея операции рисования такова:
- context.ClearRenderTargetView(...)
- визуализировать частицы
- swapChain.Настоящее()
Операция "рендеринга частиц" реализована так:
- ShaderTimeGlobalVariable.Set(currentTime)
- for each pass of the shader technique:
- apply pass
- for each particle system:
- set constant buffer with physical constants (EffectConstantBuffer.SetRawValue)
- выдать один или несколько вызовов context.Draw
Моя проблема в том, что кажется, что рассматривается только последний постоянный вызов буфера, что заставляет все системы частиц иметь одинаковые физические характеристики.
Итак, прежде всего: я подозреваю, что это правильно/ожидается, и я упускаю какой-то важный момент. Может ли кто-нибудь разъяснить мне, что мне не хватает?
Я полагаю, что решение будет состоять в том, чтобы вставить физические характеристики частиц в буфер вершин, затратив примерно на 12 байт больше на каждую вершину, то есть от 12 до 120 тысяч дополнительных байтов для каждой физической системы, с которой я работаю. Чего-то, чего я хотел бы избежать, если это возможно: есть ли другой доступный вариант?