能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这游戏是使用d3d8.dll的、加载的DLL 有 ddraw.dll d3d8.dll d3d8thk.dll
hook那个api才能暂停合继续渲染呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
这样不能降低内存占用,只能降低显卡显存占用。
看游戏的DX版本,Hook DX函数,禁止游戏绘制画面 hook d3d9.dll的Direct3DCreate9函数得到LPDIRECT3D9指针, 通过此指针hook其createdevice成员函数得到IDirect3DDevice9接口, 再hook此接口的present成员函数就可以达到黑屏的目的
DirectX9 3D游戏(d3d9.dll):
IDirect3DDevice9::Clear //清除缓冲区 IDirect3DDevice3::BeginScene //开始场景 IDirect3DDevice3::EndScene //结束场景 IDirect3DDevice9::Present //将后台缓冲区已绘制好的内容提交到前台并显示出来
绘制游戏界面(渲染函数)必须在BeginScene和EndScene之间,然后通过Present显示出来。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
惊电
这样不能降低内存占用,只能降低显卡显存占用。
看游戏的DX版本,Hook DX函数,禁止游戏绘制画面
hook d3d9.dll的Direct3DCreate9函数得到LPDIRECT3D9指 ...
. d3d8 的BeginScene 序号是多少? 现在3个函数地址我都拿到了,怎么弄呢? 执行函数直接返回0 可以吗?
|
能力值:
( LV9,RANK:280 )
|
-
-
6 楼
d3d钩法参考OBS Studio,github有源码 降低CPU占用就加Sleep就行
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
hzqst
d3d钩法参考OBS Studio,github有源码
降低CPU占用就加Sleep就行
现在情况有点特殊。 1、BeginScene 、EndScene函数的地址序号应该是 34/35; 挂钩后就报错,可能是我搜到的这序号不对。 2、hook Present 函数,在 NewPresent 里什么都不做,直接返回。这样,他会比平时多占用U、 3、这黑屏停止渲染的具体步骤我还没搞懂。 4、是否:在 Present 内直接返回的前提下调用 Clear 清除缓存呢? Clear所在的序号是多少?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我在 NewPresent 内执行 延时API 程序出现卡顿。
|
能力值:
( LV9,RANK:280 )
|
-
-
9 楼
ffashi
我在 NewPresent 内执行 延时API 程序出现卡顿。
卡是肯定的 你又想降低CPU占用 又想不卡 天底下哪有这么好的事情?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
hzqst
卡是肯定的 你又想降低CPU占用 又想不卡 天底下哪有这么好的事情?
在我没有hook Present 之前 CPU只有 1-5%的占有率,主要是显卡占用多。 我 hook Present 之后 CPU 增多,到 40%左右,明显占用了1个虚拟机的U啊。 我在 hook Present 中不采用直接返回,而是 使用 延时API。 但程序出现卡顿了。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
解决了, 原理是因为我在hook Present 后,什么也没做。所以是 0 延时的死循环。只要加个延时50 就行了
|
|
|