首页 / 专利库 / 图形技术 / 图像互换格式 / 一种基于开放图形库的数据处理方法及系统

一种基于开放图形库的数据处理方法及系统

阅读:423发布:2020-05-16

专利汇可以提供一种基于开放图形库的数据处理方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于开放图形库的 数据处理 方法及系统,方法包括:将代码注入游戏应用程序的 进程 中;当游戏应用程序运行的画面符合预设要求时,通过代码劫持游戏应用程序在开放图形库中调用的的目标函数;通过目标函数获取游戏应用程序中的资源数据;其中,目标函数包括开放图形库的三维图形应用程序编程 接口 的子集中的至少两个函数;资源数据包括三 角 形索引数据、 顶点 属性数据和纹理数据中的至少一种。由目标函数获取的资源数据在数据量上更少,但数据的导出速度更快、由数据进行游戏画面分析的针对性更强,同时能够减少对游戏运行的影响。确定的目标函数的范围考虑到了函数在数据导出应用上的兼容性,实现更广泛的应用范围。,下面是一种基于开放图形库的数据处理方法及系统专利的具体信息内容。

1.一种基于开放图形库的数据处理方法,其特征在于,所述方法包括:
将代码注入游戏应用程序的进程中;
当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;
通过所述目标函数获取所述游戏应用程序中的资源数据;
其中,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数;
所述资源数据包括三形索引数据、顶点属性数据和纹理数据中的至少一种。
2.根据权利要求1所述的方法,其特征在于,所述当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数的步骤,包括:
通过所述代码中的第一函数劫持缓冲区交换函数;
根据接收到的捕获请求,对所述游戏应用程序的目标设置捕获标记;
通过所述代码中的第二函数劫持图元绘制函数;
其中,所述捕获请求通过所述代码接收,所述目标函数包括所述缓冲区交换函数和所述图元绘制函数。
3.根据权利要求2所述的方法,其特征在于,所述通过所述目标函数获取所述游戏应用程序中的资源数据的步骤,包括:
对所述捕获标记进行检测;
当检测到所述捕获标记时,通过所述目标函数导出所述目标帧对应的所述资源数据。
4.根据权利要求3所述的方法,其特征在于,当所述资源数据包括所述三角形索引数据时,所述当检测到所述捕获标记时,通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
从所述图元绘制函数获取渲染参数;
判断图形处理器是否使用索引缓冲对象;
当所述图形处理器使用所述索引缓冲对象时,将所述索引缓冲对象中存储的所述三角形索引数据映射到中央处理器的内存中,读取所述三角形索引数据;
当所述图形处理器未使用所述索引缓冲对象时,从所述中央处理器的内存中读取所述三角形索引数据。
5.根据权利要求4所述的方法,其特征在于,所述当所述图形处理器未使用所述索引缓冲对象时,从所述中央处理器的内存中读取所述三角形索引数据的步骤,包括:
计算所述中央处理器的内存中存储的所述三角形索引数据的大小;
根据所述渲染参数中的三角形索引参数,获取所述三角形索引数据。
6.根据权利要求3所述的方法,其特征在于,当所述资源数据包括所述顶点属性数据时,所述当检测到所述捕获标记时,通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
判断图形处理器是否使用顶点缓冲对象;
当所述图形处理器使用所述顶点缓冲对象时,将所述顶点缓冲对象中存储的所述顶点属性数据映射到中央处理器的内存中,读取所述顶点属性数据;
当所述图形处理器未使用所述顶点缓冲对象时,从所述中央处理器的内存中读取所述顶点属性数据。
7.根据权利要求6所述的方法,其特征在于,所述判断所述图形处理器是否绑定顶点缓冲对象的步骤之前,包括:
获取所述三角形索引数据;
遍历所述三角形索引数据中已激活属性的所述顶点属性数据;
获取所述顶点属性数据的基础信息;
所述当所述图形处理器未使用所述顶点缓冲对象时,从所述中央处理器的内存中读取所述顶点属性数据的步骤,包括:
根据所述三角形索引数据得到最大索引值;
根据所述最大索引值,计算所述中央处理器的内存中存储的所述顶点属性数据的大小。
8.根据权利要求3所述的方法,其特征在于,当所述资源数据包括所述纹理数据时,所述当检测到所述捕获标记时,通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
遍历一致变量,判断所述一致变量是否为纹理;
当所述一致变量为纹理时,获取所述一致变量对应的纹理单元的位置
激活所述纹理单元,获取所述纹理单元对应的纹理顶点缓冲对象;
判断所述图形处理器是否使用所述纹理顶点缓冲对象;
当所述图形处理器使用所述纹理顶点缓冲对象时,建立帧缓冲对象;
对所述纹理顶点缓冲对象与所述帧缓冲对象进行绑定;
当所述纹理顶点缓冲对象与所述帧缓冲对象绑定成功时,从所述帧缓冲对象中读取所述纹理数据;
当所述纹理顶点缓冲对象与所述帧缓冲对象未绑定成功时,通过绘制所述纹理的方式从所述帧缓冲对象中读取所述纹理数据。
9.根据权利要求1所述的方法,其特征在于,对获取的所述三角形索引数据采用obj文件格式进行打包;
对获取的所述顶点属性数据采用obj文件格式进行打包;
对获取的所述纹理数据采用便携式网络图形格式、标记图像格式、便携式像素格式或图像互换格式进行打包。
10.一种基于开放图形库的数据处理系统,其特征在于,所述系统包括:
代码注入模:用于将代码注入游戏应用程序的进程中;
目标函数劫持模块:用于当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;
资源数据获取模块:用于通过所述目标函数获取所述游戏应用程序中的资源数据;
其中,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数;
所述资源数据包括三角形索引数据、顶点属性数据和纹理数据中的至少一种。

