summaryrefslogtreecommitdiff
path: root/src/daw.c
diff options
context:
space:
mode:
authoronelin <oscar@nelin.dk>2025-12-18 22:21:48 +0000
committeronelin <oscar@nelin.dk>2025-12-20 22:53:17 +0000
commit71bca57087f5746aaafba07ccce5b6bbc270b8c1 (patch)
tree039bae97ec38f4101d27b65f5de81c70787fbab6 /src/daw.c
parent49fbbcc95e1234e0eb1464fc877b0264c5fcb9d1 (diff)
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.
Diffstat (limited to 'src/daw.c')
-rw-r--r--src/daw.c176
1 files changed, 9 insertions, 167 deletions
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));