Mercurial > sdl-ios-xcode
comparison src/video/SDL_renderer_sw.c @ 1972:a0e278364188
Fixed bug recreating OpenGL textures on window resize
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 06 Aug 2006 07:29:38 +0000 |
parents | 5432b63cc919 |
children | 8055185ae4ed |
comparison
equal
deleted
inserted
replaced
1971:5432b63cc919 | 1972:a0e278364188 |
---|---|
93 }; | 93 }; |
94 | 94 |
95 typedef struct | 95 typedef struct |
96 { | 96 { |
97 Uint32 format; | 97 Uint32 format; |
98 SDL_bool updateSize; | |
98 int current_texture; | 99 int current_texture; |
99 SDL_Texture *texture[3]; | 100 SDL_Texture *texture[3]; |
100 SDL_Surface surface; | 101 SDL_Surface surface; |
101 SDL_Renderer *renderer; | 102 SDL_Renderer *renderer; |
102 SDL_DirtyRectList dirty; | 103 SDL_DirtyRectList dirty; |
274 | 275 |
275 static int | 276 static int |
276 SW_ActivateRenderer(SDL_Renderer * renderer) | 277 SW_ActivateRenderer(SDL_Renderer * renderer) |
277 { | 278 { |
278 SW_RenderData *data = (SW_RenderData *) renderer->driverdata; | 279 SW_RenderData *data = (SW_RenderData *) renderer->driverdata; |
280 SDL_Window *window = SDL_GetWindowFromID(renderer->window); | |
281 int i, n; | |
279 | 282 |
280 if (data->renderer && data->renderer->ActivateRenderer) { | 283 if (data->renderer && data->renderer->ActivateRenderer) { |
281 if (data->renderer->ActivateRenderer(data->renderer) < 0) { | 284 if (data->renderer->ActivateRenderer(data->renderer) < 0) { |
282 return -1; | 285 return -1; |
283 } | 286 } |
284 } | 287 } |
288 if (data->updateSize) { | |
289 /* Recreate the textures for the new window size */ | |
290 if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { | |
291 n = 2; | |
292 } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { | |
293 n = 3; | |
294 } else { | |
295 n = 1; | |
296 } | |
297 for (i = 0; i < n; ++i) { | |
298 if (data->texture[i]) { | |
299 DestroyTexture(data->renderer, data->texture[i]); | |
300 data->texture[i] = 0; | |
301 } | |
302 } | |
303 for (i = 0; i < n; ++i) { | |
304 data->texture[i] = | |
305 CreateTexture(data->renderer, data->format, window->w, | |
306 window->h); | |
307 if (!data->texture[i]) { | |
308 return -1; | |
309 } | |
310 } | |
311 data->updateSize = SDL_FALSE; | |
312 } | |
285 return 0; | 313 return 0; |
286 } | 314 } |
287 | 315 |
288 static int | 316 static int |
289 SW_DisplayModeChanged(SDL_Renderer * renderer) | 317 SW_DisplayModeChanged(SDL_Renderer * renderer) |
290 { | 318 { |
291 SW_RenderData *data = (SW_RenderData *) renderer->driverdata; | 319 SW_RenderData *data = (SW_RenderData *) renderer->driverdata; |
292 SDL_Window *window = SDL_GetWindowFromID(renderer->window); | |
293 int i, n; | |
294 | 320 |
295 if (data->renderer && data->renderer->DisplayModeChanged) { | 321 if (data->renderer && data->renderer->DisplayModeChanged) { |
296 if (data->renderer->DisplayModeChanged(data->renderer) < 0) { | 322 if (data->renderer->DisplayModeChanged(data->renderer) < 0) { |
297 return -1; | 323 return -1; |
298 } | 324 } |
299 } | 325 } |
300 | 326 data->updateSize = SDL_TRUE; |
301 /* Recreate the textures for the new window size */ | |
302 if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) { | |
303 n = 2; | |
304 } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) { | |
305 n = 3; | |
306 } else { | |
307 n = 1; | |
308 } | |
309 for (i = 0; i < n; ++i) { | |
310 if (data->texture[i]) { | |
311 DestroyTexture(data->renderer, data->texture[i]); | |
312 } | |
313 data->texture[i] = | |
314 CreateTexture(data->renderer, data->format, window->w, window->h); | |
315 } | |
316 return 0; | 327 return 0; |
317 } | 328 } |
318 | 329 |
319 static int | 330 static int |
320 SW_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) | 331 SW_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) |