热门关键字:
jquery > jquery教程 > jquery教程 > Quarto:HTML5第四局-源码

Quarto:HTML5第四局-源码

232
作者:管理员
发布时间:2021/8/10 18:46:11
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=5263
  在阅读WebKit源码中,讨论了Canvas在iOS平台使用的CoreGraphics框架作为渲染的工具,它运行在CPU上。WebGL是直接运行在GPU上的API,因此优化空间更大,对程序员要求更高。这次我们看看,WebGL如何对格式转换的,为我们后续three.js导入数据模型做铺设。


  在WebKit中,默认支持纹理格式,主要有:


  现实却是很残酷,iOS设备以上格式都是支持的,Android设备差异化就不同了,简单的说,要想确认Android是否支持某种纹理,只需要在glext.h文件中查找宏定义即可.


  比如,在Android的glext.h中,却无此定义,而在iOS的OpenGL ES2.0库中,我们可以找到


  区别于上图的主流的纹理格式,在OpenGL ES2.0中存在大量的扩展功能


  Android作为通用平台为不同厂家的硬件做了支持,比如AMD系列有以下扩展


  苹果为苹果自家的平台做了大量的高级扩展


  Android中定义为:


  iOS中的定义:


  WebKit作为WebGL标准实现的程序,首先就要面临的是PC/Android/iOS/Linux等多平台,在硬件兼容上的差异。既然底层硬件无法统一,必然在标准的实现上就会有取舍。


  我们先看看WebGL对应OpenGL ES2.0硬件支持的定义.


  【类型变化了,先挖个坑,后续我们在讨论】


  Native采用宏定义:


  JS使用成员变量:


  OpenGL ES2.0的头文件有两个:一个是gl.h,一个是glext.h。为什么有两个,他们之间的关系是什么呢?


  从表面上看,一个基本的功能包,一个扩展功能,就像打魔兽一样,等到程序员在不断的打怪升级,经验提升到6级以后,就可以开启大招了。


  每个英雄就像我们的选择的GPU,基本属性都有力量、敏捷、智力、攻击力,这些功能都是大同小异的,可以完成日常的开发和bug修复。各个英雄都有自己独特的技能,就像上面我们提到的Android与iOS的差异。


  gl.h中的定义与函数,在WebGL中都可以找到,用法完全相同【暂时这么讲,先挖坑】。


  这个头文件里的内容,大不相同,为了满足部分高级程序员更高的渲染特效、性能优化,采用了各个平台的支持,比如:深度测试、蒙版测试、多种纹理格式、多线程支持、离屏渲染、管道操作、纹理压缩、视频流等等,包罗万象。


  这里告诉大家一个好消息和一个坏消息。


  好消息是:


  坏消息是:


  实在无法统一的API,WebGL直接屏蔽掉,主要考虑两个问题:


  WebGL的目标是跨平台,兼容就要有牺牲


  有些功能不常用,也不是行业标注


  第一步,就是统一多平台的参数命名:


  第二步,增加平台无关的自定义参数


  第三步,采用C/C++补全硬件平台的缺陷


  例如,常见纹理格式的转换,在Android平台增加:


  下一章,我们继续今天的话题。


  看了这么多代码,也没明白讲什么——我也不知道该怎么讲,这可能就是OpenGL的难懂的原因吧。


  众所周知,WebGL是基于OpenGL ES2.0版本的标准,而OpenGL ES2.0只是OpenGL的子集。目前所有的Mobile设备通常采用OpenGL ES2.0的硬件,以达到成本、节能、性能最大化。


  但,如果是在PC上呢?PC拥有强大的GPU和完整的OpenGL能力,要自废武功来实现这个憋足的OpenGL ES2.0嘛。




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:jquery
友荐云推荐