[發(fā)明專利]一種基于Direct3D共享紋理的交互方法及系統(tǒng)有效
| 申請?zhí)枺?/td> | 201910368862.2 | 申請日: | 2019-05-05 |
| 公開(公告)號: | CN110321193B | 公開(公告)日: | 2022-03-18 |
| 發(fā)明(設(shè)計)人: | 羅大軍 | 申請(專利權(quán))人: | 四川盛趣時代網(wǎng)絡(luò)科技有限公司 |
| 主分類號: | G06F9/451 | 分類號: | G06F9/451;G06T15/04;G06T15/00;A63F13/50 |
| 代理公司: | 成都君合集專利代理事務(wù)所(普通合伙) 51228 | 代理人: | 張鳴潔 |
| 地址: | 610000 四川省成都市自由貿(mào)易試*** | 國省代碼: | 四川;51 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 基于 direct3d 共享 紋理 交互 方法 系統(tǒng) | ||
1.一種基于Direct3D共享紋理的交互方法,其特征在于,將共享紋理注冊到GPU中,將得到的紋理句柄注冊到共享資源管理接口中,以供游戲進程中的模塊獲取共享紋理句柄;在客戶端運行過程中,所有的可視區(qū)域直接繪制到共享紋理上,游戲中的模塊通過GPU內(nèi)存獲取紋理;
通過創(chuàng)建消息鉤子,在游戲啟動時,消息鉤子將圖像繪制與控制模塊注入到游戲進程中,以獲取目標(biāo)進程的Direct3D繪制接口;通過客戶端的接口獲取共享紋理的句柄,從而獲取到GPU中對應(yīng)的客戶端可視區(qū)域內(nèi)容;
將客戶端可視加載到共享紋理中,當(dāng)模塊初始化時,則首先通過D3D11CreateDevice創(chuàng)建一個支持BGRA圖像格式的Direct3D設(shè)備,并使用CreateTexture2D創(chuàng)建兩個DXGI_FORMAT_B8G8R8A8_UNORM格式的紋理A和紋理B;當(dāng)創(chuàng)建A紋理時,將創(chuàng)建參數(shù)的MiscFlags標(biāo)志位傳入D3D11_RESOURCE_MISC_SHARED,以作為最終游戲進程中共享的紋理;所述紋理B作為臨時繪制緩存,在渲染過程中,客戶端可視區(qū)域的圖像先繪制到紋理B中,然后再復(fù)制到紋理A中,有效避免直接繪制到紋理A中帶來的畫面撕裂。
2.根據(jù)權(quán)利要求1所述的一種基于Direct3D共享紋理的交互方法,其特征在于,創(chuàng)建紋理C作為將客戶端可視區(qū)域渲染到紋理B中的代理,創(chuàng)建時將CPUAccessFlags設(shè)置為D3D11_CPU_ACCESS_WRITE,以將客戶端可視區(qū)域的位圖信息從CPU中復(fù)制到紋理C。
3.根據(jù)權(quán)利要求2所述的一種基于Direct3D共享紋理的交互方法,其特征在于,加載渲染使用的著色器代碼,將渲染區(qū)域設(shè)置為整個A紋理的大小,當(dāng)客戶端更新界面時,首先將位圖信息傳送到紋理C中,通過ID3D11DeviceContext的Map方法將紋理C的GPU內(nèi)存映射到渲染程序CPU可以訪問的內(nèi)存,然后將位圖信息復(fù)制到內(nèi)存中,當(dāng)復(fù)制完成時,使用ID3D11DeviceContext的Unmap方法將映射取消;將紋理C與需要渲染的輸入法界面混合,然后渲染到紋理B中;最后通過CopyResource將紋理B的內(nèi)容復(fù)制到紋理A中,完成界面更新。
4.根據(jù)權(quán)利要求1-3任一項所述的一種基于Direct3D共享紋理的交互方法,其特征在于,復(fù)制游戲進程中的圖形繪制功能函數(shù)的具體地址,并通過HOOK的方式將繪制代碼附加到游戲的繪制代碼中,并且在HOOK游戲窗口的消息處理過程中,將游戲窗口的操作轉(zhuǎn)換并轉(zhuǎn)發(fā)到客戶端中;將共享紋理A中的內(nèi)容渲染到游戲的界面中,初始化時創(chuàng)建對應(yīng)的Direct3D設(shè)備,通過Rpc接口獲取共享紋理A的共享句柄,通過Open Shared Resource獲取到對應(yīng)的IDXGISurface1,然后獲取到對應(yīng)的共享紋理D;加載相應(yīng)的著色器代碼,創(chuàng)建頂點數(shù)據(jù),將共享紋理D中的紋理大小傳遞到創(chuàng)建的繪制設(shè)備中,當(dāng)游戲界面需要渲染時,附加的繪制代碼將共享紋理D中的內(nèi)容繪制到GPU的命令隊列中。
5.根據(jù)權(quán)利要求4所述的一種基于Direct3D共享紋理的交互方法,其特征在于,將游戲窗口中的鼠標(biāo)及鍵盤操作轉(zhuǎn)發(fā)到客戶端進程,通過HOOK游戲的窗口過程,獲取傳遞到游戲窗口消息,然后將對應(yīng)的坐標(biāo)轉(zhuǎn)換為實際的設(shè)備物理坐標(biāo),封裝之后,通過Rpc接口將消息發(fā)送到客戶端中;如果不需要游戲處理,則直接從HOOK之后的消息過程返回,否則將消息傳遞給游戲自身的消息處理函數(shù)。
6.根據(jù)權(quán)利要求1所述的一種基于Direct3D共享紋理的交互方法,其特征在于,在客戶端中,將輸入法的候選詞窗口渲染到共享紋理中,處理IME消息,將輸入法狀態(tài)變化繪制到共享紋理中,從而在游戲窗口中展示輸入狀態(tài)。
7.根據(jù)權(quán)利要求6所述的一種基于Direct3D共享紋理的交互方法,其特征在于,轉(zhuǎn)發(fā)輸入法消息到客戶端程序中,通過將游戲窗口的輸入法切換請求轉(zhuǎn)換為控制命令并轉(zhuǎn)發(fā)到客戶端中,客戶端加載系統(tǒng)的輸入法模塊進行輸入;基于Windows系統(tǒng),必須獲取鍵盤焦點的程序進行輸入;在游戲顯示中,游戲窗口不會被覆蓋,實現(xiàn)客戶端獲取鍵盤焦點且不干擾游戲窗口顯示。
8.一種基于Direct3D共享紋理的交互系統(tǒng),其特征在于,包括獨立運行的客戶端渲染組件和注入到游戲進程中的圖像繪制與控制模塊;所述客戶端渲染組件包括用于將客戶端可視區(qū)域內(nèi)容渲染到共享紋理中的渲染模塊、用于接收并解析從游戲客戶端傳送到客戶端的操作控制命令的遠(yuǎn)程操作解析模塊、用于將接收到的操作控制命令轉(zhuǎn)換成客戶端操作的操作執(zhí)行模塊、用于將圖像繪制與控制模塊注入到游戲進程中的注入模塊;所述圖像繪制與控制模塊包括用于將共享紋理中的客戶端可視區(qū)域繪制到游戲窗口中的圖像繪制模塊、用于將游戲中的操作轉(zhuǎn)換為控制命令并發(fā)送到客戶端的解析模塊中的控制模塊;
所述遠(yuǎn)程操作解析模塊接收控制命令并將控制命令中的坐標(biāo)轉(zhuǎn)換為客戶端的窗口坐標(biāo),屏蔽不需要處理的窗口消息,將消息轉(zhuǎn)發(fā)到客戶端的操作執(zhí)行模塊;所述操作執(zhí)行模塊將接收到的窗口消息發(fā)送到實際的客戶端窗口中,并將執(zhí)行結(jié)果反饋到遠(yuǎn)程操作解析模塊中;所述操作執(zhí)行模塊將接受到的消息轉(zhuǎn)化到客戶端對應(yīng)的事件,將不同DPI窗口的的坐標(biāo)轉(zhuǎn)換成實際的物理坐標(biāo),然后通過PostMessage或者SendMessage將消息轉(zhuǎn)發(fā)到實際的客戶端窗口,從而避免鼠標(biāo)位置的偏移。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于四川盛趣時代網(wǎng)絡(luò)科技有限公司,未經(jīng)四川盛趣時代網(wǎng)絡(luò)科技有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910368862.2/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





