2012-04-29 19 views
7

Tôi có một ứng dụng WPF được thiết kế để che phủ một HUD trong một luồng trực tiếp. Ý tưởng ban đầu là tạo một plugin cho xsplit (một ứng dụng phổ biến để trình bày luồng trực tiếp) để hiển thị nội dung của ứng dụng WPF. Vấn đề với cách tiếp cận này là render bitmap tới giao diện COM của xsplit sẽ gây tổn hại đến hiệu năng CPU để giải phóng ứng dụng (Như tôi tin rằng có vấn đề trong giao diện COM của xsplit cũng như việc sử dụng RenderTargetBitmap để đánh thuế CPU).Hiển thị từ nội bộ của WPF đến một ứng dụng Directx

Tôi đã xem trực tiếp hiển thị lớp phủ vào trò chơi (Ứng dụng DirectX đích) vì nó cung cấp một số lợi ích. Chủ yếu là nó phá vỡ các vấn đề hiệu suất trong xsplit, nhưng cũng mở ứng dụng lên đến một loạt các ứng dụng streaming và capture.


Tôi không phải là một rất có kinh nghiệm với DirectX nhưng tôi nghĩ rằng đây là đề cương của giải pháp

  1. Khởi tạo các ứng dụng WPF và chụp Direct3D device WPF của (via this method)

  2. Tìm và treo các mục tiêu DirectX ứng dụng của EndScene gọi (using EasyHook+Slimdx)

  3. Render nội dung của bề mặt thiết bị của WPF ontop của ứng dụng DirectX nối


Câu hỏi chính tôi có là làm thế nào để thực hiện bước 3 sử dụng SlimDX. Tôi hy vọng một giải pháp bằng cách nào đó có thể tái sử dụng bề mặt và không dựa vào việc sao chép vì mục tiêu là không tác động đến hiệu suất của ứng dụng được nối. Tôi cũng muốn có thể giới hạn khu vực và hỗ trợ minh bạch. Tôi cũng tự hỏi nếu sử dụng thiết bị Direct3d của WPF trong thiết bị của ứng dụng DirectX được nối có thể gây ra bất kỳ sự bất ổn nào.

Bất kỳ thông tin chi tiết nào sẽ được đánh giá cao, cảm ơn bạn.

+0

bạn đã làm thế nào để thực hiện điều đó? Tôi đang mắc kẹt trong một tình huống tương tự. – alDiablo

Trả lời

1

Tôi đang cố gắng thực hiện tương tự. Những gì tôi đã tìm thấy cho đến nay là bạn có thể làm cho wpfvisualtree của bạn đến một bitmap và sau đó ghi là bitmap đến thiết bị D3D bị bắt tại điểm 2.

void render(Direct3D.Device device) 
{ 

wpfRenderTargetBitmap.Render(WpfVisualTree); 
wpfRenderTargetBitmap.CopyPixels(devicePtr); 

} 

tôi didnt thử nghiệm này chưa nhưng tôi nghĩ rằng tôi đang trên theo dõi đúng với điều này. Vấn đề duy nhất tôi có là tôi mất tất cả sự tương tác từ cửa sổ của mình. Nhấp chuột vào nút và vân vân sẽ không còn được chụp ...

Bất kỳ trợ giúp nào về điều đó sẽ tốt đẹp.

+0

bạn có thành công với những gì bạn đang làm không? – alDiablo

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