From 558f774247e8730bca3a5ae018545e26669e569d Mon Sep 17 00:00:00 2001 From: rachytski Date: Fri, 11 Nov 2011 16:57:07 +0400 Subject: WindowHandle shouldn't control the lifetime of VideoTimer. --- iphone/Maps/Classes/EAGLView.h | 2 ++ iphone/Maps/Classes/EAGLView.mm | 4 +++- map/render_policy_mt.cpp | 2 +- map/render_policy_st.cpp | 2 +- map/tiling_render_policy_mt.cpp | 2 +- map/tiling_render_policy_st.cpp | 2 +- map/window_handle.cpp | 2 +- map/window_handle.hpp | 4 ++-- qt/draw_widget.cpp | 4 ++-- qt/draw_widget.hpp | 1 + 10 files changed, 15 insertions(+), 10 deletions(-) diff --git a/iphone/Maps/Classes/EAGLView.h b/iphone/Maps/Classes/EAGLView.h index 517c9551fc..72fef24cd1 100644 --- a/iphone/Maps/Classes/EAGLView.h +++ b/iphone/Maps/Classes/EAGLView.h @@ -32,6 +32,7 @@ typedef Framework framework_t; @public framework_t * framework; + VideoTimer * videoTimer; shared_ptr renderContext; shared_ptr frameBuffer; shared_ptr renderBuffer; @@ -41,6 +42,7 @@ typedef Framework framework_t; - (void) initRenderPolicy; @property (nonatomic, assign) framework_t * framework; +@property (nonatomic, assign) VideoTimer * videoTimer; @property (nonatomic, assign) shared_ptr renderContext; @property (nonatomic, assign) shared_ptr renderBuffer; @property (nonatomic, assign) shared_ptr frameBuffer; diff --git a/iphone/Maps/Classes/EAGLView.mm b/iphone/Maps/Classes/EAGLView.mm index 73ca18b726..6f62c7165b 100644 --- a/iphone/Maps/Classes/EAGLView.mm +++ b/iphone/Maps/Classes/EAGLView.mm @@ -17,6 +17,7 @@ @implementation EAGLView @synthesize framework; +@synthesize videoTimer; @synthesize frameBuffer; @synthesize renderContext; @synthesize renderBuffer; @@ -95,7 +96,7 @@ SEL drawFrameSel = @selector(drawFrame); drawFrameFn drawFrameImpl = (drawFrameFn)[self methodForSelector:drawFrameSel]; - VideoTimer * videoTimer = CreateIOSVideoTimer(bind(drawFrameImpl, self, drawFrameSel)); + videoTimer = CreateIOSVideoTimer(bind(drawFrameImpl, self, drawFrameSel)); renderPolicy = CreateRenderPolicy(videoTimer, p, renderContext); @@ -151,6 +152,7 @@ - (void)dealloc { + delete videoTimer; // m_framework->SetRenderPolicy(0); [EAGLContext setCurrentContext:nil]; [super dealloc]; diff --git a/map/render_policy_mt.cpp b/map/render_policy_mt.cpp index 810adfedb6..97f586825e 100644 --- a/map/render_policy_mt.cpp +++ b/map/render_policy_mt.cpp @@ -64,7 +64,7 @@ RenderPolicyMT::RenderPolicyMT(VideoTimer * videoTimer, m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setVideoTimer(make_shared_ptr(videoTimer)); + m_windowHandle->setVideoTimer(videoTimer); m_windowHandle->setRenderContext(primaryRC); m_renderQueue.reset(new RenderQueue(GetPlatform().SkinName(), diff --git a/map/render_policy_st.cpp b/map/render_policy_st.cpp index f18adbd20c..bbc40be591 100644 --- a/map/render_policy_st.cpp +++ b/map/render_policy_st.cpp @@ -58,7 +58,7 @@ RenderPolicyST::RenderPolicyST(VideoTimer * videoTimer, m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setVideoTimer(make_shared_ptr(videoTimer)); + m_windowHandle->setVideoTimer(videoTimer); m_windowHandle->setRenderContext(primaryRC); } diff --git a/map/tiling_render_policy_mt.cpp b/map/tiling_render_policy_mt.cpp index 140e6e9a3c..58cb66793f 100644 --- a/map/tiling_render_policy_mt.cpp +++ b/map/tiling_render_policy_mt.cpp @@ -66,7 +66,7 @@ TilingRenderPolicyMT::TilingRenderPolicyMT(VideoTimer * videoTimer, m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setVideoTimer(make_shared_ptr(videoTimer)); + m_windowHandle->setVideoTimer(videoTimer); m_windowHandle->setRenderContext(primaryRC); } diff --git a/map/tiling_render_policy_st.cpp b/map/tiling_render_policy_st.cpp index 678bb46d46..72efb6f290 100644 --- a/map/tiling_render_policy_st.cpp +++ b/map/tiling_render_policy_st.cpp @@ -65,7 +65,7 @@ TilingRenderPolicyST::TilingRenderPolicyST(VideoTimer * videoTimer, m_windowHandle.reset(new WindowHandle()); m_windowHandle->setUpdatesEnabled(false); - m_windowHandle->setVideoTimer(make_shared_ptr(videoTimer)); + m_windowHandle->setVideoTimer(videoTimer); m_windowHandle->setRenderContext(primaryRC); /// render single tile on the same thread diff --git a/map/window_handle.cpp b/map/window_handle.cpp index cd1b94a8db..3676eaa0ea 100644 --- a/map/window_handle.cpp +++ b/map/window_handle.cpp @@ -8,7 +8,7 @@ WindowHandle::WindowHandle() : { } -void WindowHandle::setVideoTimer(shared_ptr const & videoTimer) +void WindowHandle::setVideoTimer(VideoTimer * videoTimer) { m_videoTimer = videoTimer; m_frameFn = videoTimer->frameFn(); diff --git a/map/window_handle.hpp b/map/window_handle.hpp index 87ccfa42a0..af9711c666 100644 --- a/map/window_handle.hpp +++ b/map/window_handle.hpp @@ -24,7 +24,7 @@ class WindowHandle bool m_isUpdatesEnabled; bool m_needRedraw; - shared_ptr m_videoTimer; + VideoTimer * m_videoTimer; VideoTimer::TFrameFn m_frameFn; int m_stallsCount; @@ -33,7 +33,7 @@ public: WindowHandle(); virtual ~WindowHandle(); - void setVideoTimer(shared_ptr const & videoTimer); + void setVideoTimer(VideoTimer * videoTimer); void checkedFrameFn(); diff --git a/qt/draw_widget.cpp b/qt/draw_widget.cpp index ae41422000..a4ae87f996 100644 --- a/qt/draw_widget.cpp +++ b/qt/draw_widget.cpp @@ -201,14 +201,14 @@ namespace qt if (!m_isInitialized) { - VideoTimer * videoTimer = CreateVideoTimer(); + m_videoTimer.reset(CreateVideoTimer()); DrawerYG::Params params; params.m_frameBuffer = make_shared_ptr(new yg::gl::FrameBuffer(true)); shared_ptr primaryRC(new qt::gl::RenderContext(this)); - m_framework->SetRenderPolicy(CreateRenderPolicy(videoTimer, params, primaryRC)); + m_framework->SetRenderPolicy(CreateRenderPolicy(m_videoTimer.get(), params, primaryRC)); m_isInitialized = true; } diff --git a/qt/draw_widget.hpp b/qt/draw_widget.hpp index d7ac39abd8..57bd2a8bd4 100644 --- a/qt/draw_widget.hpp +++ b/qt/draw_widget.hpp @@ -45,6 +45,7 @@ namespace qt bool m_isTimerStarted; scoped_ptr > m_framework; + scoped_ptr m_videoTimer; bool m_isDrag; bool m_isRotate; -- cgit v1.2.3