Копирование содержимого размещенного элемента управления Silverlight - PullRequest
6 голосов
/ 24 января 2011

РЕДАКТИРОВАТЬ: Поскольку моя первоначальная проблема была из-за моей ошибки, я перефразирую этот вопрос.

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

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

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

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

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

Рабочий пример кода можно найти здесь (хотя без фактического "тона" BitBlt, который я пытаюсь заставить работать).

Ответы [ 2 ]

2 голосов
/ 27 января 2011

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

0 голосов
/ 01 февраля 2011

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

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

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

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

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

DC

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