使用场景:
主播在直播游戏的时候,如果游戏是全屏模式,主播无法看到直播软件中的聊天消息。
如果添加了游戏弹幕,可以在全屏游戏的时候 在游戏界面中看到聊天消息。
实现原理:
1. 编写自己的dll和注入dll的代理程序,将dll注入到游戏进程
2. dll中hook了D3D11的渲染函数(比如Present)
3. 直播软件中获取聊天消息的rgba数据,并通过IPC将数据传递到dll(dll已经注入到游戏进程)
4. 在Present的回调函数中,插入rgba数据的纹理渲染,将聊天画面渲染到游戏中
注意:
1. 如果游戏实现了防注入dll,则不能实现弹幕
2. 根据不同的游戏渲染过程,要hook不同的函数,比如D3D11的Present,OpenGL的SwapBuffer,等等
以下是实现弹幕之前,游戏的渲染周期示意图(以D3D11为例):
以下是实现弹幕之后,游戏的渲染周期示意图:
(注意:红框中的功能,是在你自己编写的dll中实现,该dll已经被注入到游戏进程中)