Tao OpenGL Framework SimpleOpenGLControl - когда он будет перерисован, а когда нет? - PullRequest
2 голосов
/ 29 января 2010

Я использую C # с Visual Studio Express 2008.

Я также использую библиотеки Tao Framework OpenGL.

Что на самом деле вызывает перерисовку SimpleOpenGLControl, когда мне нужно перерисовать его?

Когда SimpleOpenGLControl находится в активной форме, все, что мне нужно сделать для перерисовки, это вызвать glFlush() и SimpleOpenGLControl.Invalidate().

Однако, когда элемент управления не находится в активной форме, я вообще не могу его перерисовать. Я нашел способ заставить элемент управления недействительным с помощью неортодоксальных средств, но это не перерисовывает содержимое элемента управления (3D-рендеринг), оно просто оставляет меня с пустым (черным) элементом управления.

Что мне нужно сделать, чтобы фактически перерисовать элемент управления, независимо от того, какая форма активна?

1 Ответ

3 голосов
/ 30 января 2010

Очевидно, моя проблема была не в перерисовке SimpleOpenGLControl, а в потоке, из которого вызывались функции.

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

Хотя ошибок и предупреждений не возникало, очевидно, мой буфер рендеринга OpenGL не заполнялся, потому что функции, которые его заполняли, были вызваны из независимого потока.

Хотя я не до конца понимаю делегирование потоковой функции, я протолкнул процедуры через поток, в котором выполнялись формы, и мой буфер рендеринга OpenGL снова был доволен.

Итак, ответ на мой вопрос был: OpenGL не будет заполнять буферы рендеринга, если это не происходит в том же потоке, в котором он был инициализирован.

...