pwa medium example apps app and android ios mobile webgl
una aplicación de muestra

android - medium - pwa vs native



¿Implementar aplicaciones WebGL como aplicaciones nativas de iOS o Android? (8)

Agrupar WebKit y los recursos de su aplicación (.js, texturas, etc.) en una aplicación iOS o Android no suena demasiado difícil. Supongo que, dado que Google y Apple son los principales contribuyentes al proyecto WebKit, todo el soporte requerido (para multitouch y otras cosas) ya está allí.

PD: muchas aplicaciones iOS usan Javascript interpretado o Lua. Las reglas están ahí para evitar que tu aplicación ejecute código de terceros (especialmente de Internet), no el código que incluirías en tu propia aplicación.

EDITAR : para aclarar, creo que necesitaría implementar su propia vista web usando webkit (construido desde la fuente) para usar WebGL y pasar el proceso de selección de Apple, ya que la activación de WebGL en la vista web proporcionada por Apple hará que su aplicación sea rechazada .

¿Alguien sabe de una forma en que puede implementar una aplicación WebGL como una aplicación nativa de iOS o Android? El middleware comercial es aceptable, aunque sería preferible un proyecto abierto. Gracias.


Como la versión de iOS de WebKit no admite WebGL de forma nativa, creo que tiene dos opciones:

  • Implemente la API WebGL en el contexto de JavaScript de un WebView usted mismo reenviando llamadas al OpenGL nativo a través de RPC iframe o más. No hay una forma clara de llamar (Objective-) C funciones de JavaScript en iOS, desafortunadamente. El rendimiento podría ser un problema.

  • AOT: compila o interpreta el JavaScript en un entorno de ejecución de terceros y luego implementa WebGL desde allí. Los compiladores JIT no están permitidos en iOS, por lo que algo como V8 no funcionará. Appcelerator Titanium compila estáticamente JavaScript hasta donde yo sé, y también tiene un intérprete. Podría usar eso, pero aún tendría que implementar el pegamento WebGL usted mismo.

No conozco ningún puente WebGL existente para iOS, así que creo que tendrá que escribirlo usted mismo o hacer que alguien lo haga por usted. Un problema que quizás no sea posible superar es si usa algo más que WebGL para mostrar cosas, por ejemplo, HTML, 2D <canvas>, etc. Combinar la visualización de WebView con un framebuffer de OpenGL va a ser bastante complicado.

No sé mucho sobre Android, pero teniendo en cuenta que las reglas son más relajadas allí, podría ser posible insertar un navegador compatible con WebGL allí.


Como una extensión de la respuesta de Joris (que parece estar basada en el trabajo de Nathan de Vries ), el siguiente es el código que necesitaba para habilitar WebGL dentro del iOS 5.0 SDK:

En algún lugar cerca de la parte superior de la implementación del controlador de vista:

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

Crear mediante programación una UIWebView y habilitar WebGL:

UIWebView *webDetailView = [[UIWebView alloc] initWithFrame:mainScreenFrame]; id webDocumentView = [webDetailView performSelector:@selector(_browserView)]; id backingWebView = [webDocumentView performSelector:@selector(webView)]; [backingWebView _setWebGLEnabled:YES];

Creé una aplicación de muestra que muestra WebGL ejecutándose en un UIWebView de pantalla completa de iPhone / iPad, utilizando el sitio web scratchpad de WebGL http://glsl.heroku.com como destino. Tenga cuidado de que algunos de esos ejemplos detengan incluso un iPad 2, lo que podría conducir a un reinicio difícil. El rendimiento allí parece indicar por qué WebGL aún se encuentra en un estado oficialmente no compatible en WebKit para dispositivos móviles.

Por supuesto, como se ha indicado, no está garantizado que funcione en futuras versiones de iOS y se rechazará su aplicación de la App Store. Esto solo es realmente útil para el trabajo de hobby y las pruebas internas.

Un ejemplo de WebGL ejecutándose en mi iPad 2:


Hay un par de opciones para poder implementar una aplicación nativa de WebGL. EjectaGL es una gran implementación de WebGL pero un poco más difícil de dominar ( http://codehum.com/stuff/ejectagl/ ).

Otra opción es Ludei, que recientemente anunció su compatibilidad con WebGL en iOS y Android. Es más fácil de usar y admite la aceleración para el lienzo HTML5 tanto en 2D como en 3D a través de WebGL. También proporciona una forma de monetizar su aplicación mediante IAP, anuncios y muchas extensiones. Es mucho más fácil probar usando la aplicación CocoonJS Launcher y su compilador en la nube.

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


No creo que haya herramientas de conversión fáciles. Probablemente deba tomar su base de código WebGL y volver a escribir en OpenGL para ambas plataformas, para crear aplicaciones nativas.


Prueba Phonegap . Le permite crear aplicaciones HTML + CSS + JS "nativas" utilizando la instalación estándar de Webkit en su sistema operativo. Y proporciona un puente javascript-to-native para permitirle hacer cosas que no son posibles en webapps puros.


Todavía no está listo, pero ForPlay puede ser una plataforma de desarrollo común para Android y WebGL a través de GWT.


WebKit en iOS en realidad es compatible con WebGL, a partir de 4.x (no estoy seguro de qué versión de .x). Está habilitado en la vista web utilizada por iAd framework, todos los demás usos de WebKit (Safari y UIWebView) tienen WebGL deshabilitado.

Es posible habilitar WebGL usando API privadas (esto no pasará el proceso de envío). En su subclase webview:

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

( vía )

Esto al menos le permitirá comenzar a experimentar con WebGL en iOS.

No estoy seguro del soporte de WebGL en Android. Los comentarios bastante recientes sobre el problema en el rastreador de Android sugieren que todavía no está disponible.

Una buena tabla de soporte para WebGL en navegadores (móviles): ¿ Cuándo puedo usar WebGL?

La mejor manera de ir ahora parece ser incluir su propia versión de WebKit habilitada para WebGL en su contenedor de aplicaciones tanto para iOS como para Android.