修复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,48 +107,52 @@ 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) | ||||||
| 	auto writeFactory = Renderer::getWriteFactory(); |  | ||||||
| 	if (!_fpsFormat) |  | ||||||
| 	{ | 	{ | ||||||
| 		HRESULT hr = writeFactory->CreateTextFormat( | 		String fpsText = String::format(L"FPS: %.1f", (1000.f / duration * _renderTimes)); | ||||||
| 			L"", | 		_renderTimes = 0; | ||||||
| 			nullptr, | 		_lastRenderTime = now; | ||||||
| 			DWRITE_FONT_WEIGHT_NORMAL, |  | ||||||
| 			DWRITE_FONT_STYLE_NORMAL, |  | ||||||
| 			DWRITE_FONT_STRETCH_NORMAL, |  | ||||||
| 			20, |  | ||||||
| 			L"", |  | ||||||
| 			&_fpsFormat |  | ||||||
| 		); |  | ||||||
| 
 | 
 | ||||||
| 		if (SUCCEEDED(hr)) | 		auto writeFactory = Renderer::getWriteFactory(); | ||||||
|  | 		if (!_fpsFormat) | ||||||
| 		{ | 		{ | ||||||
| 			_fpsFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); | 			HRESULT hr = writeFactory->CreateTextFormat( | ||||||
|  | 				L"", | ||||||
|  | 				nullptr, | ||||||
|  | 				DWRITE_FONT_WEIGHT_NORMAL, | ||||||
|  | 				DWRITE_FONT_STYLE_NORMAL, | ||||||
|  | 				DWRITE_FONT_STRETCH_NORMAL, | ||||||
|  | 				20, | ||||||
|  | 				L"", | ||||||
|  | 				&_fpsFormat | ||||||
|  | 			); | ||||||
|  | 
 | ||||||
|  | 			if (SUCCEEDED(hr)) | ||||||
|  | 			{ | ||||||
|  | 				_fpsFormat->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP); | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		else | 
 | ||||||
|  | 		SafeRelease(_fpsLayout); | ||||||
|  | 
 | ||||||
|  | 		if (_fpsFormat) | ||||||
| 		{ | 		{ | ||||||
| 			return; | 			writeFactory->CreateTextLayout( | ||||||
|  | 				(const WCHAR *)fpsText, | ||||||
|  | 				(UINT32)fpsText.getLength(), | ||||||
|  | 				_fpsFormat, | ||||||
|  | 				0, | ||||||
|  | 				0, | ||||||
|  | 				&_fpsLayout | ||||||
|  | 			); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	IDWriteTextLayout * fpsLayout = nullptr; | 	if (_fpsLayout) | ||||||
| 	HRESULT hr = writeFactory->CreateTextLayout( |  | ||||||
| 		(const WCHAR *)fpsText, |  | ||||||
| 		(UINT32)fpsText.getLength(), |  | ||||||
| 		_fpsFormat, |  | ||||||
| 		0, |  | ||||||
| 		0, |  | ||||||
| 		&fpsLayout |  | ||||||
| 	); |  | ||||||
| 
 |  | ||||||
| 	if (SUCCEEDED(hr)) |  | ||||||
| 	{ | 	{ | ||||||
| 		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