diff options
| author | onelin <oscar@nelin.dk> | 2025-11-29 22:04:52 +0000 |
|---|---|---|
| committer | onelin <oscar@nelin.dk> | 2025-12-18 21:14:16 +0000 |
| commit | 07116cd28845c3e589ab7e99f32d0ab96dd5cf4d (patch) | |
| tree | 0382594d2d58376daa527aaa131d81d8273834a5 /src/daw.c | |
| parent | c2335eab1db200481c3e81664f27f9244579397c (diff) | |
TMP Rework rendering
Diffstat (limited to 'src/daw.c')
| -rw-r--r-- | src/daw.c | 124 |
1 files changed, 115 insertions, 9 deletions
@@ -41,10 +41,8 @@ Instance* GLOBAL_PLATFORM = NULL; -static Camera default_camera = { - .pos = {3, 0, 0}, - .dir = {1, 1, 1}, -}; +#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; @@ -159,8 +157,74 @@ 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" +"" +"layout(location = 0) in vec3 vertexPosition_modelspace;" +"layout(location = 1) in vec2 vertexUV;" +"" +"out vec2 UV;" +"" +"void main() {" +" gl_Position = vec4(vertexPosition_modelspace, 0, 0);" +"" +" UV = vertexUV;" +"}"; + +static const char* default_quad_shader_fragment_src = +"#version 330 core" +"" +"// Ouput data" +"in vec2 UV;" +"out vec3 color;" +"" +"uniform sampler2D textureSampler;" +"" +"void main() {" +" color = texture(textureSampler, UV).rgb;" +"}"; + + 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); + RenderObject default_quad_renderobject; + if (p == NULL) { ERROR("Platform is uninitialized.\n"); INFO("initialize with `engine_init`"); @@ -172,6 +236,7 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { StateType state = initial_state; Window* w = p->window; + Camera default_renderbuffer_camera = default_camera; { u64 state_init_time = get_time(); @@ -187,8 +252,28 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_TEXTURE_2D) }; window_init_renderstack(w, 1, 1, p, t); - w->render_targets->cam[0] = default_camera; + //w->render_targets->cam[0] = &default_renderbuffer_camera; } + + 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) + ); + INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state], (get_time() - state_init_time)); } @@ -248,15 +333,36 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { // 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. - FramebufferParameters p[] = { + FramebufferParameters fb_params[] = { {.num_attached_buffers = 1, {200,200}}, }; u32 t[] = { BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_TEXTURE_2D) }; - window_init_renderstack(w, 1, 1, p, t); - w->render_targets->cam[0] = default_camera; + window_init_renderstack(w, 1, 1, fb_params, t); + + //w->render_targets->cam[0] = &default_camera; } + + 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) + ); + INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state], (get_time() - state_init_time)); } @@ -265,7 +371,7 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) { /* Render */ const u64 rendertime_begin = get_time(); render_begin(p->window); - render_present(p->window); + render_present(p->window, &default_quad_renderobject); const u64 rendertime_dt = get_time() - rendertime_begin; /* Regulate FPS */ |
