2009-05-18 3 views
2

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

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

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

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

ответ

7

В целом, как правило, безопасно думать о одном контексте OpenGL как окне, особенно в окнах.

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

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

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

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

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

+0

Отлично - я думаю, это отвечает на мой вопрос. Тогда контекст OpenGL будет в значительной степени ассоциирован с 1-1 с DC, не так ли? Я помню, что читал о наличии только одного контекста в потоке. Я полагаю, что тогда разные потоки будут иметь разные DC? – 2009-05-18 18:37:08

+0

Проблема с потоками различна - при создании DC вы всегда должны использовать этот поток для всех вызовов в этот DC. В общем, это означает один поток графики/рендеринга для каждого контекста устройства (т. Е. Для каждого окна). –

Смежные вопросы