Я рендерил этот видеопоток в одном окне 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 ++ или фрагменты кода, которые бы уточнить, как я могу отображать во втором окне видео, которое я прекрасно отображаю в одном окне?