From 04e394a7645e3dcb54a6cb2f6f51540277ce2a34 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 3 Apr 2021 01:14:39 +0200 Subject: [PATCH] Added the camera to the 05th excerscise. --- 05_sdl_software_renderer/camera.cpp | 24 ++++++++++++++++++++++++ 05_sdl_software_renderer/camera.h | 22 ++++++++++++++++++++++ 05_sdl_software_renderer/compile.sh | 3 ++- 06_sdl_application/camera.cpp | 2 +- 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 05_sdl_software_renderer/camera.cpp create mode 100644 05_sdl_software_renderer/camera.h diff --git a/05_sdl_software_renderer/camera.cpp b/05_sdl_software_renderer/camera.cpp new file mode 100644 index 0000000..f21407f --- /dev/null +++ b/05_sdl_software_renderer/camera.cpp @@ -0,0 +1,24 @@ +#include "camera.h" + +#include "renderer.h" + +void Camera::bind() { + Renderer::get_singleton()->set_integer_scaling(integer_scaling); + + Renderer::get_singleton()->set_scale(scale_w, scale_h); + + Renderer::get_singleton()->set_viewport(viewport); + Renderer::get_singleton()->set_clip_rect(&clip_rect); +} + +Camera::Camera() { + integer_scaling = false; + + scale_w = 1; + scale_h = 1; + + viewport = Renderer::get_singleton()->get_viewport(); + clip_rect = Renderer::get_singleton()->get_clip_rect(); +} +Camera::~Camera() { +} diff --git a/05_sdl_software_renderer/camera.h b/05_sdl_software_renderer/camera.h new file mode 100644 index 0000000..dea8d09 --- /dev/null +++ b/05_sdl_software_renderer/camera.h @@ -0,0 +1,22 @@ +#ifndef CAMERA_H +#define CAMERA_H + +#include + +#include "rect2.h" + +class Camera { +public: + void bind(); + + Camera(); + virtual ~Camera(); + + bool integer_scaling; + float scale_w; + float scale_h; + Rect2 viewport; + Rect2 clip_rect; +}; + +#endif \ No newline at end of file diff --git a/05_sdl_software_renderer/compile.sh b/05_sdl_software_renderer/compile.sh index 05d9fc7..dd5dd5a 100755 --- a/05_sdl_software_renderer/compile.sh +++ b/05_sdl_software_renderer/compile.sh @@ -22,8 +22,9 @@ g++ -Wall -g $(sdl2-config --cflags) -c renderer.cpp -o obj/renderer.o g++ -Wall -g $(sdl2-config --cflags) -c image.cpp -o obj/image.o g++ -Wall -g $(sdl2-config --cflags) -c texture.cpp -o obj/texture.o g++ -Wall -g $(sdl2-config --cflags) -c sprite.cpp -o obj/sprite.o +g++ -Wall -g $(sdl2-config --cflags) -c camera.cpp -o obj/camera.o g++ -Wall -g $(sdl2-config --cflags) -c main.cpp -o obj/main.o -g++ -o bin/program obj/math.o obj/rect2.o obj/color.o obj/string.o obj/renderer.o obj/image.o obj/texture.o obj/sprite.o obj/main.o $(sdl2-config --libs) +g++ -o bin/program obj/math.o obj/rect2.o obj/color.o obj/string.o obj/renderer.o obj/image.o obj/texture.o obj/sprite.o obj/camera.o obj/main.o $(sdl2-config --libs) diff --git a/06_sdl_application/camera.cpp b/06_sdl_application/camera.cpp index 569d2fb..f21407f 100644 --- a/06_sdl_application/camera.cpp +++ b/06_sdl_application/camera.cpp @@ -18,7 +18,7 @@ Camera::Camera() { scale_h = 1; viewport = Renderer::get_singleton()->get_viewport(); - clip_rect = Renderer::get_singleton()->get_viewport(); + clip_rect = Renderer::get_singleton()->get_clip_rect(); } Camera::~Camera() { }