2011-01-24 33 views
6

EDIT: Vì vấn đề ban đầu của tôi là do lỗi của tôi, tôi sẽ lặp lại câu hỏi này.Sao chép nội dung của điều khiển Silverlight được lưu trữ

Im lưu trữ Silverlight trong cửa sổ bên trong ứng dụng C++ của tôi dựa trên mã được tìm thấy here.

Bây giờ tôi muốn sao chép nội dung của bộ điều khiển sang bộ nhớ để sử dụng nội dung bên trong trình kết xuất của chính tôi. Vấn đề tôi có là khi tôi đặt "EnableGPUAcceleration" thành true, sau đó BitBlt ngừng hoạt động, tất cả những gì tôi nhận được là màu đen.

Tôi cảm thấy rằng về mặt lý thuyết, có một cách để sao chép nội dung của một điều khiển Silverlight tăng tốc GPU với alpha của nó, ví dụ: với một cái gì đó giống như glReadPixels.

Bất kỳ ai có ý tưởng nào về cách sao chép nội dung bằng alpha của điều khiển Silverlight không tăng tốc gpu không cửa sổ?

Một vấn đề khác là cửa sổ phải hiển thị và không cửa sổ nào khác có thể chồng lên nhau, nếu không tôi sẽ không nhận được nội dung phù hợp. Tôi muốn cửa sổ lưu trữ được ẩn.

Mã mẫu làm việc có thể được tìm thấy here (mặc dù không có BitBlt thực tế "ting" mà tôi đang cố gắng để có được để làm việc).

+2

Bạn có mã mẫu thực sự chứng minh sự cố alpha của bạn không? Bởi vì điều khiển Silverlight được lưu trữ của CodeProject có thể được sao chép thành công với BitBlt, phải không? Hay tôi đang thiếu một cái gì đó? –

+0

@Simon: Bạn thực sự chính xác. Mã thử nghiệm của tôi không chính xác. – ronag

Trả lời

2

Tôi sẽ bắt đầu nghiên cứu điều này, tôi có ý tưởng rằng OpenCL hoặc có lẽ vì bạn đang sử dụng Silverlight, DirectCompute có thể thiết lập ngữ cảnh nơi bạn có thể linh hoạt hơn.

Một cách đơn giản là làm tất cả tăng tốc GPU bằng một trong các ngôn ngữ đó. Trong khi đó, tôi sẽ cố gắng tìm hiểu xem bạn có thể sử dụng một trong số họ để lấy thông tin bạn cần hoặc một số kỹ thuật khác không.

This link dường như xác minh rằng bạn sẽ cần tăng tốc GPU trên bất kỳ thành viên tương tác nào.

EDIT:

Tôi nghĩ rằng bài viết có thể cung cấp một số giúp đỡ khác cho vấn đề của bạn. Về cơ bản nó sẽ là về việc truy cập vào bộ nhớ cache và đảm bảo rằng bạn đang sử dụng bộ nhớ cache. Mọi thứ được đặt ở chế độ bộ nhớ cache sẽ tạm thời được lưu trữ trên cạc đồ họa.

This article cũng làm sáng tỏ một số vấn đề. Trường hợp nó nói về kết xuất phần cứng, điều quan trọng cần lưu ý là các hoạt động nào sẽ gây ra sự cố với bộ nhớ cache.

Tôi phải thừa nhận rằng tôi không thông thạo Silverlight, nhưng các loại vấn đề này rất quen thuộc. Làm những gì tôi có thể để hiểu tình hình mã của bạn.

-1

Đáng buồn là bạn không thể (IMHO).

Nếu bạn bật tăng tốc thì tất cả xử lý video được thực hiện trong gpu và xuất ra màn hình bằng bộ đệm lớp phủ phần cứng. do đó không thể tiếp cận được.

Điều này cũng đúng đối với chức năng màn hình in trên cửa sổ. trừ khi bạn có thể truy cập vào gpu và trích xuất các pixel bạn đang gặp sự cố.

Hãy xem phần ảnh chụp màn hình tại đây ...http://en.wikipedia.org/wiki/Hardware_overlay

Tôi là người mới sử dụng Silverlight và do đó không biết những gì có sẵn, nhưng bạn có thể trích xuất dữ liệu trước khi nó được hiển thị hay không. Điều này có thể làm chậm ứng dụng xuống một cách đáng kể. tăng tốc gpu được thiết kế để loại bỏ các hạn chế về băng thông và cpu, do đó mọi thứ được đưa vào đường dẫn sẽ làm chậm tốc độ. bạn cũng có thể kích hoạt bit nghiêng (DRM) vô hiệu hóa mọi thứ.

DC

Các vấn đề liên quan