一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种通用浏览器上检测webgl上下文的方法与流程

2021-12-14 23:06:00 来源:中国专利 TAG:


1.本发明属于webgl检测技术领域,具体涉及一种通用浏览器上检测webgl上下文的方法。


背景技术:

2.目前市面上基于webgl的h5应用的开发越来越普及,但web端开发者们会发现因为webgl是一种基于状态机的上下文,当项目规模庞大,渲染的物体变多时,开发者们不知道状态机里到底做过什么事情,现在的上下文状态,是否指令间存在过度使用而浪费图像处理器的情况。所以很难排查并优化这种基于webgl的项目。


技术实现要素:

3.本发明的目的是为了解决webgl上下文难排查的问题,提出了一种通用浏览器上检测webgl上下文的方法。
4.本发明的技术方案是:一种通用浏览器上检测webgl上下文的方法包括以下步骤:
5.s1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;
6.s2:利用钩子函数,对webgl标准的源函数进行处理;
7.s3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。
8.进一步地,步骤s1中,webgl标准包括webgl虚拟指令基类和webgl虚拟对象基类;
9.虚拟上下文用于模拟浏览器上状态机的内部环境;
10.钩子函数用于调用webgl标准的源函数时,触发调用自定义函数。
11.进一步地,步骤s2包括以下子步骤:
12.s21:保存webgl标准中的源函数,并触发钩子函数,将webgl虚拟指令基类和webgl虚拟对象基类分别映射至虚拟上下文中的webgl指令和webgl对象;
13.s22:重写源函数,并对将源函数中的参数进行保存并处理。
14.进一步地,步骤s22中,对源函数中的参数进行处理的方法具体为:通过webgl指令记录由钩子函数产生的命令调用堆栈、调用时间戳、调用参数列表和参数列表的序列化接口;
15.调用钩子函数中的虚拟指令,将虚拟指令对应的原指令内的参数列表推入webgl虚拟对象基类的参数列表,并记录当前调用时间戳和编程语言的函数调用堆栈;创建虚拟指令对象,调用保存的源函数,将源函数产生的webgl对象的句柄号和上下文标签记录在webgl虚拟对象基类中。
16.进一步地,步骤s3中,进行webgl上下文检测的具体方法为:激活虚拟上下文中webgl指令和webgl对象的记录功能,使源函数的函数调用进入钩子函数的函数逻辑内,并对虚拟上下文和状态机做一份镜像文件,停止记录功能,根据记录结果进行webgl上下文检测。
17.本发明的有益效果是:本发明提供一种不需要开发者修改自己代码就可以方便检
测一帧渲染所调用的所有上下文的指令(包括每种指令调用次数)、当前上下文状态、webgl扩展支持情况、webgl显存使用数量(buffers和texture)、渲染片元数,从而方便排查故障并有目的性的优化项目。
附图说明
18.图1为检测webgl上下文方法的流程图。
具体实施方式
19.下面结合附图对本发明的实施例作进一步的说明。
20.webgl上下文:编写一个webgl的应用程序,第一步是让webgl渲染上下文,即context对象。这个对象与webgl绘制缓冲区进行交互,可以调用所有webgl的方法。
21.虚拟上下文:webgl标准内名为webgl context的东西就是虚拟上下文,其建立在驱动接口上的状态机,用于完全模拟状态机内部状态的环境,且虚拟状态环境是不能直接和硬件关联的,只是为了方便查看真实上下文中的状态,相当于一个镜像。
22.webgl标准:webgl标准描述一个附加的渲染上下文和支持对象,用于html5canvas元素。该上下文允许使用符合opengl es 2.0api的一套api进行渲染。webgl技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3d结构的网站页面,甚至可以用来设计3d网页游戏等等。
23.函数调用:计算机编译或运行时,使用某个函数来完成相关命令。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
24.webgl:一种3d绘图协议,这种绘图技术标准允许把javascript和opengl es2.0结合在一起,通过增加opengl es 2.0的一个javascript绑定,webgl可以为html5 canvas提供硬件3d加速渲染,这样web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3d场景和模型了,还能创建复杂的导航和数据视觉化。
25.h5:构建web内容的一种语言描述方式。
26.如图1所示,本发明提供了一种通用浏览器上检测webgl上下文的方法,包括以下步骤:
27.s1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;
28.s2:利用钩子函数,对webgl标准的源函数进行处理;
29.s3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。
30.在本发明实施例中,步骤s1中,webgl标准包括webgl虚拟指令基类和webgl虚拟对象基类;
31.虚拟上下文用于模拟浏览器上状态机的内部环境;
32.钩子函数用于调用webgl标准的源函数时,触发调用自定义函数。
33.在本发明实施例中,步骤s2包括以下子步骤:
34.s21:保存webgl标准中的源函数,并触发钩子函数,将webgl虚拟指令基类和webgl虚拟对象基类分别映射至虚拟上下文中的webgl指令和webgl对象;
35.s22:重写源函数,并对将源函数中的参数进行保存并处理。
36.在本发明实施例中,步骤s22中,对源函数中的参数进行处理的方法具体为:通过webgl指令记录由钩子函数产生的命令调用堆栈、调用时间戳、调用参数列表和参数列表的序列化接口;
37.调用钩子函数中的虚拟指令,将虚拟指令对应的原指令内的参数列表推入webgl虚拟对象基类的参数列表,并记录当前调用时间戳和编程语言的函数调用堆栈;创建虚拟指令对象,调用保存的源函数,将源函数产生的webgl对象的句柄号和上下文标签记录在webgl虚拟对象基类中。
38.在本发明实施例中,步骤s3中,进行webgl上下文检测的具体方法为:激活虚拟上下文中webgl指令和webgl对象的记录功能,使源函数的函数调用进入钩子函数的函数逻辑内,并对虚拟上下文和状态机做一份镜像文件,停止记录功能,根据记录结果进行webgl上下文检测。
39.在本发明实施例中,具体可为以下步骤:
40.1:因为检测方法要通用,所以需要做一个工具sdk(软件开发工具包),此工具可以在任何有webgl渲染功能的应用使用;
41.2:sdk在初始化时内存内创建一个符合webgl标准的虚拟上下文,包括但不限于texture uint、texture、program、buffer、sampler、blendfunc、clearcolor、clearcolormask attribute、framebuffer、renderbuffer、depthbuffer和shader等;其中,webgl标准内有一个名为webgl context的东西就是上下文,这个是建立在驱动接口上的状态机,这里建立的虚拟上下文用于完全模拟状态机内部状态的环境,只是这个虚拟状态环境是不能直接和硬件关联的,只是为了方便查看真实上下文中的状态,相当于一个镜像。
42.3:由于webgl现在是h5上的一个标准,之后对浏览器上的所有webgl接口进行代理hook,其中,钩子函数是为了在源函数调用时,额外触发调用的自定义函数,这样就可以在这个自定义函数(也就是钩子函数)中写额外的逻辑功能;
43.4:把每个webgl标准接口函数保存一个原始版本函数;
44.5:重写这个标准函数,对每个函数传进来的参数进行保存并处理相关逻辑,此处可以针对每个函数罗列出具体逻辑,使得虚拟上下文和真实webgl上下文一致;最后调用之前保存好的原始函数版本来让浏览器通信到gpu(图形处理器)进行正常工作。
45.其中,每个函数的参数列表不一样,但种类为gluint(webgl内的整形)glenum(webgl内枚举)webgltexture等;
46.处理相关逻辑具体为:根据标准中源函数的返回值和参数类型和参数长度,虚拟函数需要把对应的参数压入参数列表来保存,所以每个虚拟函数都不同,但是流程是完全一致的。
47.针对webgl标准,创建了2个大类,一种是虚拟basecommand基类,另一种是虚拟webglobject基类,分别用来映射到webglcommand和webglobecjt(webgl指令和webgl对象)上。虚拟basecommand中记录了命令调用堆栈,调用时间戳,调用参数列表,和序列化参数列表的接口;因为调用了源webglcommand函数,所以会触发钩子函数也就是对应的虚拟webglcommand函数,这个函数是继承与虚拟basecommand的,像记录时间戳,记录调用堆栈和序列化参数的逻辑是在basecammand中实现的,这些功能可以通过javascript内置函数来实现,记录参数列表在具体的虚拟webglcommand中实现。虚拟webglobject基类中实现了
对象类型标签和源对象的句柄号。举例说明:比如webgl标准中的createtexture指令,虚拟createtexture command是继承与虚拟basecommand的。当原始指令被调用时会先去调用钩子函数虚拟的createtexture指令,将原指令内的参数列表推入基类中的参数列表,并记录当前调用时间戳和javascript的函数调用堆栈。然后创建一个虚拟webgltexture对象,之后调用之前保存好的原始函数,将原始函数产生的webglobject的句柄号和texture标签记录在虚拟webglobject(此例中为虚拟webgltexture)中。其中在初始化上下文的接口中实现对当前浏览器的扩展支持度和纹理压缩支持进行检测并保存。
48.6:带检测应用在运行前先进行此sdk初始化工作,当程序运行起来需要做一帧渲染的虚拟webgl上下文和状态机的快照时,激活webgl虚拟上下文的记录功能,这样所有正常的函数调用都会进入到之前做的hook的函数逻辑内,这样就可以对真正的webgl上下文和状态机做一份完全一样的虚拟webgl上下文和状态机的镜像,当这帧渲染结束后停止记录功能,然后对当前虚拟快照进行一个页面展示。
49.本发明的工作原理及过程为:本发明对每个原始函数做一个代理函数,并创建一个符合标准的虚拟webgl上下文和状态机,再对每个标准函数所做的特殊逻辑。
50.本发明的有益效果为:本发明提供一种不需要开发者修改自己代码就可以方便检测一帧渲染所调用的所有上下文的指令(包括每种指令调用次数)、当前上下文状态、webgl扩展支持情况、webgl显存使用数量(buffers和texture)、渲染片元数,从而方便排查故障并有目的性的优化项目。
51.本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献