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