Краткий ответ
Используйте функцию OpenTK:
mycontext.MakeCurrent(null);
Длинный ответ
Сегодняшний wglMakeCurrent doc исключил этот старый комментарий:
Если hglrc равен NULL, функция делает текущий поток вызывающим
контекст рендеринга больше не актуален и освобождает контекст устройства
это используется контекстом рендеринга. В этом случае hdc игнорируется.
Я бы поверил, что комментарий все еще действителен из-за того, что на него полагается так много кода.
Обратите внимание на «освобождает контекст устройства» . Возможно, OpenTK выполняет некоторые действия, связанные с контекстом устройства. Возможно, hdc является приватным (используя флаг стиля окна CS_OWNDC
). Итак, пусть OpenTK обрабатывает этот случай "NULL".
Лучший подход
Имейте в виду, что даже при использовании нескольких общих контекстов загрузка выполняется графическим процессором (обычно одной уникальной картой), и не так много карт позволяют загружаться при выполнении других заданий. Таким образом, не гарантируется, что вы получите лучшую производительность. Но как-то для этой цели существуют общие контексты.
Почему вы должны использовать один и тот же контекст в разных потоках?
Я бы использовал другой поток для загрузки видеокадров (без каких-либо вызовов gl) и для загрузки их в графический процессор. Этот последний поток постоянный и имеет свой собственный gl-контекст, поэтому его не нужно устанавливать текущим каждый раз, когда он работает. Он спит или ждет, пока другой поток завершит загрузку данных, и после выполнения этой задачи он загружает эти данные в графический процессор.