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)