Các cách tiếp cận kiến ​​trúc để tạo một trình đơn / lớp phủ trò chơi trên PC / Linux?


8

Tôi đang làm việc trên một bộ sưu tập các trò chơi để cài đặt máy tính bảng kỹ thuật số tùy chỉnh (tương tự như bảng Microsoft Surface). Mỗi trò chơi sẽ là một tệp thực thi riêng chạy toàn màn hình. Ngoài ra, cần phải có chương trình lớp phủ menu / shell chạy đồng thời. Menu / shell sẽ cho phép người dùng tạm dừng các trò chơi, chuyển sang các trò chơi khác, kiểm tra lịch sử trò chơi của họ, v.v.

Một số yêu cầu chính của vỏ:

  • trước tiên, nó chặn tất cả đầu vào của người dùng (chủ yếu là cảm ứng đa điểm) trước khi chuyển nó sang trò chơi hiện đang chạy (để nó có thể biết, bật lên theo lệnh "tạm dừng");

  • có thể hiển thị trên các phần tùy ý của màn hình, với trò chơi hiện đang chạy (nhưng có lẽ đã tạm dừng) vẫn hiển thị bên dưới, lý tưởng với hình dạng / kích thước của nó là động, để cho phép tạo hiệu ứng ngăn kéo vào / ra hoạt hình trong trò chơi.

Tôi hiện đang xem xét các cách tiếp cận kiến ​​trúc khác nhau cho vấn đề này, bao gồm cả lớp phủ Fraps và DirectX, nhưng tôi chắc chắn rằng tôi đang thiếu một số cách để nghĩ về vấn đề này. Các phương pháp chính tôi nên xem xét là gì?

(Lưu ý rằng bảng hiện đang được chạy bởi Windows PC, nhưng nó có thể có khả năng là một hộp Linux. Thay vào đó, tôi không có nghĩa là tôi cần một giải pháp không dựa trên hệ điều hành. Tôi hài lòng với giải pháp dành riêng cho Windows. Nhưng Tôi sẽ sẵn sàng xem xét chuyển sang Linux và sử dụng giải pháp dành riêng cho Linux nếu việc này đạt được điều này trong Linux dễ dàng hơn nhiều.)

Câu trả lời:


3

Tôi không nghĩ có nhiều thứ để đánh giá, thực sự. Hiệu suất / đáp ứng là ưu tiên hàng đầu, đặc biệt là khi cài đặt loại này. Bạn có thể sử dụng kết xuất / kết xuất đồ họa bị trì hoãn DirectX hoặc OpenGL (RTT).

Để làm như vậy, kết xuất lớp lót vỏ cho bộ đệm khung mặc định (bộ đệm trước / trên màn hình), kết xuất lớp phủ trò chơi đang hoạt động của bạn thành một hình tứ giác có kích thước màn hình, chuyển hình tứ giác này sang vị trí thích hợp trong không gian thế giới theo trạng thái hiện tại của "ngăn kéo "Quá trình chuyển đổi, sau đó kết xuất nó vào bộ đệm khung mặc định. Bây giờ bạn nên đặt trò chơi đang hoạt động trên lớp vỏ, và đó là một hoạt động rất nhanh và do đó cho vay để chuyển đổi khéo léo (đưa ra một số phép toán nội suy hay).

Tương tác lại, bạn thậm chí có thể làm cho pixel phát hiện dưới / lớp phủ hoàn hảo nếu bạn đọc lại dữ liệu RTT về phía CPU, trên mỗi khung. Trong trường hợp đó, bạn cần trả lại ít nhất bộ đệm lớp phủ dưới dạng RTT mặt nạ 1 bit giá rẻ.

EDIT Một cách khác là đi hoàn toàn dựa trên trình duyệt, vì bạn có thể thực hiện chế độ toàn màn hình. Bạn có thể tải các trò chơi dưới dạng các mô-đun thay vì có các "chương trình" riêng biệt. Vấn đề với trình duyệt là bạn sẽ không có được hiệu suất tương tự. Bạn vẫn có thể sử dụng WebGL (vì bạn sẽ có quyền kiểm soát trình duyệt nào bạn đang sử dụng) để tạo lớp và đồ họa nhanh, nhưng các trò chơi sẽ cần đơn giản. Bên cạnh hiệu suất, có thể dễ dàng hơn một chút để phát triển theo cách này, và vẫn không tin vào hệ điều hành.


Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào;)
Kỹ sư

Cảm ơn! Và chỉ cần kiểm tra, phương pháp này sẽ hoạt động với shell và trò chơi cá nhân chạy như các chương trình riêng biệt?
Ghopper21

Không. Bằng cách này hay cách khác, một và chỉ một quá trình sẽ có thể có quyền truy cập vào bối cảnh thiết bị GPU. Cách duy nhất tôi có thể thấy bạn làm điều này nếu không, là cùng nhau tăng tốc 3D - điều mà tôi không khuyến nghị. Một điều khác là: Nếu bạn chưa chắc chắn bạn sẽ đi Win hay Lin, với phương pháp này thì không sao. Trong khi đó, nếu bạn chọn một số cách tiếp cận dành riêng cho HĐH, sau đó đổi sang HĐH khác, điều đó có thể khiến cách tiếp cận đầu tiên trở nên lỗi thời và thậm chí có thể không thể sao chép trên HĐH mới được chọn. Tôi đề nghị chờ đợi câu trả lời / ý tưởng hơn nữa.
Kỹ sư

@ Ghopper21 Xem chỉnh sửa của tôi cho một chiến thuật khác.
Kỹ sư

Cảm ơn Nick cho giải pháp trình duyệt. Tôi nghĩ rằng tôi muốn tránh điều đó vì hiệu suất và các vấn đề khác. Nhưng từ ghi chú của bạn, tôi nhận ra rằng tôi không rõ về phần Windows so với Linux. Tôi sẽ làm rõ trong một chỉnh sửa cho câu hỏi.
Ghopper21
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.