
先解释一下这是什么东西
简单说就是,用java/dart也能做游戏了,而且是3d游戏
当然手游早就可以了,安卓就有一个改版的jvm/dalvik,java目前主流的jvm hotspot和dartvm其实都是一个作者做的,lars bak
怎么做的呢
其实也简单,就是渲染的部分,通过flutter的platform channels联入并调用,本质上就是一种ffi,foreign function interface,其他语言函数的接口,dart可以通过调用这个接口,来使用其他语言的api,那这个在游戏中就非常重要啦,因为游戏最头疼的部分,就是渲染,就是画图,这个占了大部分计算资源,其他的,如果我们按照mvc来区分的话,渲染就是v了,其他的c和m加起来使用的计算资源不会到渲染的十分之一,当然我们可以做很复杂的计算,但是一般游戏不会这么做,一般复杂计算常见于科学计算,研究主要就是复杂的数学应用嘛
那渲染的api无非这几个,ios/mac上的metal,标准化的opengl和vulkan,win上的directx3d
这些api主要是c和c++,标准化的接口用的是c(gl和vk)其他两个用c++(metal&d3d)
那不管是c还是c++,都可以通过ffi予以调用,然后在渲染时候,直接调用这些api予以渲染即可
因为渲染非常耗计算资源,所以如果在内存和gpu显存之间拷贝的话,会导致latency延长,使得人眼感觉得到这种延迟,就卡卡的,所以这里需要直接优化的,一般通过硬件加速等手段将其优化,然后再用其他语言的ffi将其包装,然后暴露给用户,这样就可以屏蔽掉用户对于c和c++的了解,直接用dart/java就好了
这就是这个项目正在做的事
当然现在这个阶段,因为工具还比较初级,还不完善,所以不手写c/c++代码还是不行,但是我们可以把书写这些代码局限在整个游戏制作的一个部分里,也就是渲染使用才用,其他时候我们回到dart,java这些高级语言上去就好啦,写起来方便嘛
尤其是游戏建模啊,网络io啊,这些用c/c++去写就比较麻烦
但是从长远看,用户无需接触c/c++也能将游戏制作出来是大势所趋
那java有没有类似的项目呢?当然有,ffi就是比较熟悉的jni了
然后flutter对应的gui应该是javafx
13九月份就要release了,添加了native渲染的扩展,分别有这两个项目予以扩展,那这个原理就跟上面说的项目很像了
以及openjdk的核心项目,panama巴拿马,能够更加方便滴集成c/c++的api,panama有一个工具,jextract,能够通过扫描c/c++的头文件自动生成java的interface,这样用户就不需要手写c/c++代码也能直接在java中使用这些api了,就很方便,链接如下:
然后在微软温哥华的巴西人博格斯制作了一个跨平台gui的兼容性对比列表,如下:
flutter和javafx都在上面了,但是flutter和javafx同时向游戏领域发力,这个其实也在预料之中,你一个app,做不了游戏,客户体验是不够的,人对于视觉上享受的欲望是客观存在的
