Мне нужно нарисовать список фигур, и я использую Direct2D. Я получаю список фигур из файла. Список сортируется, и порядок элементов внутри файла представляет порядок, в котором будут нарисованы эти фигуры. Итак, если, например, файл указывает два прямоугольника в одном и том же положении и с одинаковыми размерами, будет видна только вторая (поскольку первая будет перезаписана).
Учитывая мой список фигур, я перехожу к его рисунку следующим образом:
list<Shape> shapes;
for (const auto& shape : shapes)
shape.draw();
Нетрудно видеть, что если у меня есть две формы, я не могу инвертировать порядок операций рисования, и это означает, что я должен быть уверен, что shape2
будет всегда рисоваться после shape1
и т.д. Следуя за тем, что я не могу использовать несколько потоков для рисования фигур, и это огромный недостаток в плане производительности.
Я читал, что Direct3D поддерживает буфер глубины (или z-buffer), который определяет для каждого пикселя его z-координату, так что будут рисоваться только "видимые" пиксели (ближе к зрителю), независимо от порядка, в котором фигуры рисуются. И у меня есть информация о глубине каждой фигуры, когда я читаю файл.
Есть ли способ использовать буфер глубины в Direct2D или подобный метод, который позволяет мне использовать несколько потоков для рисования моих фигур?