From 71bca57087f5746aaafba07ccce5b6bbc270b8c1 Mon Sep 17 00:00:00 2001 From: onelin Date: Thu, 18 Dec 2025 23:21:48 +0100 Subject: Move pipeline reset to rendering/window Also set the damn memory to zero Who could've guessed that you should zero your initialized memory when you're making assumptions later that uninitizalied members are zero. --- src/daw.c | 178 ++++---------------------------------------------------------- 1 file changed, 10 insertions(+), 168 deletions(-) (limited to 'src/daw.c') diff --git a/src/daw.c b/src/daw.c index f49e508..c6553ab 100644 --- a/src/daw.c +++ b/src/daw.c @@ -41,9 +41,6 @@ Instance* GLOBAL_PLATFORM = NULL; -#define DEFAULT_CAMERA { .pos = {3, 0, 0}, .dir = {1, 1, 1}, } -static Camera default_camera = DEFAULT_CAMERA; - input_callback_t* callbacks[128]; usize callbacks_len; @@ -152,82 +149,10 @@ Instance* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight return p; } -// TODO: MOVE TO RENDERING -static f32 default_quad[8] = { - -1.0f, -1.0f, - 1.0f, -1.0f, - 1.0f, 1.0f, - -1.0f, 1.0f, -}; - -static f32 default_quad_uv[8] = { - 0.f, 0.f, - 1.f, 0.f, - 1.f, 1.f, - 0.f, 1.f, -}; - -static u8 default_quad_ibo[6] = { - 0, 1, 2, - 2, 3, 0, -}; - -// TODO: CREATE DEFAULT SHADERBUFF -#define COUNT(a) sizeof(a) / sizeof(a[0]) -static ShaderBuffer shaderbuf[3] = { - SHADERBUFFER_NEW(f32, COUNT(default_quad), 2, default_quad, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw | ShaderBuffer_Type_vertexPosition), - SHADERBUFFER_NEW(f32, COUNT(default_quad_uv), 2, default_quad_uv, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw), - SHADERBUFFER_NEW(u8, COUNT(default_quad_ibo), 3, default_quad_ibo, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw | ShaderBuffer_Type_vertexIndex), -}; -#undef COUNT - -static const char* default_quad_shader_vertex_src = -"#version 330 core\n" -"\n" -"layout(location = 0) in vec2 vertexPosition_modelspace;\n" -"layout(location = 1) in vec2 vertexUV;\n" -"\n" -"out vec2 UV;\n" -"\n" -"void main() {\n" -" gl_Position = vec4(vertexPosition_modelspace, 0, 1);\n" -"\n" -" UV = vertexUV;\n" -"}"; - -static const char* default_quad_shader_fragment_src = -"#version 330 core\n" -"\n" -"// Ouput data\n" -"in vec2 UV;\n" -"out vec3 color;\n" -"\n" -"uniform sampler2D textureSampler;\n" -"\n" -"void main() {\n" -" color = texture(textureSampler, UV).rgb;\n" -"}"; - - -void framebuffer_size_callback_default(ivec3* dst,ivec2 src) { - glm_ivec2_copy(src, *dst); -} - -void camera_reset_callback_default(Camera* dst, void* state, ivec2 src) { - r_reset_camera(dst, src); -} - - i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { - // TODO: MOVE TO INIT - Shader default_quad_shaders[] = { - compile_shader(default_quad_shader_vertex_src, Shader_Vertex), - compile_shader(default_quad_shader_fragment_src, Shader_Fragment), - (Shader){0}, - }; - default_quad_shaders[2] = compose_shader(default_quad_shaders, 2); + Shader default_quad_shader = init_default_shader(); RenderObject default_quad_renderobject; if (p == NULL) { @@ -245,52 +170,13 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { { u64 state_init_time = get_time(); State_init(state, p->window, mem, state_arg); - if (!w->render_targets) { - // Create only 1 additional framebuffer, in addition to the default - // one. This is used to render a texture that is represented as a quad - // on the default framebuffer. - ivec2 wsz; - window_get_size(&wsz); - u32 t[] = { - BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_FMT_RGB8), - - // The depth buffer could also be a texture like so: - // BUFFERPARAMETER_SET_PARAMETER( - // BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), - // BUFFERPARAMETER_FMT_DEPTH32 - // ), - BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_render), BUFFERPARAMETER_FMT_DEPTH32F), - }; - FramebufferParameters p[] = { - {.num_textures = 1, .num_renderbuffers = 1, .dimensions = {wsz[0], wsz[1], 0}}, - }; - window_init_renderstack(w, 1, sizeof(t) / sizeof(t[0]), p, t); - - w->render_targets->framebuffer_size_callback[0] = &framebuffer_size_callback_default; - w->render_targets->camera_reset_callback[0] = &camera_reset_callback_default; - w->render_targets->cam[0] = &default_camera; - - window_reset_cameras(w, mem, w->render_targets); - } - - u32 first_texture = 0; - for (usize i = 0; i < w->render_targets->buffer_len; i++) { - if (BUFFERPARAMETER_GET_TYPE(w->render_targets->buffer_parameters[i]) == BufferType_texture) { - first_texture = w->render_targets->buffer[i]; - break; - } - } - - default_quad_renderobject = RenderObject_new( - // Shader - &default_quad_shaders[2], - // Texture - first_texture, - // Vertices - shaderbuf, - sizeof(shaderbuf) / sizeof(ShaderBuffer) - ); + r_reset_pipeline(w); + // TODO: Both the shader & renderobject should only be created here if it is + // overwritten in Instance->Window. + // TODO: Add default quad & renderobject to Instance->Window. Should allow + // for customization. + default_quad_renderobject = init_default_renderobject(w, default_quad_shader); INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state], (get_time() - state_init_time)); @@ -346,53 +232,9 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { { u64 state_init_time = get_time(); State_init(state, p->window, mem, retval); - if (!w->render_targets) { - // Create only 1 additional framebuffer, in addition to the default - // one. This is used to render a texture that is represented as a quad - // on the default framebuffer. - ivec2 wsz; - window_get_size(&wsz); - u32 t[] = { - BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_FMT_RGB8), - - // The depth buffer could also be a texture like so: - // BUFFERPARAMETER_SET_PARAMETER( - // BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), - // BUFFERPARAMETER_FMT_DEPTH32 - // ), - BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_render), BUFFERPARAMETER_FMT_DEPTH32F), - }; - FramebufferParameters p[] = { - {.num_textures = 1, .num_renderbuffers = 1, .dimensions = {wsz[0], wsz[1], 0}}, - }; - window_init_renderstack(w, 1, sizeof(t) / sizeof(t[0]), p, t); - - // TODO set if null ..? - w->render_targets->framebuffer_size_callback[0] = &framebuffer_size_callback_default; - w->render_targets->camera_reset_callback[0] = &camera_reset_callback_default; - w->render_targets->cam[0] = &default_camera; - - window_reset_cameras(w, mem, w->render_targets); - } - - u32 first_texture = 0; - - for (usize i = 0; i < w->render_targets->buffer_len; i++) { - if (BUFFERPARAMETER_GET_TYPE(w->render_targets->buffer_parameters[i]) == BufferType_texture) { - first_texture = w->render_targets->buffer[i]; - break; - } - } - - default_quad_renderobject = RenderObject_new( - // Shader - &default_quad_shaders[2], - // Texture - first_texture, /*TODO*/ - // Vertices - shaderbuf, - sizeof(shaderbuf) / sizeof(ShaderBuffer) - ); + + r_reset_pipeline(w); + default_quad_renderobject = init_default_renderobject(w, default_quad_shader); INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state], (get_time() - state_init_time)); -- cgit v1.3