shithub: m8c

Download patch

ref: ea7727d3b68920cfa96cae9ada2961a5fe1c0eda
parent: d47bf0e01b84f6c16165dbcedeef9286ee0d3b3a
author: laamaa <jonne.kokkonen@gmail.com>
date: Tue Apr 15 06:55:37 EDT 2025

add a timer to cube update, force clear renderer on cube destroy

--- a/src/fx_cube.c
+++ b/src/fx_cube.c
@@ -1,5 +1,6 @@
 #include "SDL2_inprint.h"
 #include <SDL3/SDL.h>
+#include <SDL3/SDL_timer.h>
 #include <time.h>
 
 #include <math.h>
@@ -60,8 +61,10 @@
 
   SDL_Texture *og_target = SDL_GetRenderTarget(fx_renderer);
 
-  texture_size.x = (int)SDL_GetNumberProperty(SDL_GetTextureProperties(og_target),SDL_PROP_TEXTURE_WIDTH_NUMBER, 0);
-  texture_size.y = (int)SDL_GetNumberProperty(SDL_GetTextureProperties(og_target),SDL_PROP_TEXTURE_HEIGHT_NUMBER, 0);
+  texture_size.x = (int)SDL_GetNumberProperty(SDL_GetTextureProperties(og_target),
+                                              SDL_PROP_TEXTURE_WIDTH_NUMBER, 0);
+  texture_size.y = (int)SDL_GetNumberProperty(SDL_GetTextureProperties(og_target),
+                                              SDL_PROP_TEXTURE_HEIGHT_NUMBER, 0);
 
   texture_cube = SDL_CreateTexture(fx_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET,
                                    texture_size.x, texture_size.y);
@@ -92,36 +95,50 @@
 }
 
 void fx_cube_destroy() {
+  // Free resources
   SDL_DestroyTexture(texture_cube);
   SDL_DestroyTexture(texture_text);
-}
 
-void fx_cube_update() {
-  SDL_FPoint points[24];
-  int points_counter = 0;
-  SDL_Texture *og_texture = SDL_GetRenderTarget(fx_renderer);
-
-  SDL_SetRenderTarget(fx_renderer, texture_cube);
+  // Force clear renderer
+  SDL_SetRenderTarget(fx_renderer, NULL);
   SDL_SetRenderDrawColor(fx_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
   SDL_RenderClear(fx_renderer);
+}
 
-  const unsigned int seconds = SDL_GetTicks() / 1000;
-  const float scale_factor = 1 + SDL_sinf((float)seconds) * (float)0.005;
+// Update the cube texture every 16ms>. Returns 1 if cube was updated, 0 if no changes were made.
+int fx_cube_update() {
+  static Uint64 ticks_last_update = 0;
 
-  scale(scale_factor, scale_factor, scale_factor);
-  rotate_cube(M_PI / 180, M_PI / 270);
+  if (SDL_GetTicks() - ticks_last_update >= 16) {
+    ticks_last_update = SDL_GetTicks();
+    SDL_FPoint points[24];
+    int points_counter = 0;
+    SDL_Texture *og_texture = SDL_GetRenderTarget(fx_renderer);
 
-  for (int i = 0; i < 12; i++) {
-    const float *p1 = nodes[edges[i][0]];
-    const float *p2 = nodes[edges[i][1]];
-    points[points_counter++] = (SDL_FPoint){p1[0] + center_x, nodes[edges[i][0]][1] + center_y};
-    points[points_counter++] = (SDL_FPoint){p2[0] + center_x, p2[1] + center_y};
-  }
+    SDL_SetRenderTarget(fx_renderer, texture_cube);
+    SDL_SetRenderDrawColor(fx_renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
+    SDL_RenderClear(fx_renderer);
 
-  SDL_RenderTexture(fx_renderer, texture_text, NULL, NULL);
-  SDL_SetRenderDrawColor(fx_renderer, line_color.r, line_color.g, line_color.b, line_color.a);
-  SDL_RenderLines(fx_renderer, points, 24);
+    const unsigned int seconds = SDL_GetTicks() / 1000;
+    const float scale_factor = 1 + SDL_sinf((float)seconds) * (float)0.005;
 
-  SDL_SetRenderTarget(fx_renderer, og_texture);
-  SDL_RenderTexture(fx_renderer, texture_cube, NULL, NULL);
+    scale(scale_factor, scale_factor, scale_factor);
+    rotate_cube(M_PI / 180, M_PI / 270);
+
+    for (int i = 0; i < 12; i++) {
+      const float *p1 = nodes[edges[i][0]];
+      const float *p2 = nodes[edges[i][1]];
+      points[points_counter++] = (SDL_FPoint){p1[0] + center_x, nodes[edges[i][0]][1] + center_y};
+      points[points_counter++] = (SDL_FPoint){p2[0] + center_x, p2[1] + center_y};
+    }
+
+    SDL_RenderTexture(fx_renderer, texture_text, NULL, NULL);
+    SDL_SetRenderDrawColor(fx_renderer, line_color.r, line_color.g, line_color.b, line_color.a);
+    SDL_RenderLines(fx_renderer, points, 24);
+
+    SDL_SetRenderTarget(fx_renderer, og_texture);
+    SDL_RenderTexture(fx_renderer, texture_cube, NULL, NULL);
+    return 1;
+  }
+  return 0;
 }
--- a/src/fx_cube.h
+++ b/src/fx_cube.h
@@ -6,5 +6,5 @@
                   unsigned int texture_width, unsigned int texture_height,
                   unsigned int font_glyph_width);
 void fx_cube_destroy();
-void fx_cube_update();
+int fx_cube_update();
 #endif
\ No newline at end of file
--