说明书全文

一种基于开放图形库的数据处理方法及系统

技术领域

[0001] 本发明涉及互联网通信技术领域,尤其涉及一种基于开放图形库的数据处理方法及系统。

背景技术

[0002] 随着计算机和互联网技术的快速发展,越来越多的用户在终端设备上体验游戏应用程序。在开发游戏应用程序时可以使用OpenGL(Open Graphics Library,开放图形库)。OpenGL定义了一个跨编程语言、跨平台的编程接口规格的专业图形程序接口,利用OpenGL可以有效的实现对图形或图像的渲染
[0003] 为了更好的满足用户需求,游戏的分类愈加细化,游戏的制作精度愈加细致。游戏应用程序的开发者需要不断的对游戏内容进行测试,对呈现的游戏画面进行分析。然而,目前对游戏画面的相关数据进行分析时,获取的无关数据过多,分析效率低。

发明内容

[0004] 为了解决现有技术应用在对游戏应用程序进行分析时,分析过程繁琐、分析的数据针对性差等问题,本发明提供了一种基于开放图形库的数据处理方法及系统:
[0005] 一方面,本发明提供了一种基于开放图形库的数据处理方法,所述方法包括:
[0006] 将代码注入游戏应用程序的进程中;
[0007] 当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;
[0008] 通过所述目标函数获取所述游戏应用程序中的资源数据;
[0009] 其中,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数;
[0010] 所述资源数据包括三形索引数据、顶点属性数据和纹理数据中的至少一种。
[0011] 另一方面提供了一种基于开放图形库的数据处理系统,所述系统包括:
[0012] 代码注入模:用于将代码注入游戏应用程序的进程中;
[0013] 目标函数劫持模块:用于当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;
[0014] 资源数据获取模块:用于通过所述目标函数获取所述游戏应用程序中的资源数据;
[0015] 其中,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数;
[0016] 所述资源数据包括三角形索引数据、顶点属性数据和纹理数据中的至少一种。
[0017] 另一方面提供一种基于开放图形库的数据处理服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如上述的基于开放图形库的数据处理方法。
[0018] 另一方面提供一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述的基于开放图形库的数据处理方法。
[0019] 本发明提供的,具有如下技术效果:
[0020] 本发明通过将代码注入游戏应用程序的进程中,利用所述代码有效的劫持所述游戏应用程序在开放图形库中调用的目标函数,通过所述目标函数获取相关的资源数据,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数。由目标函数获取的资源数据在数据量上更少,但数据的导出速度更快、由数据进行游戏画面分析的针对性更强,同时能够减少对游戏运行的影响。确定的目标函数的范围考虑到了函数在数据导出应用上的兼容性,实现更广泛的应用范围。
附图说明
[0021] 为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
[0022] 图1是本发明实施例提供的一种应用环境的示意图;
[0023] 图2是本发明实施例提供的一种基于开放图形库的数据处理方法的流程示意图;
[0024] 图3是本发明实施例提供的通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数的一种的流程示意图;
[0025] 图4是本发明实施例提供的通过所述目标函数导出所述目标对应的所述三角形索引数据的一种流程示意图;
[0026] 图5是本发明实施例提供的通过所述目标函数导出所述目标帧对应的所述顶点属性数据的一种流程示意图;
[0027] 图6是本发明实施例提供的通过所述目标函数导出所述目标帧对应的所述纹理数据的一种流程示意图;
[0028] 图7也是本发明实施例提供的通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数的一种的流程示意图;
[0029] 图8是本发明实施例提供的一种基于开放图形库的数据处理系统的组成框图
[0030] 图9-11分别是应用本发明实施例得到的UI界面示意图;
[0031] 图12是本发明实施例提供的一种服务器的结构示意图。

