一種處理數(shù)據(jù)的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種處理數(shù)據(jù)的方法和裝置。
【背景技術(shù)】
[0002] Catia是一種常用的3D設(shè)計軟件,該軟件主要用glDrawElements指令繪制圖像。 glDrawElements指令支持頂點數(shù)據(jù)列表,該指令包含頂點數(shù)據(jù)的索引指針。
[0003] 在跨網(wǎng)絡(luò)遠程渲染以實現(xiàn)繪制3D圖像的過程中,往往會遇到"待繪制的兩幀圖像 中包含的大部分頂點數(shù)據(jù)相同"的場景,在該場景中,若利用glDrawElements指令繪制這兩 幀圖像,則服務(wù)端端在渲染第一幀圖像和第二幀圖像的過程中,需要重復(fù)使用這些相同的 頂點數(shù)據(jù),這就需要客戶端向服務(wù)端端重復(fù)發(fā)送這些相同的頂點數(shù)據(jù)的索引指針。這樣,當(dāng) 頂點數(shù)據(jù)的索引指針的數(shù)據(jù)量很大時,繪制圖像的時間較長。
[0004] 為了解決上述問題,一般在繪制第一幀圖像的過程中,服務(wù)端和客戶端分別緩存 這些相同的頂點數(shù)據(jù)的索引指針,這樣,在繪制第二幀圖像時,客戶端在確定繪制第二幀圖 像需要使用的頂點數(shù)據(jù)的索引指針與本地緩存的頂點數(shù)據(jù)的索引指針相同時,向服務(wù)端發(fā) 送指示消息,使得服務(wù)端可以根據(jù)該指示信息調(diào)用本地緩存的這些相同的頂點數(shù)據(jù)的索引 指針,避免了因客戶端向服務(wù)端端重復(fù)發(fā)送這些相同的頂點數(shù)據(jù)的索引指針帶來的繪制圖 像的時間較長的問題。
[0005] 現(xiàn)有技術(shù)中,一般通過Bitmap算法實現(xiàn)對索引指針的緩存,由于索引指針的分布 范圍為1-2 32,因此,使用該算法存儲索引指針時,至少需要4G的緩存空間。當(dāng)緩存的頂點 數(shù)據(jù)的索引指針比較分散時,會浪費很多緩存空間。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的實施例提供一種處理數(shù)據(jù)的方法和裝置,能夠在待緩存的指令流中的指 令的索引指針比較分散時,節(jié)省緩存空間。
[0007] 為達到上述目的,本發(fā)明的實施例采用如下技術(shù)方案:
[0008] 第一方面,提供一種處理數(shù)據(jù)的方法,應(yīng)用于客戶端,所述客戶端的緩存空間包含 第一縱向塊,所述第一縱向塊中記錄了第一獨立指令流中的第一指令的索引指針;所述方 法包括:
[0009] 獲取第二指令的指令參數(shù)所占的存儲空間的大小和所述第二指令的索引指針;所 述第二指令為所述第一獨立指令流中的、與所述第一指令相鄰的后一個指令;
[0010] 根據(jù)所述第二指令的索引指針與所述第一指令的索引指針判斷所述第二指令是 否滿足分塊策略;所述分塊策略包括:同一獨立指令流中相鄰的兩個指令的索引指針不連 續(xù);
[0011] 當(dāng)所述第二指令滿足所述分塊策略時,建立第二縱向塊和與所述第二縱向塊對應(yīng) 的哈希表;
[0012] 將所述第二指令的索引指針記錄在所述第二縱向塊中;
[0013] 根據(jù)與所述第二縱向塊對應(yīng)的哈希表、所述第二指令的指令參數(shù)所占的存儲空間 的大小和所述第二指令的索引指針緩存所述第二指令的指令參數(shù)。
[0014] 結(jié)合第一方面,在第一種可能的實現(xiàn)方式中,
[0015] 所述分塊策略具體包括:同一獨立指令流中相鄰的兩個指令的索引指針的變化幅 度大于或者等于第一閾值;所述根據(jù)所述第二指令的索引指針與所述第一指令的索引指針 判斷所述第二指令是否滿足分塊策略,具體包括:
[0016] 判斷所述第二指令的索引指針相對于所述第一指令的索引指針的變化幅度是否 大于或者等于第一閾值;
[0017] 或者,所述分塊策略具體包括:同一獨立指令流中相鄰的兩個指令的索引指針的 變化率大于或者等于第二閾值;所述根據(jù)所述第二指令的索引指針與所述第一指令的索引 指針判斷所述第二指令是否滿足分塊策略,具體包括:
[0018] 判斷所述第二指令的索引指針相對于所述第一指令的索引指針的變化率是否大 于或者等于第二閾值。
[0019] 結(jié)合第一方面,在第二種可能的實現(xiàn)方式中,在所述建立第二縱向塊和與所述第 二縱向塊對應(yīng)的哈希表之后,所述方法還包括:
[0020] 向服務(wù)端發(fā)送第一指示消息,所述第一指示消息用于指示所述服務(wù)端將所述第二 指令記錄在所述第二縱向塊中;使得所述服務(wù)端根據(jù)所述第一指示消息建立所述第二縱向 塊和與所述第二縱向塊對應(yīng)的哈希表,并將所述第二指令的索引指針記錄在所述第二縱向 塊中;
[0021] 所述第一指示消息還包括所述第二指令的指令參數(shù)所占的存儲空間的大小,在所 述根據(jù)與所述第二縱向塊對應(yīng)的哈希表、所述第二指令的指令參數(shù)所占的存儲空間的大小 和所述第二指令的索引指針緩存所述第二指令的指令參數(shù)之后,所述方法還包括:
[0022] 向所述服務(wù)端發(fā)送第二指示消息,所述第二指示消息用于指示所述服務(wù)端根據(jù)所 述第一指示消息緩存所述第二指令的指令參數(shù);使得所述服務(wù)端根據(jù)與所述第二縱向塊對 應(yīng)的哈希表、所述第二指令的指令參數(shù)所占的存儲空間的大小和所述第二指令的索引指針 緩存所述第二指令的指令參數(shù)。
[0023] 結(jié)合第一方面,在第三種可能的實現(xiàn)方式中,所述第一縱向塊對應(yīng)一哈希表,所述 方法還包括:
[0024] 當(dāng)所述第二指令不滿足所述分塊策略時,將所述第二指令的索引指針記錄在所述 第一縱向塊中;
[0025] 根據(jù)所述第二指令的索引指針更新與所述第一縱向塊對應(yīng)的哈希表。
[0026] 結(jié)合第一方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,在所述根 據(jù)所述第二指令的索引指針更新與所述第一縱向塊對應(yīng)的哈希表之后,所述方法還包括:
[0027] 向所述服務(wù)端發(fā)送第三指示消息,所述第三指示消息用于指示所述服務(wù)端將所述 第二指令的索引指針記錄在所述第一縱向塊;使得所述服務(wù)端根據(jù)所述第三指示消息將所 述第二指令的索引指針記錄在所述第一縱向塊中,并根據(jù)所述第二指令的索引指針更新與 所述第一縱向塊對應(yīng)的哈希表。
[0028] 結(jié)合第一方面,在第五種可能的實現(xiàn)方式中,在所述建立第二縱向塊和與所述第 二縱向塊對應(yīng)的哈希表之后,所述方法還包括:
[0029] 將所述第一縱向塊和所述第二縱向塊通過鏈表結(jié)構(gòu)連接。
[0030] 結(jié)合第一方面的第五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述方法 還包括:
[0031] 向所述服務(wù)端發(fā)送第四指示消息,所述第四指示消息用于指示所述服務(wù)端建立所 述第一縱向塊和所述第二縱向塊之間的連接關(guān)系;使得所述服務(wù)端根據(jù)所述第四指示消息 將所述第一縱向塊和所述第二縱向塊通過鏈表結(jié)構(gòu)連接。
[0032] 結(jié)合第一方面的第五種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,在所述客 戶端已建立縱向塊之間的連接關(guān)系的情況下,在所述根據(jù)與所述第二縱向塊對應(yīng)的哈希 表、所述第二指令的指令參數(shù)所占的存儲空間的大小和所述第二指令的索引指針緩存所述 第二指令的指令參數(shù)之后,所述方法還包括:
[0033] 再次獲得所述第二指令時,從記錄所述第二指令的前一個指令的索引指針的縱向 塊開始,按照縱向塊之間的連接關(guān)系,依次在第一縱向塊組中查找記錄所述第二指令的索 引指針的縱向塊,所述第一縱向塊組由記錄所述第一獨立指令流中的指令的索引指針的縱 向塊構(gòu)成。結(jié)合第一方面的第七種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,所述服務(wù) 端已建立縱向塊之間的連接關(guān)系;所述方法還包括:
[0034] 向所述服務(wù)端發(fā)送第五指示消息,所述第五指示消息包含記錄所述第二指令的索 引指針的縱向塊的信息,所述第五指示消息用于指示所述服務(wù)端獲取緩存的所述第二指令 的指令參數(shù);使得所述服務(wù)端根據(jù)縱向塊之間的連接關(guān)系、記錄所述第二指令的索引指針 的縱向塊的信息獲取與記錄所述第二指令的索引指針的縱向塊對應(yīng)的哈希表,根據(jù)與記錄 所述第二指令的索引指針的縱向塊對應(yīng)的哈希表和所述第二指令的索引指針獲取緩存的 所述第二指令的指令參數(shù)。
[0035] 結(jié)合第一方面的第五種可能的實現(xiàn)方式,在第九種可能的實現(xiàn)方式中,所述第一 指令為所述第一獨立指令流中的首個指令,所述第一指令的索引指針記錄在第一橫向塊 中,所述方法還包括:
[0036] 獲取第二獨立指令流中的首個指令的索引指針,所述第二獨立指令流為與所述第 一獨立指令流相鄰的后一個獨立指令流;
[0037] 建立第二橫向塊;
[0038] 在所述第二橫向塊中記錄所述第二獨立指令流中的首個指令的索引指針;
[0039] 將所述第二橫向塊和所述第一橫向塊通過鏈表結(jié)構(gòu)連接;
[0040] 將所述第二橫向塊與第二縱向塊組中的一縱向塊通過鏈表結(jié)構(gòu)連接,所述第二縱 向塊組由記錄所述第二獨立指令流中的指令的索引指針的縱向塊構(gòu)成。
[0041] 結(jié)合第一方面的第九種可能的實現(xiàn)方式,在第十種可能的實現(xiàn)方式中,所述方法 還包括:
[0042] 向所述服務(wù)端發(fā)送第六指示消息,所述第六指示消息用于指示所述服務(wù)端為所述 第二獨立指令流建立所述第二橫向塊;使得所述服務(wù)端根據(jù)所述第六指示消息建立所述第 二橫向塊,在所述第二橫向塊中記錄所述第二獨立指令流中的首個指令的索引指針,并將 所述第二橫向塊和所述第一橫向塊通過鏈表結(jié)構(gòu)連接;將所述第二橫向塊與縱向塊組中的 首個縱向塊通過鏈表結(jié)構(gòu)連接,所述縱向塊組由記錄所述第二獨立指令流中的指令的索引 指針的縱向塊構(gòu)成。
[0043] 結(jié)合第一方面的第九種可能的實現(xiàn)方式,在第十一種可能的實現(xiàn)方式中,在所述 客戶端已建立橫向塊與橫向塊之間的連接關(guān)系,橫向塊與縱向塊組之間連接關(guān)系的情況 下,所述方法還包括:
[0044] 再次獲得所述第二獨立指令流中的首個指令時,根據(jù)橫向塊與橫向塊之間的連接 關(guān)系,查找并確定記錄所述第二獨立指令流中的首個指令的索引指針的橫向塊;并根據(jù)橫 向塊與縱向塊組之間連接關(guān)系,查找記錄所述第二獨立指令流中的首個指令的索引指針的 縱向塊。
[0045] 第二方面,提供一種處理數(shù)據(jù)的方法,應(yīng)用于服務(wù)端,所述服務(wù)端的緩存空間包含 第一縱向塊,所述第一縱向塊中記錄了第一獨立指令流中的第一指令的索引指針;所述方 法包括:
[0046] 接收客戶端發(fā)送的第一指示消息,所述第一指示消息用于指示所述服務(wù)端將所述 第二指令記錄在第二縱向塊中;
[0047] 根據(jù)所述第一指示消息建立所述第二縱向塊和與所述第二縱向塊對應(yīng)的