Merencanakan port DirectX Anda

Ringkasan

Rencanakan proyek porting game Anda dari DirectX 9 ke DirectX 11 dan Platform Windows Universal (UWP): tingkatkan kode grafis Anda, dan letakkan game Anda di lingkungan Windows Runtime.

Rencanakan ke kode grafik port

Sebelum anda mulai porting game ke UWP, penting untuk memastikan bahwa game Anda tidak memiliki holdover dari Direct3D 8. Pastikan bahwa game Anda tidak memiliki sisa-sisa alur fungsi tetap. Untuk daftar lengkap fitur yang tidak digunakan lagi, termasuk fungsionalitas alur tetap, lihat Fitur yang Tidak Digunakan Lagi.

Peningkatan dari Direct3D 9 ke Direct3D 11 lebih dari perubahan pencarian dan penggantian. Anda perlu mengetahui perbedaan antara perangkat Direct3D, konteks perangkat, dan infrastruktur grafis, dan mempelajari tentang perubahan penting lainnya sejak Direct3D 9. Anda dapat memulai proses ini dengan membaca topik lain di bagian ini.

Anda harus mengganti pustaka pembantu D3DX dan DXUT dengan pustaka pembantu Anda sendiri, atau dengan alat komunitas. Lihat bagian Pemetaan fitur untuk informasi selengkapnya.

Catatan Anda dapat menggunakan DirectX Tool Kit atau DirectXTex untuk menggantikan beberapa fungsionalitas yang sebelumnya disediakan oleh D3DX dan DXUT.

 

Shader yang ditulis dalam bahasa rakitan harus ditingkatkan ke HLSL menggunakan fungsionalitas model shader 4 tingkat 9_1 atau 9_3, dan shader yang ditulis untuk pustaka Efek perlu diperbarui ke versi sintaks HLSL yang lebih baru. Lihat bagian Pemetaan fitur untuk informasi selengkapnya.

Kenali berbagai tingkat fitur Direct3D. Tingkat fitur mengklasifikasikan berbagai perangkat keras video dengan menentukan serangkaian fungsionalitas yang diketahui. Setiap set kira-kira sesuai dengan versi Direct3D, dari 9.1 hingga 11.2. Semua tingkat fitur menggunakan DIRECTX 11 API.

Rencanakan untuk mem-port kode UI Win32 ke CoreWindow

Aplikasi UWP berjalan di jendela yang dibuat untuk kontainer aplikasi, yang disebut CoreWindow. Game Anda mengontrol jendela dengan mewarisi dari IFrameworkView, yang membutuhkan lebih sedikit detail implementasi daripada jendela desktop. Perulangan utama game Anda akan berada di metode IFrameworkView::Run .

Siklus hidup aplikasi UWP sangat berbeda dari aplikasi desktop. Anda harus sering menyimpan game, karena ketika peristiwa penangguhan terjadi aplikasi Anda hanya memiliki waktu terbatas untuk berhenti menjalankan kode, dan Anda ingin memastikan pemain dapat kembali ke tempat mereka segera ketika aplikasi Anda dilanjutkan. Game harus menghemat cukup sering untuk mempertahankan pengalaman gameplay berkelanjutan dari resume, tetapi tidak sering sehingga game menyimpan framerate dampak atau menyebabkan permainan gagap. Game Anda berpotensi perlu memuat status permainan ketika game dilanjutkan dari keadaan dihentikan.

DirectXMath dapat digunakan sebagai pengganti D3DXMath dan XNAMath, dan dapat berguna jika Anda memerlukan pustaka matematika. DirectXMath memiliki jenis data portabel yang cepat, dan jenis yang selaras dan dikemas untuk digunakan dengan shader.

Pustaka asli seperti API Interlocked telah diperluas untuk mendukung intrinsik Arm. Jika game Anda menggunakan API yang saling mengunci, Anda dapat terus menggunakannya di DirectX 11 dan UWP.

Templat dan sampel kode kami menggunakan fitur C++ baru yang mungkin belum Anda kenal. Misalnya, metode asinkron digunakan dengan ekspresi lambda untuk memuat sumber daya Direct3D tanpa memblokir utas UI.

Ada dua konsep yang akan sering Anda gunakan:

  • Referensi terkelola (operator^) dan kelas terkelola (kelas ref) adalah bagian mendasar dari Windows Runtime. Anda harus menggunakan kelas ref terkelola untuk berinteraksi dengan komponen Windows Runtime, misalnya IFrameworkView (selengkapnya tentang itu di panduan).
  • Saat bekerja dengan antarmuka DIRECT3D 11 COM, gunakan jenis templat Microsoft::WRL::ComPtr untuk membuat penunjuk COM lebih mudah digunakan.