2011-06-11 222 views
41

有没有人知道您可以将WebGL应用程序部署为本机iOS或Android应用程序的方式?商业中间件是可以接受的,但是一个开放的项目会更可取。谢谢。将WebGL应用程序部署为本机iOS或Android应用程序?

+0

我真的想启用的WebGL + PhoneGap的。那很酷。我认为可以采用Android的当前WebView代码并添加WebGL,并创建替代的WebGL WebView以用于PhoneGap。虽然我不确定iPhone的使用情况,但不幸的是它们不是开源的。 :/ ...在他们决定包含WebGL之前,这将只是一个时间问题(这将比迟早更早,以减少其iStore中应用的销售)。 – trusktr 2011-11-01 23:37:21

回答

-3

尝试Phonegap。它允许您使用操作系统上的标准Webkit安装来构建“原生”HTML + CSS + JS应用程序。它提供了一个JavaScript到本地的桥梁,使您可以在纯webapps中做不可能的事情。

+5

Phonegap不支持WebGL,因为它使用平台的Webkit - 看到某人在Maemo版本中启用了WebGL,但似乎他们没有任何计划切换到他们自己的用于WebGL的Webkit。 – 2011-06-11 04:25:01

+1

我认为它即将可用! – trusktr 2011-10-25 00:52:58

1

出自WebKit的iOS版本不支持WebGL本身,我认为你有两个选择:

  • 通过转发调用本地的OpenGL实现在web视图自己的JavaScript的背景下WebGL的API通过iframe RPC等等。不幸的是,iOS上的JavaScript调用(Objective-)C函数并不是一种干净的方式。性能可能是一个问题。

  • AOT-在第三方运行时编译或解释JavaScript,然后从那里实现WebGL。 JIT编译器在iOS上是不允许的,所以像V8这样的东西是行不通的。据我所知,Appcelerator Titanium静态编译JavaScript,并且还有一个解释器。你可以使用它,但你仍然需要自己实现WebGL胶。

我不知道任何现有桥梁的WebGL适用于iOS的,所以我觉得你需要或者把它写自己或让别人为你做它。一个可能无法克服的问题是,如果您使用WebGL以外的任何东西来显示内容 - 例如HTML,2D <canvas>等。将WebView显示与OpenGL帧缓冲结合起来将会非常棘手。

我对Android没有太多了解,但考虑到规则更加宽松,有可能在其中嵌入兼容WebGL的浏览器。

+0

JIT真的被禁止吗?我对此表示怀疑?我认为苹果公司只是想通过开放式脚本在任何能够开发酷3D软件而不需要Apple开发者许可的情况下,在其平台之上建立一个强大的开放平台。 – 2013-12-08 04:02:26

+1

是的,JIT被技术手段禁止。您不能通过'mprotect()'或'mmap()'将内存页面标记为'PROT_EXEC'。 Safari使用了一个特殊的'MAP_JIT'标志,但这是通过沙盒权利启用的,Apple不允许在第三方应用程序上使用沙盒权利。所以结果就是你不能执行在运行时生成的代码。请注意,这与不允许解释从网络下载的代码的规则不同。 (这只是App Store规则,操作系统无法执行) – pmdj 2013-12-09 00:46:50

+0

感谢您的区别。但是没有哪种JIT没有被封锁? – 2013-12-09 07:36:28

1

我不认为有任何简单的转换工具。您可能需要将WebGL代码库和OpenGL中的两个平台重写,以创建本机应用程序。

+0

这与他所要求的相反。这也很明显!重点不在于使用OpenGL并使用WebGL,因为那样您就可以同时制作网站和移动应用程序! – trusktr 2011-10-25 00:53:59

+0

是的,但我说没有这样的工具可以做到这一点。原生编码效果要好得多。 – 2011-10-26 10:10:07

+0

