修复FPS计算问题
This commit is contained in:
		
							parent
							
								
									eebd8efb54
								
							
						
					
					
						commit
						2d4e5ef60a
					
				|  | @ -37,8 +37,10 @@ void e2d::Renderer::destroyInstance() | |||
| } | ||||
| 
 | ||||
| e2d::Renderer::Renderer() | ||||
| 	: _lastRenderTime(0) | ||||
| 	: _lastRenderTime(Time::now()) | ||||
| 	, _renderTimes(0) | ||||
| 	, _fpsFormat(nullptr) | ||||
| 	, _fpsLayout(nullptr) | ||||
| 	, _renderTarget(nullptr) | ||||
| 	, _solidBrush(nullptr) | ||||
| 	, _textRenderer(nullptr) | ||||
|  | @ -50,6 +52,7 @@ e2d::Renderer::Renderer() | |||
| e2d::Renderer::~Renderer() | ||||
| { | ||||
| 	SafeRelease(_fpsFormat); | ||||
| 	SafeRelease(_fpsLayout); | ||||
| 	SafeRelease(_textRenderer); | ||||
| 	SafeRelease(_solidBrush); | ||||
| 	SafeRelease(_renderTarget); | ||||
|  | @ -104,12 +107,15 @@ void e2d::Renderer::render() | |||
| 
 | ||||
| void e2d::Renderer::_renderFps() | ||||
| { | ||||
| 	double duration = Game::getInstance()->getTotalDuration().seconds(); | ||||
| 	if (duration == _lastRenderTime) | ||||
| 		return; | ||||
| 	++_renderTimes; | ||||
| 
 | ||||
| 	String fpsText = String::format(L"FPS: %.1lf", (1.0 / (duration - _lastRenderTime))); | ||||
| 	_lastRenderTime = duration; | ||||
| 	auto& now = Time::now(); | ||||
| 	int duration = (now - _lastRenderTime).milliseconds(); | ||||
| 	if (duration >= 100) | ||||
| 	{ | ||||
| 		String fpsText = String::format(L"FPS: %.1f", (1000.f / duration * _renderTimes)); | ||||
| 		_renderTimes = 0; | ||||
| 		_lastRenderTime = now; | ||||
| 
 | ||||
| 		auto writeFactory = Renderer::getWriteFactory(); | ||||
| 		if (!_fpsFormat) | ||||
|  | @ -129,23 +135,24 @@ void e2d::Renderer::_renderFps() | |||
| 			{ | ||||
| 				_fpsFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); | ||||
| 			} | ||||
| 		else | ||||
| 		{ | ||||
| 			return; | ||||
| 		} | ||||
| 		} | ||||
| 
 | ||||
| 	IDWriteTextLayout * fpsLayout = nullptr; | ||||
| 	HRESULT hr = writeFactory->CreateTextLayout( | ||||
| 		SafeRelease(_fpsLayout); | ||||
| 
 | ||||
| 		if (_fpsFormat) | ||||
| 		{ | ||||
| 			writeFactory->CreateTextLayout( | ||||
| 				(const WCHAR *)fpsText, | ||||
| 				(UINT32)fpsText.getLength(), | ||||
| 				_fpsFormat, | ||||
| 				0, | ||||
| 				0, | ||||
| 		&fpsLayout | ||||
| 				&_fpsLayout | ||||
| 			); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if (SUCCEEDED(hr)) | ||||
| 	if (_fpsLayout) | ||||
| 	{ | ||||
| 		this->getRenderTarget()->SetTransform(D2D1::Matrix3x2F::Identity()); | ||||
| 		this->getSolidColorBrush()->SetOpacity(1.0f); | ||||
|  | @ -159,10 +166,8 @@ void e2d::Renderer::_renderFps() | |||
| 			D2D1_LINE_JOIN_ROUND | ||||
| 		); | ||||
| 
 | ||||
| 		fpsLayout->Draw(nullptr, textRenderer, 10, 0); | ||||
| 		_fpsLayout->Draw(nullptr, textRenderer, 10, 0); | ||||
| 	} | ||||
| 
 | ||||
| 	SafeRelease(fpsLayout); | ||||
| } | ||||
| 
 | ||||
| e2d::Color e2d::Renderer::getBackgroundColor() | ||||
|  |  | |||
|  | @ -335,10 +335,12 @@ private: | |||
| 	void _renderFps(); | ||||
| 
 | ||||
| private: | ||||
| 	double					_lastRenderTime; | ||||
| 	int						_renderTimes; | ||||
| 	Time					_lastRenderTime; | ||||
| 	D2D1_COLOR_F			_clearColor; | ||||
| 	TextRenderer*			_textRenderer; | ||||
| 	IDWriteTextFormat*		_fpsFormat; | ||||
| 	IDWriteTextLayout*		_fpsLayout; | ||||
| 	ID2D1SolidColorBrush*	_solidBrush; | ||||
| 	ID2D1HwndRenderTarget*	_renderTarget; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue