summaryrefslogtreecommitdiff
path: root/src/rendering/include
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-10-31 23:55:42 +0000
committeronelin <oscar@nelin.dk>2025-11-02 22:07:17 +0000
commitd38deeef3af2316a666f8fc0173940bd769b748e (patch)
tree6e30d4a9eea18daa5705c894f28cd99ff047e8f9 /src/rendering/include
parent6c077751982ea2c7bd2d9262b01b9f8602f80dc8 (diff)
Flatten project structure
This will make it easier to break up the code into smaller chunks again later. One would think doing this seems fun to me at this point.
Diffstat (limited to 'src/rendering/include')
-rw-r--r--src/rendering/include/engine/rendering/platform.h57
-rw-r--r--src/rendering/include/engine/rendering/platform_glfw.h32
-rw-r--r--src/rendering/include/engine/rendering/rendering.h288
-rw-r--r--src/rendering/include/engine/rendering/window.h53
4 files changed, 0 insertions, 430 deletions
diff --git a/src/rendering/include/engine/rendering/platform.h b/src/rendering/include/engine/rendering/platform.h
deleted file mode 100644
index ea51c47..0000000
--- a/src/rendering/include/engine/rendering/platform.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef PLATFORM_H
-#define PLATFORM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cglm/ivec2.h>
-
-#include <engine/core/types.h>
-// TODO: We only need the window once all the garbage in Instance is cleaned up.
-#include <engine/core/platform.h>
-#include <engine/rendering/window.h>
-
-#define DAW_WINDOW_VSYNC (1 << 0)
-#define DAW_WINDOW_FULLSCREEN (1 << 1)
-#define DAW_WINDOW_RESIZEABLE (1 << 2)
-
-// Whether or not it is clever to force API consistency using a struct like this
-// can be debated, at the time of writing it seemed like a smart idea.
-
-// Platform libraries must implement a struct Platform:
-struct Platform {
- /* Initialize a window for the given platform. The rendering backend should
- * also be initialized here.
- * Parameters:
- * const char* title: window title.
- * ivec2 windowsize: the size in pixels for the new window.
- * const u32 flags: window flags, such as static size and fullscreen.
- * The flags are platform agnostic and needs to be
- * converted to the specific library
- * Returns:
- * A pointer to a struct Window, NULL on error.
- */
- Window* (*window_init)(const char *restrict title, ivec2 windowsize, const u32 flags);
-
- /* Destroy, close, and free up resources related to the window and the
- * platform library specific resources.
- */
- void (*window_destroy)(Window *restrict w);
-
- /* Resize the given window. Resize callbacks are handled by the wrapper
- * implementation.
- */
- void (*window_resize)(Window *restrict window, int width, int height);
-
- /* Return true if the platform has ordered the window to exit. */
- bool (*window_should_close)(Window *restrict w);
-
- /* Poll events on the window from the operating system. */
- void (*window_poll)(void);
-};
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/rendering/include/engine/rendering/platform_glfw.h b/src/rendering/include/engine/rendering/platform_glfw.h
deleted file mode 100644
index 949968d..0000000
--- a/src/rendering/include/engine/rendering/platform_glfw.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef ENGINE_RENDERING_PLATFORM_GLFW_H
-#define ENGINE_RENDERING_PLATFORM_GLFW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cglm/ivec2.h>
-
-#include <engine/core/types.h>
-#include <engine/rendering/platform.h>
-#include <engine/rendering/window.h>
-
-Window* window_init_glfw(const char *restrict windowtitle, ivec2 windowsize, const u32 flags);
-void window_destroy_glfw(Window *restrict w);
-void window_resize_glfw(Window *restrict window, int width, int height);
-bool window_should_close_glfw(Window *restrict window);
-void window_poll_glfw(void);
-
-const struct Platform Platform_GLFW = {
- .window_init = window_init_glfw,
- .window_destroy = window_destroy_glfw,
- .window_resize = window_resize_glfw,
- .window_should_close = window_should_close_glfw,
- .window_poll = window_poll_glfw,
-};
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h
deleted file mode 100644
index a996257..0000000
--- a/src/rendering/include/engine/rendering/rendering.h
+++ /dev/null
@@ -1,288 +0,0 @@
-#ifndef ENGINE_RENDERING_RENDERING_H
-#define ENGINE_RENDERING_RENDERING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <engine/core/types.h>
-#include <engine/rendering/window.h>
-
-#include <cglm/ivec2.h>
-
-/* Definitions */
-#define RGBA(_r, _g, _b, _a) ((Engine_color){.r = _r, .g = _g, .b = _b, .a = _a})
-#define RGB(_r, _g, _b) RGBA(_r, _g, _b, 0xFF)
-
-/* Types */
-/* TODO: Cleanup these types. */
-typedef struct {
- u8 r;
- u8 g;
- u8 b;
- u8 a;
-} Engine_color;
-
-typedef struct {
- /* Maybe implement types, such as `atlas` (default), `standalone`, or
- * something idk. */
- u32 id;
- i32 width;
- i32 height;
-} Texture;
-
-typedef struct {
- u32 texture_id;
- ivec2 coord;
-} Sprite;
-
-typedef enum {
- Shader_Error,
-
- Shader_Program,
- Shader_Vertex,
- Shader_Tessellation,
- Shader_Geometry,
- Shader_Fragment,
- Shader_Compute,
-} ShaderType;
-
-typedef struct {
- /* Shader proram */
- ShaderType type;
- u32 program;
-} Shader;
-
-typedef struct {
- vec3 position;
- vec3 size;
- mat4 rotation;
-} Transform;
-
-typedef enum {
- ShaderBufferFlag_none = 0x00,
-
- // First 3 bytes describe the access frequency.
- ShaderBuffer_AccessFrequency_stream = 0b0000000000001, // 1
- ShaderBuffer_AccessFrequency_static = 0b0000000000010, // 2
- ShaderBuffer_AccessFrequency_dynamic = 0b0000000000011, // 3
-
- // Next 3 bytes describe the access type.
- ShaderBuffer_AccessType_draw = 0b0000000001000, // 8
- ShaderBuffer_AccessType_read = 0b0000000010000, // 16
- ShaderBuffer_AccessType_copy = 0b0000000011000, // 24
-
- // Next 3 bytes describe the buffer type
- ShaderBuffer_Type_vertexData = 0b0000001000000, // 64
- ShaderBuffer_Type_vertexPosition = 0b0000010000000, // 128
- ShaderBuffer_Type_vertexIndex = 0b0000011000000, // 192
-
- // Next 4 bytes are designated for the data type
- ShaderBuffer_DataType_nil = 0b0001000000000, // 512
-
- ShaderBuffer_DataType_f32 = 0b0010000000000, // 1024
- ShaderBuffer_DataType_f64 = 0b0011000000000, // 1536
-
- ShaderBuffer_DataType_i8 = 0b0100000000000, // 2048
- ShaderBuffer_DataType_i16 = 0b0101000000000, // 2560
- ShaderBuffer_DataType_i32 = 0b0110000000000, // 3072
- ShaderBuffer_DataType_i64 = 0b0111000000000, // 3584
-
- ShaderBuffer_DataType_u8 = 0b1000000000000, // 4096
- ShaderBuffer_DataType_u16 = 0b1001000000000, // 4608
- ShaderBuffer_DataType_u32 = 0b1010000000000, // 5120
- ShaderBuffer_DataType_u64 = 0b1011000000000, // 5632
-} ShaderBufferFlag;
-
-typedef struct {
- // The backend ID, ie. glGenBuffer(numBufferObjects, &this->buffername)
- u32 buffername;
- // Array, access, and data, type.
- u32 buffertype;
- // Buffer size of `data`. To get the size of the actual data, size_elem * count
- usize size;
- // Number of elements
- usize count;
- // components per generic vertex attribute (ie, 3 for RGB, 2 for UV)
- usize components;
- // size of each element
- usize size_elem;
- // Pointer to the data
- void* data;
-} ShaderBuffer;
-
-// SHADERBUFFER_NEW is a constructor that takes the
-// * type T, as one of f32, f64, i8, i16, i32, i64, u8, u16, u32, or u64.
-// * COUNT, number of elements in the buffer
-// * COMPONENTS, number of elements to be grouped together, ie. 3 for a vec3.
-// * DATA, the buffer (it is pointed to automatically)
-// * FLAGS, are low-level GL flags that hints the access frequency, the access
-// type, and what buffer type it is, such as "data" or an index buffer.
-#define SHADERBUFFER_NEW(T, COUNT, COMPONENTS, DATA, FLAGS) \
- (ShaderBuffer){ \
- .buffername = 0, \
- .buffertype = ShaderBuffer_DataType_##T | FLAGS, \
- .size = COUNT * sizeof(T), \
- .count = COUNT, \
- .components = COMPONENTS, \
- .size_elem = sizeof(T), \
- .data = DATA, \
- }
-
-typedef struct {
- /* Shader proram */
- Shader shader;
- /* Vertex Array Object */
- u32 vao;
-
- /* MVP (a uniform from the shader).
- * This could also probably be generalized */
- i32 mvp;
-
- // The texture ID, glBindTextures(target, &this->texture)
- u32 texture;
-
- // Number of buffers
- usize buffer_len;
-
- // The vertex buffer is also just a buffer
- ShaderBuffer* buffer;
-} RenderObject;
-
-typedef struct {
- // Index of the model in the RenderBatch models buffer
- usize model_idx;
- // The transformation of the model
- Transform transform;
-} BatchModelInstance;
-
-typedef struct {
- // Size of models buffer
- usize msize;
- // number of models in the `models` buffer
- usize mcount;
- // Pointers to original models in this batch
- RenderObject **models;
-
- // Size of instance buffer
- usize inst_size;
- // number of instances in the `instances` buffer
- usize inst_count;
- // Pointers to original models in this batch
- BatchModelInstance *instances;
-
- // The rendered destination object
- RenderObject renderobj;
-} RenderBatch;
-
-typedef enum {
- Camera_Perspective,
- Camera_Orthogonal,
-} CameraType;
-
-typedef struct {
- /* Position of the camera in world-space. */
- vec3 pos;
-
- /* The viewing direction of the camera, relative to the camera. */
- vec3 dir;
-
- /* Perspective matrix. Initialize with r_perspective_ortho or r_perspective. */
- /* Alternatively, use `glm_perspective` or `glm_ortho`. */
- mat4 per;
-
- /* Used to re-calculate the perspective matrix when resizing the window */
- CameraType type;
- /* Yes, could use a singular "f32 arg", but this is more extendable in the
- * future. */
- union {
- struct {f32 fov;} perspective;
- struct {f32 sz;} orthogonal;
- } parameters;
-
-} Camera;
-
-usize ShaderBufferDataType_size(u16 flags);
-
-ShaderBufferFlag ShaderBuffer_get_access_frequency(u64 flags);
-ShaderBufferFlag ShaderBuffer_get_access_type(u64 flags);
-ShaderBufferFlag ShaderBuffer_get_type(u64 flags);
-ShaderBufferFlag ShaderBuffer_get_data_type(u64 flags);
-
-/* Conversion to GL types */
-u32 ShaderBuffer_get_gl_type(u64 flags);
-u32 ShaderBuffer_get_gl_accesstype(u64 flags);
-u32 ShaderBuffer_get_gl_datatype(u64 flags);
-
-/* Rendering functions */
-void render_begin(Window* w);
-void render_present(Window* w);
-void drawcall_reset(void);
-void render(Window* w);
-
-/* Misc */
-void r_perspective(f32 fov, Camera *c);
-void r_perspective_ortho(f32 sz, Camera *c);
-
-void r_set_camera(Camera* c);
-void r_reset_camera(Camera* c);
-
-//void window_size_callback(GLFWwindow* window, i32 width, i32 height);
-
-void engine_draw_sprite(Sprite* s, ivec2* pos, f32 scale);
-void engine_draw_sprite_ex(Sprite* s, ivec2* pos, f32 scale,
- Engine_color colormod);
-void engine_draw_model(RenderObject* o, vec3 pos);
-
-Sprite sprite_new(u64 tid, u8 coord);
-
-typedef enum {
- RenderDrawCallType_Text,
- RenderDrawCallType_Sprite,
- RenderDrawCallType_Model,
-} RenderDrawCallType;
-
-typedef struct {
- RenderDrawCallType type;
- union {
- void* data;
- struct {
- Sprite* sprite;
- i32 x;
- i32 y;
- f32 scale;
- } sprite;
- struct {
- RenderObject* model;
- vec3 pos;
- f32 scale;
- } model;
- } data;
-} RenderDrawCall;
-
-// TODO make all the shader buffers a list
-
-RenderObject RenderObject_new(
- Shader* shader,
- u32 texture,
- ShaderBuffer *restrict buffers, usize num_buffers);
-
-int renderbatch_new(RenderBatch* renderbatch, usize count);
-i32 renderbatch_add(RenderBatch* renderbatch, RenderObject* obj, Transform* t);
-void renderbatch_transform(RenderBatch* renderbatch, usize obj_idx, Transform* t);
-int renderbatch_refresh(RenderBatch* renderbatch);
-
-Shader compile_shader(const char* file_path, const ShaderType shader_type);
-Shader compose_shader(Shader *shaders, usize shaders_len);
-void shaders_delete(Shader* shader, usize shader_len);
-
-u32 ComposeShader(u32 *shaders, usize shaders_len);
-
-ShaderType guess_shadertype_from_filename(const char *restrict fname);
-
-Texture createTextureFromImageData(unsigned char* image_data, i32 width, i32 height, u8 components);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/src/rendering/include/engine/rendering/window.h b/src/rendering/include/engine/rendering/window.h
deleted file mode 100644
index a964b38..0000000
--- a/src/rendering/include/engine/rendering/window.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <cglm/ivec2.h>
-
-#include <engine/core/types.h>
-#include <engine/ctrl/input.h>
-
-#ifndef ENGINE_RENDERING_WINDOW_H_EXCLUDE_EXTERNS
-extern u64 (*get_time)(void);
-#endif
-
-typedef enum {
- WINDOW_FRAMEWORK_NONE = 0,
- WINDOW_FRAMEWORK_GLFW,
-} Window_framework;
-
-typedef enum {
- WINDOW_RENDERER_NONE = 0,
- WINDOW_RENDERER_OPENGL,
-} Window_renderer;
-
-typedef struct {
- // Specifies the framwork & renderer combo used.
- Window_framework framework;
- Window_renderer renderer;
-
- // Window *buffer* size, in pixels.
- ivec2 windowsize;
-
- // These are used differently depending on the framework / renderer combo.
- // Subject to change to a union of backend-dependent structs
- void* window;
- void* context;
-
- /* The ctrl is probably the only sensible thing in this struct. */
- usize bindings_sz;
- usize bindings_len;
- i_ctx** bindings;
-} Window;
-
-Window* Window_new(const char *restrict title, Window_framework framework, Window_renderer renderer, ivec2 size, u32 flags);
-
-void get_mousepos(double *x, double *y);
-
-#ifdef __cplusplus
-}
-#endif
-#endif