feat: add logger class
This commit is contained in:
		| @@ -1,6 +1,5 @@ | ||||
| #include "engine.h" | ||||
|  | ||||
| #include <iostream> | ||||
| #include <vector> | ||||
|  | ||||
| #include "../lib/glew/GL/glew.h" | ||||
| @@ -10,6 +9,7 @@ | ||||
|  | ||||
| #include "buffer.h" | ||||
| #include "camera.h" | ||||
| #include "logger.h" | ||||
| #include "mesh.h" | ||||
| #include "model.h" | ||||
| #include "shader.h" | ||||
| @@ -17,32 +17,37 @@ | ||||
| #include "vertex.h" | ||||
| #include "world.h" | ||||
|  | ||||
| constexpr int	 SCREEN_WIDTH  = 800; | ||||
| constexpr int	 SCREEN_HEIGHT = 600; | ||||
| constexpr double FPS_LIMIT     = 1.0 / 60.0; | ||||
| constexpr int	 screen_width  = 800; | ||||
| constexpr int	 screen_height = 600; | ||||
| constexpr double fps_limit     = 1.0 / 60.0; | ||||
|  | ||||
| Engine::Engine() | ||||
|     : window_(nullptr) | ||||
|     , screen_width_(SCREEN_WIDTH) | ||||
|     , screen_height_(SCREEN_HEIGHT) | ||||
|     , screen_width_(screen_width) | ||||
|     , screen_height_(screen_height) | ||||
|     , last_update_time_(0.0) | ||||
|     , last_frame_time_(0.0) | ||||
|     , angle_(0.0) | ||||
| { | ||||
| 	Logger::info("Engine created"); | ||||
| } | ||||
|  | ||||
| Engine::~Engine() | ||||
| { | ||||
| 	Logger::info("Engine destroyed"); | ||||
| 	destroy(); | ||||
| } | ||||
|  | ||||
| void Engine::initialize() | ||||
| { | ||||
| 	Logger::info("Initializing engine..."); | ||||
|  | ||||
| 	// Initialize GLFW | ||||
| 	if (!glfwInit()) { | ||||
| 		std::cerr << "Failed to initialize GLFW\n"; | ||||
| 		Logger::error("Failed to initialize GLFW"); | ||||
| 		return; | ||||
| 	} | ||||
| 	Logger::info("GLFW initialized successfully"); | ||||
|  | ||||
| 	glfwWindowHint(GLFW_RESIZABLE, false); | ||||
| 	glfwWindowHint(GLFW_SAMPLES, 8); | ||||
| @@ -51,7 +56,7 @@ void Engine::initialize() | ||||
| 	window_ = glfwCreateWindow(screen_width_, screen_height_, | ||||
| 				   "Daniel Poveda", nullptr, nullptr); | ||||
| 	if (window_ == nullptr) { | ||||
| 		std::cerr << "Failed to create OpenGL window\n"; | ||||
| 		Logger::error("Failed to create OpenGL window"); | ||||
| 		glfwTerminate(); | ||||
| 		return; | ||||
| 	} | ||||
| @@ -61,30 +66,39 @@ void Engine::initialize() | ||||
| 	glEnable(GL_DEPTH_TEST); | ||||
| 	glEnable(GL_SCISSOR_TEST); | ||||
|  | ||||
| 	std::cout << "OpenGL initialized, version: " << glGetString(GL_VERSION) | ||||
| 		  << "\n"; | ||||
| 	Logger::info( | ||||
| 	    sstr("OpenGL initialized, version: ", | ||||
| 		 reinterpret_cast<const char*>(glGetString(GL_VERSION)))); | ||||
|  | ||||
| 	// Initialize GLEW | ||||
| 	glewExperimental = GL_TRUE; | ||||
| 	GLenum err	 = glewInit(); | ||||
| 	if (err != GLEW_OK) { | ||||
| 		std::cerr << "Failed to initialize GLEW: " | ||||
| 			  << glewGetErrorString(err) << "\n"; | ||||
| 		Logger::error(sstr( | ||||
| 		    "Failed to initialize GLEW: ", | ||||
| 		    reinterpret_cast<const char*>(glewGetErrorString(err)))); | ||||
| 		glfwTerminate(); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	// Initialize default shader | ||||
| 	Logger::info("Loading default shaders..."); | ||||
| 	state::default_shader = | ||||
| 	    std::make_shared<Shader>("data/vertex.glsl", "data/fragment.glsl"); | ||||
| 	if (std::strlen(state::default_shader->error()) > 0) { | ||||
| 		std::cerr << "Failed to initialize shaders: " | ||||
| 			  << state::default_shader->error() << "\n"; | ||||
| 		Logger::error(sstr("Failed to initialize shaders: ", | ||||
| 				   state::default_shader->error())); | ||||
| 	} else { | ||||
| 		Logger::info("Default shaders loaded successfully"); | ||||
| 	} | ||||
|  | ||||
| 	Logger::info("Engine initialization complete"); | ||||
| } | ||||
|  | ||||
| void Engine::run() | ||||
| { | ||||
| 	Logger::info("Starting game loop..."); | ||||
|  | ||||
| 	setup(); | ||||
| 	start(); | ||||
|  | ||||
| @@ -98,26 +112,33 @@ void Engine::run() | ||||
| 		process_input(); | ||||
| 		update(delta_time); | ||||
|  | ||||
| 		if (now - last_frame_time_ >= FPS_LIMIT) { | ||||
| 		if (now - last_frame_time_ >= fps_limit) { | ||||
| 			render(); | ||||
| 			last_frame_time_ = now; | ||||
| 		} | ||||
| 		last_update_time_ = now; | ||||
| 	} | ||||
|  | ||||
| 	Logger::info("Game loop ended"); | ||||
| } | ||||
|  | ||||
| void Engine::destroy() | ||||
| { | ||||
| 	if (window_) { | ||||
| 		Logger::info("Shutting down engine..."); | ||||
| 		glfwTerminate(); | ||||
| 		window_ = nullptr; | ||||
| 		Logger::info("Engine shutdown complete"); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void Engine::setup() | ||||
| { | ||||
| 	Logger::info("Setting up scene..."); | ||||
|  | ||||
| 	// Create world | ||||
| 	world_ = std::make_unique<World>(); | ||||
| 	Logger::info("World created"); | ||||
|  | ||||
| 	// Create camera | ||||
| 	camera_ = std::make_shared<Camera>(); | ||||
| @@ -130,6 +151,7 @@ void Engine::setup() | ||||
| 	camera_->set_viewport(glm::ivec4(0, 0, screen_width_, screen_height_)); | ||||
| 	camera_->set_clear_color(glm::vec3(0.1f, 0.1f, 0.1f)); | ||||
| 	world_->add_entity(camera_); | ||||
| 	Logger::info("Camera created and added to world"); | ||||
|  | ||||
| 	// Create triangle mesh | ||||
| 	std::vector<Vertex> vertices = { | ||||
| @@ -141,6 +163,8 @@ void Engine::setup() | ||||
| 	auto buffer = std::make_shared<Buffer>(vertices, indices); | ||||
| 	mesh_	    = std::make_shared<Mesh>(); | ||||
| 	mesh_->add_buffer(buffer); | ||||
| 	Logger::info(sstr("Mesh created with ", vertices.size(), | ||||
| 			  " vertices and ", indices.size(), " indices")); | ||||
|  | ||||
| 	// Create 9 models in a 3x3 grid | ||||
| 	for (int row = 0; row < 3; ++row) { | ||||
| @@ -153,6 +177,8 @@ void Engine::setup() | ||||
| 			world_->add_entity(model); | ||||
| 		} | ||||
| 	} | ||||
| 	Logger::info(sstr("Created ", models_.size(), " models in scene")); | ||||
| 	Logger::info("Scene setup complete"); | ||||
| } | ||||
|  | ||||
| void Engine::start() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user