2011-01-24 2 views
6

EDIT: Поскольку моя первоначальная проблема была вызвана моей ошибкой, я буду перефразировать этот вопрос.Копировать содержимое Hosted Silverlight Control

Я принимаю Silverlight в окне внутри своего приложения на C++ на основе кода, найденного here.

Теперь я хотел бы скопировать содержимое элемента управления в память, чтобы использовать содержимое внутри моего собственного средства визуализации. Проблема заключается в том, что когда я устанавливаю значение «EnableGPUAcceleration» в true, BitBlt перестает работать, все, что я получаю, это чернота.

Я считаю, что теоретически должен быть способ скопировать содержимое элемента управления Silverlight с ускорением GPU с его альфой, например. с чем-то вроде glReadPixels.

Кто-нибудь понял, как скопировать содержимое с помощью альфы безукраинского управления Silverlight с gpu-ускорением?

Другая проблема заключается в том, что окно должно быть видимым, и никакое другое окно не может перекрывать его, иначе я не получаю надлежащее содержимое. Я хочу, чтобы окно хостинга было невидимым.

Рабочий образец кода можно найти here (хотя без фактического бинта «ting», который я пытаюсь получить на работу).

+2

У вас есть пример кода, который на самом деле демонстрирует вашу альфа-проблему? Поскольку управляемый элемент управления Silverlight CodeProject можно скопировать с помощью BitBlt, правильно? Или я чего-то не хватает? –

+0

@Simon: Вы на самом деле правы. Мой тестовый код был неправильным. – ronag

ответ

2

Я начну изучать это, у меня есть идея, что OpenCL или, возможно, с тех пор, как вы используете Silverlight, DirectCompute может создать контекст, в котором вы можете иметь большую гибкость.

Одним из способов было бы просто выполнить все ускорения GPU на одном из этих языков. Тем временем я попытаюсь выяснить, можете ли вы использовать один из них, чтобы получить необходимую информацию или некоторые другие методы.

This link, похоже, проверяет, что вам потребуется ускорение GPU для всех интерактивных членов.

EDIT:

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

This article также проливает свет на проблемы. Когда он говорит об аппаратном рендеринге, важно отметить, какие операции могут вызвать проблемы с кешем.

Должен признаться, что я совсем не уверен в Silverlight, но эти проблемы знакомы. Делать все возможное, чтобы понять ситуацию с вашим кодом.

-1

К сожалению, вы не можете (ИМХО).

Если вы включите ускорение, тогда вся обработка видео выполняется в gpu и выводится на экран с использованием аппаратного наложения буфера. поэтому не является доступным.

То же самое верно для функции экрана печати на окнах. если вы не можете получить доступ к gpu и извлечь нужные вам пиксели.

Взгляните на раздел скриншотов здесь ...http://en.wikipedia.org/wiki/Hardware_overlay

Я новичок в Silverlight и поэтому не знаю, что доступно, но вы можете извлечь данные перед их визуализацией. Это может замедлить приложение вниз, хотя. gpu ускорение предназначено для устранения ограничений процессора и полосы пропускания, поэтому все, что попадает на путь, замедлит его. вы также можете запустить бит наклона (DRM), отключив все.

DC

Смежные вопросы