From eed5ac7586ced65ab42d082d030f8c60a92c431e Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 25 Jan 2024 21:19:06 -0500 Subject: [PATCH] Make window resizable --- src/app.d | 48 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/src/app.d b/src/app.d index 1cccc59..8c8f3b6 100644 --- a/src/app.d +++ b/src/app.d @@ -13,15 +13,16 @@ ColorShader color_shader; Array spinny_vao; GLuint program_id; mat4 view_matrix; +int window_width; +int window_height; -void init() +private void init() { glActiveTexture(GL_TEXTURE0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glClearColor (1.0, 0.6, 0.0, 0.0); - glViewport(0, 0, WIDTH, HEIGHT); + glClearColor(1.0, 0.6, 0.0, 0.0); spinny_vao = new Array(); spinny_vao.bind(); @@ -69,14 +70,21 @@ fragment: ibo.bind(); } -void display(SDL_Window * window) +private void resize(int width, int height) +{ + window_width = width; + window_height = height; + glViewport(0, 0, width, height); +} + +private void display(SDL_Window * window) { glClear(GL_COLOR_BUFFER_BIT); color_shader.use(); spinny_vao.bind(); view_matrix.make_identity(); - view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0); + view_matrix.scale(window_height / cast(float)window_width, 1.0, 1.0); view_matrix.rotatez(SDL_GetTicks() / 500.0); color_shader.set_view(view_matrix.value_ptr); glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, null); @@ -99,7 +107,7 @@ int main() SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, - SDL_WINDOW_OPENGL); + SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); if (window == null) { @@ -116,17 +124,39 @@ int main() } init(); + resize(WIDTH, HEIGHT); SDL_Event event; +outer: for (;;) { if (SDL_PollEvent(&event)) { - if (event.type == SDL_QUIT) - break; - else if (event.type == SDL_KEYDOWN) + switch (event.type) { + case SDL_QUIT: + break outer; + + case SDL_KEYDOWN: if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) + { + break outer; + } + break; + + case SDL_WINDOWEVENT: + switch (event.window.event) + { + case SDL_WINDOWEVENT_RESIZED: + resize(event.window.data1, event.window.data2); break; + + default: + break; + } + break; + + default: + break; } } display(window);