From c9c5fc428fd7b7c00285141db3b4889bd8cb9208 Mon Sep 17 00:00:00 2001 From: Natsirt867 Date: Fri, 17 Oct 2025 02:51:15 -0500 Subject: [PATCH] updating renderer work done --- .gitignore | 1 + CMakeLists.txt | 21 +++++++++--- src/engine/core/logger/log.h | 49 ++++++++++++++++++++++++++++ src/engine/renderer/camera/camera.c | 31 ++++++++++++++++++ src/engine/renderer/camera/camera.h | 17 ++++++++++ src/engine/renderer/shaders/shader.h | 20 ++++++++++++ src/main.c | 13 +++++++- 7 files changed, 147 insertions(+), 5 deletions(-) create mode 100644 src/engine/core/logger/log.h diff --git a/.gitignore b/.gitignore index 16ec13d..59c8c6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ cmake-build-debug SDL .idea/ +external/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 3ca7e73..9168563 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,10 +8,23 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/$") # This assumes the SDL source is available in SDL -add_subdirectory(SDL EXCLUDE_FROM_ALL) +add_subdirectory(external/SDL EXCLUDE_FROM_ALL) +add_subdirectory(external/cglm EXCLUDE_FROM_ALL) +#add_subdirectory(glad EXCLUDE_FROM_ALL) # Create your game executable target as usual -add_executable(BeyondDepth WIN32 main.c) +add_executable(BeyondDepth src/main.c + src/engine/core/logger/log.c + src/engine/renderer/camera/camera.c + src/engine/renderer/camera/camera.h + external/glad/src/glad.c + src/engine/renderer/shaders/shader.c + src/engine/renderer/shaders/shader.h) -# Link to the actual SDL3 library. -target_link_libraries(BeyondDepth PRIVATE SDL3::SDL3) \ No newline at end of file +set_target_properties(BeyondDepth PROPERTIES WIN32_EXECUTABLE FALSE) + +target_include_directories(BeyondDepth PRIVATE external/glad/include) + +target_link_libraries(BeyondDepth PRIVATE + SDL3::SDL3 + cglm) \ No newline at end of file diff --git a/src/engine/core/logger/log.h b/src/engine/core/logger/log.h new file mode 100644 index 0000000..b1fae24 --- /dev/null +++ b/src/engine/core/logger/log.h @@ -0,0 +1,49 @@ +/** + * Copyright (c) 2020 rxi + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the MIT license. See `log.c` for details. + */ + +#ifndef LOG_H +#define LOG_H + +#include +#include +#include +#include + +#define LOG_VERSION "0.1.0" + +typedef struct { + va_list ap; + const char *fmt; + const char *file; + struct tm *time; + void *udata; + int line; + int level; +} log_Event; + +typedef void (*log_LogFn)(log_Event *ev); +typedef void (*log_LockFn)(bool lock, void *udata); + +enum { LOG_TRACE, LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR, LOG_FATAL }; + +#define log_trace(...) log_log(LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__) +#define log_debug(...) log_log(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__) +#define log_info(...) log_log(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__) +#define log_warn(...) log_log(LOG_WARN, __FILE__, __LINE__, __VA_ARGS__) +#define log_error(...) log_log(LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__) +#define log_fatal(...) log_log(LOG_FATAL, __FILE__, __LINE__, __VA_ARGS__) + +const char* log_level_string(int level); +void log_set_lock(log_LockFn fn, void *udata); +void log_set_level(int level); +void log_set_quiet(bool enable); +int log_add_callback(log_LogFn fn, void *udata, int level); +int log_add_fp(FILE *fp, int level); + +void log_log(int level, const char *file, int line, const char *fmt, ...); + +#endif diff --git a/src/engine/renderer/camera/camera.c b/src/engine/renderer/camera/camera.c index 0b36682..4cb08a5 100644 --- a/src/engine/renderer/camera/camera.c +++ b/src/engine/renderer/camera/camera.c @@ -3,3 +3,34 @@ // #include "camera.h" + +Camera l_camera = { + .Position = { 0.0f, 0.0f, 0.0f }, + .Orientation = { 0.0f, 0.0f, -1.0f }, + .Up = { 0.0f, 1.0f, 0.0f } +}; + +void matrix(float FOVdeg, float nearPlane, float farPlane, Shader* shader_instance, const char* uniform) { + mat4 view, projection; + glm_mat4_identity(view); + glm_mat4_identity(projection); + + // store the result of the vector addition + vec3 target; + + // cglm function to perform vector addition + glm_vec3_add(l_camera.Position, l_camera.Orientation, target); + + mat4 target_2; + + glm_mat4_mul(projection[0], view[0], target_2); + + // now we can use the addition of the two vec3's in the glm_lookat() function + glm_lookat(l_camera.Position, target, l_camera.Up, view); + + glm_perspective(glm_rad(FOVdeg), (float)(l_camera.width / l_camera.height), nearPlane, farPlane, projection); + + glUniformMatrix4fv(glGetUniformLocation(shader_instance->ID, uniform), 1, GL_FALSE, target_2); +} + +void inputs(SDL_Window* window); \ No newline at end of file diff --git a/src/engine/renderer/camera/camera.h b/src/engine/renderer/camera/camera.h index 32545ae..6d5e8ef 100644 --- a/src/engine/renderer/camera/camera.h +++ b/src/engine/renderer/camera/camera.h @@ -5,4 +5,21 @@ #ifndef CAMERA_H #define CAMERA_H +#include +#include +#include "../shaders/shader.h" + +typedef struct { + vec3 Position; + vec3 Orientation; + vec3 Up; + float speed; + float sensitivity; + int width; + int height; +} Camera; + +void matrix(float FOVdeg, float nearPlane, float farPlane, Shader* shader_instance, const char* uniform); +void inputs(SDL_Window* window); + #endif //CAMERA_H diff --git a/src/engine/renderer/shaders/shader.h b/src/engine/renderer/shaders/shader.h index 8caa4b1..a139df9 100644 --- a/src/engine/renderer/shaders/shader.h +++ b/src/engine/renderer/shaders/shader.h @@ -5,4 +5,24 @@ #ifndef SHADER_H #define SHADER_H +#include +#include + +typedef struct { + // Reference ID of the shader program + GLuint ID; +} Shader; + +char *get_file_contents(const char *filename); + +Shader shader_create(const char *vertexFile, const char *fragmentFile); + +// Takes a pointer to the instance +void shader_activate(Shader *self); +void shader_delete(Shader *self); + +// Private helper on shaderClass.h C++ header -- no private in C :) +void compile_errors(unsigned int shader, const char *type); + + #endif //SHADER_H diff --git a/src/main.c b/src/main.c index 1e67b87..b3fd877 100644 --- a/src/main.c +++ b/src/main.c @@ -12,6 +12,9 @@ #define SDL_MAIN_USE_CALLBACKS 1 /* use the callbacks instead of main() */ #include #include +#include +#include "engine/core/logger/log.h" +#include "engine/renderer/camera/camera.h" static SDL_Window *window = NULL; static SDL_Renderer *renderer = NULL; @@ -19,9 +22,14 @@ static SDL_Renderer *renderer = NULL; /* This function runs once at startup. */ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) { + //log_set_level(2); + log_info("Starting program and initializing SDL..."); /* Create the window */ - if (!SDL_CreateWindowAndRenderer("Hello World", 800, 600, SDL_WINDOW_FULLSCREEN, &window, &renderer)) { + + // SDL_WINDOW_FULLSCREEN overrides with window_flags to make window fullscreen + if (!SDL_CreateWindowAndRenderer("Hello World", 800, 600, 0, &window, &renderer)) { SDL_Log("Couldn't create window and renderer: %s", SDL_GetError()); + log_error("Couldn't create window and renderer %s", SDL_GetError()); return SDL_APP_FAILURE; } return SDL_APP_CONTINUE; @@ -32,6 +40,7 @@ SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) { if (event->type == SDL_EVENT_KEY_DOWN || event->type == SDL_EVENT_QUIT) { + log_info("User pressed a key"); return SDL_APP_SUCCESS; /* end the program, reporting success to the OS. */ } return SDL_APP_CONTINUE; @@ -58,6 +67,8 @@ SDL_AppResult SDL_AppIterate(void *appstate) SDL_RenderDebugText(renderer, x, y, message); SDL_RenderPresent(renderer); + + return SDL_APP_CONTINUE; }