一种处理数据的方法和装置的制造方法

文档序号:8380952阅读:186来源:国知局
一种处理数据的方法和装置的制造方法
【技术领域】
[0001] 本发明涉及计算机技术领域,尤其涉及一种处理数据的方法和装置。
【背景技术】
[0002] Catia是一种常用的3D设计软件,该软件主要用glDrawElements指令绘制图像。 glDrawElements指令支持顶点数据列表,该指令包含顶点数据的索引指针。
[0003] 在跨网络远程渲染以实现绘制3D图像的过程中,往往会遇到"待绘制的两帧图像 中包含的大部分顶点数据相同"的场景,在该场景中,若利用glDrawElements指令绘制这两 帧图像,则服务端端在渲染第一帧图像和第二帧图像的过程中,需要重复使用这些相同的 顶点数据,这就需要客户端向服务端端重复发送这些相同的顶点数据的索引指针。这样,当 顶点数据的索引指针的数据量很大时,绘制图像的时间较长。
[0004] 为了解决上述问题,一般在绘制第一帧图像的过程中,服务端和客户端分别缓存 这些相同的顶点数据的索引指针,这样,在绘制第二帧图像时,客户端在确定绘制第二帧图 像需要使用的顶点数据的索引指针与本地缓存的顶点数据的索引指针相同时,向服务端发 送指示消息,使得服务端可以根据该指示信息调用本地缓存的这些相同的顶点数据的索引 指针,避免了因客户端向服务端端重复发送这些相同的顶点数据的索引指针带来的绘制图 像的时间较长的问题。
[0005] 现有技术中,一般通过Bitmap算法实现对索引指针的缓存,由于索引指针的分布 范围为1-2 32,因此,使用该算法存储索引指针时,至少需要4G的缓存空间。当缓存的顶点 数据的索引指针比较分散时,会浪费很多缓存空间。

【发明内容】

