У меня нет опыта работы с Direct3D, поэтому я могу просто искать не в том месте. Однако я хотел бы преобразовать программу, написанную мной в OpenGL (используя FreeGLUT), в UWP, совместимый с Windows IoT (работает с Direct3D, 12, потому что это круто). Я пытаюсь перенести свою программу на Raspberry Pi 3 и не хочу переходить на Linux.
С помощью примеров, предоставленных Microsoft, я выяснил большую часть того, что мне нужно знать, чтобы начать, но я не могу понять, как распределить динамический буфер данных между процессором и графическим процессором.
Что я хочу знать, как это сделать:
Быстрый полупсевдокод:
while (!buffer.inUse()){ //wait until buffer is not in use
updateBuffer(buffer.id, data, start, end); //insert data into buffer
drawToScreen(buffer.id); //draw using vertex data in buffer
}
Ранее это было сделано в OpenGL, просто используя glBegin () / glEnd () и glVertex3f () для каждого значения в массиве, когда оно не было записано.
Обновление: я в основном хочу Direct3D12 эквивалент редактирования OpenBOX VBO с использованием glBufferSubData (). Если это имеет больше смысла.
Обновление 2: я обнаружил, что могу избавиться от сброса буфера вершин в каждом кадре и повторной загрузки нового буфера в графический процессор. Слишком много накладных расходов, как и следовало ожидать при передаче 10 000 — 200 000 удваиваний в каждом кадре. Поэтому я пытаюсь найти способ использовать постоянные буферы для переноса 5-10 обновленных вершин в шейдер, чтобы я мог копировать из постоянного буфера в буфер вершин с помощью шейдера и не использовать map / unmap каждый кадр , Таким образом, мой кольцевой буфер на ЦП не зависит от буфера, используемого на ГП, но они оба будут совместно использовать одну и ту же информацию через периодические обновления. Я еще посмотрю и напишу еще один более конкретный вопрос о шейдерах, если не найду решения.
Задача ещё не решена.
Других решений пока нет …