1.一种全屏游戏状态下的弹幕显示方法,其特征在于,所述方法包括如下步骤:
接收用户所发送的弹幕文本;
将接收到的弹幕文本通过图形接口绘制到一张位图中;
在游戏中创建一个用于绘制弹幕的纹理;
根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图。
2.如权利要求1所述的全屏游戏状态下的弹幕显示方法,其特征在于,在根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图之前,还包括判断所述游戏所使用的渲染引擎,具体为:预先对各种渲染引擎的动态链接库进行API函数挂钩,如果游戏进程中存在opengl.dll,则分别挂钩OpenGL的游戏绘制函数SwapBuffers、wglSwapBuffers、wglSwapLayerdBuffers为SwapBuffersHook、wglSwapBuffersHook、wglSwapLayerdBuffersHook;如果游戏进程中存在ddraw.dll,则挂钩DirectDraw的游戏绘制函数Blt为BltHook;如果游戏进程中存在d3d8.dll,则挂钩Direct3D8的游戏绘制函数Present为D3D8Present;如果游戏进程中存在d3d9.dll,则挂钩Direct3D9的游戏绘制函数Present为D3D9Present;如果游戏进程中存在d3d10.dll或者d3d11.dll,则挂钩交换链接口IDXGISwapChain的游戏绘制函数DXGISwapPresent为DXGISwapPresentHook;
判断游戏的调用堆栈中进入了哪一种游戏绘制函数,如果游戏的调用堆栈中进入了SwapBuffersHook、wglSwapBuffersHook、wglSwapLayerdBuffersHook,则该游戏使用的是OpenGL渲染引擎;如果该游戏进入了BltHook,则该游戏使用的是DirectDraw渲染引擎;如果该游戏进入了D3D8Present,则该游戏使用的是Direct3D8渲染引擎;如果该游戏进入了D3D9Present,则该游戏使用的是Direct3D9渲染引擎;如果该游戏进入了DXGISwapPresentHook,则该游戏使用的是Direct3D10或者Direct3D11。
3.如权利要求1或2所述的全屏游戏状态下的弹幕显示方法,其特征在于,所述根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图,具体为:如果所述渲染引擎为Direct3D8,则加载d3dx8d.dll;
通过d3dx8d.dll的导出函数D3DXCreateSprite创建ID3DXSprite接口;
挂钩d3dx8d的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图;
如果所述渲染引擎为Direct3D9,则加载d3dx9_43.dll;
通过d3dx9_43.dll的导出函数D3DXCreateSprite创建ID3DXSprite接口;
挂钩d3dx9的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图。
4.如权利要求1或2所述的全屏游戏状态下的弹幕显示方法,其特征在于,所述根据所述游戏所使用的渲染引擎,选用对应的图像绘制方法在所述纹理中绘制上述位图,具体为:如果所述渲染引擎为Direct3D10,则调用ID3D10StateBlock的Capture方法保存当前游戏的所有渲染状态;
调用ID3D10Device的ClearState方法将游戏当前的渲染状态设置为Direct3D10的默认状态;
设置Direct3D10中的相关渲染状态;
调用ID3D10Device的Draw方法绘制上述位图;
调用ID3D10StateBlock的Apply接口,恢复Direct3D10游戏的之前渲染状态;
如果所述渲染引擎为Direct3D11,则调用ID3D11StateBlock的Capture方法保存当前游戏的所有渲染状态;
调用ID3D11Device的ClearState方法将游戏当前的渲染状态设置为Direct3D11的默认状态;
设置Direct3D11中的相关渲染状态;
调用ID3D11Device的Draw方法绘制上述位图;
调用ID3D11StateBlock的Apply接口,恢复Direct3D11游戏的之前渲染状态。
5.如权利要求1或2所述的全屏游戏状态下的弹幕显示方法,其特征在于,所述根据所述游戏所使用的渲染引擎,选用对应的图像绘制方法在所述纹理中绘制上述位图,具体为:如果所述渲染引擎为OpenGL,则调用游戏绘制函数SwapBuffers显示上述位图;
如果所述渲染引擎为DirectDraw,则调用游戏绘制函数Blt显示上述位图。
6.一种全屏游戏状态下的弹幕显示系统,其特征在于,所述系统包括弹幕接收模块、位图绘制模块、纹理绘制模块和弹幕绘制模块,其中:所述弹幕接收模块用于接收用户所发送的弹幕文本;
所述位图绘制模块用于将所述弹幕接收模块接收到的弹幕文本通过图形接口绘制到一张位图中;
所述纹理绘制模块用于在游戏中创建一个用于绘制弹幕的纹理;
所述弹幕绘制模块用于根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图。
7.如权利要求6所述的全屏游戏状态下的弹幕显示系统,其特征在于,所述弹幕显示系统还包括渲染引擎判断模块,所述渲染引擎判断模块用于在所述弹幕绘制模块根据所述游戏所使用的渲染引擎,选用对应的游戏绘制函数在所述纹理中绘制上述位图之前,判断所述游戏所使用的渲染引擎,具体包括游戏绘制函数挂钩子模块和渲染引擎判断子模块,其中:所述游戏绘制函数挂钩子模块,用于预先对各种渲染引擎的动态链接库进行API函数挂钩,如果游戏进程中存在opengl.dll,则分别挂钩OpenGL的游戏绘制函数SwapBuffers、wglSwapBuffers、wglSwapLayerdBuffers Present为SwapBuffersHook、wglSwapBuffersHook、wglSwapLayerdBuffersHook;如果游戏进程中存在ddraw.dll,则挂钩DirectDraw的游戏绘制函数Blt为BltHook;如果游戏进程中存在d3d8.dll,则挂钩Direct3D8的游戏绘制函数Present为D3D8Present;如果游戏进程中存在d3d9.dll,则挂钩Direct3D9的游戏绘制函数Present为D3D9Present;如果游戏进程中存在d3d10.dll或者d3d11.dll,则挂钩交换链接口IDXGISwapChain的游戏绘制函数DXGISwapPresent为DXGISwapPresentHook;
所述渲染引擎判断子模块,用于判断游戏的调用堆栈中进入了哪一种游戏绘制函数,如果游戏的调用堆栈中进入了SwapBuffersHook、wglSwapBuffersHook、wglSwapLayerdBuffersHook,则该游戏使用的是OpenGL渲染引擎;如果该游戏进入了BltHook,则该游戏使用的是DirectDraw渲染引擎;如果该游戏进入了D3D8Present,则该游戏使用的是Direct3D8渲染引擎;如果该游戏进入了D3D9Present,则该游戏使用的是Direct3D9渲染引擎;如果该游戏进入了DXGISwapPresentHook,则该游戏使用的是Direct3D10或者Direct3D11。
8.如权利要求6或7所述的全屏游戏状态下的弹幕显示系统,其特征在于,所述弹幕绘制模块中包含有Direct3D8引擎绘制模块或Direct3D9引擎绘制模块,其中:所述Direct3D8引擎绘制模块,用于在所述渲染引擎为Direct3D8时,加载d3dx8d.dll;
通过d3dx8d.dll的导出函数D3DXCreateSprite创建ID3DXSprite接口;并挂钩d3dx8d的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图;
所述Direct3D9引擎绘制模块,用于在所述渲染引擎为Direct3D9时,加载d3dx9_
43.dll;通过d3dx9_43.dll的导出函数D3DXCreateSprite创建ID3DXSprite接口;并挂钩d3dx9的游戏绘制函数Present,并在被挂钩的游戏绘制函数Present中,通过ID3DXSprite的Draw方法在所述纹理中绘制上述位图。
9.如权利要求6或7所述的全屏游戏状态下的弹幕显示系统,其特征在于,所述弹幕绘制模块中包含有Direct3D10引擎绘制模块或Direct3D11引擎绘制模块,其中:所述Direct3D10引擎绘制模块,用于调用ID3D10StateBlock的Capture方法保存当前游戏的所有渲染状态;调用ID3D10Device的ClearState方法将游戏当前的渲染状态设置为Direct3D10的默认状态;设置Direct3D10中的相关渲染状态;调用ID3D10Device的Draw方法绘制上述位图;调用ID3D10StateBlock的Apply接口,恢复Direct3D10游戏的之前渲染状态;
所述Direct3D11引擎绘制模块,用于调用ID3D11StateBlock的Capture方法保存当前游戏的所有渲染状态;调用ID3D11Device的ClearState方法将游戏当前的渲染状态设置为Direct3D11的默认状态;设置Direct3D11中的相关渲染状态;调用ID3D11Device的Draw方法绘制上述位图;调用ID3D11StateBlock的Apply接口,恢复Direct3D11游戏的之前渲染状态。
10.如权利要求6或7所述的全屏游戏状态下的弹幕显示系统,其特征在于,所述弹幕绘制模块中包含有OpenGL引擎绘制模块或DirectDraw引擎绘制模块,其中:所述OpenGL引擎绘制模块,用于调用游戏绘制函数SwapBuffers显示上述位图;
所述DirectDraw引擎绘制模块,用于调用游戏绘制函数Blt显示上述位图。