Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
533 lines (474 loc) · 18.1 KB

SDL_renderer_sw.c

File metadata and controls

533 lines (474 loc) · 18.1 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2006 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#include "SDL_config.h"
#include "SDL_video.h"
#include "SDL_sysvideo.h"
Jul 10, 2006
Jul 10, 2006
26
#include "SDL_rect_c.h"
Jun 18, 2006
Jun 18, 2006
27
#include "SDL_yuv_sw_c.h"
28
29
30
31
32
33
34
/* SDL surface based renderer implementation */
static SDL_Renderer *SDL_SW_CreateRenderer(SDL_Window * window, Uint32 flags);
static int SDL_SW_CreateTexture(SDL_Renderer * renderer,
SDL_Texture * texture);
Jun 14, 2006
Jun 14, 2006
35
36
37
static int SDL_SW_QueryTexturePixels(SDL_Renderer * renderer,
SDL_Texture * texture, void **pixels,
int *pitch);
Jun 14, 2006
Jun 14, 2006
38
static int SDL_SW_SetTexturePalette(SDL_Renderer * renderer,
Jun 15, 2006
Jun 15, 2006
39
40
41
42
SDL_Texture * texture,
const SDL_Color * colors, int firstcolor,
int ncolors);
static int SDL_SW_GetTexturePalette(SDL_Renderer * renderer,
Jun 14, 2006
Jun 14, 2006
43
44
SDL_Texture * texture, SDL_Color * colors,
int firstcolor, int ncolors);
45
static int SDL_SW_UpdateTexture(SDL_Renderer * renderer,
Jun 15, 2006
Jun 15, 2006
46
SDL_Texture * texture, const SDL_Rect * rect,
47
48
const void *pixels, int pitch);
static int SDL_SW_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
49
50
const SDL_Rect * rect, int markDirty,
void **pixels, int *pitch);
51
52
53
54
static void SDL_SW_UnlockTexture(SDL_Renderer * renderer,
SDL_Texture * texture);
static void SDL_SW_DirtyTexture(SDL_Renderer * renderer,
SDL_Texture * texture, int numrects,
Jun 15, 2006
Jun 15, 2006
55
const SDL_Rect * rects);
56
57
static void SDL_SW_SelectRenderTexture(SDL_Renderer * renderer,
SDL_Texture * texture);
Jun 30, 2006
Jun 30, 2006
58
59
static int SDL_SW_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 color);
60
static int SDL_SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
61
62
63
64
65
66
67
68
69
const SDL_Rect * srcrect,
const SDL_Rect * dstrect, int blendMode,
int scaleMode);
static int SDL_SW_RenderReadPixels(SDL_Renderer * renderer,
const SDL_Rect * rect, void *pixels,
int pitch);
static int SDL_SW_RenderWritePixels(SDL_Renderer * renderer,
const SDL_Rect * rect, const void *pixels,
int pitch);
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
static void SDL_SW_RenderPresent(SDL_Renderer * renderer);
static void SDL_SW_DestroyTexture(SDL_Renderer * renderer,
SDL_Texture * texture);
static void SDL_SW_DestroyRenderer(SDL_Renderer * renderer);
SDL_RenderDriver SDL_SW_RenderDriver = {
SDL_SW_CreateRenderer,
{
"software",
(SDL_Renderer_PresentDiscard |
SDL_Renderer_PresentCopy |
SDL_Renderer_PresentFlip2 |
SDL_Renderer_PresentFlip3 | SDL_Renderer_RenderTarget),
(SDL_TextureBlendMode_None |
SDL_TextureBlendMode_Mask | SDL_TextureBlendMode_Blend),
(SDL_TextureScaleMode_None | SDL_TextureScaleMode_Fast),
11,
{
SDL_PixelFormat_Index8,
SDL_PixelFormat_RGB555,
SDL_PixelFormat_RGB565,
SDL_PixelFormat_RGB888,
SDL_PixelFormat_BGR888,
SDL_PixelFormat_ARGB8888,
SDL_PixelFormat_RGBA8888,
SDL_PixelFormat_ABGR8888,
SDL_PixelFormat_BGRA8888,
SDL_PixelFormat_YUY2,
SDL_PixelFormat_UYVY},
Jul 10, 2006
Jul 10, 2006
100
101
0,
0}
102
103
104
105
106
107
108
109
};
typedef struct
{
int current_screen;
SDL_Surface *screens[3];
SDL_Surface *target;
SDL_Renderer *renderer;
Jul 10, 2006
Jul 10, 2006
110
SDL_DirtyRectList dirty;
111
112
113
114
115
} SDL_SW_RenderData;
SDL_Renderer *
SDL_SW_CreateRenderer(SDL_Window * window, Uint32 flags)
{
Jun 24, 2006
Jun 24, 2006
116
117
SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
SDL_DisplayMode *displayMode = &display->current_mode;
118
119
120
121
122
123
124
125
126
127
128
129
SDL_Renderer *renderer;
SDL_SW_RenderData *data;
int i, n;
int bpp;
Uint32 Rmask, Gmask, Bmask, Amask;
if (!SDL_PixelFormatEnumToMasks
(displayMode->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
SDL_SetError("Unknown display format");
return NULL;
}
Jul 10, 2006
Jul 10, 2006
130
renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer));
131
132
133
134
135
136
137
138
139
140
141
142
143
144
if (!renderer) {
SDL_OutOfMemory();
return NULL;
}
data = (SDL_SW_RenderData *) SDL_malloc(sizeof(*data));
if (!data) {
SDL_SW_DestroyRenderer(renderer);
SDL_OutOfMemory();
return NULL;
}
SDL_zerop(data);
renderer->CreateTexture = SDL_SW_CreateTexture;
Jun 14, 2006
Jun 14, 2006
145
renderer->QueryTexturePixels = SDL_SW_QueryTexturePixels;
Jun 14, 2006
Jun 14, 2006
146
renderer->SetTexturePalette = SDL_SW_SetTexturePalette;
Jun 15, 2006
Jun 15, 2006
147
renderer->GetTexturePalette = SDL_SW_GetTexturePalette;
148
149
150
151
152
153
154
155
156
157
158
159
160
renderer->UpdateTexture = SDL_SW_UpdateTexture;
renderer->LockTexture = SDL_SW_LockTexture;
renderer->UnlockTexture = SDL_SW_UnlockTexture;
renderer->DirtyTexture = SDL_SW_DirtyTexture;
renderer->SelectRenderTexture = SDL_SW_SelectRenderTexture;
renderer->RenderFill = SDL_SW_RenderFill;
renderer->RenderCopy = SDL_SW_RenderCopy;
renderer->RenderReadPixels = SDL_SW_RenderReadPixels;
renderer->RenderWritePixels = SDL_SW_RenderWritePixels;
renderer->RenderPresent = SDL_SW_RenderPresent;
renderer->DestroyTexture = SDL_SW_DestroyTexture;
renderer->DestroyRenderer = SDL_SW_DestroyRenderer;
renderer->info = SDL_SW_RenderDriver.info;
Jun 24, 2006
Jun 24, 2006
161
renderer->window = window->id;
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
renderer->driverdata = data;
renderer->info.flags = SDL_Renderer_RenderTarget;
if (flags & SDL_Renderer_PresentFlip2) {
renderer->info.flags |= SDL_Renderer_PresentFlip2;
n = 2;
} else if (flags & SDL_Renderer_PresentFlip3) {
renderer->info.flags |= SDL_Renderer_PresentFlip3;
n = 3;
} else {
renderer->info.flags |= SDL_Renderer_PresentCopy;
n = 1;
}
for (i = 0; i < n; ++i) {
data->screens[i] =
SDL_CreateRGBSurface(0, window->w, window->h, bpp, Rmask, Gmask,
Bmask, Amask);
if (!data->screens[i]) {
SDL_SW_DestroyRenderer(renderer);
return NULL;
}
Jun 24, 2006
Jun 24, 2006
184
SDL_SetSurfacePalette(data->screens[i], display->palette);
185
186
187
188
189
}
data->current_screen = 0;
data->target = data->screens[0];
/* Find a render driver that we can use to display data */
Jun 24, 2006
Jun 24, 2006
190
191
for (i = 0; i < display->num_render_drivers; ++i) {
SDL_RenderDriver *driver = &display->render_drivers[i];
192
193
194
195
196
197
198
199
if (driver->info.name != SDL_SW_RenderDriver.info.name) {
data->renderer =
driver->CreateRenderer(window, SDL_Renderer_PresentDiscard);
if (data->renderer) {
break;
}
}
}
Jun 24, 2006
Jun 24, 2006
200
if (i == display->num_render_drivers) {
201
202
203
204
205
206
207
SDL_SW_DestroyRenderer(renderer);
SDL_SetError("Couldn't find display render driver");
return NULL;
}
return renderer;
}
Jun 14, 2006
Jun 14, 2006
208
static int
209
210
211
SDL_SW_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
{
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
Jun 18, 2006
Jun 18, 2006
212
213
214
215
216
217
218
219
if (texture->access == SDL_TextureAccess_Render) {
SDL_SetError("Rendering to YUV format textures is not supported");
return -1;
}
texture->driverdata = SDL_SW_CreateYUVTexture(texture);
} else {
int bpp;
Uint32 Rmask, Gmask, Bmask, Amask;
220
Jun 18, 2006
Jun 18, 2006
221
222
223
224
225
226
227
228
229
if (!SDL_PixelFormatEnumToMasks
(texture->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask)) {
SDL_SetError("Unknown texture format");
return -1;
}
texture->driverdata =
SDL_CreateRGBSurface(0, texture->w, texture->h, bpp, Rmask, Gmask,
Bmask, Amask);
230
231
}
Jun 18, 2006
Jun 18, 2006
232
if (!texture->driverdata) {
233
234
235
236
237
return -1;
}
return 0;
}
Jun 14, 2006
Jun 14, 2006
238
static int
Jun 14, 2006
Jun 14, 2006
239
240
241
SDL_SW_QueryTexturePixels(SDL_Renderer * renderer, SDL_Texture * texture,
void **pixels, int *pitch)
{
Jun 18, 2006
Jun 18, 2006
242
243
244
245
246
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
return SDL_SW_QueryYUVTexturePixels((SDL_SW_YUVTexture *) texture->
driverdata, pixels, pitch);
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
Jun 14, 2006
Jun 14, 2006
247
Jun 18, 2006
Jun 18, 2006
248
249
250
251
*pixels = surface->pixels;
*pitch = surface->pitch;
return 0;
}
Jun 14, 2006
Jun 14, 2006
252
253
}
Jun 14, 2006
Jun 14, 2006
254
255
static int
SDL_SW_SetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
256
257
const SDL_Color * colors, int firstcolor,
int ncolors)
Jun 14, 2006
Jun 14, 2006
258
{
Jun 18, 2006
Jun 18, 2006
259
260
261
262
263
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
SDL_SetError("YUV textures don't have a palette");
return -1;
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
Jun 14, 2006
Jun 14, 2006
264
Jun 18, 2006
Jun 18, 2006
265
266
267
return SDL_SetPaletteColors(surface->format->palette, colors,
firstcolor, ncolors);
}
Jun 14, 2006
Jun 14, 2006
268
269
}
Jun 15, 2006
Jun 15, 2006
270
271
272
273
static int
SDL_SW_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
SDL_Color * colors, int firstcolor, int ncolors)
{
Jun 18, 2006
Jun 18, 2006
274
275
276
277
278
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
SDL_SetError("YUV textures don't have a palette");
return -1;
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
Jun 15, 2006
Jun 15, 2006
279
Jun 18, 2006
Jun 18, 2006
280
281
282
283
SDL_memcpy(colors, &surface->format->palette->colors[firstcolor],
ncolors * sizeof(*colors));
return 0;
}
Jun 15, 2006
Jun 15, 2006
284
285
}
Jun 14, 2006
Jun 14, 2006
286
static int
287
SDL_SW_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
288
const SDL_Rect * rect, const void *pixels, int pitch)
289
{
Jun 18, 2006
Jun 18, 2006
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
return SDL_SW_UpdateYUVTexture((SDL_SW_YUVTexture *) texture->
driverdata, rect, pixels, pitch);
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
Uint8 *src, *dst;
int row;
size_t length;
src = (Uint8 *) pixels;
dst =
(Uint8 *) surface->pixels + rect->y * surface->pitch +
rect->x * surface->format->BytesPerPixel;
length = rect->w * surface->format->BytesPerPixel;
for (row = 0; row < rect->h; ++row) {
SDL_memcpy(dst, src, length);
src += pitch;
dst += surface->pitch;
}
return 0;
310
311
312
}
}
Jun 14, 2006
Jun 14, 2006
313
static int
314
SDL_SW_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
315
316
const SDL_Rect * rect, int markDirty, void **pixels,
int *pitch)
317
{
Jun 18, 2006
Jun 18, 2006
318
319
320
321
322
323
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
return SDL_SW_LockYUVTexture((SDL_SW_YUVTexture *) texture->
driverdata, rect, markDirty, pixels,
pitch);
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
324
Jun 18, 2006
Jun 18, 2006
325
326
327
328
329
330
*pixels =
(void *) ((Uint8 *) surface->pixels + rect->y * surface->pitch +
rect->x * surface->format->BytesPerPixel);
*pitch = surface->pitch;
return 0;
}
331
332
}
Jun 14, 2006
Jun 14, 2006
333
static void
334
335
SDL_SW_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture)
{
Jun 18, 2006
Jun 18, 2006
336
337
338
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
SDL_SW_UnlockYUVTexture((SDL_SW_YUVTexture *) texture->driverdata);
}
339
340
}
Jun 14, 2006
Jun 14, 2006
341
static void
342
SDL_SW_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
343
int numrects, const SDL_Rect * rects)
344
345
346
{
}
Jun 14, 2006
Jun 14, 2006
347
static void
348
349
350
SDL_SW_SelectRenderTexture(SDL_Renderer * renderer, SDL_Texture * texture)
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
Jun 17, 2006
Jun 17, 2006
351
352
353
354
355
356
if (texture) {
data->target = (SDL_Surface *) texture->driverdata;
} else {
data->target = data->screens[data->current_screen];
}
357
358
}
Jun 30, 2006
Jun 30, 2006
359
static int
Jun 15, 2006
Jun 15, 2006
360
361
SDL_SW_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect,
Uint32 color)
362
363
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
Jun 15, 2006
Jun 15, 2006
364
SDL_Rect real_rect = *rect;
365
366
Uint8 r, g, b, a;
Jul 10, 2006
Jul 10, 2006
367
368
SDL_AddDirtyRect(&data->dirty, rect);
369
370
371
372
373
374
a = (Uint8) ((color >> 24) & 0xFF);
r = (Uint8) ((color >> 16) & 0xFF);
g = (Uint8) ((color >> 8) & 0xFF);
b = (Uint8) (color & 0xFF);
color = SDL_MapRGBA(data->target->format, r, g, b, a);
Jun 30, 2006
Jun 30, 2006
375
return SDL_FillRect(data->target, &real_rect, color);
376
377
}
Jun 14, 2006
Jun 14, 2006
378
static int
379
SDL_SW_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
Jun 15, 2006
Jun 15, 2006
380
381
const SDL_Rect * srcrect, const SDL_Rect * dstrect,
int blendMode, int scaleMode)
382
383
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
Jun 24, 2006
Jun 24, 2006
384
385
SDL_Window *window = SDL_GetWindowFromID(renderer->window);
SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
386
Jul 10, 2006
Jul 10, 2006
387
388
SDL_AddDirtyRect(&data->dirty, dstrect);
Jun 18, 2006
Jun 18, 2006
389
390
391
392
393
394
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
SDL_Surface *target = data->target;
void *pixels =
(Uint8 *) target->pixels + dstrect->y * target->pitch +
dstrect->x * target->format->BytesPerPixel;
return SDL_SW_CopyYUVToRGB((SDL_SW_YUVTexture *) texture->driverdata,
Jun 24, 2006
Jun 24, 2006
395
396
srcrect, display->current_mode.format,
dstrect->w, dstrect->h, pixels,
Jun 18, 2006
Jun 18, 2006
397
target->pitch);
398
} else {
Jun 18, 2006
Jun 18, 2006
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
SDL_Rect real_srcrect = *srcrect;
SDL_Rect real_dstrect = *dstrect;
if (blendMode &
(SDL_TextureBlendMode_Mask | SDL_TextureBlendMode_Blend)) {
SDL_SetAlpha(surface, SDL_SRCALPHA, 0);
} else {
SDL_SetAlpha(surface, 0, 0);
}
if (scaleMode != SDL_TextureScaleMode_None &&
(srcrect->w != dstrect->w || srcrect->h != dstrect->h)) {
return SDL_SoftStretch(surface, &real_srcrect, data->target,
&real_dstrect);
} else {
return SDL_LowerBlit(surface, &real_srcrect, data->target,
&real_dstrect);
}
417
418
419
}
}
Jun 14, 2006
Jun 14, 2006
420
static int
Jun 15, 2006
Jun 15, 2006
421
SDL_SW_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
void *pixels, int pitch)
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
SDL_Surface *surface = data->target;
Uint8 *src, *dst;
int row;
size_t length;
src =
(Uint8 *) surface->pixels + rect->y * surface->pitch +
rect->x * surface->format->BytesPerPixel;
dst = (Uint8 *) pixels;
length = rect->w * surface->format->BytesPerPixel;
for (row = 0; row < rect->h; ++row) {
SDL_memcpy(dst, src, length);
src += surface->pitch;
dst += pitch;
}
return 0;
}
Jun 14, 2006
Jun 14, 2006
443
static int
Jun 15, 2006
Jun 15, 2006
444
SDL_SW_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect,
445
446
447
448
449
450
451
452
const void *pixels, int pitch)
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
SDL_Surface *surface = data->target;
Uint8 *src, *dst;
int row;
size_t length;
Jul 10, 2006
Jul 10, 2006
453
454
SDL_AddDirtyRect(&data->dirty, rect);
455
456
457
458
459
460
461
462
463
464
465
466
467
src = (Uint8 *) pixels;
dst =
(Uint8 *) surface->pixels + rect->y * surface->pitch +
rect->x * surface->format->BytesPerPixel;
length = rect->w * surface->format->BytesPerPixel;
for (row = 0; row < rect->h; ++row) {
SDL_memcpy(dst, src, length);
src += pitch;
dst += surface->pitch;
}
return 0;
}
Jun 14, 2006
Jun 14, 2006
468
static void
469
470
471
472
SDL_SW_RenderPresent(SDL_Renderer * renderer)
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
SDL_Surface *surface = data->screens[data->current_screen];
Jul 10, 2006
Jul 10, 2006
473
SDL_DirtyRect *dirty;
474
475
476
int new_screen;
/* Send the data to the display */
Jul 10, 2006
Jul 10, 2006
477
478
479
480
481
482
483
484
485
for (dirty = data->dirty.list; dirty; dirty = dirty->next) {
void *pixels =
(void *) ((Uint8 *) surface->pixels +
dirty->rect.y * surface->pitch +
dirty->rect.x * surface->format->BytesPerPixel);
data->renderer->RenderWritePixels(data->renderer, &dirty->rect,
pixels, surface->pitch);
}
SDL_ClearDirtyRects(&data->dirty);
486
487
data->renderer->RenderPresent(data->renderer);
Jul 10, 2006
Jul 10, 2006
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
/* Update the flipping chain, if any */
if (renderer->info.flags & SDL_Renderer_PresentFlip2) {
new_screen = (data->current_screen + 1) % 2;
} else if (renderer->info.flags & SDL_Renderer_PresentFlip3) {
new_screen = (data->current_screen + 1) % 3;
} else {
new_screen = 0;
}
if (data->target == data->screens[data->current_screen]) {
data->target = data->screens[new_screen];
}
data->current_screen = new_screen;
}
Jun 14, 2006
Jun 14, 2006
503
static void
504
505
SDL_SW_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
{
Jun 18, 2006
Jun 18, 2006
506
507
508
509
if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
SDL_SW_DestroyYUVTexture((SDL_SW_YUVTexture *) texture->driverdata);
} else {
SDL_Surface *surface = (SDL_Surface *) texture->driverdata;
510
Jun 18, 2006
Jun 18, 2006
511
512
SDL_FreeSurface(surface);
}
513
514
}
Jun 14, 2006
Jun 14, 2006
515
static void
516
517
518
519
520
521
522
523
524
525
526
SDL_SW_DestroyRenderer(SDL_Renderer * renderer)
{
SDL_SW_RenderData *data = (SDL_SW_RenderData *) renderer->driverdata;
int i;
if (data) {
for (i = 0; i < SDL_arraysize(data->screens); ++i) {
if (data->screens[i]) {
SDL_FreeSurface(data->screens[i]);
}
}
Jul 10, 2006
Jul 10, 2006
527
SDL_FreeDirtyRects(&data->dirty);
528
529
530
531
532
533
SDL_free(data);
}
SDL_free(renderer);
}
/* vi: set ts=4 sw=4 expandtab: */