web-dev-qa-db-fra.com

Déployer des applications WebGL sous forme d'applications natives iOS ou Android?

Est-ce que quelqu'un connaît un moyen de déployer une application WebGL en tant qu'application native iOS ou Android? Le middleware commercial est acceptable, même si un projet ouvert serait préférable. Merci.

42
Cody Brocious

En guise d'extension de la réponse de Joris (qui semble être basée sur le travail de Nathan de Vries ), voici le code dont j'avais besoin pour activer WebGL dans le SDK iOS 5.0:

Quelque part vers le haut de votre implémentation du contrôleur de vue:

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

Création par programme d'un UIWebView et activation de WebGL:

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

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

I créé un exemple d'application qui illustre l'exécution de WebGL dans un UIWebView en plein écran iPhone/iPad, en utilisant le site du bloc-notes de WebGL http://glsl.heroku.com comme destination. Veillez à ce que certains de ces exemples ne bloquent même pas un iPad 2, ce qui pourrait entraîner un redémarrage difficile. La performance semble indiquer pourquoi WebGL est toujours dans un état officiellement non pris en charge dans WebKit mobile.

Bien sûr, comme cela a été dit, cela ne garantit pas le fonctionnement des futures versions d'iOS et votre application sera rejetée de l'App Store. Ceci n'est vraiment utile que pour les loisirs et les tests internes.

Un exemple de WebGL exécuté sur mon iPad 2:

enter image description here

23
Brad Larson

WebKit sur iOS prend en charge WebGL à partir de la version 4.x (vous ne savez pas quelle version .x). Il est activé dans la vue Web utilisée par la structure iAd. WebGL est désactivé pour toutes les autres utilisations de WebKit (Safari et UIWebView).

Il est possible d'activer WebGL à l'aide d'API privées (cela ne passera pas le processus de soumission). Dans votre sous-classe Webview:

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

( via )

Cela vous permettra au moins de commencer à expérimenter WebGL sur iOS. 

Pas sûr du support WebGL sur Android. Assez/ les commentaires récents sur le problème dans le tracker Android suggèrent qu'il n'est pas encore disponible.

Une table de support Nice pour WebGL dans les navigateurs (mobiles): Quand puis-je utiliser WebGL

La meilleure façon de procéder pour l’instant semble être d’inclure votre propre version de WebKit compatible WebGL dans le wrapper de votre application pour iOS et Android.

6
Joris Kluivers

Je ne pense pas qu'il existe des outils de conversion faciles. Vous devrez probablement prendre votre code WebGL et réécrire sous OpenGL pour les deux plates-formes afin de créer des applications natives.

1
Benjamin Mayo

Ce n'est pas encore prêt, mais ForPlay pourrait bien servir de plate-forme de développement commune pour Android et WebGL via GWT.

1
Kevin

Comme la version iOS de WebKit ne prend pas en charge WebGL de manière native, je pense que vous avez deux options:

  • Implémentez l'API WebGL dans le contexte JavaScript d'un WebView vous-même en transférant les appels à OpenGL natif via iframe RPC ou autre. Malheureusement, il n’existe malheureusement pas de méthode propre pour appeler des fonctions (Objective-) C à partir de JavaScript sur iOS. La performance pourrait être un problème.

  • Compiler ou interpréter le code JavaScript dans un environnement d'exécution tiers, puis implémenter WebGL à partir de là. Les compilateurs JIT ne sont pas autorisés sur iOS, donc quelque chose comme V8 ne fonctionnera pas. Appcelerator Titanium compile JavaScript de manière statique, pour autant que je sache, et dispose également d'un interprète. Vous pouvez l'utiliser, mais vous devez quand même implémenter vous-même la colle WebGL.

Je ne suis au courant d'aucun pont WebGL existant pour iOS. Je pense donc que vous aurez devez l'écrire vous-même ou demandez à quelqu'un de le faire pour vous. Un problème qui pourrait ne pas être possible à résoudre est si vous utilisez autre chose que WebGL pour afficher des éléments, par exemple. HTML, 2D <canvas>, etc. Combiner l’affichage WebView avec un framebuffer OpenGL sera plutôt délicat.

Je ne connais pas grand-chose à Android, mais étant donné que les règles y sont plus souples, il serait peut-être possible d'y intégrer un navigateur compatible WebGL.

1
pmdj

Regrouper WebKit et les ressources de votre application (.js, textures, etc.) dans une application iOS ou Android ne semble pas trop difficile. Je suppose que, puisque Google et Apple sont des contributeurs majeurs au projet WebKit, tout le support nécessaire (multitouch et autres) est déjà disponible.

PS: de nombreuses applications iOS utilisent javascript interprété ou Lua. Les règles sont là pour empêcher votre application d'exécuter du code tiers (en particulier à partir d'Internet), pas le code que vous associeriez à votre propre application.

EDIT: Pour clarifier, je pense que vous devriez implémenter votre propre vue Web à l'aide de webkit (construit à partir du source) pour pouvoir utiliser WebGL et passer le processus de filtrage d'Apple, comme l'activation de WebGL dans le La vue Web fournie par Apple fera en sorte que votre application soit rejetée.

1
jcayzac

Il existe plusieurs options pour pouvoir déployer une application WebGL native. EjectaGL est une excellente implémentation WebGL mais un peu plus difficile à maîtriser ( http://codehum.com/stuff/ejectagl/ ).

Une autre option est Ludei, qui a récemment annoncé sa prise en charge de WebGL sur iOS et Android. Il est plus facile à utiliser et prend en charge l'accélération de la toile HTML5 en 2D et 3D via WebGL. Il fournit également un moyen de monétiser votre application à l'aide de PAI, de publicités et de nombreuses extensions. Il est beaucoup plus facile de tester à l'aide de l'application CocoonJS Launcher et de leur compilateur cloud.

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

0