Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan ini memperkenalkan Renderscript dan menjelaskan cara menggunakan API Renderscript intrinsik dalam aplikasi Xamarin.Android yang menargetkan API level 17 atau yang lebih tinggi.
Gambaran Umum
Renderscript adalah kerangka kerja pemrograman yang dibuat oleh Google untuk tujuan meningkatkan performa aplikasi Android yang memerlukan sumber daya komputasi yang luas. Ini adalah API berkinerja tinggi tingkat rendah berdasarkan C99. Karena ini adalah API tingkat rendah yang akan berjalan pada CPU, GPU, atau DSP, Renderscript sangat cocok untuk aplikasi Android yang mungkin perlu melakukan salah satu hal berikut:
- Grafik
- Pemrosesan Gambar
- Enkripsi
- Pemrosesan Sinyal
- Rutinitas Matematika
Renderscript akan menggunakan clang dan mengkompilasi skrip ke kode byte LLVM yang dibundel ke dalam APK. Ketika aplikasi dijalankan untuk pertama kalinya, kode byte LLVM akan dikompilasi ke dalam kode mesin untuk prosesor pada perangkat. Arsitektur ini memungkinkan aplikasi Android untuk mengeksploitasi keuntungan kode mesin tanpa pengembang sendiri harus menulisnya untuk setiap prosesor pada perangkat itu sendiri.
Ada dua komponen untuk rutinitas Renderscript:
Runtime Renderscript – Ini adalah API asli yang bertanggung jawab untuk mengeksekusi Renderscript. Ini termasuk Renderscript yang ditulis untuk aplikasi.
Managed Wrappers dari kelas Android Framework – Managed yang memungkinkan aplikasi Android mengontrol dan berinteraksi dengan runtime dan skrip Renderscript. Selain kelas yang disediakan kerangka kerja untuk mengontrol runtime Renderscript, toolchain Android akan memeriksa kode sumber Renderscript dan menghasilkan kelas pembungkus terkelola untuk digunakan oleh aplikasi Android.
Diagram berikut mengilustrasikan bagaimana komponen-komponen ini berhubungan:

