Sfoglia il codice sorgente

Add CL options to set the preferred rendering backend

Daniele Bartolini 12 anni fa
parent
commit
13b88e61d8
2 ha cambiato i file con 54 aggiunte e 29 eliminazioni
  1. 43 26
      src/Device.cpp
  2. 11 3
      src/Device.h

+ 43 - 26
src/Device.cpp

@@ -36,24 +36,35 @@ OTHER DEALINGS IN THE SOFTWARE.
 #include "Game.h"
 #include "Game.h"
 #include <cstdlib>
 #include <cstdlib>
 
 
-#include "renderers/gl/GLRenderer.h"
-//#include "renderers/gles/GLESRenderer.h"
+#ifdef CROWN_BUILD_OPENGL
+	#include "renderers/gl/GLRenderer.h"
+#endif
+
+#ifdef CROWN_BUILD_OPENGLES
+	#include "renderers/gles/GLESRenderer.h"
+#endif
 
 
 namespace crown
 namespace crown
 {
 {
 
 
+static const char* GAME_LIBRARY_NAME = "libgame.so";
+
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 Device::Device() :
 Device::Device() :
 	m_preferred_window_width(1000),
 	m_preferred_window_width(1000),
 	m_preferred_window_height(625),
 	m_preferred_window_height(625),
-	m_preferred_window_fullscreen(false),
+	m_preferred_window_fullscreen(0),
+	m_preferred_renderer(RENDERER_GL),
 
 
 	m_is_init(false),
 	m_is_init(false),
 	m_is_running(false),
 	m_is_running(false),
 
 
 	m_filesystem(NULL),
 	m_filesystem(NULL),
 	m_input_manager(NULL),
 	m_input_manager(NULL),
-	m_renderer(NULL)
+	m_renderer(NULL),
+
+	m_game(NULL),
+	m_game_library(NULL)
 {
 {
 	string::strcpy(m_preferred_root_path, string::EMPTY);
 	string::strcpy(m_preferred_root_path, string::EMPTY);
 	string::strcpy(m_preferred_user_path, string::EMPTY);
 	string::strcpy(m_preferred_user_path, string::EMPTY);
@@ -86,24 +97,30 @@ bool Device::init(int argc, char** argv)
 
 
 	m_input_manager = new InputManager();
 	m_input_manager = new InputManager();
 
 
-	// Create the renderer
-	// FIXME FIXME FIXME
-	// #ifdef CROWN_BUILD_OPENGL
-	 	m_renderer = new GLRenderer();
-		Log::I("Using GLRenderer.");
-	// #elif defined CROWN_BUILD_OPENGLES
-	//	m_renderer = new GLESRenderer();
-	// #endif
-
-	m_is_init = true;
-
-	start();
+	if (m_preferred_renderer == RENDERER_GL)
+	{
+		#ifdef CROWN_BUILD_OPENGL
+		m_renderer = new GLRenderer;
+		#else
+		Log::E("Crown Engine was not built with OpenGL support.");
+		return false;
+		#endif
+	}
+	else if (m_preferred_renderer == RENDERER_GLES)
+	{
+		#ifdef CROWN_BUILD_OPENGLES
+		m_renderer = new GLESRenderer;
+		#else
+		Log::E("Crown Engine was not built with OpenGL|ES support.");
+		return false;
+		#endif
+	}
 
 
 	Log::I("Crown Engine initialized.");
 	Log::I("Crown Engine initialized.");
 
 
 	Log::I("Initializing Game...");
 	Log::I("Initializing Game...");
 
 
-	const char* game_library_path = m_filesystem->build_os_path(m_filesystem->root_path(), "libgame.so");
+	const char* game_library_path = m_filesystem->build_os_path(m_filesystem->root_path(), GAME_LIBRARY_NAME);
 	m_game_library = os::open_library(game_library_path);
 	m_game_library = os::open_library(game_library_path);
 
 
 	if (m_game_library == NULL)
 	if (m_game_library == NULL)
@@ -118,6 +135,10 @@ bool Device::init(int argc, char** argv)
 
 
 	m_game->init();
 	m_game->init();
 
 
+	m_is_init = true;
+
+	start();
+
 	return true;
 	return true;
 }
 }
 
 
@@ -228,8 +249,6 @@ void Device::frame()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 bool Device::parse_command_line(int argc, char** argv)
 bool Device::parse_command_line(int argc, char** argv)
 {
 {
-	int32_t fullscreen = 0;
-
 	ArgsOption options[] = 
 	ArgsOption options[] = 
 	{
 	{
 		"help",       AOA_NO_ARGUMENT,       NULL,        'i',
 		"help",       AOA_NO_ARGUMENT,       NULL,        'i',
@@ -237,7 +256,9 @@ bool Device::parse_command_line(int argc, char** argv)
 		"user-path",  AOA_REQUIRED_ARGUMENT, NULL,        'u',
 		"user-path",  AOA_REQUIRED_ARGUMENT, NULL,        'u',
 		"width",      AOA_REQUIRED_ARGUMENT, NULL,        'w',
 		"width",      AOA_REQUIRED_ARGUMENT, NULL,        'w',
 		"height",     AOA_REQUIRED_ARGUMENT, NULL,        'h',
 		"height",     AOA_REQUIRED_ARGUMENT, NULL,        'h',
-		"fullscreen", AOA_NO_ARGUMENT,       &fullscreen,  1,
+		"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,
 		NULL, 0, NULL, 0
 		NULL, 0, NULL, 0
 	};
 	};
 
 
@@ -253,12 +274,6 @@ bool Device::parse_command_line(int argc, char** argv)
 			{
 			{
 				return true;
 				return true;
 			}
 			}
-			case 0:
-			{
-				m_preferred_window_fullscreen = fullscreen;
-
-				break;
-			}
 			// Help
 			// Help
 			case 'i':
 			case 'i':
 			{
 			{
@@ -340,6 +355,8 @@ void Device::print_help_message()
 	os::printf("  --width <width>       Set the <width> of the render window.\n");
 	os::printf("  --width <width>       Set the <width> of the render window.\n");
 	os::printf("  --height <width>      Set the <height> of the render window.\n");
 	os::printf("  --height <width>      Set the <height> of the render window.\n");
 	os::printf("  --fullscreen          Start in fullscreen.\n");
 	os::printf("  --fullscreen          Start in fullscreen.\n");
+	os::printf("  --gl                  Use OpenGL as rendering backend.\n");
+	os::printf("  --gles                Use OpenGL|ES as rendering backend.\n");  
 }
 }
 
 
 Device g_device;
 Device g_device;

+ 11 - 3
src/Device.h

@@ -27,6 +27,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 
 
 #include "Types.h"
 #include "Types.h"
 #include "Config.h"
 #include "Config.h"
+#include "OS.h"
 
 
 namespace crown
 namespace crown
 {
 {
@@ -69,10 +70,11 @@ private:
 	// Preferred settings from command line
 	// Preferred settings from command line
 	int32_t					m_preferred_window_width;
 	int32_t					m_preferred_window_width;
 	int32_t					m_preferred_window_height;
 	int32_t					m_preferred_window_height;
-	bool					m_preferred_window_fullscreen;
+	int32_t					m_preferred_window_fullscreen;
+	int32_t					m_preferred_renderer;
 
 
-	char					m_preferred_root_path[512];
-	char					m_preferred_user_path[512];
+	char					m_preferred_root_path[os::MAX_PATH_LENGTH];
+	char					m_preferred_user_path[os::MAX_PATH_LENGTH];
 
 
 	bool					m_is_init		: 1;
 	bool					m_is_init		: 1;
 	bool					m_is_running	: 1;
 	bool					m_is_running	: 1;
@@ -88,6 +90,12 @@ private:
 
 
 private:
 private:
 
 
+	enum
+	{
+		RENDERER_GL		= 0,
+		RENDERER_GLES	= 1
+	};
+
 	// Disable copying
 	// Disable copying
 	Device(const Device&);
 	Device(const Device&);
 	Device& operator=(const Device&);
 	Device& operator=(const Device&);