рисовать через OpenGL / D3D с GDI? - PullRequest
       25

рисовать через OpenGL / D3D с GDI?

2 голосов
/ 10 сентября 2010

Мне интересно, можно ли рисовать поверх поверхности opengl / direct3D с помощью GDI?и если да, то как это можно сделать?

Причина, по которой я спрашиваю, заключается в том, что я пишу простое приложение для рисования нескольких вещей в играх.Такие вещи могут быть двумерными или текстовыми, такими как информация о частоте кадров, настраиваемое перекрестие, часы и т. Д.

Я знаю, что лучший способ - подключить и использовать то, что использует рендерер / игра изначально, будь то opengl илиdirect3d, но я смотрю на GDI, поскольку AFAIK и opengl, и D3D работают в контексте устройства, к которому, я надеюсь, можно обратиться с помощью GDI.

Ответы [ 2 ]

3 голосов
/ 10 сентября 2010

Обычно вы не можете сделать это напрямую.Теоретически вы можете смешивать GDI с OpenGL или DirectX тогда и только тогда, когда OpenGL / DirectX настроен на использование одиночной буферизации, , а не двойная буферизация.Это, однако, немного больше, чем теоретическая возможность, потому что практически все использование DirectX и OpenGL с двойной буферизацией.

Я бы попробовал что-то еще, например, рисование ваших данных в многослойном слоеокна .

1 голос
/ 09 августа 2013

Вы можете рисовать с помощью GDI в буфере центральной памяти с помощью CreateCompatibleDC, CreateCompatibleBitmap, SelectObject и GetDIBits. Осторожно: совместимые DC работают медленно (без 2D ускорения). Затем вы должны скопировать (медленная работа) из центральной памяти в текстуру.

Для текста вы можете скопировать все символы ASCII один раз в текстуру, а затем использовать функции текстуры D3D для копирования каждого символа. Это должно быть достаточно просто для моноширинных шрифтов US-ASCII.

...