it-swarm.com.ru

Развертывать приложения WebGL как родные приложения для iOS или Android?

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

42
Cody Brocious

В качестве дополнения к ответу Джориса (который, кажется, основан на работе Натана де Фриза ), ниже приведен код, необходимый для включения 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];

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

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

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

enter image description here

23
Brad Larson

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

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

6
Joris Kluivers

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

1
Benjamin Mayo

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

1
Kevin

Поскольку версия 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 <canvas> и т.д. Объединить отображение WebView с кадровым буфером OpenGL будет довольно сложно.

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

1
pmdj

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

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

EDIT: Чтобы уточнить, я думаю, вам нужно реализовать свой собственный веб-вид с использованием webkit (созданного из исходного кода), чтобы использовать WebGL и пройти процесс проверки Apple, как активацию WebGL в Предоставленное Apple веб-представление приведет к отклонению вашего приложения.

1
jcayzac

Существует несколько вариантов развертывания нативного приложения 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
Iker Jamardo Zugaza