EGL не переключается на Raspberry VideoCore IV

Я пытаюсь запустить свою оболочку OpenGL на Raspberry Pi 2. Оболочка работает на моно, написанной на С#. Я запустил свой базовый пример на RPi с использованием API VideoCore IV, но на экране нет изображения.

Пример, расположенный в /opt/vc/src/hello_triangle, работает безупречно, и моя программа не обнаруживает ошибок. Такое впечатление, что eglSwapBuffers просто ничего не меняет местами.

Вы можете найти журнал вызовов BCM/EGL/GL моего приложения в этой issue< /а>. Полный исходный код примера можно получить здесь.


person Luca    schedule 01.12.2016    source источник
comment
Я считаю, что на VideoCore вывод OpenGL идет в отдельный фреймбуфер, который по умолчанию не отображается. Вы должны использовать API управления слоями платформы, чтобы включить его, для этой цели должны быть некоторые файлы в /sys.   -  person Ben Voigt    schedule 01.12.2016
comment
Если это так, я не понимаю, почему образец C работает.   -  person Luca    schedule 01.12.2016
comment
Пример hello_triangle содержит вызывает куча функций vc_dispmanx_*, делает ли это ваш код?   -  person Ben Voigt    schedule 01.12.2016
comment
да, они указаны в ссылке.   -  person Luca    schedule 01.12.2016
comment
Где в вашем коде вызов eglCreateWindowSurface? Бесполезно кидать ссылку на репозиторий с несколькими тысячами файлов, как может кто-то, кроме автора, надеяться что-то найти?   -  person Ben Voigt    schedule 01.12.2016
comment
Кажется, вызов находится здесь, как _WindowHandle указывает на _NativeWindow в вашем экземпляре VideoCoreWindow?   -  person Ben Voigt    schedule 01.12.2016
comment
Журнал вызовов указан здесь. Репозиторий полезен для получения всего исходного кода, но фактическая последовательность вызовов находится на странице задачи. _WindowHandle — это закрепленный адрес структуры, выделенной здесь.   -  person Luca    schedule 01.12.2016
comment
...и тем временем я забыл нажать последние правки. Теперь все должно быть выровнено с моим текущим рабочим каталогом.   -  person Luca    schedule 01.12.2016
comment
Клянусь, эта строка public IntPtr Handle { get { return (_NativeWindowLock.Address); } } была жестко запрограммирована IntPtr.Zero, когда вы задали этот вопрос....   -  person Ben Voigt    schedule 01.12.2016
comment
@BenVoigt Вы правы: вот почему я прокомментировал. Я забыл нажать свои коммиты, прежде чем публиковать этот вопрос на SO. Простите за это. :(   -  person Luca    schedule 01.12.2016


Ответы (1)


Я нашел проблему. Проблема в

glClearColor(1, 0, 0, 0)

... Вы заметили ноль на альфе? Да. VideoCore IV, имея 32-битный буфер кадра, смешивает содержимое окна с цветом фона.

Вот и все.

person Luca    schedule 01.12.2016