| 179 | } |
| 180 | |
| 181 | SDL_bool |
| 182 | Draw(DrawState *s) |
| 183 | { |
| 184 | SDL_Rect viewport; |
| 185 | SDL_Texture *target; |
| 186 | |
| 187 | SDL_RenderGetViewport(s->renderer, &viewport); |
| 188 | |
| 189 | target = SDL_CreateTexture(s->renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, viewport.w, viewport.h); |
| 190 | if (!target) { |
| 191 | SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create render target texture: %s\n", SDL_GetError()); |
| 192 | return SDL_FALSE; |
| 193 | } |
| 194 | SDL_SetRenderTarget(s->renderer, target); |
| 195 | |
| 196 | /* Draw the background */ |
| 197 | SDL_RenderCopy(s->renderer, s->background, NULL, NULL); |
| 198 | |
| 199 | /* Scale and draw the sprite */ |
| 200 | s->sprite_rect.w += s->scale_direction; |
| 201 | s->sprite_rect.h += s->scale_direction; |
| 202 | if (s->scale_direction > 0) { |
| 203 | if (s->sprite_rect.w >= viewport.w || s->sprite_rect.h >= viewport.h) { |
| 204 | s->scale_direction = -1; |
| 205 | } |
| 206 | } else { |
| 207 | if (s->sprite_rect.w <= 1 || s->sprite_rect.h <= 1) { |
| 208 | s->scale_direction = 1; |
| 209 | } |
| 210 | } |
| 211 | s->sprite_rect.x = (viewport.w - s->sprite_rect.w) / 2; |
| 212 | s->sprite_rect.y = (viewport.h - s->sprite_rect.h) / 2; |
| 213 | |
| 214 | SDL_RenderCopy(s->renderer, s->sprite, NULL, &s->sprite_rect); |
| 215 | |
| 216 | SDL_SetRenderTarget(s->renderer, NULL); |
| 217 | SDL_RenderCopy(s->renderer, target, NULL, NULL); |
| 218 | SDL_DestroyTexture(target); |
| 219 | |
| 220 | /* Update the screen! */ |
| 221 | SDL_RenderPresent(s->renderer); |
| 222 | return SDL_TRUE; |
| 223 | } |
| 224 | |
| 225 | void |
| 226 | loop() |
no test coverage detected