在DX12中使用imgui 鼠标响应问题的解决

imgui导入到dx12的时候,刚开始有些问题,就是在拖动控件时,后面的游戏场景会跟着一起旋转。这是因为imgui没有单独响应,需要进行一下鼠标移动的判断。

我先是直接在添加了以下判断

case WM_MOUSEMOVE:
        //让imgui单独响应
		if (imio.WantCaptureMouse)
		{
			break;
		}
		
		OnMouseMove(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
		return 0;

但是会报错,

意思是没有创建上下文。

回想之前导入imgui到dx12的时候,我是在Initialize()函数中创建imgui工作流、上下文的,而且是放在窗口初始化和d3d初始化之后的。

所以我们需要对其创建顺序改进:

我是直接在d3dApp的构造函数中就创建好imgui的工作流和上下文:

D3DApp::D3DApp(HINSTANCE hInstance)
:	mhAppInst(hInstance)
{
    // Only one D3DApp can be constructed.
    assert(mApp == nullptr);
    mApp = this;

	//ImgUI 工作流
	IMGUI_CHECKVERSION();
	ImGui::CreateContext();   //创建上下文
	ImGuiIO& io = ImGui::GetIO();
	(void)io;
	ImGui::StyleColorsDark();
}

然后在初始化窗口时:

bool D3DApp::InitMainWindow()
{
    ……………………

	ShowWindow(mhMainWnd, SW_SHOW);
	UpdateWindow(mhMainWnd);
    //初始化imgui窗口
	ImGui_ImplWin32_Init(mhMainWnd);

	return true;
}

最后,在初始化D3D的函数中:

	bool D3DApp::InitDirect3D()
{
    CreateCommandObjects();
    CreateSwapChain();
    CreateRtvAndDsvDescriptorHeaps();
	
	ImGui_ImplDX12_Init(md3dDevice.Get(), SwapChainBufferCount,
		DXGI_FORMAT_R8G8B8A8_UNORM, mSrvHeap.Get(),
		mSrvHeap.Get()->GetCPUDescriptorHandleForHeapStart(),
		mSrvHeap.Get()->GetGPUDescriptorHandleForHeapStart());


	return true;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值