struct camera_t {
int debug_mode;
+ int blackwhite_mode;
point_t position;
};
camera->position = position;
camera->debug_mode = 0;
+ camera->blackwhite_mode = 0;
return camera;
}
int camera_fill_rect(const camera_t *camera,
SDL_Renderer *render,
- rect_t rect)
+ rect_t rect,
+ color_t color)
{
assert(camera);
assert(render);
const SDL_Rect sdl_rect = rect_for_sdl(
camera_rect(camera, &view_port, rect));
+ const SDL_Color sdl_color = color_for_sdl(camera->blackwhite_mode ? color_desaturate(color) : color);
+
+ if (SDL_SetRenderDrawColor(render, sdl_color.r, sdl_color.g, sdl_color.b, sdl_color.a) < 0) {
+ throw_error(ERROR_TYPE_SDL2);
+ return -1;
+ }
+
if (camera->debug_mode) {
if (SDL_RenderDrawRect(render, &sdl_rect) < 0) {
throw_error(ERROR_TYPE_SDL2);
int camera_draw_rect(const camera_t * camera,
SDL_Renderer *render,
- rect_t rect)
+ rect_t rect,
+ color_t color)
{
assert(camera);
assert(render);
const SDL_Rect sdl_rect = rect_for_sdl(
camera_rect(camera, &view_port, rect));
+ const SDL_Color sdl_color = color_for_sdl(camera->blackwhite_mode ? color_desaturate(color) : color);
+
+ if (SDL_SetRenderDrawColor(render, sdl_color.r, sdl_color.g, sdl_color.b, sdl_color.a) < 0) {
+ throw_error(ERROR_TYPE_SDL2);
+ return -1;
+ }
+
if (SDL_RenderDrawRect(render, &sdl_rect) < 0) {
throw_error(ERROR_TYPE_SDL2);
return -1;
int camera_draw_triangle(const camera_t *camera,
SDL_Renderer *render,
- triangle_t t)
+ triangle_t t,
+ color_t color)
{
assert(camera);
assert(render);
SDL_Rect view_port;
SDL_RenderGetViewport(render, &view_port);
+ const SDL_Color sdl_color = color_for_sdl(camera->blackwhite_mode ? color_desaturate(color) : color);
+
+ if (SDL_SetRenderDrawColor(render, sdl_color.r, sdl_color.g, sdl_color.b, sdl_color.a) < 0) {
+ throw_error(ERROR_TYPE_SDL2);
+ return -1;
+ }
+
if (draw_triangle(render, camera_triangle(camera, &view_port, t)) < 0) {
return -1;
}
int camera_fill_triangle(const camera_t *camera,
SDL_Renderer *render,
- triangle_t t)
+ triangle_t t,
+ color_t color)
{
assert(camera);
assert(render);
SDL_Rect view_port;
SDL_RenderGetViewport(render, &view_port);
+ const SDL_Color sdl_color = color_for_sdl(camera->blackwhite_mode ? color_desaturate(color) : color);
+
+ if (SDL_SetRenderDrawColor(render, sdl_color.r, sdl_color.g, sdl_color.b, sdl_color.a) < 0) {
+ throw_error(ERROR_TYPE_SDL2);
+ return -1;
+ }
+
if (fill_triangle(render, camera_triangle(camera, &view_port, t)) < 0) {
return -1;
}
camera->debug_mode = !camera->debug_mode;
}
+void camera_toggle_blackwhite_mode(camera_t *camera)
+{
+ assert(camera);
+ camera->blackwhite_mode = !camera->blackwhite_mode;
+}
+
/* ---------- Private Function ---------- */
static vec_t effective_ratio(const SDL_Rect *view_port)