OpenGL / OpenTK: отображать FBO, отображаемый в фоновом потоке, в элементе управления OpenGL.

Я использую OpenGL через OpenTK и выполняю рендеринг в FramebufferObject в фоновом потоке. Теперь после каждого визуализированного кадра я хочу отображать (части) FBO в одном или нескольких элементах управления OpenGL в моем пользовательском интерфейсе.

Как это работает ?


person Pygmy    schedule 21.01.2011    source источник


Ответы (1)


У вас есть два варианта:

  • Если ваши драйверы поддерживают совместное использование контекста, вы можете привязать текстуру FBO к элементам управления OpenGL и отобразить ее напрямую (привязать текстуру, отобразить квадрат, готово). Просто и быстро — просто синхронизируйте рендеринг с дисплеем.
  • Если ваши драйверы этого не делают, вам придется считывать результаты рендеринга в объект Bitmap (или эквивалентный) через GL.ReadPixels. Затем вы можете повторно загрузить их в другие элементы управления OpenGL в виде текстур или отобразить их непосредственно на элементах управления, отличных от OpenGL.

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

person The Fiddler    schedule 08.02.2011
comment
Как лучше всего синхронизировать рендеринг с дисплеем? - person Pygmy; 22.02.2011
comment
GraphicsContext.CurrentContext.VSync = истина; - person The Fiddler; 09.04.2011