~vcs-imports/libsdl/trunk

« back to all changes in this revision

Viewing changes to src/video/x11/SDL_x11render.c

  • Committer: slouken
  • Date: 2010-01-21 06:21:52 UTC
  • Revision ID: svn-v4:c70aab31-4412-0410-b14c-859654838e24:trunk/SDL:5525
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.

Show diffs side-by-side

added added

removed removed

Lines of Context:
93
93
    Visual *visual;
94
94
    int depth;
95
95
    int scanline_pad;
96
 
    Window window;
 
96
    Window xwindow;
97
97
    Pixmap pixmaps[3];
98
98
    int current_pixmap;
99
99
    Drawable drawable;
153
153
{
154
154
    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
155
155
    SDL_RendererInfo *info = &X11_RenderDriver.info;
156
 
    SDL_DisplayMode *mode = &SDL_CurrentDisplay.desktop_mode;
 
156
    SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode;
157
157
    int i;
158
158
 
159
159
    info->texture_formats[info->num_texture_formats++] = mode->format;
171
171
SDL_Renderer *
172
172
X11_CreateRenderer(SDL_Window * window, Uint32 flags)
173
173
{
174
 
    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
 
174
    SDL_VideoDisplay *display = window->display;
175
175
    SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
176
176
    SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
177
177
    SDL_Renderer *renderer;
199
199
    data->visual = displaydata->visual;
200
200
    data->depth = displaydata->depth;
201
201
    data->scanline_pad = displaydata->scanline_pad;
202
 
    data->window = windowdata->window;
 
202
    data->xwindow = windowdata->xwindow;
203
203
 
204
204
    renderer->DisplayModeChanged = X11_DisplayModeChanged;
205
205
    renderer->CreateTexture = X11_CreateTexture;
221
221
    renderer->DestroyTexture = X11_DestroyTexture;
222
222
    renderer->DestroyRenderer = X11_DestroyRenderer;
223
223
    renderer->info = X11_RenderDriver.info;
224
 
    renderer->window = window->id;
 
224
    renderer->window = window;
225
225
    renderer->driverdata = data;
226
226
 
227
227
    renderer->info.flags = SDL_RENDERER_ACCELERATED;
242
242
    }
243
243
    for (i = 0; i < n; ++i) {
244
244
        data->pixmaps[i] =
245
 
            XCreatePixmap(data->display, data->window, window->w, window->h,
 
245
            XCreatePixmap(data->display, data->xwindow, window->w, window->h,
246
246
                          displaydata->depth);
247
247
        if (data->pixmaps[i] == None) {
248
248
            X11_DestroyRenderer(renderer);
254
254
        data->drawable = data->pixmaps[0];
255
255
        data->makedirty = SDL_TRUE;
256
256
    } else {
257
 
        data->drawable = data->window;
 
257
        data->drawable = data->xwindow;
258
258
        data->makedirty = SDL_FALSE;
259
259
    }
260
260
    data->current_pixmap = 0;
272
272
    /* Create the drawing context */
273
273
    gcv.graphics_exposures = False;
274
274
    data->gc =
275
 
        XCreateGC(data->display, data->window, GCGraphicsExposures, &gcv);
 
275
        XCreateGC(data->display, data->xwindow, GCGraphicsExposures, &gcv);
276
276
    if (!data->gc) {
277
277
        X11_DestroyRenderer(renderer);
278
278
        SDL_SetError("XCreateGC() failed");
286
286
X11_DisplayModeChanged(SDL_Renderer * renderer)
287
287
{
288
288
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
289
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
 
289
    SDL_Window *window = renderer->window;
290
290
    int i, n;
291
291
 
292
292
    if (renderer->info.flags & SDL_RENDERER_SINGLEBUFFER) {
306
306
    }
307
307
    for (i = 0; i < n; ++i) {
308
308
        data->pixmaps[i] =
309
 
            XCreatePixmap(data->display, data->window, window->w, window->h,
 
309
            XCreatePixmap(data->display, data->xwindow, window->w, window->h,
310
310
                          data->depth);
311
311
        if (data->pixmaps[i] == None) {
312
312
            SDL_SetError("XCreatePixmap() failed");
325
325
X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
326
326
{
327
327
    X11_RenderData *renderdata = (X11_RenderData *) renderer->driverdata;
328
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
329
 
    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
 
328
    SDL_Window *window = renderer->window;
 
329
    SDL_VideoDisplay *display = window->display;
330
330
    X11_TextureData *data;
331
331
    int pitch_alignmask = ((renderdata->scanline_pad / 8) - 1);
332
332
 
425
425
        }
426
426
    } else {
427
427
        data->pixmap =
428
 
            XCreatePixmap(renderdata->display, renderdata->window, texture->w,
 
428
            XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w,
429
429
                          texture->h, renderdata->depth);
430
430
        if (data->pixmap == None) {
431
431
            X11_DestroyTexture(renderer, texture);
607
607
                     int count)
608
608
{
609
609
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
610
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
 
610
    SDL_Window *window = renderer->window;
611
611
    unsigned long foreground;
612
612
    XPoint *xpoints, *xpoint;
613
613
    int i, xcount;
657
657
                    int count)
658
658
{
659
659
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
660
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
 
660
    SDL_Window *window = renderer->window;
661
661
    SDL_Rect clip, rect;
662
662
    unsigned long foreground;
663
663
    XPoint *xpoints, *xpoint;
795
795
X11_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
796
796
{
797
797
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
798
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
 
798
    SDL_Window *window = renderer->window;
799
799
    SDL_Rect clip, rect;
800
800
    unsigned long foreground;
801
801
    XRectangle *xrects, *xrect;
840
840
X11_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
841
841
{
842
842
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
843
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
 
843
    SDL_Window *window = renderer->window;
844
844
    SDL_Rect clip, rect;
845
845
    unsigned long foreground;
846
846
    XRectangle *xrects, *xrect;
998
998
                     Uint32 format, void * pixels, int pitch)
999
999
{
1000
1000
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
1001
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
1002
 
    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
 
1001
    SDL_Window *window = renderer->window;
 
1002
    SDL_VideoDisplay *display = window->display;
1003
1003
    Uint32 screen_format = display->current_mode.format;
1004
1004
    XImage *image;
1005
1005
 
1019
1019
                      Uint32 format, const void * pixels, int pitch)
1020
1020
{
1021
1021
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
1022
 
    SDL_Window *window = SDL_GetWindowFromID(renderer->window);
1023
 
    SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
 
1022
    SDL_Window *window = renderer->window;
 
1023
    SDL_VideoDisplay *display = window->display;
1024
1024
    Uint32 screen_format = display->current_mode.format;
1025
1025
    XImage *image;
1026
1026
    void *image_pixels;
1067
1067
    if (!(renderer->info.flags & SDL_RENDERER_SINGLEBUFFER)) {
1068
1068
        for (dirty = data->dirty.list; dirty; dirty = dirty->next) {
1069
1069
            const SDL_Rect *rect = &dirty->rect;
1070
 
            XCopyArea(data->display, data->drawable, data->window,
 
1070
            XCopyArea(data->display, data->drawable, data->xwindow,
1071
1071
                      data->gc, rect->x, rect->y, rect->w, rect->h,
1072
1072
                      rect->x, rect->y);
1073
1073
        }