Как работают контексты OpenGL и устройства? - PullRequest
2 голосов
/ 18 мая 2009

Я новичок в программировании U / I и пытаюсь начать работу с OpenGL. Когда я запускаю пример программы, которая создает новое окно OpenGL с GLUT, он работает нормально. Хорошо. Однако в контексте другой программы, где я должен отвечать на события Draw (в Windows), передавая мне контекст устройства - и где у меня может не быть доступной GLUT - моя путаница заключается в следующем:

  1. Когда создается и уничтожается контекст устройства? Могу ли я нарисовать любой контекст устройства, данный мне, или только некоторые из них (и как я узнаю)?

  2. Нужно ли создавать свой собственный контекст OpenGL и использовать его для рисования, или я могу использовать «текущий» контекст OpenGL? Нужно ли заново создавать контекст при каждой отправке события рисования?

По сути, мой вопрос, учитывая ситуацию, когда мне отправляют события "Draw", как часто я пытаюсь создать контексты OpenGL и как это связано с циклом создания / уничтожения контекстов устройства?

1 Ответ

7 голосов
/ 18 мая 2009

В целом, обычно можно рассматривать отдельный контекст OpenGL как окно, особенно в окнах.

Контекст устройства будет (обычно) сопоставляться с дескриптором окна (HWND). На самом деле это DC (дескриптор HDC), но обычно вы связываете один HDC с одним HWND. В Windows вы создадите окно для использования на основе окна на экране, где вы хотите визуализировать.

Как правило, вы будете повторно использовать этот контекст устройства для всего времени выполнения вашего приложения. Если вы хотите выполнить рендеринг в другое окно, вам нужно сгенерировать контекст устройства (HDC) для нового дескриптора окна. Кроме того, рендеринг за кадром немного отличается, так как для этого вы также создадите совместимый контекст устройства.

Что касается ваших вопросов:

1) Когда вы создаете окно, в котором вы хотите выполнить рендеринг, вы берете контекст устройства и используете его в течение всего времени жизни этого окна.

2) Вы всегда захотите использовать контекст устройства, созданный для окна, в котором вы рендеритесь.

...