Развертывать приложения WebGL как родные приложения для iOS или Android? - PullRequest
42 голосов
/ 11 июня 2011

Кто-нибудь знает, как вы можете развернуть приложение WebGL как родное приложение для iOS или Android?Коммерческое промежуточное программное обеспечение приемлемо, хотя открытый проект предпочтительнее.Спасибо.

Ответы [ 8 ]

23 голосов
/ 21 января 2012

В качестве дополнения к ответу Джориса (который, кажется, основан на работе Натана де Фриза ), ниже приведен код, необходимый для включения WebGL в iOS 5.0 SDK:

Где-то в верхней части вашей реализации контроллера представления:

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

Программное создание UIWebView и включение WebGL:

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

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

I создал образец приложения , демонстрирующий работу WebGL в полноэкранном UIWebView на iPhone / iPad с использованием сайта скретч-панели WebGL http://glsl.heroku.com в качестве места назначения. Будьте осторожны, что некоторые из этих примеров приведут к остановке даже iPad 2, что может привести к полной перезагрузке. Кажется, что производительность показывает, почему WebGL все еще находится в официально неподдерживаемом состоянии в мобильном WebKit.

Конечно, как уже говорилось, это не гарантирует работу в будущих версиях iOS, и ваше приложение будет отклонено из App Store. Это действительно полезно только для хобби и внутреннего тестирования.

Пример работы WebGL на моем iPad 2:

enter image description here

6 голосов
/ 22 ноября 2011

WebKit на iOS фактически поддерживает WebGL, начиная с 4.x (не уверен, какая версия .x).Он включен в веб-представлении, используемом платформой iAd, во всех других случаях использования WebKit (Safari и UIWebView) WebGL отключен.

Возможно включить WebGL с помощью частных API (это не пройдет процесс отправки),В вашем подклассе веб-просмотра:

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

( через )

Это по крайней мере позволит вам начать экспериментировать с WebGL на iOS.

Не уверен насчет поддержки WebGL на Android.Довольно недавние комментарии по проблеме в трекере Android показывают, что она еще не доступна.

Хорошая таблица поддержки для WebGL в (мобильных) браузерах: Когда я могу использовать WebGL

На данный момент лучший способ - включить собственную оболочку WebKL с поддержкой WebGL в оболочку приложения для iOS и Android.

1 голос
/ 17 августа 2011

Объединение WebKit и ресурсов вашего приложения (.js, текстуры и т. Д.) В приложение для iOS или Android не кажется слишком сложным. Я предполагаю, что, поскольку Google и Apple являются основными участниками проекта WebKit, вся необходимая поддержка (для мультитач и прочего) уже есть.

PS: многие приложения для iOS используют интерпретированный Javascript или Lua. Существуют правила, запрещающие вашему приложению выполнять сторонний код (особенно из Интернета), а не код, который вы добавляете в свое приложение.

РЕДАКТИРОВАТЬ : Чтобы уточнить, я думаю, вам нужно реализовать свой собственный веб-просмотр с использованием веб-набора (созданного из исходного кода), чтобы использовать WebGL и для прохождения процесса проверки Apple, поскольку активация WebGL в представлении Apple будет отклонять ваше приложение.

1 голос
/ 09 июля 2011

Он еще не готов, но ForPlay может выступать в качестве общей платформы разработки для Android и WebGL через GWT.

1 голос
/ 26 июня 2011

Я не думаю, что есть какие-либо простые инструменты для конвертации.Возможно, вам придется взять свою кодовую базу WebGL и переписать в OpenGL для обеих платформ, чтобы создать собственные приложения.

1 голос
/ 16 июня 2011

Поскольку версия WebKit для iOS изначально не поддерживает WebGL, я думаю, у вас есть два варианта:

  • Реализуйте API WebGL в контексте JavaScript WebView самостоятельно, перенаправляя вызовы в собственный OpenGL через iframe RPC или около того. К сожалению, нет чистого способа вызова (Objective-) C-функций из JavaScript на iOS. Производительность может быть проблемой.

  • AOT-Компилировать или интерпретировать JavaScript в сторонней среде выполнения, а затем внедрить WebGL оттуда. JIT компиляторы запрещены на iOS, поэтому что-то вроде V8 не будет работать. Насколько я знаю, Appcelerator Titanium статически компилирует JavaScript, а также имеет интерпретатор. Вы можете использовать это, но вам все равно нужно будет самостоятельно реализовать клей WebGL.

Я не знаю ни о каких существующих мостах WebGL для iOS, поэтому я думаю, что вам нужно будет написать это самостоятельно или попросить кого-то сделать это за вас. Одной из проблем, которую невозможно решить, является использование для показа чего-либо другого, кроме WebGL, например HTML, 2D и т. Д. Объединить отображение WebView с кадровым буфером OpenGL будет довольно сложно.

Я не очень разбираюсь в Android, но, учитывая, что правила там более спокойные, возможно, можно было бы встроить туда WebGL-совместимый браузер.

0 голосов
/ 04 июня 2013

Существует несколько вариантов развертывания нативного приложения WebGL. EjectaGL - отличная реализация WebGL, но немного сложнее освоить (http://codehum.com/stuff/ejectagl/).

Другим вариантом является Ludei, который недавно объявил о своей поддержке WebGL на iOS и Android. Он проще в использовании и поддерживает ускорение для холста HTML5 как в 2D, так и в 3D с помощью WebGL. Он также предоставляет способ монетизации вашего приложения с использованием IAP, рекламы и множества расширений. Гораздо проще протестировать приложение CocoonJS Launcher и его облачный компилятор.

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

0 голосов
/ 11 июня 2011

Попробуйте Phonegap .Он позволяет создавать «родные» приложения HTML + CSS + JS, используя стандартную установку Webkit в вашей ОС.И он обеспечивает мост javascript-to-native, позволяющий вам делать вещи, невозможные в чистых веб-приложениях.

...