it-swarm.com.de

Bereitstellen von WebGL-Anwendungen als native iOS- oder Android-Anwendungen?

Kennt jemand eine Möglichkeit, eine WebGL-App als native iOS- oder Android-App bereitzustellen? Kommerzielle Middleware ist akzeptabel, obwohl ein offenes Projekt vorzuziehen wäre. Vielen Dank.

42
Cody Brocious

Als Erweiterung der Antwort von Joris (die anscheinend auf der Arbeit von Nathan de Vries basiert) ist der folgende Code, den ich brauchte, um WebGL im iOS 5.0 SDK zu aktivieren:

Irgendwo in der Nähe Ihrer View Controller-Implementierung:

@interface UIWebView()
- (void)_setWebGLEnabled:(BOOL)newValue;
@end

Programmgesteuertes Erstellen einer UIWebView und Aktivieren von WebGL:

UIWebView *webDetailView = [[UIWebView alloc] initWithFrame:mainScreenFrame];

id webDocumentView = [webDetailView performSelector:@selector(_browserView)];
id backingWebView = [webDocumentView performSelector:@selector(webView)];
[backingWebView _setWebGLEnabled:YES];

Ich habe eine Beispielanwendung erstellt , die zeigt, wie WebGL in einem iPhone/iPad-Vollbild UIWebView ausgeführt wird, wobei die WebGL-Scratchpad-Site http://glsl.heroku.com als Ziel verwendet wird. Seien Sie vorsichtig, dass einige dieser Beispiele sogar ein iPad 2 zum Stillstand bringen werden, was zu einem harten Neustart führen kann. Die Leistung scheint darauf hinzuweisen, warum WebGL in Mobile WebKit immer noch nicht offiziell unterstützt wird.

Wie bereits gesagt, funktioniert dies natürlich nicht mit zukünftigen iOS-Versionen und Ihre Anwendung wird vom App Store abgelehnt. Dies ist nur für Hobbyarbeit und interne Tests von Nutzen.

Ein Beispiel für WebGL, das auf meinem iPad 2 ausgeführt wird:

enter image description here

23
Brad Larson

WebKit unter iOS unterstützt eigentlich WebGL ab 4.x (nicht sicher, welche .x-Version). Sie ist in der vom iAd-Framework verwendeten Webansicht aktiviert. Bei allen anderen Verwendungen von WebKit (Safari und UIWebView) ist WebGL deaktiviert.

Es ist möglich, WebGL mit privaten APIs zu aktivieren (dies wird den Übermittlungsprozess nicht bestehen). In Ihrer Webview-Unterklasse:

- (void)setWebGLEnabled:(BOOL)enableWebGL {
    UIWebDocumentView* webDocumentView = [self _browserView];
    WebView* backingWebView = [webDocumentView webView];
    [backingWebView _setWebGLEnabled:enableWebGL];
}

( via )

Damit können Sie zumindest mit WebGL unter iOS experimentieren. 

Nicht sicher über die WebGL-Unterstützung auf Android. Ziemlich neueste Kommentare zum Thema im Android-Tracker deuten darauf hin, dass es noch nicht verfügbar ist.

Eine nette Supporttabelle für WebGL in (mobilen) Browsern: Wann kann ich WebGL verwenden

Für den Moment scheint es am besten, wenn Sie Ihre eigene WebGL-fähige Version von WebKit in Ihren Anwendungswrapper für iOS und Android aufnehmen.

6
Joris Kluivers

Ich glaube nicht, dass es einfache Konverter-Tools gibt. Sie müssen wahrscheinlich Ihre WebGL-Codebasis in OpenGL für beide Plattformen umschreiben, um native Apps zu erstellen.

1
Benjamin Mayo

Es ist noch nicht fertig, aber ForPlay kann über GWT als gemeinsame Entwicklungsplattform für Android und WebGL fungieren.

1
Kevin

Da die iOS-Version von WebKit WebGL nicht nativ unterstützt, haben Sie zwei Möglichkeiten:

  • Implementieren Sie die WebGL-API selbst im JavaScript-Kontext eines WebView, indem Sie Aufrufe an die native OpenGL über iframe-RPC weiterleiten. Es gibt leider keine saubere Möglichkeit, (Objective-) C-Funktionen von JavaScript unter iOS aufzurufen. Leistung könnte ein Problem sein.

  • AOT-Compilieren oder interpretieren Sie das JavaScript in einer Fremdlaufzeit, und implementieren Sie dann WebGL. JIT-Compiler sind unter iOS nicht zulässig, so dass etwas wie V8 nicht funktioniert. Appcelerator Titan komponiert statisch JavaScript, soweit ich weiß, und hat auch einen Interpreter. Sie könnten das verwenden, aber Sie müssen den WebGL-Kleber trotzdem selbst implementieren.

Ich kenne keine vorhandenen WebGL-Bridges für iOS, daher denke ich, dass Sie will entweder selbst schreiben müssen oder jemanden bitten, es für Sie zu tun. Ein Problem, das möglicherweise nicht gelöst werden kann, ist, wenn Sie etwas anderes als WebGL zum Anzeigen von Dingen verwenden, z. HTML, 2D <Canvas> usw. Das Kombinieren der WebView-Anzeige mit einem OpenGL-Framebuffer wird recht kompliziert.

Ich weiß nicht viel über Android, aber da die Regeln dort etwas entspannter sind, könnte es möglich sein, einen WebGL-kompatiblen Browser dort einzubetten.

1
pmdj

Das Bündeln von WebKit und der Ressourcen Ihrer App (.js, Texturen usw.) in eine iOS- oder Android-Anwendung klingt nicht allzu schwierig. Ich gehe davon aus, dass, da Google und Apple maßgeblich zum WebKit-Projekt beitragen, der erforderliche Support (für Multitouch und anderes) bereits vorhanden ist.

PS: Viele iOS-Apps verwenden interpretiertes Javascript oder Lua. Es gibt Regeln, die verhindern, dass Ihre App Drittanbietercode (insbesondere aus dem Internet) ausführt, nicht den Code, den Sie in Ihrer eigenen App gebündelt haben.

EDIT: Um dies zu klären, müssten Sie Ihre eigene Webansicht mit Webkit (erstellt aus Quelle) implementieren, um WebGL zu verwenden und den Screening-Prozess von Apple zu durchlaufen, indem Sie WebGL im Web aktivieren Die von Apple bereitgestellte Webansicht wird Ihre App abweisen.

1
jcayzac

Es gibt mehrere Optionen, um eine native WebGL-App bereitzustellen. EjectaGL ist eine großartige WebGL-Implementierung, die jedoch etwas schwieriger zu beherrschen ist ( http://codehum.com/stuff/ejectagl/ ).

Eine weitere Option ist Ludei, die kürzlich ihre Unterstützung für WebGL sowohl für iOS als auch für Android angekündigt hat. Es ist einfacher zu verwenden und unterstützt die Beschleunigung der HTML5-Leinwand sowohl in 2D als auch in 3D über WebGL. Es bietet auch eine Möglichkeit, Ihre App mithilfe von IAPs, Anzeigen und zahlreichen Erweiterungen zu monetarisieren. Mit der CocoonJS Launcher App und ihrem Cloud-Compiler ist das Testen viel einfacher.

www.ludei.com http://blog.ludei.com/webgl-demos-arrive-to-google-play-store/

0