我是 Direct2D 的新手,最近我发现了一个奇怪的问题。插入外部电源后,我的程序以 60 的稳定 FPS 运行,我知道这可能是 VSync 的结果;但是在拔掉外部电源一段时间后,我的程序下降到稳定的 FPS 30(我输出了每两次渲染之间的时间间隔,它显示为 32ms)。
即使我再次插上电源,它仍然保持在 30 FPS,直到我重新启动计算机。
是不是因为我的笔记本电脑在电池供电时关闭了某些东西,导致 FPS 减半?如果是真的,我能做些什么呢?
我的笔记本电脑的操作系统是 Windows 8.1。
以下是一些可能有用的代码。
HRESULT hr = S_OK;
if (!m_pRenderTarget)
{
RECT rc;
GetClientRect(m_hwnd, &rc);
D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top);
D2D1_HWND_RENDER_TARGET_PROPERTIES render_target_properties = D2D1::HwndRenderTargetProperties(m_hwnd, size);
//render_target_properties.presentOptions = D2D1_PRESENT_OPTIONS_IMMEDIATELY;
//↑ Tried this and it doesn't work, don't know why
// Create a Direct2D render target.
hr = m_pDirect2dFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
render_target_properties,
&m_pRenderTarget
);
}
return hr;
主循环如下所示:
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
now_time = timeGetTime();
if(now_time - last_time >= 1000/MAX_FPS)
{
OutputDebugPrintf("%lf\n", now_time - last_time);
application->Update(now_time - last_time);
application->OnRender();
last_time = now_time;
}
}
我敢肯定它需要很少的时间Update()
,它可以以 60 的稳定帧速率运行,所以在OnRender()
.
谢谢!