diff --git a/ball.png b/ball.png new file mode 100644 index 0000000..f786d52 Binary files /dev/null and b/ball.png differ diff --git a/main.c b/main.c new file mode 100644 index 0000000..4b44392 --- /dev/null +++ b/main.c @@ -0,0 +1,122 @@ +#include "aliases.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define WINDOW_WIDTH 800 +#define WINDOW_HEIGHT 600 + +#define IMAGE_WIDTH 300 +#define IMAGE_HEIGHT 300 + +typedef struct { + u64 size; + u8 *buf; +} img_t; + +img_t load_image(const char *filepath); +SDL_Texture *load_texture(SDL_Renderer *renderer, const char *filepath); + +int main(void) { + SDL_Init(SDL_INIT_EVERYTHING); + IMG_Init(IMG_INIT_PNG); + + SDL_Window *window = + SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN); + + SDL_Renderer *renderer = SDL_CreateRenderer( + window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + + bool running = true; + + SDL_Event event = {0}; + + SDL_Texture *texture1 = IMG_LoadTexture(renderer, "ball.png"); + SDL_Texture *texture2 = load_texture(renderer, "ball.png"); + + SDL_Rect dest1 = { + .x = 50, + .y = 150, + .w = IMAGE_WIDTH, + .h = IMAGE_HEIGHT, + }; + SDL_Rect dest2 = { + .x = 450, + .y = 150, + .w = IMAGE_WIDTH, + .h = IMAGE_HEIGHT, + }; + + while (running) { + while (SDL_PollEvent(&event)) { + switch (event.type) { + case SDL_QUIT: + running = false; + break; + } + } + + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + + SDL_RenderClear(renderer); + + SDL_RenderCopy(renderer, texture1, NULL, &dest1); + SDL_RenderCopy(renderer, texture2, NULL, &dest2); + + SDL_RenderPresent(renderer); + } + + SDL_DestroyRenderer(renderer); + + SDL_DestroyWindow(window); + + IMG_Quit(); + SDL_Quit(); + + return 0; +} + +img_t load_image(const char *filepath) { + FILE *fp = fopen(filepath, "rb"); + if (!fp) { + return (img_t){0}; + } + + img_t img = {0}; + + fseek(fp, 0, SEEK_END); + + img.size = ftell(fp); + + fseek(fp, 0, SEEK_SET); + + img.buf = (u8 *)malloc(img.size); + + fread((void *)(img.buf), img.size, 1, fp); + + fclose(fp); + + return img; +} + +SDL_Texture *load_texture(SDL_Renderer *renderer, const char *filepath) { + img_t img = load_image("ball.png"); + if (!(img.buf)) { + return NULL; + } + + SDL_RWops *ctx = SDL_RWFromMem(img.buf, img.size); + SDL_Texture *texture = IMG_LoadTexture_RW(renderer, ctx, 1); + + free(img.buf); + + return texture; +}