他的确提到过“中间件”是可以的。这种中间件称为PhoneGap。唯一的问题是你必须弄清楚如何在Android和iPhone上使用webkit浏览器并启用webGL。然后,您可以使用PhoneGap在同时使用视频加速时编写所需的所有JavaScript到本机代码。如果我从学校获得空闲时间,我会考虑这样做。 – trusktr 2011-11-01 23:33:48

1

尚未就绪,但ForPlay可以通过GWT充当Android和WebGL的通用开发平台。

+0

你可以给链接吗? – 2013-06-12 11:15:36

1

将WebKit和您的应用程序的资源(.js,纹理等)捆绑到iOS或Android应用程序中听起来并不困难。我假设由于Google和Apple是WebKit项目的主要贡献者,所有必需的支持(对于多点触控和其他内容)已经在那里。

PS:许多iOS应用程序使用解释的JavaScript或Lua。规则是为了防止您的应用程序执行第三方代码(尤其是来自Internet),而不是您在自己的应用程序中捆绑的代码。

编辑:为了澄清,我想你需要为了使用WebGL的通过苹果的筛选过程,如激活Apple苹果使用WebGL的WebKit的(从源代码构建),以实现自己的Web视图提供的网络视图会导致您的应用被拒绝。

6

iOS上的WebKit实际上支持WebGL,从4.x开始(不知道哪个.x版本)。它在iAd框架使用的webview中启用,WebKit(Safari和UIWebView)的所有其他用途都禁用了WebGL。

可以使用私有API启用WebGL(这不会通过提交过程)。在您的网页流量的子类:

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

via

这将至少让你开始使用WebGL的iOS上的实验。

不确定Android上的WebGL支持。 Android跟踪器中的相当recent comments on the issue表明它尚未推出。

在(移动)浏览器对WebGL的一个很好的支持表:去现在When can I use WebGL

最好的办法似乎是包括您自己的启用了WebGL的WebKit版本在你的应用程序包装两种iOS和Android。

+1

WebGL似乎与Android设备上的Firefox Mobile Browser一起运行(至少有一些):http://learningwebgl.com/blog/?p=4379。 – Rodja 2012-01-19 08:32:11

+0

您可能可以使用一些KVC来使这更容易。 ;) – 2012-01-20 21:40:33

23

作为扩展到里斯的回答(它似乎是基于所述work of Nathan de Vries),以下是我需要的IOS 5.0 SDK内启用的WebGL的代码:

某处邻近视图控制器顶部执行:

@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]; 

created a sample application说DEM演示使用WebGL暂存器网站http://glsl.heroku.com作为目的地在iPhone/iPad全屏UIWebView中运行的WebGL。请注意,这些示例中的一些会使iPad 2停止运行,从而导致硬重启。那里的表现似乎表明为什么WebGL仍然处于移动WebKit官方不受支持的状态。

当然,如前所述,这不能保证在未来的iOS版本上工作,并且会让您的应用程序在App Store中被拒绝。这只对业余爱好和内部测试非常有用。

在我的iPad 2上运行的WebGL的例子:

enter image description here

+0

这似乎并没有工作。该项目根本不在我的设备上运行。 – 2016-05-02 15:07:41

+0

@ItayLevin - 这是针对较老的iOS版本。自iOS 8以来,WebGL已经在UIWebView中得到官方支持(尽管您可能想要使用WKWebView来提高性能)。这是一个破解,让它可以在较旧的iOS版本上运行,以防人们需要。 – 2016-05-02 15:10:37

0

有几个选择,以能够部署一个原生的WebGL应用。 EjectaGL是一个伟大的WebGL实现,但有点难以掌握(http://codehum.com/stuff/ejectagl/)。

另一个选择是Ludei最近宣布他们支持iOS和Android上的WebGL。通过WebGL在2D和3D中使用和支持HTML5 canvas的加速更容易。它还提供了一种使用IAP,广告和大量扩展来获利应用的方法。使用CocoonJS启动器应用程序及其云编译器进行测试要容易得多。

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