DirectComposition рендеринг в текстуру?

Я хотел бы иметь прямой рендеринг текстуры. Это возможно?

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

6

Решение

Вряд ли это возможно, процитировать MSDN (акцент мой)

DirectComposition не предлагает никаких услуг растеризации. Приложение должно использовать некоторую другую программную или аппаратно-ускоренную библиотеку растеризации, такую ​​как Direct2D или Direct3D, для заполнения растровых изображений, которые должны быть составлены. После компоновки DirectComposition передает составное растровое содержимое в диспетчер окон рабочего стола (DWM) для рендеринга на экран.

Насколько я знаю, существуют только официальные API-интерфейсы для совместного использования ваших внеэкранных поверхностей с DWM, но нет API-интерфейса, позволяющего получить доступ для чтения к поверхности DWM.

Какой DWM делает позволить вам перенаправить HWND поверхности, так что вы Можно отобразить поверхности других HWND на вашем окне. Это можно сделать либо через DirectComposition (через CreateSurfaceFromHwnd) или DWM API (с помощью DwmRegisterThumbnail). Для примера последнего Смотри сюда.

Если вы хотите пойти по «хакерскому маршруту», как указано в вашем комментарии, есть недокументированные API похоже, что они могут дать вам доступ к поверхностям DWM, в частности DwmpDxGetWindowSharedSurface звучит многообещающе. Кто-нибудь другой уже выполнил некоторый реверс-инжиниринг и выяснил сигнатуру, но не смог заставить ее работать (текстура работает, но отображает черный цвет). Этот парень кажется, повезло больше, и он смог визуализировать текстуры окон в 3d. Я не понимаю его язык, но вы, кажется, должны использовать DwmpDxUpdateWindowSharedSurface (также без документов).

Однако вы должны знать, что использование недокументированных функций не является хорошей идеей, Microsoft может изменить их в любое время (даже в выпусках пакетов обновлений) или полностью удалить их, поскольку они используются только самими Microsoft, и у них нет причин поддерживать совместимость. Также есть большая вероятность, что вы будете использовать их неправильно (например, у вас может отсутствовать необходимая синхронизация и вызывать случайные сбои или, что еще хуже).

Однако, поскольку эта функциональность действительно доступна, есть надежда, что Microsoft может открыть ее для использования в качестве ученика в какой-то будущей версии Windows.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]