DirectX 11/Windows Forms: рисовать поверх визуализированной сцены
Мне трудно найти детали порядка прорисовки приложения DirectX 11 при визуализации в форме Windows. Я знаю, что могу назначить SwapChain
сделать для обработчика элемента управления (например, панели), что я уже сделал. Вопрос здесь более сфокусирован на том, чтобы иметь возможность рисовать контент, отображаемый через DirectX, в одном и том же элементе управления. Я уже знаю, что могу добавить элементы управления на панель, и они будут закрашивать отображаемый контент. Я пытался использовать Paint
Событие для панели и выполнение простой розыгрыша:
private void panel1_Paint(object sender, PaintEventArgs e) {
using (Pen p = new Pen(Brushes.Red))
e.Graphics.FillEllipse(p, new Rectangle(0, 0, 250, 250));
}
Тем не менее, я считаю, что это рисует запрошенный контент ниже контента сцены, визуализированного DirectX. Я не смог найти какие-либо подробности о порядке прорисовки и какие события использовать. Если у кого-то есть идеи, какие события использовать, чтобы закрасить визуализированную сцену, это было бы полезно. Если элементы управления можно визуализировать в верхней части сцены, то я хотел бы полагать, что можно было бы также выполнить нестандартную рисование.
Может быть, мне придется пройти долгий путь?
Обновить
Я нашел пост в MSDN, который не полностью отвечает на поставленный вопрос, но помогает понять, а также проливает свет на альтернативный маршрут, который, по-видимому, требует выполнения в конце метода рендеринга для моего движка (что имеет смысл, поскольку рендеринг обычно следует системе FIFO).
Вы можете иметь GDI(+) вызовы поверх DX рендера. Устройство d3d может возвращать графику g, подходящую для вызовов gdi. По крайней мере, я сделал это в оконном режиме.
Microsoft.DirectX.Direct3D.Surface bb = device.GetBackBuffer(0, 0);
System.Drawing.Graphics g = bb.GetGraphics();
g.DrawRectangle(...); // or whatever
bb.ReleaseGraphics();
bb.Dispose();
Кроме того, я не вижу, что мешает кому-то добавлять элементы управления на панель, используемую в качестве панели DX.
Уточненный вопрос
Мой оригинальный вопрос, однако, все еще остается. Кто-нибудь знает, каков порядок прорисовки между Windows Forms и DirectX 11? Кто-нибудь знает о событии, которое можно использовать как часть этого порядка для рисования поверх визуализируемого контента?