买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:四川盛趣时代网络科技有限公司
摘要:本发明公开了一种基于Direct3D共享纹理的交互方法及系统,所述交互系统包括独立运行的客户端渲染组件和注入到游戏进程中的图像绘制与控制模块;所述客户端渲染组件包括用于将客户端可视区域内容渲染到共享纹理中的渲染模块、用于接收并解析从游戏客户端传送到客户端的操作控制命令的远程操作解析模块、用于将接收到的操作控制命令转换成客户端操作的操作执行模块、用于将图像绘制与控制模块注入到游戏进程中的注入模块。本发明还公开了所述交互方法基于交互系统实现了无需切换窗口就能操作客户端的功能,提升了游戏用户之间交流互动的体验。
主权项:1.一种基于Direct3D共享纹理的交互方法,其特征在于,将共享纹理注册到GPU中,将得到的纹理句柄注册到共享资源管理接口中,以供游戏进程中的模块获取共享纹理句柄;在客户端运行过程中,所有的可视区域直接绘制到共享纹理上,游戏中的模块通过GPU内存获取纹理;通过创建消息钩子,在游戏启动时,消息钩子将图像绘制与控制模块注入到游戏进程中,以获取目标进程的Direct3D绘制接口;通过客户端的接口获取共享纹理的句柄,从而获取到GPU中对应的客户端可视区域内容;将客户端可视加载到共享纹理中,当模块初始化时,则首先通过D3D11CreateDevice创建一个支持BGRA图像格式的Direct3D设备,并使用CreateTexture2D创建两个DXGI_FORMAT_B8G8R8A8_UNORM格式的纹理A和纹理B;当创建A纹理时,将创建参数的MiscFlags标志位传入D3D11_RESOURCE_MISC_SHARED,以作为最终游戏进程中共享的纹理;所述纹理B作为临时绘制缓存,在渲染过程中,客户端可视区域的图像先绘制到纹理B中,然后再复制到纹理A中,有效避免直接绘制到纹理A中带来的画面撕裂。
全文数据:一种基于Direct3D共享纹理的交互方法及系统技术领域本发明属于计算机技术领域,具体涉及一种基于Direct3D共享纹理的交互方法及系统。背景技术Direct3D是基于微软的通用对象模式COM(CommonObjectMode)的3D图形API。它是由微软(Microsoft)一手树立的3DAPI规范,微软公司拥有该库版权,它所有的语法定义包含在微软提供的程序开发组件的帮助文件、源代码中。Direct3D是微软公司DirectXSDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。Direct3D提供一种共享纹理的功能,能够将纹理共享,使其他进程能够访问此纹理。在传统的交互模式下,游戏过程中,如果需要操作客户端的窗口,则需要进行窗口切换,这会导致全屏游戏从独占模式切换到桌面,带来较长的延时,且窗口切换过程中,无法准确定位需要切换到的目标窗口。发明内容本发明的目的在于提供一种基于Direct3D共享纹理的交互方法,本发明通过共享纹理的交互,可以实现无需切换窗口就能操作客户端的功能,提升游戏用户之间交流互动的体验。本发明的目的在于提供一种基于Direct3D共享纹理的交互系统,基于共享纹理与客户端的交互,可以实现无需切换窗口就能操作客户端的功能,提升游戏用户之间交流互动的体验。本发明主要通过以下技术方案实现:一种基于Direct3D共享纹理的交互方法,将共享纹理注册到GPU中,将得到的纹理句柄注册到共享资源管理接口中,以供游戏进程中的模块获取共享纹理句柄;在客户端运行过程中,所有的可视区域直接绘制到共享纹理上,游戏中的模块通过GPU内存获取纹理;通过创建消息钩子,在游戏启动时,消息钩子将图像绘制与控制模块注入到游戏进程中,以获取目标进程的Direct3D绘制接口;通过客户端的接口获取共享纹理的句柄,从而获取到GUP中对应的客户端可视区域内容。为了更好的实现本发明,进一步的,将客户端可视加载到共享纹理中,当模块初始化时,则首先通过D3D11CreateDevice创建一个支持BGRA图像格式的Direct3D设备,并使用CreateTexture2D创建两个DXGI_FORMAT_B8G8R8A8_UNORM格式的纹理A和纹理B;当创建A纹理时,将创建参数的MiscFlags标志位传入D3D11_RESOURCE_MISC_SHARED,以作为最终游戏进程中共享的纹理;所述纹理B作为临时绘制缓存,在渲染过程中,客户端可视区域的图像先绘制到纹理B中,然后再复制到纹理A中,可以有效避免直接绘制到纹理A中带来的画面撕裂。为了更好的实现本发明,进一步的,创建纹理C作为将客户端可视区域渲染到纹理B中的代理,创建时将CPUAccessFlags设置为D3D11_CPU_ACCESS_WRITE,以将客户端可视区域的位图信息从CPU中复制到纹理C。为了更好的实现本发明,进一步的,加载渲染使用的着色器代码,将渲染区域设置为整个A纹理的大小,当客户端需要更新界面时,首先将位图信息传送到纹理C中,通过ID3D11DeviceContext的Map方法将纹理C的GPU内存映射到渲染程序CPU可以访问的内存,然后将位图信息复制到内存中,当复制完成时,使用ID3D11DeviceContext的Unmap方法将映射取消;将纹理C与需要渲染的输入法界面混合,然后渲染到纹理B中;最后通过CopyResource将纹理B的内容复制到纹理A中,完成界面更新。为了更好的实现本发明,进一步的,复制游戏进程中的图形绘制功能函数的具体地址,并通过HOOK的方式将绘制代码附加到游戏的绘制代码中,并且在HOOK游戏窗口的消息处理过程中,将游戏窗口的操作转换并转发到客户端中;将共享纹理A中的内容渲染到游戏的界面中,初始化时创建对应的Direct3D设备,通过Rpc接口获取共享纹理A的共享句柄,通过OpenSharedResource获取到对应的IDXGISurface1,然后获取到对应的共享纹理D;加载相应的着色器代码,创建顶点数据,将共享纹理D中的纹理大小传递到创建的绘制设备中,当游戏界面需要渲染时,附加的绘制代码将共享纹理D中的内容绘制到GPU的命令队列中。为了更好的实现本发明,进一步的,将游戏窗口中的鼠标及键盘操作转发到客户端进程,通过HOOK游戏的窗口过程,获取传递到游戏窗口消息,然后将对应的坐标转换为实际的设备物理坐标,封装之后,通过Rpc接口将消息发送到客户端中;如果不需要游戏处理,则直接从HOOK之后的消息过程返回,否则将消息传递给游戏自身的消息处理函数。为了更好的实现本发明,进一步的,在客户端中,将输入法的候选词窗口渲染到共享纹理中,处理IME消息,将输入法状态变化绘制到共享纹理中,从而在游戏窗口中展示输入状态。为了更好的实现本发明,进一步的,转发输入法消息到客户端程序中,通过将游戏窗口的输入法切换请求转换为控制命令并转发到客户端中,客户端加载系统的输入法模块进行输入;基于Windows系统,必须获取键盘焦点的程序进行输入;在游戏显示中,游戏窗口不会被覆盖,实现客户端获取键盘焦点且不干扰游戏窗口显示。本发明主要通过以下技术方案实现:一种基于Direct3D共享纹理的交互系统,包括独立运行的客户端渲染组件和注入到游戏进程中的图像绘制与控制模块;所述客户端渲染组件包括用于将客户端可视区域内容渲染到共享纹理中的渲染模块、用于接收并解析从游戏客户端传送到客户端的操作控制命令的远程操作解析模块、用于将接收到的操作控制命令转换成客户端操作的操作执行模块、用于将图像绘制与控制模块注入到游戏进程中的注入模块;所述图像绘制与控制模块包括用于将共享纹理中的客户端可视区域绘制到游戏窗口中的图像绘制模块、用于将游戏中的操作转换为控制命令并发送到客户端的解析模块中的控制模块。为了更好的实现本发明,进一步的,所述远程操作解析模块接收控制命令并将控制命令中的坐标转换为客户端的窗口坐标,屏蔽不需要处理的窗口消息,将消息转发到客户端的操作执行模块;所述操作执行模块将接收到的窗口消息发送到实际的客户端窗口中,并将执行结果反馈到远程操作解析模块中;所述操作执行模块将接受到的消息转化到客户端对应的事件,将不同DPI窗口的的坐标转换成实际的物理坐标,然后通过PostMessage或者SendMessage将消息转发到实际的客户端窗口,从而避免鼠标位置的偏移。本发明的有益效果:(1)本发明可以实现无需切换窗口就能操作客户端的功能,提升游戏用户之间交流互动的体验。(2)所述操作执行模块将接受到的消息转化到客户端对应的事件,将不同DPI窗口的的坐标转换成实际的物理坐标,然后通过PostMessage或者SendMessage将消息转发到实际的客户端窗口,从而避免鼠标位置的偏移。(3)所述纹理B作为临时绘制缓存,在渲染过程中,客户端可视区域的图像先绘制到纹理B中,然后再复制到纹理A中,可以有效避免直接绘制到纹理A中带来的画面撕裂。(4)基于Windows系统,必须获取键盘焦点的程序进行输入;在游戏显示中,游戏窗口不会被覆盖,实现客户端获取键盘焦点且不干扰游戏窗口显示。具体实施方式实施例1:一种基于Direct3D共享纹理的交互系统,注入到游戏进程中的图像绘制与控制模块和独立运行的客户端渲染组件;所述客户端渲染组件包括:a.渲染模块,用于将客户端可视区域内容渲染到共享纹理中;b.远程操作解析模块,用于接收并解析从游戏客户端传送到客户端的各种用户操作控制命令;c.操作执行模块,用于将接收到的控制命令转换成客户端对应的操作;d.注入模块,用于将图像绘制与控制模块注入到游戏进程中。所述图像绘制与控制模块包括:图像绘制模块,用于将共享纹理中的客户端可视区域绘制到游戏窗口中;控制模块,用于将游戏中的操作转换为对应的控制命令,并发送到客户端的解析模块中。实施例2:一种基于Direct3D共享纹理的交互方法,采用上述系统进行交互:当启动客户端时,创建主窗口,并注册消息钩子,此消息钩子的作用是将图像绘制与控制模块注入到游戏进程中;创建远程操作解析模块,启动用于接收控制命令的接口,创建资源管理接口;初始化渲染模块,创建必要的Direct3D设备及资源,将共享纹理注册到GPU中,将得到的纹理句柄注册到共享资源管理接口中,以供游戏进程中的模块获取共享纹理句柄;在客户端运行过程中,所有的可视区域会直接绘制到共享纹理上,通过GPU内存,游戏中的模块能够获取到此纹理。游戏启动时,消息钩子将图像绘制与控制模块注入到游戏进程中,获取目标进程的Direct3D绘制接口;初始化绘制相关的设备及资源,从客户端提供的接口中获取共享纹理的句柄,从而获取到GPU中对应的客户端可视区域内容;接管游戏窗口中的窗口消息过程,将游戏窗口中的鼠标与键盘消息转换为对应的控制命令,并转发到客户端中的远程操作解析模块;如果需要控制客户端,使用相应的热键呼出客户端界面,此时在游戏窗口的所有操作,将无条件的转发到客户端,游戏将不会再收到任何窗口消息,当不在需要操作客户端时,可以使用热键关闭,关闭之后,操作消息不会再转发到客户端。远程操作解析模块负责将从游戏窗口中接收到的控制命令转换到客户端窗口的窗口事件。实现了以下功能:创建远程通信接口,用于和游戏内的模块进行通信;接收控制命令,将控制命令中的坐标转换为客户端的窗口坐标,屏蔽不需要处理的窗口消息,将消息转发到客户端中的操作执行模块。操作执行模块将接收到的窗口消息发送到实际的客户端窗口中,并将执行结果反馈到解析模块中。在游戏中对客户端窗口的交互产生的变化通过渲染模块将内容发送到共享纹理中,从而在游戏窗口中呈现。实施例3:本实施例是在实施例2的基础上进行优化,为了能够在游戏窗口中实现客户端的中文输入法,实现了以下方法:转发对应的输入法消息到客户端程序,此方法通过将游戏窗口的输入法切换请求转换为对应的控制命令,转发到客户端程序中,客户端能够加载系统的输入法模块进行输入;由于Windows系统的运行原理,必须要获取键盘焦点的程序才能进行输入,但是由于是在游戏中显示,游戏窗口不能被其他窗口覆盖,所以实现了客户端获取键盘焦点且不干扰游戏窗口显示的方法;在客户端进程内,需要将输入法的候选词窗口渲染到共享纹理中,处理IME相关的消息,将相关的输入法状态变化,绘制到共享纹理中,从而在游戏窗口中展示输入状态。通过动态获取游戏窗口的大小变化,并将客户端可视区域进行动态调整,并调整共享纹理的尺寸,可以使客户端内容适应游戏窗口。本发明可以跨进程使用输入法,并可以实现窗口的动态缩放,具有较好的实用性。本实施例的其他部分与实施例2相同,故不再赘述。实施例3:一种基于Direct3D共享纹理的交互方法,采用上述系统进行交互:当客户端启动时,初始化以下模块:注入模块,此模块通过创建SetWindowsHookEx消息钩子,将图像绘制与控制模块加载到系统,此时新创建的游戏进程会主动加载此图像绘制与控制模块;渲染模块负责将客户端可视加载到共享纹理中,当模块初始化时,首先通过D3D11CreateDevice创建一个支持BGRA图像格式的Direct3D设备,通过此设备,使用CreateTexture2D创建两个DXGI_FORMAT_B8G8R8A8_UNORM格式的纹理A和B:当创建A纹理时,需要在创建参数的MiscFlags标志位传入D3D11_RESOURCE_MISC_SHARED,此纹理作为最终和游戏进程中共享的纹理。纹理B作为双缓冲技术中的临时绘制缓存,在渲染过程中,客户端可视区域的图像,需要先绘制到此纹理中,当绘制完成时,再复制到纹理A中,可以有效避免直接绘制到纹理A中带来的画面撕裂。创建纹理C,此纹理作为将客户端可视区域渲染到纹理B中的代理,创建时需要将CPUAccessFlags设置为D3D11_CPU_ACCESS_WRITE,才能将客户端可视区域的位图信息从CPU中复制到纹理C。当纹理创建完成之后,加载渲染使用的着色器代码,将渲染取悦设置为整个A纹理的大小full-screenquad。当客户端需要更新界面时,首先将位图信息传送到纹理C中,此时通过ID3D11DeviceContext的Map方法将纹理C的GPU内存映射到渲染程序CPU可以访问的内存,然后将位图信息复制到内存中,当复制完成时,使用ID3D11DeviceContext的Unmap方法将映射取消。此时,纹理C中就时需要更新的客户端界面内容,将其与需要渲染的输入法界面混合之后,渲染到纹理B中。以上过程完成之后,通过CopyResource将纹理B的内容复制到纹理A中,就完成了界面更新的一个过程。远程操作解析模块初始化时,创建一个Rpc接口,此接口负责从游戏游戏进程接受用户的相关操作,比如鼠标点击,文字输入等消息。当接受到新的消息时,先通过预先指定的规则将部分消息过滤掉,此类消息包括WM_DESTROY,WM_CLOSE,WM_QUIT等影响客户端功能的消息。然后将消息发送到操作执行模块。操作执行模块需要将接受到的消息转化到客户端对用的事件,此模块里将不同DPI窗口的的坐标转换成实际的物理坐标,因为当窗口处于不同的dpi状态时,得到的坐标为逻辑坐标,不同的逻辑坐标对应的物理坐标有偏差,需要通过此模块将游戏窗口的得到的物理坐标转换为客户端窗口的逻辑坐标,然后通过PostMessage或者SendMessage将消息转发到实际的客户端窗口,再有客户端处理,从而避免鼠标位置的偏移。注入到游戏进程中的图像绘制与控制模块主要有以下三大部分功能:复制确定游戏进程中的图形绘制功能函数的具体地址,并通过HOOK的方式将模块的绘制代码附加到游戏的绘制代码中,并且需要HOOK游戏窗口的消息处理过程,将游戏窗口的操作转换并转发到客户端中。图像绘制功能:此功能负责将客户端中创建的共享纹理A中的内容渲染到游戏的界面中。初始化时创建对应的Direct3D设备,通过Rpc接口获取到共享纹理A的共享句柄,通过OpenSharedResource获取到对应的IDXGISurface1,然后获取到对应的共享纹理D;加载相应的着色器代码,创建顶点数据,将共享纹理D中的纹理大小传递到创建的绘制设备中,当游戏界面需要渲染时,附加的绘制代码将共享纹理D中的内容绘制到GPU的命令队列中。控制模块主要复制将游戏窗口中的鼠标及键盘操作转发到客户端进程,通过HOOK游戏的窗口过程,获取传递到游戏窗口的各种消息,然后将对应的坐标转换为实际的设备物理坐标,封装之后,通过Rpc接口将消息发送到客户端中;根据Rpc接口的返回值确定是否需要将对应的消息继续传递给游戏处理,如果不需要游戏处理,则直接从HOOK之后的消息过程返回,否则将消息传递给游戏自身的消息处理函数。以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化,均落入本发明的保护范围之内。
权利要求:1.一种基于Direct3D共享纹理的交互方法,其特征在于,将共享纹理注册到GPU中,将得到的纹理句柄注册到共享资源管理接口中,以供游戏进程中的模块获取共享纹理句柄;在客户端运行过程中,所有的可视区域直接绘制到共享纹理上,游戏中的模块通过GPU内存获取纹理;通过创建消息钩子,在游戏启动时,消息钩子将图像绘制与控制模块注入到游戏进程中,以获取目标进程的Direct3D绘制接口;通过客户端的接口获取共享纹理的句柄,从而获取到GUP中对应的客户端可视区域内容。2.根据权利要求1所述的一种基于Direct3D共享纹理的交互方法,其特征在于,将客户端可视加载到共享纹理中,当模块初始化时,则首先通过D3D11CreateDevice创建一个支持BGRA图像格式的Direct3D设备,并使用CreateTexture2D创建两个DXGI_FORMAT_B8G8R8A8_UNORM格式的纹理A和纹理B;当创建A纹理时,将创建参数的MiscFlags标志位传入D3D11_RESOURCE_MISC_SHARED,以作为最终游戏进程中共享的纹理;所述纹理B作为临时绘制缓存,在渲染过程中,客户端可视区域的图像先绘制到纹理B中,然后再复制到纹理A中,有效避免直接绘制到纹理A中带来的画面撕裂。3.根据权利要求2所述的一种基于Direct3D共享纹理的交互方法,其特征在于,创建纹理C作为将客户端可视区域渲染到纹理B中的代理,创建时将CPUAccessFlags设置为D3D11_CPU_ACCESS_WRITE,以将客户端可视区域的位图信息从CPU中复制到纹理C。4.根据权利要求3所述的一种基于Direct3D共享纹理的交互方法,其特征在于,加载渲染使用的着色器代码,将渲染区域设置为整个A纹理的大小,当客户端更新界面时,首先将位图信息传送到纹理C中,通过ID3D11DeviceContext的Map方法将纹理C的GPU内存映射到渲染程序CPU可以访问的内存,然后将位图信息复制到内存中,当复制完成时,使用ID3D11DeviceContext的Unmap方法将映射取消;将纹理C与需要渲染的输入法界面混合,然后渲染到纹理B中;最后通过CopyResource将纹理B的内容复制到纹理A中,完成界面更新。5.根据权利要求1-4任一项所述的一种基于Direct3D共享纹理的交互方法,其特征在于,复制游戏进程中的图形绘制功能函数的具体地址,并通过HOOK的方式将绘制代码附加到游戏的绘制代码中,并且在HOOK游戏窗口的消息处理过程中,将游戏窗口的操作转换并转发到客户端中;将共享纹理A中的内容渲染到游戏的界面中,初始化时创建对应的Direct3D设备,通过Rpc接口获取共享纹理A的共享句柄,通过OpenSharedResource获取到对应的IDXGISurface1,然后获取到对应的共享纹理D;加载相应的着色器代码,创建顶点数据,将共享纹理D中的纹理大小传递到创建的绘制设备中,当游戏界面需要渲染时,附加的绘制代码将共享纹理D中的内容绘制到GPU的命令队列中。6.根据权利要求5所述的一种基于Direct3D共享纹理的交互方法,其特征在于,将游戏窗口中的鼠标及键盘操作转发到客户端进程,通过HOOK游戏的窗口过程,获取传递到游戏窗口消息,然后将对应的坐标转换为实际的设备物理坐标,封装之后,通过Rpc接口将消息发送到客户端中;如果不需要游戏处理,则直接从HOOK之后的消息过程返回,否则将消息传递给游戏自身的消息处理函数。7.根据权利要求1所述的一种基于Direct3D共享纹理的交互方法,其特征在于,在客户端中,将输入法的候选词窗口渲染到共享纹理中,处理IME消息,将输入法状态变化绘制到共享纹理中,从而在游戏窗口中展示输入状态。8.根据权利要求7所述的一种基于Direct3D共享纹理的交互方法,其特征在于,转发输入法消息到客户端程序中,通过将游戏窗口的输入法切换请求转换为控制命令并转发到客户端中,客户端加载系统的输入法模块进行输入;基于Windows系统,必须获取键盘焦点的程序进行输入;在游戏显示中,游戏窗口不会被覆盖,实现客户端获取键盘焦点且不干扰游戏窗口显示。9.一种基于Direct3D共享纹理的交互系统,其特征在于,包括独立运行的客户端渲染组件和注入到游戏进程中的图像绘制与控制模块;所述客户端渲染组件包括用于将客户端可视区域内容渲染到共享纹理中的渲染模块、用于接收并解析从游戏客户端传送到客户端的操作控制命令的远程操作解析模块、用于将接收到的操作控制命令转换成客户端操作的操作执行模块、用于将图像绘制与控制模块注入到游戏进程中的注入模块;所述图像绘制与控制模块包括用于将共享纹理中的客户端可视区域绘制到游戏窗口中的图像绘制模块、用于将游戏中的操作转换为控制命令并发送到客户端的解析模块中的控制模块。10.根据权利要求9所述的一种基于Direct3D共享纹理的交互系统,其特征在于,所述远程操作解析模块接收控制命令并将控制命令中的坐标转换为客户端的窗口坐标,屏蔽不需要处理的窗口消息,将消息转发到客户端的操作执行模块;所述操作执行模块将接收到的窗口消息发送到实际的客户端窗口中,并将执行结果反馈到远程操作解析模块中;所述操作执行模块将接受到的消息转化到客户端对应的事件,将不同DPI窗口的的坐标转换成实际的物理坐标,然后通过PostMessage或者SendMessage将消息转发到实际的客户端窗口,从而避免鼠标位置的偏移。
百度查询: 四川盛趣时代网络科技有限公司 一种基于Direct3D共享纹理的交互方法及系统
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。