Mengembangkan Game untuk Perangkat S^3 dengan Symbian C++

Panduan singkat Mengembangkan Game untuk Perangkat S^3 dengan Symbian C++

Mengembangkan Game untuk Perangkat S^3 dengan Symbian C++

➜ Agenda

  • Nokia Platform
  • Contoh permainan Epong
  • File proyek
  • Audio
  • Multi-touch
  • S^3 perangkat keras arsitektur
  • Penanganan sumber daya grafis (Goom and GRAFICS Memory Profiling)
  • Format Vertex dan Tekstur dan Pengubah Shader
  • Webinar, Artikel dan Contoh

Platform Nokia

1. S40 :

  • Tidak ada akselerasi grafis 2D / 3D yang tersedia
  • Mengembangkan menggunakan Java atau Flash Lite (AS2)

2. Symbian :

☞ S ^ 1 (editition 5th) {Tidak ada akselerasi grafis 2D / 3D yang tersedia}

☞ S ^ 3 (N8-00, E7-00, C7-00, C6-01, C7 Astound, E6-00, X7-00) :

  • Akselerasi grafis 2D dan 3D yang didukung (OpenVG, OpenGL ES 1.1 & 2.0)
  • Mengembangkan menggunakan Symbian C ++, QT C ++ / QML, Java dan Flash Lite (AS2 / AS3)

3. Maemo / Meego

  • Pasang Base Low. Hanya N900 dan satu perangkat Meego yang datang
  • Akselerasi grafis 3D yang didukung (OpenGL ES 2.0)
  • Mengembangkan penggunaan C / C ++, QT C ++ / QML

 Contoh permainan Epong

Fitur Permainan EPONG :

1. Menulis mesin game platform independen (tidak diperlukan keterampilan Symbian C++)

2. Menangani multitasking Symbian (jeda game, melepaskan sumber daya grafis)

3. Grafis 3D

  • ☞ Cara menggunakan OpenGL ES 2.0
  • ☞ Memuat grafik PNG ke tekstur OpenGL ES (stb_image.c, PD)
  • ☞ Cara memantau sumber daya grafis dan menerapkan GOOM (grafik kehabisan memori)

4. File proyek

  • ☞ Cara mengimpor aset bitmap yang ada sebagai ikon aplikasi
  • ☞ Cara mengoptimalkan proyek untuk perangkat keras matematika titik mengambang (VFP)

5. Audio

  • ☞ Cara menggabungkan mesin suara (dekoder OGG, PD)
  • ☞ Cara mencampur suara (WAV mentah) di atas mesin suara
  • ☞ Menerapkan pembacaan tombol volume perangkat keras (Rem Con API)
  • ☞ Deteksi profil mode senyap (nada peringatan aktif/nonaktif)

6. Masukan / Keluaran

  • ☞ Menangani aktivitas keyboard dan aktivitas sentuh (multi-sentuh pada E7)
  • ☞ Membaca sensor akselerometer
  • ☞ Menggunakan umpan balik haptic

7. Meluncurkan browser untuk game "percobaan dan penuh"

8. Menerapkan output HDMI 720p dengan deteksi koneksi kabel

➜ Symbian .MPM Project File

1. Bendera pengoptimalan titik mengambang

  •  Box2D akan terbang 1-3x lebih cepat!

 2. Ingatlah untuk meningkatkan ukuran tumpukan default.

➜ Masalah Audio

1. Beberapa masalah dengan dukungan audio Symbian asli.

2. Hindari sebagian besar masalah platform dengan melakukan mixer suara Anda sendiri dan Dekoder MP3/OGG.

3. Membuat aplikasi dengan latensi audio rendah tidaklah mudah.

  • Batasi dan ukur sampel audio yang dikirim ke perangkat audio untuk mendapatkan latensi yang baik
  • Kemungkinan untuk mencapai 150-200ms sentuhan ke latensi audio
  • Rilis Symbian Anna SW akan memperbaiki beberapa masalah

4. Implementasi EPONG menggunakan CMMFDevSound, BufferToBeFilled dan PlayData.

  • Sentuh untuk latensi audio yang belum diukur

5. Membaca tombol volume HW menggunakan Rem Con API (MrccatoCommand).

6. Bisukan audio jika nada peringatan dinonaktifkan atau profil senyap sedang digunakan.

➜ Masalah Multi-sentuh

 1. N8

  •  Pengontrol sentuh HW hanya mendukung sentuhan ganda
  •  BUG: Masalah saat Anda menyentuh dengan 2-3 jari
  •  Jangan publikasikan game berkemampuan multi-sentuh untuk N8!

 2. E7-00, C7-00, C6-01, C7 Astound, E6-00, X7-00

  •  Pengontrol sentuh HW mendukung multi-sentuh
  •  Batas SW untuk sentuhan ganda (mungkin berubah dengan pembaruan firmware)
  •  BUG: Beberapa titik sentuh mungkin hilang saat menyeret dua jari di layar

