From a335d10f9f51a7b860d1956082674e7872afd34d Mon Sep 17 00:00:00 2001 From: Nathan Anderson Date: Thu, 2 Jan 2025 08:28:46 -0700 Subject: [PATCH] Added scaling and ready to start with sdl_image --- assets/stretch.bmp | Bin 0 -> 307338 bytes {src => assets}/zig.bmp | Bin build.zig | 54 +++++++++++++++++++++------------------- build.zig.zon | 8 ++++++ flake.nix | 10 +++++++- src/main.zig | 47 +++++++++++++++++++++------------- src/png.png | Bin 0 -> 7203 bytes 7 files changed, 76 insertions(+), 43 deletions(-) create mode 100644 assets/stretch.bmp rename {src => assets}/zig.bmp (100%) create mode 100644 src/png.png diff --git a/assets/stretch.bmp b/assets/stretch.bmp new file mode 100644 index 0000000000000000000000000000000000000000..42657b6752b74610ca5fee7d202f5308525fdd7b GIT binary patch literal 307338 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 { - img_pos.x = img_pos.x + 5; + img_pos.x = img_pos.x - 5; }, c.SDLK_RIGHT => { - img_pos.x = img_pos.x - 5; + img_pos.x = img_pos.x + 5; }, else => {}, } @@ -54,8 +56,8 @@ pub fn main() !void { } } _ = c.SDL_FillRect(screen_surface, null, c.SDL_MapRGB(screen_surface.format, 0xff, 0xff, 0xff)); - var dest_rect = c.SDL_Rect{ .x = src_rect.x + img_pos.x, .y = src_rect.y + img_pos.y, .w = src_rect.w, .h = src_rect.h }; - _ = c.SDL_BlitSurface(zig_image, &src_rect, screen_surface, &dest_rect); + var dest_rect = c.SDL_Rect{ .x = src_rect.x + img_pos.x, .y = src_rect.y + img_pos.y, .w = SCREEN_WIDTH, .h = SCREEN_HEIGHT }; + _ = c.SDL_BlitScaled(zig_image, &src_rect, screen_surface, &dest_rect); _ = c.SDL_UpdateWindowSurface(window); c.SDL_Delay(17); @@ -77,22 +79,33 @@ fn init() !void { } window = opt_window.?; - // get surface and fill with white screen_surface = c.SDL_GetWindowSurface(window); -} -fn loadMedia() !void { - const image: [*c]c.struct_SDL_Surface = c.SDL_LoadBMP("src/zig.bmp"); - if (image == null) { - log("Unable to load media: %s\n", c.SDL_GetError()); - return error.SDLLoadError; - } else { - zig_image = image; + const img_flags = c.IMG_INIT_PNG; + if (c.IMG_Init(img_flags) != img_flags) { + log("Unable to initialize SDL Image: %s\n", c.IMG_GetError()); + return error.SDLInitializationFailed; } } +fn loadSurface(path: [*c]const u8) !*c.struct_SDL_Surface { + // TODO check file exists + const loaded_surface: [*c]c.struct_SDL_Surface = c.SDL_LoadBMP(path); + if (loaded_surface == null) { + log("Unable to load media at path %s: %s\n", path, c.SDL_GetError()); + return error.SDLLoadError; + } + defer c.SDL_FreeSurface(loaded_surface); + // Converting 24bit bmp to 32bit to match display + const optimized_surface = c.SDL_ConvertSurface(loaded_surface, screen_surface.format, 0); + if (optimized_surface == null) { + log("Unable to optimize media at path %s: %s\n", path, c.SDL_GetError()); + return error.SDLLoadError; + } + return optimized_surface; +} + fn close() void { - c.SDL_FreeSurface(zig_image); c.SDL_DestroyWindow(window); c.SDL_Quit(); } diff --git a/src/png.png b/src/png.png new file mode 100644 index 0000000000000000000000000000000000000000..134d3a78c0ce28e226274cecb1fd37c035a44cca GIT binary patch literal 7203 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 TwrV{C0|SGntDnm{r-UW|NQPq_ literal 0 HcmV?d00001