2010-07-16 35 views
10

Tôi muốn chương trình của mình có thể khởi động bất kỳ trò chơi Windows nào và trong khi người dùng đang phát, hãy hiển thị một số văn bản hoặc hình ảnh trong một số phần của cửa sổ trò chơi. Trò chơi có thể ở chế độ cửa sổ hoặc toàn màn hình. Từ những gì tôi có thể tìm ra từ các tài nguyên trực tuyến, điều này có thể được thực hiện bằng cách sử dụng thư viện đồ họa hỗ trợ lớp phủ và sử dụng Windows Hooks để theo dõi cửa sổ của ứng dụng đích. Trong bối cảnh này tôi có một số câu hỏi.Làm cách nào để vẽ đồ họa trên trò chơi Windows?

  1. Lớp phủ có ảnh hưởng đến hiệu suất của trò chơi không?
  2. Cách gắn kết ứng dụng sẽ ảnh hưởng đến hiệu suất như thế nào?
  3. Có cách nào khác để đạt được điều này không? Ví dụ, làm thế nào để bạn nghĩ rằng PIX, công cụ gỡ lỗi và phân tích DirectX, hoạt động?

Trả lời

12

Fraps là ví dụ mẫu để thực hiện loại điều này cho ứng dụng DirectX toàn màn hình từ ứng dụng của bên thứ ba. Nó hoạt động bằng cách móc nối một số cuộc gọi hệ thống và chèn chính nó vào chuỗi cuộc gọi giữa một ứng dụng và DirectX. Có một số hit hiệu suất, nhưng nói chung là tối thiểu.

This page dường như có một số chi tiết và mã mẫu về cách móc ứng dụng theo cách này.

Nếu tôi nhớ chính xác, từ các cuộc thảo luận trên diễn đàn khác (không thể tìm thấy liên kết tại thời điểm này. Tìm kiếm những thứ như "làm việc yếu", đó là câu hỏi phổ biến), Fraps móc một vài thứ để buộc ứng dụng để tải DLL của nó, sau đó móc các cuộc gọi Present() và thực thi cuộc gọi device-> Clear() trước khi gọi thực hiện Present(), với một danh sách các hình chữ nhật nhỏ để đặt thành một màu khác nhau, có thể đánh vần số FPS Nó sẽ hiển thị. Điều này có tác động hiệu suất tối thiểu và tương thích rộng rãi với bất kỳ việc hiển thị ứng dụng nào đang hoạt động. Việc phủ một bitmap sẽ phức tạp hơn vì nó sẽ không dễ dàng thực hiện tại thời điểm hiện tại. Có lẽ nếu bạn có thể móc EndScene, sau đó bạn có thể làm nhiều hơn, nhưng bạn sẽ phải cẩn thận để không thay đổi trạng thái thiết bị.

PIX có quyền truy cập đặc quyền vào trình điều khiển DirectX, vì vậy tôi không mong đợi để có thể sử dụng nó làm mô hình để mô phỏng.

Nếu ứng dụng đích đang chạy ở chế độ cửa sổ, hãy gắn DirectX vẫn hoạt động, nhưng bạn cũng có thể chỉ sử dụng GDI để thay thế.

Chỉnh sửa: Tôi nghĩ rằng this là liên kết mà tôi đã nghĩ ban đầu.

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