首页
社区
课程
招聘
[求助]D3D D3DXSaveSurfaceToFile导致程序崩溃
发表于: 2016-1-19 15:35 6836

[求助]D3D D3DXSaveSurfaceToFile导致程序崩溃

2016-1-19 15:35
6836
某老游戏,Direct3DCreate9传入的版本为32,导入的DLL为d3dx9_37.dll。
我把自己的DLL注入进去,GetBackBuffer+D3DXSaveSurfaceToFile实现截图。
使用的头文件d3dx9.h为37版本(32版本会提示找不到d3dx9_32.dll),使用的IDirect3DDevice9是特征码搜出来的,代码是酱紫的:
IDirect3DDevice9* device = xxxx;//特征码搜出来的
char file_name_jpg[MAX_PATH] = xxxx;//.jpg,由当前时间拼出来的

IDirect3DSurface9 * pSrcSurface = nullptr;
if (D3D_OK == device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pSrcSurface)){

	assert(pSrcSurface != nullptr);
	if (D3D_OK == D3DXSaveSurfaceToFileA(file_name_jpg, D3DXIFF_JPG, pSrcSurface, NULL, NULL)){

		_lgr->debug("D3DXSaveSurfaceToFileA as jpg end success");
	}

	pSrcSurface->Release();//这句有没有都会蹦
}
else{
	_lgr->error("device->GetBackBuffer failed");
}


这部分代码在线程中执行,每隔1秒钟截图1次。
实际执行情况是:最少连续截图7次,最多50多次,就会发生崩溃。
崩溃现象:屏幕黑一下,然后恢复正常,任务栏弹出提示“显示器驱动程序AMD Driver已停止响应,并且已成功恢复”,游戏弹出出错对话框“D3DERR_INVALIDCALL 如果是在游戏启动过程中出现 请升级显卡驱动”或者"程序产生无法预知的错误"

打印日志发现,错误每次都发生GetBackBuffer之后,D3DXSaveSurfaceToFile之前

我的显卡及配置是酱紫的:
主显卡:英特尔 HD Graphics 5500
显卡:AMD Radeon R5 M255
(驱动已升级为最新版本)
Directx:11
各种加速:开启

求大牛解惑!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 1088
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
现货去显示模式再创建离屏表面
2016-1-19 16:02
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
还是那样。。
HRESULT hr;
D3DDISPLAYMODE mode;
if (FAILED(hr = lpDevice->GetDisplayMode(0, &mode))){
	return hr;
}

LPDIRECT3DSURFACE9 surf;
if (FAILED(hr = lpDevice->CreateOffscreenPlainSurface(mode.Width,
	mode.Height, D3DFMT_A8R8G8B8, D3DPOOL_SYSTEMMEM, &surf, NULL))){
	return hr;
}

if (FAILED(hr = lpDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &surf))){
	surf->Release();
	return hr;
}

if (FAILED(hr = D3DXSaveSurfaceToFileA(fileName, D3DXIFF_JPG, surf, NULL, NULL))){
}

surf->Release();
2016-1-19 16:29
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
求别沉。。。
2016-1-19 19:13
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
把代码放到UI线程,搞定。
2016-1-19 21:16
0
游客
登录 | 注册 方可回帖
返回
//