Я хотел бы создать простой оконный менеджер, способный компоновать выходы из нескольких процессов. Моя первая идея заключалась в том, чтобы использовать только отдельные потоки для автономных приложений, поэтому я использую только один контекст и разделяю его между основным и прикладным программами приложений, но на второй мысли, которая не кажется хорошей идеей, поскольку любая из нисходящий поток завершит все.Менеджер окон OpenGL - многократное составление процесса
Итак, я решил, что он должен поддерживать специальные процессы для приложений, но это подводит меня к вопросу, и именно так я могу сшить выходы разных процессов вместе и высокопроизводительным образом. Копирование данных с GPU на CPU для совместного использования в системной памяти просто не является вариантом. Из OpenGL parallel FAQ стало ясно, что использование одного контекста из нескольких процессов не возможно, если оно не является косвенным, что приводит к очень низкой производительности.
Итак, как работают существующие оконные менеджеры? Естественно, я не ожидаю никаких подробностей на низком уровне, просто общий обзор концепции.
Если ваша платформа выставляет ручки на поверхности, в которые она втягивается, вы можете это сделать. WDDM (Windows Vista +) предлагает вещи, называемые общими дескрипторами, которые служат этой цели, но получение доступа к одному для произвольного процесса - это не то, что вы обычно можете делать как конечный пользователь (лучшее, что предлагает публичный API в этом смысле миниатюра DWM "). На других платформах гораздо проще свернуть собственный диспетчер окон компоновки, особенно Linux. * На какой платформе вы интересуетесь? * –
К сожалению, нет стандартного и портативного решения. Оконные составители прибегают к использованию специальных расширений для поставщиков, и часто даже не напрямую. Например, Wayland полагается на EGL для этого. Это связано с тем, что рендеринг исторически очень фрагментирован, у вас есть программный рендеринг, у вас есть аппаратное ускорение Direct2D, Direct3D, OpenGL ... Вот почему совместное использование буфера должно нарушать разрывы между различными технологиями. Я предполагаю, что возможность совместного использования буферов между различными процессами для OpenGL по стандарту будет довольно сладкой, но в ближайшее время нет никаких признаков этого события ... – dtech
@ AndonM.Coleman - Я надеялся на что-то более портативное, чтобы оно могло работать вершина существующих оконных менеджеров для окон, linux и android ... – 2014-09-23 16:47:18