diff options
Diffstat (limited to 'Week1-Pacman/src')
-rw-r--r-- | Week1-Pacman/src/demo.c | 47 | ||||
-rw-r--r-- | Week1-Pacman/src/demo.h | 24 |
2 files changed, 71 insertions, 0 deletions
diff --git a/Week1-Pacman/src/demo.c b/Week1-Pacman/src/demo.c new file mode 100644 index 0000000..5ab6c39 --- /dev/null +++ b/Week1-Pacman/src/demo.c @@ -0,0 +1,47 @@ +#include <SDL2/SDL.h> +#include "demo.h" + +void update_demo(struct demo* demo) { + int width, height; + int pixel_width, pixel_height; + + SDL_GetWindowSize(demo->win, &width, &height); + SDL_GetRendererOutputSize(demo->ren, &pixel_width, &pixel_height); + + demo->display_scale_x = pixel_width / width; + demo->display_scale_y = pixel_height / height; +} + +void demo_rendercopy(struct demo* demo, + SDL_Texture* texture, + SDL_Rect* s_rect, + SDL_Rect* d_rect) { + const float scale_x = demo->display_scale_x; + const float scale_y = demo->display_scale_y; + + SDL_Rect new_srect; + SDL_Rect new_drect; + + if(s_rect) { + new_srect = (SDL_Rect){ + .x = s_rect->x * scale_x, + .y = s_rect->y * scale_y, + .w = s_rect->w * scale_x, + .h = s_rect->h * scale_y + }; + } + + if(d_rect) { + new_drect = (SDL_Rect){ + .x = d_rect->x * scale_x, + .y = d_rect->y * scale_y, + .w = d_rect->w * scale_x, + .h = d_rect->h * scale_y + }; + } + + //Handle edge case where s_rect or d_rect are NULL + SDL_RenderCopy(demo->ren, texture, + s_rect ? &new_srect : NULL, + d_rect ?&new_drect : NULL); +} diff --git a/Week1-Pacman/src/demo.h b/Week1-Pacman/src/demo.h new file mode 100644 index 0000000..b276027 --- /dev/null +++ b/Week1-Pacman/src/demo.h @@ -0,0 +1,24 @@ +#ifndef DEMO_H_ +#define DEMO_H_ + +#include <SDL2/SDL.h> + +/* + * An abstraction layer over the typical SDL_Renderer + * is meant to handle display scaling mostly +*/ +struct demo { + SDL_Window* win; + SDL_Renderer* ren; + + float display_scale_x; + float display_scale_y; +}; + +void update_demo(struct demo* demo); +void demo_rendercopy(struct demo* demo, + SDL_Texture* texture, + SDL_Rect* s_rect, + SDL_Rect* d_rect); + +#endif // DEMO_H_ |