risposta-alla-domanda-sullo-sviluppo-web-bd.com

Distribuire applicazioni WebGL come applicazioni native iOS o Android?

Qualcuno sa di un modo in cui è possibile distribuire un'applicazione WebGL come app nativa per iOS o Android? Il middleware commerciale è accettabile, sebbene sia preferibile un progetto aperto. Grazie.

42
Cody Brocious

Come estensione della risposta di Joris (che sembra essere basata sul lavoro di Nathan de Vries ), quanto segue è il codice che mi serviva per abilitare WebGL all'interno dell'SDK di iOS 5.0:

Da qualche parte vicino alla parte superiore dell'implementazione del controller di visualizzazione:

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

Creazione a livello di codice di UIWebView e attivazione di WebGL:

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

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

I ha creato un'applicazione di esempio che mostra WebGL in esecuzione in un UIWebView a schermo intero per iPhone/iPad, utilizzando come destinazione il sito Web scratchpad http://glsl.heroku.com . Fai attenzione che alcuni di questi esempi ci consentiranno di bloccare anche un iPad 2, il che potrebbe portare a un duro riavvio. Le prestazioni sembrano indicare perché WebGL è ancora in uno stato ufficialmente non supportato in WebKit mobile.

Naturalmente, come è stato affermato, non è garantito che funzioni su versioni future di iOS e la tua applicazione verrà respinta dall'App Store. Questo è veramente utile solo per il lavoro di hobby e test interni.

Un esempio di WebGL in esecuzione sul mio iPad 2:

enter image description here

23
Brad Larson

WebKit su iOS supporta effettivamente WebGL, a partire da 4.x (non sono sicuro quale versione .x). È abilitato nella webview utilizzata dal framework iAd, tutti gli altri usi di WebKit (Safari e UIWebView) hanno WebGL disabilitato.

È possibile abilitare WebGL utilizzando API private (questo non passerà il processo di invio). Nella sottoclasse della tua webview:

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

( attraverso )

Questo ti permetterà almeno di iniziare a sperimentare con WebGL su iOS. 

Non sono sicuro del supporto WebGL su Android. Giustamente i recenti commenti sul problema nel tracker Android suggeriscono che non è ancora disponibile.

Una bella tabella di supporto per WebGL nei browser (mobili): Quando posso usare WebGL

Il modo migliore per andare ora sembra essere quello di includere la propria versione WebGL abilitata di WebKit nel proprio wrapper applicativo per iOS e Android.

6
Joris Kluivers

Non penso ci siano strumenti di conversione semplici. Probabilmente dovrai prendere la tua base di codice WebGL e riscriverla in OpenGL per entrambe le piattaforme, per creare app native.

1
Benjamin Mayo

Non è ancora pronto, ma ForPlay potrebbe essere in grado di agire come una piattaforma di sviluppo comune per Android e WebGL tramite GWT.

1
Kevin

Poiché la versione iOS di WebKit non supporta WebGL in modo nativo, penso che tu abbia due opzioni:

  • Implementare l'API WebGL nel contesto JavaScript di una WebView autonomamente inoltrando le chiamate alla OpenGL nativa tramite RPC iframe o così. Sfortunatamente, non esiste un modo pulito per chiamare (Objective-) le funzioni C da JavaScript su iOS. Le prestazioni potrebbero essere un problema.

  • AOT-Compilare o interpretare il codice JavaScript in un runtime di terze parti, quindi implementare WebGL da lì. I compilatori JIT non sono consentiti su iOS, quindi qualcosa come V8 non funzionerà. Appcelerator Titanium compila staticamente JavaScript per quanto ne so, e ha anche un interprete. Potresti usarlo, ma dovresti ancora implementare la colla WebGL da solo.

Non sono a conoscenza di alcun bridge WebGL esistente per iOS, quindi penso che avrà bisogno di scriverlo da solo o ottenere qualcuno che lo faccia per te. Un problema che potrebbe non essere possibile superare è se si utilizza qualcosa di diverso da WebGL per visualizzare materiale - ad es. HTML, 2D <canvas>, ecc. Combinare la visualizzazione di WebView con un frame buffer di OpenGL sarà piuttosto complicato.

Non so molto di Android, ma considerando le regole sono più rilassate, potrebbe essere possibile incorporare un browser compatibile con WebGL.

1
pmdj

Raggruppare WebKit e le risorse della tua app (js, texture, ecc.) In un'applicazione iOS o Android non sembra troppo difficile. Suppongo che dal momento che Google e Apple sono i principali contributori al progetto WebKit, tutto il supporto richiesto (per multitouch e altre cose) è già lì.

PS: molte app iOS usano Javascript interpretato o Lua. Le regole ci sono per impedire alla tua app di eseguire codice di terze parti (specialmente da internet), non il codice che impacchettare nella tua app.

EDIT: Per chiarire, penso che avresti bisogno di implementare la tua vista web usando il webkit (costruito dal sorgente) per usare WebGL e passare il processo di screening di Apple, come attivando WebGL nel La visualizzazione web fornita da Apple consente di rifiutare la tua app.

1
jcayzac

Ci sono un paio di opzioni per essere in grado di distribuire un'applicazione nativa WebGL. EjectaGL è una grande implementazione WebGL ma un po 'più difficile da padroneggiare ( http://codehum.com/stuff/ejectagl/ ).

Un'altra opzione è che Ludei ha recentemente annunciato il supporto per WebGL su iOS e Android. È più facile da usare e supporta l'accelerazione per canvas HTML5 sia in 2D che in 3D tramite WebGL. Fornisce inoltre un modo per monetizzare la tua app utilizzando IAP, annunci e numerose estensioni. È molto più semplice eseguire test utilizzando l'app Launcher CocoonJS e il relativo compilatore cloud.

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

0