[0006] 本发明的实施例提供一种处理数据的方法和装置,能够在待缓存的指令流中的指 令的索引指针比较分散时,节省缓存空间。
[0007] 为达到上述目的,本发明的实施例采用如下技术方案:
[0008] 第一方面,提供一种处理数据的方法,应用于客户端,所述客户端的缓存空间包含 第一纵向块,所述第一纵向块中记录了第一独立指令流中的第一指令的索引指针;所述方 法包括:
[0009] 获取第二指令的指令参数所占的存储空间的大小和所述第二指令的索引指针;所 述第二指令为所述第一独立指令流中的、与所述第一指令相邻的后一个指令;
[0010] 根据所述第二指令的索引指针与所述第一指令的索引指针判断所述第二指令是 否满足分块策略;所述分块策略包括:同一独立指令流中相邻的两个指令的索引指针不连 续;
[0011] 当所述第二指令满足所述分块策略时,建立第二纵向块和与所述第二纵向块对应 的哈希表;
[0012] 将所述第二指令的索引指针记录在所述第二纵向块中;
[0013] 根据与所述第二纵向块对应的哈希表、所述第二指令的指令参数所占的存储空间 的大小和所述第二指令的索引指针缓存所述第二指令的指令参数。
[0014] 结合第一方面,在第一种可能的实现方式中,
[0015] 所述分块策略具体包括:同一独立指令流中相邻的两个指令的索引指针的变化幅 度大于或者等于第一阈值;所述根据所述第二指令的索引指针与所述第一指令的索引指针 判断所述第二指令是否满足分块策略,具体包括:
[0016] 判断所述第二指令的索引指针相对于所述第一指令的索引指针的变化幅度是否 大于或者等于第一阈值;
[0017] 或者,所述分块策略具体包括:同一独立指令流中相邻的两个指令的索引指针的 变化率大于或者等于第二阈值;所述根据所述第二指令的索引指针与所述第一指令的索引 指针判断所述第二指令是否满足分块策略,具体包括:
[0018] 判断所述第二指令的索引指针相对于所述第一指令的索引指针的变化率是否大 于或者等于第二阈值。
[0019] 结合第一方面,在第二种可能的实现方式中,在所述建立第二纵向块和与所述第 二纵向块对应的哈希表之后,所述方法还包括:
[0020] 向服务端发送第一指示消息,所述第一指示消息用于指示所述服务端将所述第二 指令记录在所述第二纵向块中;使得所述服务端根据所述第一指示消息建立所述第二纵向 块和与所述第二纵向块对应的哈希表,并将所述第二指令的索引指针记录在所述第二纵向 块中;
[0021] 所述第一指示消息还包括所述第二指令的指令参数所占的存储空间的大小,在所 述根据与所述第二纵向块对应的哈希表、所述第二指令的指令参数所占的存储空间的大小 和所述第二指令的索引指针缓存所述第二指令的指令参数之后,所述方法还包括:
[0022] 向所述服务端发送第二指示消息,所述第二指示消息用于指示所述服务端根据所 述第一指示消息缓存所述第二指令的指令参数;使得所述服务端根据与所述第二纵向块对 应的哈希表、所述第二指令的指令参数所占的存储空间的大小和所述第二指令的索引指针 缓存所述第二指令的指令参数。
[0023] 结合第一方面,在第三种可能的实现方式中,所述第一纵向块对应一哈希表,所述 方法还包括:
[0024] 当所述第二指令不满足所述分块策略时,将所述第二指令的索引指针记录在所述 第一纵向块中;
[0025] 根据所述第二指令的索引指针更新与所述第一纵向块对应的哈希表。
[0026] 结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,在所述根 据所述第二指令的索引指针更新与所述第一纵向块对应的哈希表之后,所述方法还包括:
[0027] 向所述服务端发送第三指示消息,所述第三指示消息用于指示所述服务端将所述 第二指令的索引指针记录在所述第一纵向块;使得所述服务端根据所述第三指示消息将所 述第二指令的索引指针记录在所述第一纵向块中,并根据所述第二指令的索引指针更新与 所述第一纵向块对应的哈希表。
[0028] 结合第一方面,在第五种可能的实现方式中,在所述建立第二纵向块和与所述第 二纵向块对应的哈希表之后,所述方法还包括:
[0029] 将所述第一纵向块和所述第二纵向块通过链表结构连接。
[0030] 结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述方法 还包括:
[0031] 向所述服务端发送第四指示消息,所述第四指示消息用于指示所述服务端建立所 述第一纵向块和所述第二纵向块之间的连接关系;使得所述服务端根据所述第四指示消息 将所述第一纵向块和所述第二纵向块通过链表结构连接。
[0032] 结合第一方面的第五种可能的实现方式,在第七种可能的实现方式中,在所述客 户端已建立纵向块之间的连接关系的情况下,在所述根据与所述第二纵向块对应的哈希 表、所述第二指令的指令参数所占的存储空间的大小和所述第二指令的索引指针缓存所述 第二指令的指令参数之后,所述方法还包括:
[0033] 再次获得所述第二指令时,从记录所述第二指令的前一个指令的索引指针的纵向 块开始,按照纵向块之间的连接关系,依次在第一纵向块组中查找记录所述第二指令的索 引指针的纵向块,所述第一纵向块组由记录所述第一独立指令流中的指令的索引指针的纵 向块构成。结合第一方面的第七种可能的实现方式,在第八种可能的实现方式中,所述服务 端已建立纵向块之间的连接关系;所述方法还包括:
[0034] 向所述服务端发送第五指示消息,所述第五指示消息包含记录所述第二指令的索 引指针的纵向块的信息,所述第五指示消息用于指示所述服务端获取缓存的所述第二指令 的指令参数;使得所述服务端根据纵向块之间的连接关系、记录所述第二指令的索引指针 的纵向块的信息获取与记录所述第二指令的索引指针的纵向块对应的哈希表,根据与记录 所述第二指令的索引指针的纵向块对应的哈希表和所述第二指令的索引指针获取缓存的 所述第二指令的指令参数。
[0035] 结合第一方面的第五种可能的实现方式,在第九种可能的实现方式中,所述第一 指令为所述第一独立指令流中的首个指令,所述第一指令的索引指针记录在第一横向块 中,所述方法还包括:
[0036] 获取第二独立指令流中的首个指令的索引指针,所述第二独立指令流为与所述第 一独立指令流相邻的后一个独立指令流;
[0037] 建立第二横向块;
[0038] 在所述第二横向块中记录所述第二独立指令流中的首个指令的索引指针;
[0039] 将所述第二横向块和所述第一横向块通过链表结构连接;
[0040] 将所述第二横向块与第二纵向块组中的一纵向块通过链表结构连接,所述第二纵 向块组由记录所述第二独立指令流中的指令的索引指针的纵向块构成。
[0041] 结合第一方面的第九种可能的实现方式,在第十种可能的实现方式中,所述方法 还包括:
[0042] 向所述服务端发送第六指示消息,所述第六指示消息用于指示所述服务端为所述 第二独立指令流建立所述第二横向块;使得所述服务端根据所述第六指示消息建立所述第 二横向块,在所述第二横向块中记录所述第二独立指令流中的首个指令的索引指针,并将 所述第二横向块和所述第一横向块通过链表结构连接;将所述第二横向块与纵向块组中的 首个纵向块通过链表结构连接,所述纵向块组由记录所述第二独立指令流中的指令的索引 指针的纵向块构成。
[0043] 结合第一方面的第九种可能的实现方式,在第十一种可能的实现方式中,在所述 客户端已建立横向块与横向块之间的连接关系,横向块与纵向块组之间连接关系的情况 下,所述方法还包括:
[0044] 再次获得所述第二独立指令流中的首个指令时,根据横向块与横向块之间的连接 关系,查找并确定记录所述第二独立指令流中的首个指令的索引指针的横向块;并根据横 向块与纵向块组之间连接关系,查找记录所述第二独立指令流中的首个指令的索引指针的 纵向块。
[0045] 第二方面,提供一种处理数据的方法,应用于服务端,所述服务端的缓存空间包含 第一纵向块,所述第一纵向块中记录了第一独立指令流中的第一指令的索引指针;所述方 法包括:
[0046] 接收客户端发送的第一指示消息,所述第一指示消息用于指示所述服务端将所述 第二指令记录在第二纵向块中;
[0047] 根据所述第一指示消息建立所述第二纵向块和与所述第二纵向块对应的
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1