➜ S^3 Arsitektur Perangkat Keras

  • Ada chip grafis khusus dengan tambahan memorinya sendiri (arsitektur memori non-unified) ke chip ARM di dalam telepon

  • Chip ARM host dan chip GPU terhubung melalui kabel dan jumlahnya terbatas bandwidth antara chip host ARM dan chip GPU
  • Total memori grafis 32 MB yang tertanam dalam chip GPU tetapi hanya ~20 MB yang tersedia untuk aplikasi karena UI sedang berjalan dan beberapa buffer dicadangkan
  • Driver OpenGL ES nyata berjalan pada chip GPU dan RPC (panggilan prosedur jarak jauh) dilakukan melalui host antarmuka
  • Panggilan OpenGL ES disangga di sisi host dan jika glGetError atau panggilan serupa yang mengembalikan data dipanggil, buffer host perlu di-flush dan perlu beberapa waktu hingga nilai pengembalian dikomunikasikan kembali dari chip GPU -> latensi tinggi untuk panggilan pulang pergi (panggilan mengembalikan data)
  • Performa akan hilang jika terlalu banyak panggilan pulang pergi yang dilakukan selama rendering
  • Performa akan hilang jika ada terlalu banyak data yang ditransfer melalui antarmuka host, mis. unggahan tekstur, pembaruan buffer vertex

Sumber daya grafis - Permintaan Goom

  • Gunakan API GOOM (grafik kehabisan memori) untuk menangani grafik Penyimpanan.
  •  Aplikasi di latar belakang harus mengkonsumsi kurang dari 50 KB memori grafis.
  • Minta memori grafis di startup aplikasi.

➜ Sumber daya grafis - GOOM Event

  • Menerima memori grafis rendah GOOM event

➜ Sumber Daya Grafis – Gfx Mem Profiling

1. Siapkan ekstensi

EGLBoolean

(*eglQueryProfilingDataNOK)(EGLDisplay dpy, EGLint query_bits, EGLint *data,

EGLint

data_size, EGLint

*

data_count

)=NULL

;

eglQueryProfilingDataNOK

= (

EGLBoolean

(*)(

EGLDisplay, EGLint, EGLint *, EGLint, EGLint

*)) eglGetProcAddress("eglQueryProfilingDataNOK");

2. Jumlah permintaan elemen (count)

eglQueryProfilingDataNOK

(aDisp, EGL_PROF_QUERY_MEMORY_USAGE_BIT_NOK |

EGL_PROF_QUERY_GLOBAL_BIT_NOK, NULL, 0, &count);

3. Elemen kueri

eglQueryProfilingDataNOK

(aDisp, EGL_PROF_QUERY_MEMORY_USAGE_BIT_NOK |

EGL_PROF_QUERY_GLOBAL_BIT_NOK,

ptr, count, &count);

4. Mengembalikan pasangan elemen

1) EGL_PROF_PROCESS_ID_NOK and a 64-bit process ID value

(Your process ID: qint64 processid; RProcess proc; processid = proc.Id().Id())

2) EGL_PROF_TOTAL_MEMORY_NOK and a 32-bit value

3) EGL_PROF_USED_MEMORY_NOK and a 32-bit value

4) EGL_PROF_PROCESS_USED_PRIVATE_MEMORY_NOK and a 32-bit value

5) EGL_PROF_PROCESS_USED_SHARED_MEMORY_NOK and a 32-bit value

➜ Format OpenGL ES Vertex

1. Gunakan objek penyangga simpul (VBO) untuk simpul dan indeks!

2. Driver host menyimpan cache array vertex sisi klien (array non VBO)

  • Di setiap driver host panggilan glDraw* memeriksa apakah data ada dalam cache atau tidak -> lebih banyak beban untuk ARM CPU
  • Caching juga menghabiskan memori grafis

3. Gunakan larik simpul interleaved

4. Gunakan format data terkecil (presisi terendah) untuk menyimpan memori grafis dan bandwidth

➜ Format Tekstur OpenGL ES

1. Gunakan tekstur mipmap untuk kualitas dan caching tekstur yang lebih baik

2. Gunakan tekstur terkompresi (ETC1) untuk menghemat memori grafis

3. Kompresi tekstur alfa tidak didukung

  • Gunakan dua tekstur terkompresi terpisah (RGB & A) atau
  • Gunakan satu tekstur terkompresi tinggi/lebar ganda tempat Anda memisahkan Tekstur RGB/A (pembungkusan tekstur tidak dimungkinkan dengan pendekatan ini)
  • Gunakan shader untuk menggabungkan tekstur RGB & A terkompresi

4. Konsumsi memori

  • Gunakan Symbian GOOM API untuk meminta memori grafis
  • Tekstur RGBA dan RGB akan menghabiskan w*h*4*4/3 (mipmaps) byte memori grafis!
  • Hanya GL_UNSIGNED_SHORT_5_6_5 dan format 16-bit lainnya yang menggunakan 2 byte per piksel (+ peta mip)

Optimasi OpenGL ES Shader

1. Semua perhitungan shader dilakukan dalam format float 32-bit

2. Presisi shader tidak masalah (lowp, mediump, highp) tapi itu selalu baik untuk menggunakan presisi terendah yang dibutuhkan

3. Operasi sederhana

  • Fungsi umum (abs, sign, floor, ceil, fract, mod, min, max, clamp, mix,melangkah)
  • Fungsi geometris (panjang, jarak, titik, silang, normalisasi, menghadap ke depan, mencerminkan)
  • Fungsi eksponensial (pow, exp, log, exp2, log2, sqrt, invertsqrt)
  • Fungsi sudut (radian, derajat)

4. Operasi kompleks

  • Fungsi umum (langkah halus)
  • Fungsi geometris (pembiasan)
  • Fungsi trigonometri (sin, cos, tan, asin, acos, atan)

Apa Reaksi Anda?

like

dislike

love

funny

angry

sad

wow