Explorar el Código

Use LinearAllocator to allocate subsystems in device

Daniele Bartolini hace 12 años
padre
commit
545de69352
Se han modificado 2 ficheros con 30 adiciones y 11 borrados
  1. 23 9
      src/Device.cpp
  2. 7 2
      src/Device.h

+ 23 - 9
src/Device.cpp

@@ -66,12 +66,16 @@ static void (*game_frame)(float) = NULL;
 
 //-----------------------------------------------------------------------------
 Device::Device() :
+	m_allocator(m_subsystems_heap, MAX_SUBSYSTEMS_HEAP),
+
 	m_preferred_window_width(1000),
 	m_preferred_window_height(625),
 	m_preferred_window_fullscreen(0),
 	m_preferred_renderer(RENDERER_GL),
 	m_preferred_mode(MODE_RELEASE),
 
+	m_quit_after_init(0),
+
 	m_is_init(false),
 	m_is_running(false),
 
@@ -158,6 +162,11 @@ bool Device::init(int argc, char** argv)
 
 	start();
 
+	if (m_quit_after_init == 1)
+	{
+		shutdown();
+	}
+
 	return true;
 }
 
@@ -215,6 +224,8 @@ void Device::shutdown()
 		CE_DELETE(m_allocator, m_filesystem);
 	}
 
+	m_allocator.clear();
+
 	m_is_init = false;
 }
 
@@ -453,14 +464,15 @@ void Device::parse_command_line(int argc, char** argv)
 {
 	static ArgsOption options[] = 
 	{
-		"help",       AOA_NO_ARGUMENT,       NULL,        'i',
-		"root-path",  AOA_REQUIRED_ARGUMENT, NULL,        'r',
-		"width",      AOA_REQUIRED_ARGUMENT, NULL,        'w',
-		"height",     AOA_REQUIRED_ARGUMENT, NULL,        'h',
-		"fullscreen", AOA_NO_ARGUMENT,       &m_preferred_window_fullscreen, 1,
-		"gl",         AOA_NO_ARGUMENT,       &m_preferred_renderer, RENDERER_GL,
-		"gles",       AOA_NO_ARGUMENT,       &m_preferred_renderer, RENDERER_GLES,
-		"dev",        AOA_NO_ARGUMENT,       &m_preferred_mode, MODE_DEVELOPMENT,
+		"help",             AOA_NO_ARGUMENT,       NULL,        'i',
+		"root-path",        AOA_REQUIRED_ARGUMENT, NULL,        'r',
+		"width",            AOA_REQUIRED_ARGUMENT, NULL,        'w',
+		"height",           AOA_REQUIRED_ARGUMENT, NULL,        'h',
+		"fullscreen",       AOA_NO_ARGUMENT,       &m_preferred_window_fullscreen, 1,
+		"gl",               AOA_NO_ARGUMENT,       &m_preferred_renderer, RENDERER_GL,
+		"gles",             AOA_NO_ARGUMENT,       &m_preferred_renderer, RENDERER_GLES,
+		"dev",              AOA_NO_ARGUMENT,       &m_preferred_mode, MODE_DEVELOPMENT,
+		"quit-after-init",  AOA_NO_ARGUMENT,       &m_quit_after_init, 1,
 		NULL, 0, NULL, 0
 	};
 
@@ -536,7 +548,9 @@ void Device::print_help_message()
 	"  --width <width>       Set the <width> of the render window.\n"
 	"  --height <width>      Set the <height> of the render window.\n"
 	"  --fullscreen          Start in fullscreen.\n"
-	"  --dev                 Run the engine in development mode\n");
+	"  --dev                 Run the engine in development mode\n"
+	"  --quit-after-init     Quits the engine immediately after the\n"
+	"                        initialization. Used only for debugging.\n");
 }
 
 Device g_device;

+ 7 - 2
src/Device.h

@@ -29,9 +29,11 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Types.h"
 #include "Config.h"
 #include "OS.h"
-#include "MallocAllocator.h"
+#include "LinearAllocator.h"
 #include "Resource.h"
 
+#define MAX_SUBSYSTEMS_HEAP 1024 * 1024
+
 namespace crown
 {
 
@@ -122,7 +124,8 @@ private:
 private:
 
 	// Used to allocate all subsystems
-	MallocAllocator			m_allocator;
+	uint8_t					m_subsystems_heap[MAX_SUBSYSTEMS_HEAP];
+	LinearAllocator			m_allocator;
 
 	// Preferred settings from command line
 	int32_t					m_preferred_window_width;
@@ -132,6 +135,8 @@ private:
 	int32_t					m_preferred_mode;
 	char					m_preferred_root_path[os::MAX_PATH_LENGTH];
 
+	int32_t					m_quit_after_init;
+
 	bool					m_is_init		: 1;
 	bool					m_is_running	: 1;