Ada tiga konsep penting untuk menggunakan Renderscripts dalam aplikasi Android:
Konteks – API terkelola yang disediakan oleh Android SDK yang mengalokasikan sumber daya ke Renderscript dan memungkinkan aplikasi Android untuk meneruskan dan menerima data dari Renderscript.
Kernel komputasi - Juga dikenal sebagai kernel akar atau kernel, ini adalah rutinitas yang melakukan pekerjaan. Kernel sangat mirip dengan fungsi C; ini adalah rutinitas paralel yang akan dijalankan di semua data dalam memori yang dialokasikan .
Memori yang Dialokasikan – Data diteruskan ke dan dari kernel melalui Alokasi. Kernel mungkin memiliki satu input dan/atau satu Alokasi output.
Namespace Layanan Android.Renderscripts berisi kelas untuk berinteraksi dengan runtime Renderscript. Secara khusus, Renderscript kelas akan mengelola siklus hidup dan sumber daya mesin Renderscript. Aplikasi Android harus menginisialisasi satu atau beberapa aplikasi Android.Renderscripts.Allocation Objek. Alokasi adalah API terkelola yang bertanggung jawab untuk mengalokasikan dan mengakses memori yang dibagikan antara aplikasi Android dan runtime Renderscript. Biasanya, satu Alokasi dibuat untuk input, dan secara opsional Alokasi lain dibuat untuk menahan output kernel. Mesin runtime Renderscript dan kelas pembungkus terkelola terkait akan mengelola akses ke memori yang dipegang oleh Alokasi, tidak perlu pengembang aplikasi Android untuk melakukan pekerjaan tambahan apa pun.
Alokasi akan berisi satu atau beberapa Android.Renderscripts.Elements. Elemen adalah jenis khusus yang menjelaskan data di setiap Alokasi. Jenis Elemen dari Alokasi output harus cocok dengan jenis Elemen input. Saat mengeksekusi, Renderscript akan melakukan iterasi pada setiap Elemen dalam Alokasi input secara paralel, dan menulis hasilnya ke Alokasi output. Ada dua jenis Elemen:
jenis sederhana - Secara konseptual ini sama dengan jenis data C,
floatatauchar.jenis kompleks - Jenis ini mirip dengan C
struct.
Mesin Renderscript akan melakukan pemeriksaan runtime untuk memastikan bahwa Elemen di setiap Alokasi kompatibel dengan apa yang diperlukan oleh kernel. Jika jenis data Elemen dalam Alokasi tidak cocok dengan jenis data yang diharapkan kernel, pengecualian akan dilemparkan.
Semua kernel Renderscript akan dibungkus oleh jenis yang merupakan turunan dari kelas Android.Renderscripts.Script. Kelas Script digunakan untuk mengatur parameter untuk Renderscript, mengatur , dan menjalankan Renderscript yang sesuai Allocations. Ada dua Script subkelas di Android SDK:
Android.Renderscripts.ScriptIntrinsic– Beberapa tugas Renderscript yang lebih umum dibundel di Android SDK dan dapat diakses oleh subkelas kelas ScriptIntrinsic . Pengembang tidak perlu mengambil langkah tambahan untuk menggunakan skrip ini dalam aplikasi mereka karena sudah disediakan.ScriptC_XXXXX– Juga dikenal sebagai skrip pengguna, ini adalah skrip yang ditulis oleh pengembang dan dikemas dalam APK. Pada waktu kompilasi, toolchain Android akan menghasilkan kelas pembungkus terkelola yang akan memungkinkan skrip digunakan di aplikasi Android. Nama kelas yang dihasilkan ini adalah nama file Renderscript, diawali denganScriptC_. Menulis dan menggabungkan skrip pengguna tidak secara resmi didukung oleh Xamarin.Android dan di luar cakupan panduan ini.
Dari kedua jenis ini, hanya yang StringIntrinsic didukung oleh Xamarin.Android. Panduan ini akan membahas cara menggunakan skrip intrinsik dalam aplikasi Xamarin.Android.
Persyaratan
Panduan ini untuk aplikasi Xamarin.Android yang menargetkan API level 17 atau yang lebih tinggi. Penggunaan skrip pengguna tidak tercakup dalam panduan ini.
Pustaka Dukungan Xamarin.Android V8 mendukung API Renderscript instrinsic untuk aplikasi yang menargetkan versi Android SDK yang lebih lama. Menambahkan paket ini ke proyek Xamarin.Android harus memungkinkan aplikasi yang menargetkan versi SDK Android yang lebih lama untuk memanfaatkan skrip intrinsik.
Menggunakan Intrinsic Renderscripts di Xamarin.Android
Skrip intrinsik adalah cara yang bagus untuk melakukan tugas komputasi intensif dengan jumlah kode tambahan minimal. Mereka telah disetel dengan tangan untuk menawarkan performa optimal pada penampang perangkat yang besar. Tidak jarang skrip intrinsik berjalan 10x lebih cepat daripada kode terkelola dan 2-3x kali setelah daripada implementasi C kustom. Banyak skenario pemrosesan khas dicakup oleh skrip intrinsik. Daftar skrip intrinsik ini menjelaskan skrip saat ini di Xamarin.Android:
ScriptIntrinsic3DLUT – Mengonversi RGB ke RGBA menggunakan tabel pencarian 3D.
ScriptIntrinsicBLAS – Menyediakan API Renderscript performa paha ke BLAS. BLAS (Subprogram Aljabar Linier Dasar) adalah rutinitas yang menyediakan blok penyusun standar untuk melakukan operasi vektor dan matriks dasar.
ScriptIntrinsicBlend – Memadukan dua Alokasi bersama-sama.
ScriptIntrinsicBlur – Menerapkan kabur Gaussia ke Alokasi.
ScriptIntrinsicColorMatrix – Menerapkan matriks warna ke Alokasi (yaitu mengubah warna, menyesuaikan rona).
ScriptIntrinsicConvolve3x3 – Menerapkan matriks warna 3x3 ke Alokasi.
ScriptIntrinsicConvolve5x5 – Menerapkan matriks warna 5x5 ke Alokasi.
ScriptIntrinsicHistogram – Filter histogram intrinsik.
ScriptIntrinsicLUT – Menerapkan tabel pencarian per saluran ke buffer.
ScriptIntrinsicResize – Skrip untuk melakukan mengubah ukuran alokasi 2D.
ScriptIntrinsicYuvToRGB – Mengonversi buffer YUV ke RGB.
Silakan lihat dokumentasi API untuk detail tentang setiap skrip intrinsik.
Langkah-langkah dasar untuk menggunakan Renderscript dalam aplikasi Android dijelaskan berikutnya.
Membuat Konteks Renderskrip – Renderscript kelas adalah pembungkus terkelola di sekitar konteks Renderscript dan akan mengontrol inisialisasi, manajemen sumber daya, dan pembersihan. Objek Renderscript dibuat menggunakan RenderScript.Create metode pabrik, yang mengambil Konteks Android (seperti Aktivitas) sebagai parameter. Baris kode berikut menunjukkan cara menginisialisasi konteks Renderscript:
Android.Renderscripts.RenderScript renderScript = RenderScript.Create(this);
Buat Alokasi – Tergantung pada skrip intrinsik, mungkin perlu untuk membuat satu atau dua Allocations. Tje Android.Renderscripts.Allocation kelas memiliki beberapa metode pabrik untuk membantu membuat instans alokasi untuk intrinsik. Sebagai contoh, cuplikan kode berikut menunjukkan cara membuat Alokasi untuk Bitmaps.
Android.Graphics.Bitmap originalBitmap;
Android.Renderscripts.Allocation inputAllocation = Allocation.CreateFromBitmap(renderScript,
originalBitmap,
Allocation.MipmapControl.MipmapFull,
AllocationUsage.Script);
Seringkali, perlu untuk membuat Allocation untuk menyimpan data output skrip. Cuplikan berikut ini menunjukkan cara menggunakan pembantu Allocation.CreateTyped untuk membuat instans detik Allocation dengan jenis yang sama dengan aslinya:
Android.Renderscripts.Allocation outputAllocation = Allocation.CreateTyped(renderScript, inputAllocation.Type);
Buat instans pembungkus Skrip – Setiap kelas pembungkus skrip intrinsik harus memiliki metode pembantu (biasanya disebut Create)untuk membuat instans objek pembungkus untuk skrip tersebut. Cuplikan kode berikut adalah contoh cara membuat ScriptIntrinsicBlur instans objek kabur. Metode Element.U8_4 pembantu akan membuat Elemen yang menjelaskan jenis data yang merupakan 4 bidang nilai bilangan bulat 8-bit yang tidak ditandatangani, cocok untuk menyimpan data Bitmap objek:
Android.Renderscripts.ScriptIntrinsicBlur blurScript = ScriptIntrinsicBlur.Create(renderScript, Element.U8_4(renderScript));
Tetapkan Alokasi, Atur Parameter, & Jalankan Skrip – Kelas Script menyediakan ForEach metode untuk benar-benar menjalankan Renderscript. Metode ini akan melakukan iterasi pada masing-masing Element dalam Allocation menahan data input. Dalam beberapa kasus, mungkin perlu untuk menyediakan Allocation yang menyimpan output.
ForEach akan menimpa konten Alokasi output. Untuk melanjutkan cuplikan kode dari langkah-langkah sebelumnya, contoh ini menunjukkan cara menetapkan Alokasi input, mengatur parameter, lalu akhirnya menjalankan skrip (menyalin hasil ke Alokasi output):
blurScript.SetInput(inputAllocation);
blurScript.SetRadius(25); // Set a pamaeter
blurScript.ForEach(outputAllocation);
Anda mungkin ingin melihat resep Blur an Image with Renderscript , ini adalah contoh lengkap tentang cara menggunakan skrip intrinsik di Xamarin.Android.
Ringkasan
Panduan ini memperkenalkan Renderscript dan cara menggunakannya dalam aplikasi Xamarin.Android. Ini secara singkat membahas apa itu Renderscript dan cara kerjanya dalam aplikasi Android. Ini menjelaskan beberapa komponen utama dalam Renderscript dan perbedaan antara skrip pengguna dan skrip instrinsik. Terakhir, panduan ini membahas langkah-langkah dalam menggunakan skrip intrinsik dalam aplikasi Xamarin.Android.