commit 32acf8e0eec26560c3025a3a503428b2e5f5c9af
parent 041d3dd55e0d7d5a0f01a15b1bcfc3e63a70b661
Author: Louis Burda <quent.burda@gmail.com>
Date: Sun, 12 Feb 2023 05:00:41 +0100
Use texture instead of DrawPixel
Diffstat:
M | ntrop.c | | | 50 | +++++++++++++++++++++++++++++++++++++------------- |
1 file changed, 37 insertions(+), 13 deletions(-)
diff --git a/ntrop.c b/ntrop.c
@@ -156,6 +156,7 @@ void
vis(void)
{
Color *data_colors;
+ Image window_image;
size_t pos, len;
double mouse_move;
size_t data_x, data_y;
@@ -178,6 +179,7 @@ vis(void)
window_height = 600;
InitWindow(window_width, window_height, window_title);
+ window_image = GenImageColor(window_width, window_height, (Color) { 0 });
data_width = window_width / 2;
data_height = data_len / data_width + !!(data_len % data_width);
zoom_x = 0;
@@ -196,6 +198,7 @@ vis(void)
data_height = data_len / data_width + !!(data_len % data_width);
zoom_x = (data_width - window_width / zoom) / 2.F;
zoom_y = (data_height - window_height / zoom) / 2.F;
+ ImageResize(&window_image, window_width, window_height);
}
mouse_x = MIN(MAX(0, GetMouseX()), window_width);
@@ -232,15 +235,22 @@ vis(void)
show_pos ^= IsKeyPressed(KEY_T);
- if (IsKeyDown(KEY_LEFT))
- zoom_x -= 20.F / zoom;
- else if (IsKeyDown(KEY_RIGHT))
- zoom_x += 20.F / zoom;
-
- if (IsKeyDown(KEY_UP))
- zoom_y -= 20.F / zoom;
- else if (IsKeyDown(KEY_DOWN))
- zoom_y += 20.F / zoom;
+ if (IsKeyDown(KEY_LEFT_ALT)) {
+ if (IsKeyDown(KEY_LEFT) && data_width > 0)
+ data_width -= 1;
+ else if (IsKeyDown(KEY_RIGHT))
+ data_width += 1;
+ } else {
+ if (IsKeyDown(KEY_LEFT))
+ zoom_x -= 20.F / zoom;
+ else if (IsKeyDown(KEY_RIGHT))
+ zoom_x += 20.F / zoom;
+
+ if (IsKeyDown(KEY_UP))
+ zoom_y -= 20.F / zoom;
+ else if (IsKeyDown(KEY_DOWN))
+ zoom_y += 20.F / zoom;
+ }
if (IsKeyPressed(KEY_P)) {
show_value = !show_value;
@@ -250,9 +260,8 @@ vis(void)
data_colors = entropy_colors;
}
- BeginDrawing();
- ClearBackground(BLACK);
+ ImageClearBackground(&window_image, BLACK);
for (y = 0; y < window_height; y++) {
data_y = (size_t) (zoom_y + y / zoom);
@@ -265,11 +274,21 @@ vis(void)
continue;
data_pos = data_y * data_width + data_x;
- if (data_pos < data_len)
- DrawPixel(x, y, data_colors[data_pos]);
+ if (data_pos < data_len) {
+ ImageDrawPixel(&window_image,
+ x, y, data_colors[data_pos]);
+ }
}
}
+ Texture2D tex = LoadTextureFromImage(window_image);
+
+ BeginDrawing();
+
+ ClearBackground(BLACK);
+
+ DrawTexture(tex, 0, 0, WHITE);
+
if (show_pos) {
data_x = zoom_x + mouse_x / zoom;
data_y = zoom_y + mouse_y / zoom;
@@ -286,9 +305,14 @@ vis(void)
}
EndDrawing();
+
+ UnloadTexture(tex);
}
+ UnloadImage(window_image);
+
CloseWindow();
+
free(window_title);
}