[DirectX]RegisterRawInputDevices和DirectX11垂直同步渲染冲突

       最近在学习引擎的时候,发现DirectX11垂直同步提交非常卡,测试了下,发现每次提交需要20毫秒以上时间,关闭垂直同步的提交时间几乎在2毫秒以下。(没有任何渲染,就是设置背景色为蓝色而已)

		float bgColor[4];

		bgColor[0] = 0.0f;
		bgColor[1] = 0.0f;
		bgColor[2] = 1.0f;
		bgColor[3] = 1.0f;

		m_pDeviceContext->ClearRenderTargetView(m_pRenderTargetView, bgColor);
		m_pDeviceContext->ClearDepthStencilView(m_pDepthStencilView, D3D11_CLEAR_DEPTH, 1.0f, 0);

		if (m_bVsync)
			m_pSwapChain->Present(1, 0);
		else
			m_pSwapChain->Present(0, 0);

       国内搜不到任何相关的资料,果然国内还在学DirectX的已经很少了。Google上搜到好几篇,都是在说GPU和CPU导致的,还有说是分辨率没设置正确的,Σ( ° △ °|||)︴因为之前有写过DirectX11的代码,知道应该没有这个问题的。但是相信Google一次,全部测试下(除了CPU和CPU的),发现没有用。只好重新打开之前的代码,测试,没有明显卡顿,多台电脑测试,都发现没有这种问题。Google上也不能相信,只好靠自己了。

       采取最傻的方法,老代码和有问题的代码全部拷出来(就2部分代码:创建窗口,创建DirectX和渲染这部分),发现没有卡顿问题,怀疑是不是将这部分代码封装到静态库中,导致的,再测试还是没有问题。那只能怀疑有些新的东西导致的,逐步注释代码,定位到RegisterRawInputDevices的问题。

       有问题的代码:

    bool CMouse::Initialize()
	{
		m_eventBuffer = {};

		if (!m_bRawInputIsInit)
		{
			RAWINPUTDEVICE rid;
			memset(&rid, 0, sizeof(rid));
			rid.dwFlags = 0;
			rid.hwndTarget = NULL;
			rid.usUsage = 0x02;
			rid.usUsagePage = 0x01;

			bool result = RegisterRawInputDevices(&rid, 1, sizeof(rid));
			if (!result)
				ENGINE_LOG_HRESULT_ERROR("RegisterRawInputDevices function failed", GetLastError())
			else
				m_bRawInputIsInit = true;
		}

		return true;
	}

       不清楚为何会有这种情况,只能认为RegisterRawInputDevices捕获设备信息的时候有影响到DirectX的垂直同步渲染。Google也没搜到相关的内容,只能暂时记录下,以防下次再花很多时间来查问题。

       DirectX引擎视频系列:油管上的,讲的还是比较细的,看的不是很多,暂时不能做任何评价。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值