具体实施方式

[0032] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0033] 需要说明的是,本发明的说明书权利要求书及上述附图中的术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0034] 请参阅图1,图1是本发明实施例提供的一种应用环境的示意图,如图1所示,该应用环境中,游戏应用程序调用OpenGL中的函数去确定为实现一定图形或图像所服务的操作步骤,这些函数可以用来绘制点、直线、多边形或是其它图形,这些函数还可以实现光照、着色或动画等各种效果。实现的一定图形或图像可以通过图形设备接口显示在终端设备的屏幕上或是其他显示部件上;实现的一定图形或图像也可以通过硬件驱动程序直接与显示部件通信,进而进行显示。测试工具向游戏应用程序的进程中注入代码,利用代码的功能实现对目标函数的劫持(Hook,挂钩),通过被劫持的目标函数获取相关的资源数据。需要说明的是,图1仅仅是一种示例。
[0035] 在本发明实施例中,游戏应用程序包括但不限于单机游戏、网络游戏。
[0036] 在本发明实施例中,终端设备包括但不限于智能手机、智能可穿戴设备和PDA(平板电脑)。
[0037] 在本发明实施例中,游戏应用程序可以为终端设备中运行的一应用程序,测试工具可以为同一终端设备中运行的另一应用程序。当然,游戏应用程序可以为一终端设备中运行的一应用程序,测试工具可以为另一终端设备中运行的一应用程序,测试工具通过获得的授权测试、分析游戏应用程序。
[0038] 在本发明实施例中,所述资源数据对应游戏应用程序运行的画面中任何可见的3d模型(比如房子、角色等)。所述资源数据包括三角形索引数据(用于重新构建模型)、顶点属性数据(用于关联模型与贴图)和纹理数据(贴图数据)中的至少一种。比如,一个模型包括多个面,每个面可以视为一个三角形,三角形对应三个顶点。对获取的所述三角形索引数据可以采用obj文件格式进行打包;对获取的所述顶点属性数据可以采用obj文件格式进行打包;对获取的所述纹理数据采用便携式网络图形格式(png,Portable Network Graphics)、标记图像格式(tga,Tagged Graphics)、便携式像素格式(ppm,Portable Pixmap Format)或图像互换格式(gif,Graphics Interchange Format)进行打包。
[0039] 在实际应用中,导出的资源数据可以以obj文件格式最终呈现,这样中间数据在obj文件中需要确认先后顺序、哪种数据以怎样的方式保存等,中间数据之间存在一定的关联关系。比如根据属性数据的名称来确认它在obj文件中的作用。
[0040] 以下介绍本发明一种基于开放图形库的数据处理方法,图2是本发明实施例提供的一种基于开放图形库的数据处理方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的如图2所示,所述方法可以包括:
[0041] S201:将代码注入游戏应用程序的进程中;
[0042] 在本发明实施例中,代码可以实现对调用的函数进行劫持。测试工具可以在游戏应用程序开始运行、启动(一般几秒)时就将代码注入,此时游戏应用程序按照自身的逻辑运行。代码的注入并非让游戏应用程序进入死循环,代码的劫持功能在对应的时机产生作用(比如游戏应用程序暂停几秒),之后游戏应用程序继续运行。如图9所示,测试工具注入代码的方式可以通过在游戏应用程序与对应的终端设备采用的操作系统(比如Android系统)之间虚拟一层代理,以此主动拉起游戏应用程序的进程,进而注入代码。
[0043] S202:当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;
[0044] 在本发明实施例中,预设要求可以是根据之前测试确定的时间点(比如对应的画面还需要复核),可以是根据游戏应用程序当前的运行确定的时间点(比如对应的画面具有较高的美术品质可用于分析、学习,可以是游戏应用程序运行1小时后)等。那么当所述游戏应用程序运行的画面(如图10所示)符合预设要求时,通过所述代码劫持所述游戏应用程序的目标函数。此时可以通过测试工具的UI界面(比如由交互产生的一个点击事件)触发代码劫持目标函数,也可以通过测试工具的预设逻辑触发代码劫持目标函数。
[0045] 当然,也可以当所述游戏应用程序运行的画面符合预设要求时,将代码注入游戏应用程序的进程中,通过所述代码劫持所述游戏应用程序的目标函数。
[0046] 这里所述目标函数包括开放图形库的三维图形应用程序编程接口的子集(GLES,Opengl ES)中的至少两个函数。
[0047] 具体的,所述目标函数包括缓冲区交换函数和图元绘制函数。游戏应用程序的在终端设备上的显示可以使用双缓冲机制进行渲染,窗口展示FrontDisplay缓冲区的数据,后台渲染结果存于BackSurface缓冲区,一帧结束后,交互两个缓冲区,即可快速切换窗口展示内容并开始下一帧。缓冲区交换函数(glSwapBuffers)则用于交互两个缓冲区:FrontDisplay缓冲区和BackSurface缓冲区。可以将缓冲区交换函数看作一个开关,由此可以获知游戏应用程序运行的画面对应的一帧的开始时刻和结束时刻。当图元绘制函数(glDrawElements,从数组中获得数据渲染图元)被调用时,底层驱动会向GPU(Graphics Processing Unit,图形处理器)提交最终渲染指令,GPU开始绘制物体。通过缓冲区交换函数和图元绘制函数,可以获取到一帧的开始时刻和结束时刻,并获知到该帧所绘制的物体信息和时机。
[0048] 如图3所示,所示通过所述代码劫持所述游戏应用程序的目标函数的步骤,包括:
[0049] S301:通过所述代码中的第一函数劫持缓冲区交换函数;
[0050] 首先找到缓冲区交换函数(glSwapBuffers)在内存中的地址,然后把该地址块设置为可写,修改该地址的内容,让游戏应用程序运行中调用缓冲区交换函数时跳转到第一函数的地址,当所述第一函数执行完后再跳转回来执行缓冲区交换函数。
[0051] S302:根据接收到的捕获请求,对所述游戏应用程序的目标帧设置捕获标记;
[0052] 所述代码可以实现接收捕获请求的功能。捕获请求可以通过测试工具的UI界面由开发者触发,捕获请求也可以由测试工具中的预设逻辑而触发。开发者通过UI界面可以根据进度轨更好的定位目标帧。
[0053] S303:通过所述代码中的第二函数劫持图元绘制函数;
[0054] 首先找到图元绘制函数(glDrawElements)在内存中的地址,然后把该地址块设置为可写,修改该地址的内容,让游戏应用程序运行中调用图元绘制函数时跳转到第二函数的地址,当所述第二函数执行完后再跳转回来执行图元绘制函数。
[0055] S203:通过所述目标函数获取所述游戏应用程序中的资源数据;
[0056] 在本发明实施例中,目标函数中包括对应的参数,通过这些参数获取相关的资源数据。目标帧画面显示的内容可以通过资源数据的导出而本地化。比如,图元绘制函数(glDrawElements)的函数原型为:void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid*indices)。其中:mode指定绘制图元的类型,它应该是下列值之一:GL_POINTS,GL_LINE_STRIP,GL_LINE_LOOP,GL_LINES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_TRIANGLES,GL_QUAD_STRIP,GL_QUADS和GL_POLYGON;count为以mode类型连接的顶点的总数,且根据不同的mode,count小于或等于单个mode类型图元的顶点数*图元数;type为索引值的类型,只能是下列值之一:GL_UNSIGNED_BYTE,GL_UNSIGNED_SHORT或GL_UNSIGNED_INT;indices指向索引存贮位置指针
[0057] 具体的,通过所述目标函数获取所述游戏应用程序中的资源数据的步骤中,首先,对所述捕获标记进行检测。然后,当检测到所述捕获标记时,需要判断所述捕获标记是否设置在所述目标帧开始时刻或结束时刻;当所述捕获标记设置在所述目标帧开始时刻或结束时刻时,通过所述目标函数导出所述目标帧对应的所述资源数据。判断目标帧处于开始时刻或结束时刻的步骤,可以避免导出的资源数据存在遗漏。若不进行判断而直接导出资源数据,导出的资源数据可能还含有上一帧的相关内容,会影响之后对游戏画面的分析。比如需要捕获新的目标帧,在确定上一帧已经结束后设置捕获标记,这样下一帧开始便进行导出。也就是说,通过缓冲区交换函数知道了一帧的开始时刻与结束时刻,知道当前帧的开始时刻,那么上一帧对应的图元绘制函数开始工作,此时捕获标记生效,生效之后再进行相关资源数据的导出。
[0058] 在实际应用中,所述资源数据包括三角形索引数据、顶点属性数据和纹理数据中的至少一种,如图11所示。对于这三类数据的导出并无顺序的规定,可以参考调用的现有顺序进行导出。
[0059] 如图4所示,当所述资源数据包括所述三角形索引数据时,所述通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
[0060] S401:从所述图元绘制函数获取渲染参数;
[0061] 图元绘制函数(glDrawElements)的渲染参数可以有很多。
[0062] S402:判断图形处理器是否使用索引缓冲对象;
[0063] 基于GLES实现原理,保存三角形索引数据的缓冲区可能来自GPU的EBO(Element Buffer Objects,索引缓冲对象),也可能来自CPU(Central Processing Unit,中央处理器)的内存。
[0064] S403:当所述图形处理器使用所述索引缓冲对象时,将所述索引缓冲对象中存储的所述三角形索引数据映射到中央处理器的内存中,读取所述三角形索引数据;
[0065] 采用内存映射方式,比如Map EBO buffer——》读取buffer——》Unmap EBO。对读取的数据进行打包,打包的目标格式为obj,这里的三角形索引数据可以用于生成obj文件中的面数据。
[0066] S404:当所述图形处理器未使用所述索引缓冲对象时,从所述中央处理器的内存中读取所述三角形索引数据。
[0067] 计算所述中央处理器的内存中存储的所述三角形索引数据的大小;根据所述渲染参数中的三角形索引参数,获取所述三角形索引数据,通过拷贝读取数据。对读取的数据进行打包,打包的目标格式为obj,这里的三角形索引数据可以用于生成obj文件中的面数据。
[0068] 如图5所示,当所述资源数据包括所述顶点属性数据时,所述通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
[0069] S501:判断图形处理器是否使用顶点缓冲对象(VBO,Vertex Buffer Objects);
[0070] 所述判断所述图形处理器是否绑定顶点缓冲对象的步骤之前,包括:获取所述三角形索引数据;遍历所述三角形索引数据中已激活属性的所述顶点属性数据,这里属性包括位置、颜色、绑定的贴图信息,比如具体的一个顶点使用哪个贴图中的何种颜色;获取所述顶点属性数据的基础信息(比如元素类型、元素个数等);
[0071] S502:当所述图形处理器使用所述顶点缓冲对象时,将所述顶点缓冲对象中存储的所述顶点属性数据映射到中央处理器的内存中,读取所述顶点属性数据;
[0072] 顶点属性数据绑定了VBO,那么顶点属性数据位于GPU。顶点数据数据则可以通过从GPU映射数据到CPU,然后再进行读取得到。对读取的数据进行打包,打包的目标格式为obj,这里的顶点属性数据数据可以用于obj中的vt和vn的生成。
[0073] S503:当所述图形处理器未使用所述顶点缓冲对象时,从所述中央处理器的内存中读取所述顶点属性数据。
[0074] 因为这里并不知道顶点属性数据在中央处理器的内存中的大小,只知道顶点属性数据存在的起始地址,根据该起始地址也不能确定需要获取的大小。所以根据所述三角形索引数据得到最大索引值;根据所述最大索引值,计算所述中央处理器的内存中存储的所述顶点属性数据的大小。比如三角形索引数据中有6个顶点,那么最大索引值为5。对读取的数据进行打包,打包的目标格式为obj,这里的顶点数据数据可以用于obj中的vt和vn的生成。
[0075] 如图6所示,当所述资源数据包括所述纹理数据时,所述通过所述目标函数导出所述目标帧对应的所述资源数据的步骤,包括:
[0076] S601:遍历一致变量(Uniform,统一数据),判断所述一致变量是否为纹理(sampler2d);
[0077] 这里可以不需要目标函数中的参数,通过传入的导出路径(也可以看作是保存贴图的位置或目录)进行遍历,经遍历确定目标帧中涉及到的贴图。纹理可以是一个int类型的id,该id对应了一块buffer的位置、大小等信息。
[0078] S602:当所述一致变量为纹理时,获取所述一致变量对应的纹理单元的位置;
[0079] 获取该uniform的值,即可得到对应的纹理单元的位置。
[0080] S603:激活所述纹理单元,获取所述纹理单元对应的纹理顶点缓冲对象;
[0081] 激活该纹理单元,即可获得绑定的纹理VBO。GPU有一个纹理单元数组,但每次只能对当前激活的纹理单元上的数据做操作。可以通过切换当前激活的纹理单元,快速切换渲染数据。
[0082] S604:判断所述图形处理器是否使用所述纹理顶点缓冲对象;
[0083] 当所述图形处理器使用所述纹理顶点缓冲对象时,可以继续S605-S608中的对应步骤。当所述图形处理器未使用所述纹理顶点缓冲对象时,所述通过所述目标函数导出所述目标帧对应的所述纹理数据失败。
[0084] S605:当所述图形处理器使用所述纹理顶点缓冲对象时,建立帧缓冲对象;
[0085] 通过OpenGL建立帧缓冲对象(FBO,Frame Buffer Object)。使用帧缓冲对象,OpenGL可以将原先绘制到窗口提供的帧缓冲区重定向到FBO之中。
[0086] S606:对所述纹理顶点缓冲对象与所述帧缓冲对象进行绑定;
[0087] FBO中绑定的对象可以有纹理顶点缓冲对象,如果纹理顶点缓冲对象绑定到FBO,那么OpenGL就会执行渲染到纹理(renderto texture)的操作。进一步的,可以对所述纹理顶点缓冲对象与彩色附着体(color attachment)进行绑定。
[0088] S607:当所述纹理顶点缓冲对象与所述帧缓冲对象绑定成功时,从所述帧缓冲对象中读取所述纹理数据;
[0089] 这里读取出的纹理数据对应的是像素数据(比如RGB、RGBA)。读取所述彩色附着体中的的像素数据。对读取的数据进行打包存放于前述传入的导出路径中。
[0090] S608:当所述纹理顶点缓冲对象与所述帧缓冲对象未绑定成功时,通过绘制所述纹理的方式从所述帧缓冲对象中读取所述纹理数据。
[0091] 某些加密或扩展纹理,会导致绑定FBO失败,则通过绘制该纹理来实现纹理数据读取,对应的步骤包括:新建程序对象(program),加载着色器(shader,对应一段可执行程序,和program链接后program才有拥有着色逻辑),编译program,配置顶点属性、纹理,然后渲染该纹理,再从FBO中读取即可。这里读取出的纹理数据对应的是像素数据(比如RGB、RGBA)。对读取的数据进行打包存放于前述传入的导出路径中。
[0092] 在一个可能的实施例中,如图7所示,在游戏应用程序的进程下更小单位的线程中注入代码,注入的代码能够实现劫持函数和接收捕获请求的功能。当游戏应用程序的渲染线程执行到glSwapBuffers时,由于该函数已被HOOK,会执行mySwapBuffers(指向第一函数),如果已经收到捕获请求,会设置捕获标识。当游戏应用程序的渲染线程执行到glDrawElements时,由于该函数已被HOOK,会执行myDrawElements(指向第二函数),开始检测捕获标识,如果上一帧结束时(mySwapBuffers)已设置,则开始导出数据。导出数据开始前,需要保存当前的GLES状态。调用GLES中的函数当然不只缓冲区交换函数和图元绘制函数,只是对缓冲区交换函数和图元绘制函数作了劫持,由于导出过程中,会对原始GLES做出改变(比如影响全局变量),为不影响游戏画面渲染结果以及之后游戏应用程序的运行,需要保存这些状态(环境),再导出完成后在恢复这些状态(环境)。
[0093] 由以上本说明书实施例提供的技术方案可见,本说明书实施例中通过将代码注入游戏应用程序的进程中,利用所述代码有效的劫持所述游戏应用程序在开放图形库中调用的目标函数,通过所述目标函数获取相关的资源数据,所述目标函数包括所述开放图形库的三维图形应用程序编程接口的子集中的至少两个函数。由目标函数获取的资源数据在数据量上更少,但数据的导出速度更快、由数据进行游戏画面分析的针对性更强、终端设备上进行资源数据导出也更顺畅,同时能够减少对游戏运行的影响。确定的目标函数的范围考虑到了函数在数据导出应用上的兼容性,实现更广泛的应用范围。减少对劫持目标函数设置的前置条件,缩短对版本等的适配过程。在此基础上,利用导出的资源数据间的关联性实现自动分析。资源数据中的顶点数、贴图精度等是游戏画面美术制作的重要考量因素,以导出的资源数据为参考能够有效的提升游戏的美术品质。
[0094] 本发明实施例还提供了一种基于开放图形库的数据处理系统,如图8所示,所述系统包括:
[0095] 代码注入模块81:用于将代码注入游戏应用程序的进程中;
[0096] 目标函数劫持模块82:用于当所述游戏应用程序运行的画面符合预设要求时,通过所述代码劫持所述游戏应用程序在开放图形库中调用的目标函数;所述目标函数包括开放图形库三维图形应用程序编程接口的子集中的至少两个函数。所述目标函数劫持模块82包括:第一劫持单元:用于通过所述代码中的第一函数劫持缓冲区交换函数;捕获标记设置单元:用于根据接收到的捕获请求,对所述游戏应用程序的目标帧设置捕获标记;第二劫持单元:用于通过所述代码中的第二函数劫持图元绘制函数;其中,所述捕获请求通过所述代码接收,所述目标函数包括所述缓冲区交换函数和所述图元绘制函数。
[0097] 资源数据获取模块83:用于通过所述目标函数获取所述游戏应用程序中的资源数据;所述资源数据包括三角形索引数据、顶点属性数据和纹理数据中的至少一种。所述资源数据获取模块83包括:捕获标记检测单元:用于对所述捕获标记进行检测;资源数据导出单元:用于当检测到所述捕获标记时,通过所述目标函数导出所述目标帧对应的所述资源数据。
[0098] 需要说明的,所述系统实施例中的系统与方法实施例基于同样的发明构思。
[0099] 本发明实施例提供了一种基于开放图形库的数据处理服务器,该服务器包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现如上述方法实施例所提供的基于开放图形库的数据处理方法。
[0100] 存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、功能所需的应用程序等;存储数据区可存储根据所述设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问
[0101] 本发明实施例还提供了一种服务器的结构示意图,请参阅图12,该服务器1200用于实施上述实施例中提供的基于开放图形库的数据处理方法,具体来讲,所述服务器结构可以包括上述基于开放图形库的数据处理系统。该服务器1200可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(Central Processing Units,CPU)1210(例如,一个或一个以上处理器)和存储器1230,一个或一个以上存储应用程序1223或数据1222的存储介质1220(例如一个或一个以上海量存储设备)。其中,存储器1230和存储介质1220可以是短暂存储或持久存储。存储在存储介质1220的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1210可以设置为与存储介质1220通信,在服务器1200上执行存储介质1220中的一系列指令操作。
服务器1200还可以包括一个或一个以上电源1260,一个或一个以上有线或无线网络接口
1250,一个或一个以上输入输出接口1240,和/或,一个或一个以上操作系统1221,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
[0102] 本发明的实施例还提供了一种存储介质,所述存储介质可设置于服务器之中以保存用于实现方法实施例中一种基于开放图形库的数据处理方法相关的至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现上述方法实施例提供的基于开放图形库的数据处理方法。
[0103] 可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0104] 需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0105] 本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统和服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0106] 本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0107] 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