about summary refs log tree commit diff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/main.c b/main.c
new file mode 100644
index 0000000..7845ac4
--- /dev/null
+++ b/main.c
@@ -0,0 +1,113 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <SDL2/SDL.h>
+#include <time.h>
+
+#include "include/perlin.h"
+
+#define WIDTH 700
+#define HEIGHT 500
+
+//TODO: ADD ZOOM
+//TODO: add rgb from args, size from args
+
+int main(int argc, char** argv);
+uint32_t getargb(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+
+int main(int argc, char** argv)
+{
+    SDL_Window* window = NULL;
+    SDL_Init(SDL_INIT_VIDEO);
+    window = SDL_CreateWindow("Perlin Noise Visualizer", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, SDL_WINDOW_SHOWN );
+
+    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
+    SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_NONE);
+    SDL_RenderSetLogicalSize(renderer, WIDTH, HEIGHT);
+    SDL_Texture* sdlTexture = SDL_CreateTexture(renderer,
+    SDL_PIXELFORMAT_ARGB8888,
+    SDL_TEXTUREACCESS_STREAMING, WIDTH, HEIGHT);
+    SDL_SetTextureBlendMode(sdlTexture, SDL_BLENDMODE_BLEND);
+
+    srand(time(NULL));
+
+    static int seedx = 523213;//rand();
+    static int seedy = 1;//rand();
+
+    load:
+    seedx += 10000;
+    seedy += 50000;
+    printf("Generating perlin noise...\n");
+    uint32_t* pixels = malloc(sizeof *pixels * WIDTH * HEIGHT);
+    for(int i = 0, counter = 0; i < HEIGHT; i++) //no counter?
+        for(int j = 0; j < WIDTH; j++)
+            pixels[counter++] = getargb(214, 56, 203, (perlin_noise(i + seedx, j + seedy)-(-1))*(255-0)/(1-(-1))+ 0);
+
+    reload:
+    SDL_UpdateTexture(sdlTexture, NULL, pixels, WIDTH * sizeof(uint32_t));
+    SDL_RenderClear(renderer);
+    static double zoom_value = 1;
+    printf("zoom is %f\n", zoom_value);
+    SDL_Rect zoom = { 0 };
+    zoom.h = HEIGHT * zoom_value;
+    zoom.w = WIDTH * zoom_value;
+    //zoom.x = -WIDTH;
+    //zoom.y = -HEIGHT; //? https://wiki.libsdl.org/SDL_Rect
+    SDL_RenderCopy(renderer, sdlTexture, NULL, &zoom);
+    SDL_RenderPresent(renderer);
+
+    while(1)
+    {
+        SDL_Event e;
+                while (SDL_PollEvent(&e))
+                {
+                    switch(e.type)
+                    {
+                        case SDL_QUIT:
+                            exit(0);
+                            break;
+                        case SDL_KEYDOWN:
+                            switch(e.key.keysym.sym)
+                            {
+                                case SDLK_ESCAPE:
+                                case SDLK_q: exit(0); break;
+                                case SDLK_F5:
+                                case SDLK_r: goto load; break;
+                            }
+                            break;
+                       case SDL_MOUSEWHEEL:
+                        if(e.wheel.y > 0) // scroll up
+                        {
+                            printf("scroll up! (%d, %d)\n", e.motion.x, e.motion.y);
+                            zoom_value += 0.1;
+                            goto reload;
+                        }
+                        else if(e.wheel.y < 0) // scroll down
+                        {
+                            printf("scroll down! (%d, %d)\n", e.motion.x, e.motion.y); //https://stackoverflow.com/questions/49111054/how-to-get-mouse-position-on-mouse-wheel-event
+                            zoom_value -= 0.1;
+                            zoom_value = zoom_value < 1.0 ? 1.0 : zoom_value;
+                            goto reload;
+                        }
+                        break;
+                    }
+                }
+    }
+
+    free(pixels);
+    SDL_DestroyWindow(window);
+    SDL_Quit();
+
+    return 0;
+}
+
+uint32_t getargb(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
+{
+    uint32_t res = 0;
+    res |= a << 24;
+    res |= b << 16;
+    res |= g << 8;
+    res |= r;
+
+    return res;
+}