Pendekatan arsitektur untuk membuat menu game / overlay shell di PC / Linux?

8

Saya sedang mengerjakan koleksi game untuk pemasangan meja digital khusus (mirip dengan tabel Microsoft Surface). Setiap game akan menjadi eksekusi individu yang menjalankan layar penuh. Selain itu, perlu ada program menu / shell overlay yang berjalan secara bersamaan. Menu / shell akan memungkinkan pengguna untuk menghentikan game, beralih ke game lain, memeriksa riwayat game mereka, dll.

Beberapa persyaratan utama shell:

  • itu memotong semua input pengguna (terutama multitouch) terlebih dahulu sebelum meneruskannya ke game yang sedang berjalan (sehingga ia bisa, misalnya, tahu untuk muncul di perintah "pause");

  • dapat mengungkapkan pada bagian layar yang sewenang-wenang, dengan permainan yang saat ini berjalan (tetapi mungkin ditunda) masih ditampilkan di bawahnya, idealnya dengan bentuk / ukurannya yang dinamis, untuk memungkinkan penciptaan efek laci masuk / keluar animasi di atas permainan.

Saat ini saya sedang mencari pendekatan arsitektur yang berbeda untuk masalah ini, termasuk Fraps dan DirectX overlay, tapi saya yakin saya kehilangan beberapa cara untuk memikirkan hal ini. Apa pendekatan utama yang harus saya pertimbangkan?

(Perhatikan tabel saat ini sedang dijalankan oleh PC Windows, tetapi bisa berpotensi menjadi kotak Linux sebagai gantinya. Dengan ini saya tidak berarti saya memerlukan solusi OS-agnostik. Saya akan senang dengan solusi khusus Windows. Tetapi Saya akan mempertimbangkan untuk beralih ke Linux dan menggunakan solusi khusus Linux jika lebih mudah untuk mencapai ini di Linux.)

Ghopper21
sumber

Jawaban:

3

Saya pikir tidak banyak yang harus dievaluasi. Kinerja / responsif menjadi prioritas utama, terutama pada pemasangan jenis ini. Anda dapat menggunakan DirectX atau OpenGL rendering rendering / render-to-tekstur (RTT).

Untuk melakukannya, render lapisan bawah shell ke buffer bingkai default (bagian depan / layar buffer), render overlay permainan aktif Anda ke quad berukuran layar, pindahkan quad ini ke posisi yang sesuai di ruang dunia sesuai status "laci" saat ini. "Transisi, lalu render juga ke buffer bingkai default. Anda sekarang harus memiliki gim aktif yang diletakkan di atas cangkang, dan ini adalah operasi yang sangat cepat dan dengan demikian cocok untuk transisi yang licin (diberi beberapa matematika interpolasi yang bagus).

Re interaksi, Anda bahkan dapat membuat deteksi pixel hit under / overlay hit sempurna jika Anda membaca kembali data RTT ke sisi CPU, per frame. Dalam hal ini, Anda harus mengembalikan setidaknya buffer overlay sebagai masker RTT 1-bit yang murah.

EDIT Cara lain adalah menggunakan browser sepenuhnya, karena Anda dapat melakukan mode layar penuh. Anda dapat memuat game sebagai modul daripada memiliki "program" yang terpisah. Masalah dengan browser adalah Anda tidak akan mendapatkan kinerja yang sama. Anda masih dapat menggunakan WebGL (karena Anda akan memiliki kendali atas browser mana yang akan Anda gunakan) untuk layering dan grafis cepat, tetapi gim-gim tersebut harus sederhana. Selain dari kinerja, mungkin sedikit lebih mudah untuk mengembangkan cara ini, dan masih OS-agnostik.

Insinyur
sumber
Beritahu saya jika Anda memiliki pertanyaan;)
Insinyur
Terima kasih! Dan hanya untuk memeriksa, pendekatan ini akan bekerja dengan shell dan menjalankan game individu sebagai program terpisah?
Ghopper21
Nggak. Dengan satu atau lain cara, satu dan hanya satu proses akan dapat mendapatkan akses ke konteks perangkat GPU. Satu-satunya cara saya dapat melihat Anda melakukan ini sebaliknya, adalah melepaskan percepatan 3D bersama - yang saya tidak akan merekomendasikan. Hal lain adalah ini: Jika Anda belum yakin apakah Anda akan menang atau tidak, dengan pendekatan ini tidak apa-apa. Sedangkan jika Anda memilih beberapa pendekatan khusus OS, kemudian beralih ke OS lain nanti, yang mungkin membuat pendekatan pertama menjadi usang dan mungkin bahkan tidak dapat ditiru pada OS yang baru dipilih. Saya sarankan menunggu jawaban / ide lebih lanjut.
Insinyur
@ Ghopper21 Lihat hasil edit saya untuk taktik yang berbeda.
Insinyur
Terima kasih Nick untuk solusi browsernya. Saya pikir saya ingin menghindarinya karena kinerja dan masalah lain. Tetapi dari catatan Anda, saya menyadari saya tidak jelas tentang bagian Windows versus Linux. Saya akan mengklarifikasi dalam edit untuk pertanyaan itu.
Ghopper21