一种全屏游戏状态下的弹幕显示方法与系统的制作方法

文档序号:9833118阅读:4108来源:国知局
一种全屏游戏状态下的弹幕显示方法与系统的制作方法
【技术领域】
[0001]本发明属于图形图像显示技术领域,更具体地,涉及一种全屏游戏状态下的弹幕显示方法与系统。
【背景技术】
[0002]随着互联网和网络视频直播技术的发展,弹幕越来越多的被使用到视频直播平台中,用以增加用户的互动性和娱乐性。然后,在当前的应用场景中,主要是将收到的弹幕在窗口模式下显示出来,而无法将弹幕在全屏游戏中显示出来,因为当游戏全屏后处于全屏独占模式时无法显示弹幕。

【发明内容】

[0003]为了实现上述目的,本发明提供了一种全屏游戏状态下的弹幕显示方法与系统,能够在当游戏全屏后处于全屏独占模式时也能够显示弹幕。
[0004]为了实现上述目的,按照本发明的一个方面,提供了一种全屏游戏状态下的弹幕显示方法,包括如下步骤:
[0005]接收用户所发送的弹幕文本;
[0006]将接收到的弹幕文本绘制到一张位图中;
[0007]在游戏中创建一个用于绘制弹幕的纹理;
[0008]根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图。
[0009]在本发明的一个实施例中,在根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图之前,还包括判断所述游戏所使用的渲染引擎,具体为:
[0010]预先对各种清染引擎的动态链接库(Dynamic Link Library,DLL)进行API函数挂钩,如果游戏进程中存在opengl.dll,贝Ij分别挂钩OpenGL的游戏绘制函数SwapBuffers、wglSwapBuffers、wgISwapLayerdBuffers为SwapBuffersHook、wgI SwapBuffersHook、wglSwapLayerdBuffersHook;如果游戏进程中存在ddraw.dll,则挂钩DirectDraw的游戏绘制函数Blt为BltHook;如果游戏进程中存在d3d8.dll,则挂钩Direct3D8的游戏绘制函数Present为D3D8Present;如果游戏进程中存在d3d9.dll,则挂钩Direct3D9的游戏绘制函数Present为D3D9Present;如果游戏进程中存在d3dl0.dl I或者d3dl 1.dll,则挂钩交换链接口 IDXGISwapChain的游戏绘制函数DXGISwapPresent为DXGISwapPresentHook;
[0011]判断游戏的调用堆栈中进入了哪一种游戏绘制函数,如果游戏的调用堆栈中进入了 SwapBuff ersHook、wgl SwapBuf fersHook、wgl SwapLayerdBuf fersHook,则该游戏使用的是OpenGL清染引擎;如果该游戏进入了 BI tHook,则该游戏使用的是DirectDraw清染引擎;如果该游戏进入了D3D8Present,则该游戏使用的是Direct3D8渲染引擎;如果该游戏进入了 D3D9Present,则该游戏使用的是Direct3D9渲染引擎;如果该游戏进入了DXGI SwapPresentHook,则该游戏使用的是Direct3Dl O或者Direct3Dl I。
[0012]在本发明的一个实施例中,所述根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图,具体为:
[0013]如果所述清染引擎为Direct3D8,则加载d3dx8d.dll;
[0014]通过d3dx8d.dll的导出函数D3DXCreateSprite创建ID3DXSprite接口;
[0015]挂钩d3dx8d的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图;
[0016]如果所述清染引擎为Direct3D9,则加载d3dx9_43.dll;
[0017]通过d3dx9_43.dl I 的导出函数D3DXCreateSpr ite创建ID3DXSprite接口 ;
[0018]挂钩d3dx9的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图。
[0019]在本发明的一个实施例中,所述根据所述游戏所使用的渲染引擎,选用对应的图像绘制方法在所述纹理中绘制上述位图,具体为:
[0020]如果所述清染引擎为Direct3D10,贝Ij调用ID3D10StateBlock的Capture方法保存当前游戏的所有渲染状态;
[0021]调用ID3D10Device的ClearState方法将游戏当前的渲染状态设置为Direct3D10的默认状态;
[0022]设置Direct3D10中的相关渲染状态;
[0023]调用ID3D10Device的Draw方法绘制上述位图;
[0024]调用ID3D10StateBlock的Apply接口,恢复Direct3D10游戏的之前渲染状态;
[0025]如果所述清染引擎为Direct3Dll,则调用ID3D1 IStateBlock的Capture方法保存当前游戏的所有渲染状态;
[0026]调用ID3DllDevice的ClearState方法将游戏当前的渲染状态设置为Direct3Dll的默认状态;
[0027]设置Direct3Dll中的相关渲染状态;
[0028]调用ID3D1 IDevice的Draw方法绘制上述位图;
[0029]调用ID3DllStateBlock的Apply接口,恢复Direct3Dll游戏的之前渲染状态。
[0030]在本发明的一个实施例中,所述根据所述游戏所使用的渲染引擎,选用对应的图像绘制方法在所述纹理中绘制上述位图,具体为,具体为:
[0031]如果所述清染引擎为OpenGL,则调用游戏绘制函数SwapBuffers显示上述位图;
[0032]如果所述渲染引擎为DirectDraw,则调用游戏绘制函数Blt显示上述位图。
[0033]按照本发明的另一方面,还提供了一种全屏游戏状态下的弹幕显示系统,包括弹幕接收模块、位图绘制模块、纹理绘制模块和弹幕绘制模块,其中:
[0034]所述弹幕接收模块用于接收用户所发送的弹幕文本;
[0035]所述位图绘制模块用于将所述弹幕接收模块接收到的弹幕文本绘制到一张位图中;
[0036]所述纹理绘制模块用于在游戏中创建一个用于绘制弹幕的纹理;
[0037]所述弹幕绘制模块用于根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图。
[0038]在本发明的一个实施例中,所述弹幕显示系统还包括渲染引擎判断模块,所述渲染引擎判断模块用于在所述弹幕绘制模块根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图之前,判断所述游戏所使用的渲染引擎,具体包括游戏绘制函数挂钩子模块和渲染引擎判断子模块,其中:
[0039]所述游戏绘制函数挂钩子模块,用于预先对各种渲染引擎的动态链接库(DynamicLink Library,DLL)进行API函数挂钩,如果游戏进程中存在opengl.dll,则分别挂钩OpenGL的游戏绘制函数SwapBuf f ers、wgl SwapBuf f ers、wgl SwapLayerdBuf f ers为SwapBuf fersHook、wg I SwapBuf fersHook、wgl SwapLayerdBuf fersHook;如果游戏进程中存在ddraw.dll,则挂钩DirectDraw的游戏绘制函数Blt为BltHook;如果游戏进程中存在d3d8.dll,则挂钩Direct3D8的游戏绘制函数Present为D3D8Present ;如果游戏进程中存在d3d9.dll,则挂钩Direct3D9的游戏绘制函数Present为D3D9Present ;如果游戏进程中存在d3dl0.dll或者d3dl 1.dll,则挂钩交换链接口 IDXGI SwapChain的游戏绘制函数DXGISwapPresent为DXGISwapPresentHook;
[0040]所述渲染引擎判断子模块,用于判断游戏的调用堆栈中进入了哪一种游戏绘制函数,如果游戏的调用堆桟中进入了 SwapBuffersHook、wgl SwapBuffersHook、wglSwapLayerdBuffersHook,则该游戏使用的是OpenGL清染引擎;如果该游戏进入了BltHook,则该游戏使用的是DirectDraw清染引擎;如果该游戏进入了 D3D8Present,则该游戏使用的是Direct3D8渲染引擎;如果该游戏进入了D3D9Present,则该游戏使用的是Direct3D9清染引擎;如果该游戏进入了 DXGI SwapPre sen tHook,则该游戏使用的是Direct3D10 或者 Direct3Dll。
[0041]在本发明的一个实施例中,所述弹幕绘制模块中包含有Direct3D8引擎绘制模块或Direct3D9引擎绘制模块,其中:
[0042]所述Direct3D8引擎绘制模块,用于在所述清染引擎为Direct3D8时,加载d3dx8d.dll;通过d3dx8d.dl I 的导出函数D3DXCreateSpr i te创建ID3DXSpr i te接口 ;并挂钩d3dx8d的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图;
[0043]所述Direct3D9引擎绘制模块,用于在所述清染引擎为Direc
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1