Рендеринг уникального видеопотока в двух отдельных окнах OpenGL - PullRequest
1 голос
/ 21 апреля 2011

Я рендерил этот видеопоток в одном окне opengl (вызывается из главного окна (UnitMainForm.cpp: я использую Borland Builder C ++ 6.0)).

В этом первом окне openGL есть таймер, по которому таймер переключается логическим «lmutex» и вызывается функция «DrawScene», а затем функция «Выход».

В этой функции "DrawScene" кадры видеопотока отрисовываются с помощью функции "paintgl".

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

Этот второй конструктор Borland предназначен для предварительного просмотра, поэтому он может быть меньшего размера (mipmap?) И с более медленным таймером (или с тем же размером, тем же таймером, тоже нормально).

Вот результаты, которые у меня были с различными методами:

  • с пиксельными буферами, я достиг (все в функции DrawScene), чтобы написать paintgl в backbuffer и с помощью wglShareLists для рендеринга этого backbuffer в текстуру, сопоставленную с квадратором; но мне не удается использовать эту текстуру в другом окне, wglShareLists работает в первом окне, но завершается неудачно во втором окне, когда я пытаюсь поделиться объектами back_buffer с новым окном RC (проблема с форматом пикселей?) (проблема C ++ возможно? Как сохранить буфер без его освобождения и отобразить его на четырехугольнике в другом DC (или том же RC?):

Нарушение прав доступа на wglBindTexImageARB; из-за того, что WGL_FRONT_LEFT_ARB не определен, все включено в wglext.h?

wglShareLists завершается ошибкой 6: ERROR_INVALID_HANDLE Неверный дескриптор

  • с вызовом двух объектов одного и того же класса (окно opengl): я вижу один раз трижды правильно обработанные два видеопотока; но один раз в три раза постоянно мерцание в одном или обоих окнах, и один раз в трех одно или другое окно постоянно пустое или постоянно черное; возможно я должен синхронизировать таймеры или есть способ не мерцать? но это решение кажется мне отрывочным: видеопоток иногда замедляется в одном из двух окон, я думаю, тяжело дважды вызывать поток видеозахвата.

  • Я пытался использовать FBO, с GLew или с функциями wgl, но я застрял на нарушениях доступа в glGenFrameBuffer; возможно Borland 6 (2002), возможно, слишком стар, чтобы поддерживать FBO (~ 2004?); Я обновил свои действительно последние драйверы для карт NVIDIA (9800GT) и загрузил SDK nvidia opengl (просто exe-файл: странный):

Использование объектов кадрового буфера (FBO) в Borland C ++ Builder 6

Существует ли холст программы на C ++ или фрагменты кода, которые бы уточнить, как я могу отображать во втором окне видео, которое я прекрасно отображаю в одном окне?

1 Ответ

1 голос
/ 21 августа 2011

Прежде всего, все левый и правый буферы отрисовки предназначены не для использования для рендеринга в двух разных контекстах рендеринга, а для обеспечения стереоскопического рендеринга в одном контексте рендеринга, сигнализируемого некоторым трехмерным аппаратным средствам (например, очкам затвора) Водитель. Кроме того, ваше графическое оборудование / драйвер не поддерживает это расширение - идентификаторы определяются в glew или нет.

То, что вы хотите сделать, это рендерить ваши видеокадры в VBO и делиться этим VBO с двумя контекстами рендеринга. По сути, VBO - это просто текстура, которую вы можете использовать как в качестве цели рендеринга (буфер рендеринга), так и в качестве источника рендеринга (текстура).

Существует множество примеров VBO, большинство из которых написаны на C. Если вы можете читать по-немецки, вы можете проверить DelphiGL.com; люди там имеют очень хорошие знания OpenGL и довольно полезную вики с документами, примерами и учебными пособиями.

...