ntrop

2D binary entropy visualization inspired by ..cantor.dust..
git clone https://git.sinitax.com/sinitax/ntrop
Log | Files | Refs | sfeed.txt

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:
Mntrop.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); }