diff options
| author | 0undefined <oscar@nelin.dk> | 2026-02-08 00:48:26 +0000 |
|---|---|---|
| committer | 0undefined <oscar@nelin.dk> | 2026-02-08 00:51:41 +0000 |
| commit | d623fb2cc40cb3648441f1818e172637b108f6a1 (patch) | |
| tree | 6067277ea1d8b590900505894b21d76ba70702e6 /state_mainstate/src/mainstate.c | |
| parent | b8bbf51f27237d9036bf77250043538a65f6dbf4 (diff) | |
Display game on whole window
Making the framebuffer display on its separate quad was pretty easy.
Now it just remains to make a more versatile method for simple 2D
rendering.
A super-simple implementation could be nice for text and simple UI
elements, along with a middle-way allowing for custom shaders.
Diffstat (limited to 'state_mainstate/src/mainstate.c')
| -rw-r--r-- | state_mainstate/src/mainstate.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/state_mainstate/src/mainstate.c b/state_mainstate/src/mainstate.c index b9948c3..a5c7053 100644 --- a/state_mainstate/src/mainstate.c +++ b/state_mainstate/src/mainstate.c @@ -34,7 +34,9 @@ enum GameResources { MyQuadVertexShader, MyQuadFragShader, + MyQuadFullscreenVertexShader, MyQuadShader, + MyFullscreenShader, }; enum blocktypes { @@ -69,6 +71,11 @@ ShaderBuffer shaderbuf_quad[] = { SHADERBUFFER_NEW(f32, COUNT(quad_uv), 2, quad_uv, staticdraw), SHADERBUFFER_NEW(u16, COUNT(quad_ibo), 3, quad_ibo, staticdraw | ShaderBuffer_Type_vertexIndex), }; +ShaderBuffer shaderbuf_quad_fullscreen[] = { + SHADERBUFFER_NEW(f32, COUNT(quad_fullscreen), 2, quad_fullscreen, staticdraw | ShaderBuffer_Type_vertexPosition), + SHADERBUFFER_NEW(f32, COUNT(quad_uv), 2, quad_uv, staticdraw), + SHADERBUFFER_NEW(u16, COUNT(quad_ibo), 3, quad_ibo, staticdraw | ShaderBuffer_Type_vertexIndex), +}; #undef COUNT /* @@ -210,6 +217,7 @@ void mainstate_init(Window *restrict w, mainstate_state *state, void* arg) { static u32 default_shader[] = {MyVertexShader, MyFragmentShader}; static u32 dither_shader[] = {MyVertexShader, MyDitherFragShader}; static u32 quad_shader[] = {MyQuadVertexShader, MyQuadFragShader}; + static u32 quad_fullscreen_shader[] = {MyQuadFullscreenVertexShader, MyQuadFragShader}; /* 0. Declare resources */ static asset_t mainstate_assets[] = { @@ -233,6 +241,9 @@ void mainstate_init(Window *restrict w, mainstate_state *state, void* arg) { [MyQuadFragShader] = Declare_Shader("resources/quad.frag"), [MyQuadShader] = Declare_ShaderProgram( quad_shader, sizeof(quad_shader) / sizeof(quad_shader[0])), + [MyQuadFullscreenVertexShader] = Declare_Shader("resources/quad_fs.vert"), + [MyFullscreenShader] = Declare_ShaderProgram( + quad_fullscreen_shader, sizeof(quad_fullscreen_shader) / sizeof(quad_fullscreen_shader[0])), }; /// Setup the camera @@ -405,6 +416,18 @@ void mainstate_init(Window *restrict w, mainstate_state *state, void* arg) { //r_set_camera(w->render_targets, 0, &state->c); r_set_camera(w->render_targets, 1, &state->c); + // Fokin illegal, the texturename referenced here should in theory change on + // every window/framebbuffer resize where we tear it down and create a new + // one..??? + state->objects[3] = RenderObject_new( + // Shader + get_asset(&state->resources, MyFullscreenShader), + // Texture + w->render_targets->buffer[1], + // Vertices + shaderbuf_quad_fullscreen, + sizeof(shaderbuf_quad_fullscreen) / sizeof(ShaderBuffer) + ); } void* mainstate_free(mainstate_state *state) { @@ -425,6 +448,7 @@ StateType mainstate_update(Window *restrict w, mainstate_state *state, f64 dt) { draw_model(w, 1, &state->terrain.renderobj, (vec4){0,0,0,1}); // Location should, however // Draw UI by their screen XY coordinates, Z is the depth/layering + draw_model(w, 0, &state->objects[3], (vec4){0.0,0.0,0.0,1}); draw_model(w, 0, &state->objects[2], (vec4){-0.5,0.5,0.0,1}); // Move the camera |
