Browse Source

allocate window with default_allocator, implement some mothods for android usage

mikymod 12 years ago
parent
commit
05225c55a7
2 changed files with 41 additions and 3 deletions
  1. 33 3
      engine/Device.cpp
  2. 8 0
      engine/Device.h

+ 33 - 3
engine/Device.cpp

@@ -109,6 +109,7 @@ Device::Device() :
 	m_is_init(false),
 	m_is_running(false),
 	m_is_paused(false),
+	m_is_really_paused(false),
 
 	m_frame_count(0),
 
@@ -125,7 +126,9 @@ Device::Device() :
 	m_resource_manager(NULL),
 	m_resource_bundle(NULL),
 
-	m_console_server(NULL)
+	m_console_server(NULL),
+
+	m_renderer_init_request(false)
 {
 	// Bundle dir is current dir by default.
 	string::strncpy(m_bundle_dir, os::get_cwd(), MAX_PATH_LENGTH);
@@ -213,7 +216,8 @@ void Device::init()
 	m_input_manager = CE_NEW(m_allocator, InputManager)();
 	Log::d("Input manager created.");
 
-	m_window = CE_NEW(m_allocator, OsWindow)(m_preferred_window_width, m_preferred_window_height, m_parent_window_handle);
+	// default_allocator, maybe it needs fix
+	m_window = CE_NEW(default_allocator(), OsWindow)(m_preferred_window_width, m_preferred_window_height, m_parent_window_handle);
 
 	CE_ASSERT(m_window != NULL, "Unable to create the window");
 
@@ -224,6 +228,7 @@ void Device::init()
 	// Create renderer
 	m_renderer = Renderer::create(m_allocator);
 	m_renderer->init();
+	m_renderer_init_request = false;
 	Log::d("Renderer created.");
 
 	// Create debug renderer
@@ -312,7 +317,7 @@ void Device::shutdown()
 	Log::i("Releasing Window...");
 	if (m_window)
 	{
-		CE_DELETE(m_allocator, m_window);
+		CE_DELETE(default_allocator(), m_window);
 	}
 
 	Log::i("Releasing ResourceManager...");
@@ -448,6 +453,12 @@ void Device::stop()
 void Device::pause()
 {
 	m_is_paused = true;
+
+	while (!m_is_really_paused)
+	{
+		Log::i("Pausing...");
+	}
+
 	Log::d("Engine paused");
 }
 
@@ -455,6 +466,8 @@ void Device::pause()
 void Device::unpause()
 {
 	m_is_paused = false;
+	m_is_really_paused = false;
+
 	Log::d("Engine unpaused");
 }
 
@@ -483,6 +496,12 @@ void Device::frame()
 	m_last_delta_time = (m_current_time - m_last_time) / 1000000.0f;
 	m_last_time = m_current_time;
 
+	if (m_renderer_init_request)
+	{
+		m_renderer->init();
+		m_renderer_init_request = false;
+	}
+
 	if (!m_is_paused)
 	{
 		m_resource_manager->poll_resource_loader();
@@ -499,6 +518,11 @@ void Device::frame()
 		m_renderer->frame();
 	}
 
+	if (m_is_paused)
+	{
+		m_is_really_paused = true;
+	}
+
 	m_frame_count++;
 }
 
@@ -536,6 +560,12 @@ void Device::reload(ResourceId name)
 	(void)name;
 }
 
+//-----------------------------------------------------------------------------
+void Device::destroy_window()
+{
+	CE_DELETE(default_allocator(), m_window);
+}
+
 //-----------------------------------------------------------------------------
 void Device::parse_command_line(int argc, char** argv)
 {

+ 8 - 0
engine/Device.h

@@ -117,6 +117,8 @@ public:
 
 	void					reload(ResourceId name);
 
+	void					destroy_window();
+
 	Filesystem*				filesystem();
 	ResourceManager*		resource_manager();
 	InputManager*			input_manager();
@@ -133,6 +135,8 @@ public:
 
 	ConsoleServer*			console_server();
 
+	inline void				init_renderer() { m_renderer_init_request = true; }
+
 private:
 
 	void					init();
@@ -164,6 +168,8 @@ private:
 	bool					m_is_running	: 1;
 	bool					m_is_paused		: 1;
 
+	bool 					m_is_really_paused :1;
+
 	uint64_t				m_frame_count;
 
 	uint64_t				m_last_time;
@@ -187,6 +193,8 @@ private:
 	// Debug subsystems
 	ConsoleServer*			m_console_server;
 
+	bool 					m_renderer_init_request;
+
 private:
 
 	// Disable copying