Kann man rsForEach von RenderScript auf einem Nicht-Root-Kernel verwenden?
Kann man einen Nicht-Root-RenderScript-Kernel mit aufrufenrsForEach
? Es gibt viele AnwendungsbeispielersForEach
So rufen Sie den Root-Kernel in einer aufrufbaren RenderScript-Funktion auf:
Diese binden das Skript selbst an eine Variable im RenderScript-Kontext und rufen dann den Root-Kernel in RenderScript auf. Zum Beispiel in derActivity
Klasse:
...
mScript = new ScriptC_gradient(mRS);
// bind Allocations and mScript to variables in the RenderScript context:
mScript.set_gIn(mImageAllocation);
mScript.set_gOut(mGradientAllocation);
mScript.set_gScript(mScript);
// invoke gradient function:
mScript.invoke_gradient();
...
Und ingradient.rs
:
#pragma version(1)
#pragma rs java_package_name(com.example.android.rs.hellocompute)
rs_allocation gOut;
rs_allocation gIn;
rs_script gScript;
void gradient() {
rsForEach(gScript, gIn, gOut);
}
void root(const uchar4 *v_in, uchar4 *v_out, ...
Aber wenn ich einen anderen Kernel habegray
könnte ich es später aufrufenroot
, Innerhalbgradient
?
// I thought it would look like this:
void gradient() {
rsForEach(gScript, gIn, gOut);
rsForEach(gScript, gIn, gOut, NULL, NULL, gExportForEachIdx_gray);
}
// Or:
void gradient() {
rsForEach(gScript, gIn, gOut);
rsSetMainKernel(&gScript, "gray");
rsForEach(gScript, gIn, gOut);
}
Aberdie Dokumentation fürrsForEach
scheint darauf hinzudeuten, dass es so etwas nicht unterstützt. Vielleicht kann dies erreicht werden, indem etwas in a gesetzt wirdrs_script_call_t
, aberder Arzt ist ziemlich knapp über diesen Typ: (Abgerufen am 20. September 2013)
typedef struct rs_script_call rs_script_call_t**
Struktur zur Bereitstellung zusätzlicher Informationen für einen Aufruf von rsForEach. Wird hauptsächlich verwendet, um den Anruf auf eine Teilmenge der Zellen in der Zuordnung zu beschränken.
Diese Frage ist größtenteils aus Neugier - ich gehe davon aus, dass die bevorzugte Methode darin besteht, sie aus Java aufzurufen:
...
mScript = new ScriptC_gradient(mRS);
// bind Allocations and mScript to variables in the RenderScript context:
mScript.forEach_root(mImageAllocation, mGradientAllocation);
mScript.forEach_gray(mGradientAllocation, mGrayGradientAllocation);
...
Diese scheinen synchronisiert zu sein. Wenn man definiertroot
undgray
wie folgt:
void root(...) { rsDebug("root", 0,0); }
void gray(...) { rsDebug("gray", 1,1); }
dann anrufenforEach_root
dannforEach_gray
bewirkt, dass "root, {0,0}" NxM-mal protokolliert wird, bevor die Protokollierung von "grey, {1,1}" beginnt. Ich habe jedoch keine Dokumentation gefunden, die dies garantiert. Weiß jemand wo das ist?