src/video/x11/SDL_x11render.c
author Sunny Sachanandani <sunnysachanandani@gmail.com>
Mon, 19 Jul 2010 21:02:49 +0530
changeset 4605 0b3a509c53a0
parent 4604 d7535d7a40ea
child 4606 4e145485971b
permissions -rw-r--r--
Respect environment variables.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     1
/*
4584
9907c8cc6015 X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4583
diff changeset
     2
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     3
    SDL - Simple DirectMedia Layer
3697
f7b03b6838cb Fixed bug #926
Sam Lantinga <slouken@libsdl.org>
parents: 3685
diff changeset
     4
    Copyright (C) 1997-2010 Sam Lantinga
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     5
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     6
    This library is free software; you can redistribute it and/or
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     7
    modify it under the terms of the GNU Lesser General Public
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     8
    License as published by the Free Software Foundation; either
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
     9
    version 2.1 of the License, or (at your option) any later version.
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    10
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    11
    This library is distributed in the hope that it will be useful,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    14
    Lesser General Public License for more details.
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    15
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    16
    You should have received a copy of the GNU Lesser General Public
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    17
    License along with this library; if not, write to the Free Software
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    18
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    19
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    20
    Sam Lantinga
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    21
    slouken@libsdl.org
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    22
*/
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    23
#include "SDL_config.h"
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    24
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    25
#if SDL_VIDEO_RENDER_X11
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    26
3543
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
    27
#include <limits.h> /* For INT_MIN and INT_MAX */
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
    28
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    29
#include "SDL_x11video.h"
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    30
#include "../SDL_rect_c.h"
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    31
#include "../SDL_pixels_c.h"
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    32
#include "../SDL_yuv_sw_c.h"
4598
66e13a224bd6 Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4597
diff changeset
    33
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    34
/* X11 renderer implementation */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    35
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    36
static SDL_Renderer *X11_CreateRenderer(SDL_Window * window, Uint32 flags);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    37
static int X11_DisplayModeChanged(SDL_Renderer * renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    38
static int X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    39
static int X11_QueryTexturePixels(SDL_Renderer * renderer,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    40
                                  SDL_Texture * texture, void **pixels,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    41
                                  int *pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    42
static int X11_SetTextureBlendMode(SDL_Renderer * renderer,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    43
                                   SDL_Texture * texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    44
static int X11_SetTextureScaleMode(SDL_Renderer * renderer,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    45
                                   SDL_Texture * texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    46
static int X11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    47
                             const SDL_Rect * rect, const void *pixels,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    48
                             int pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    49
static int X11_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    50
                           const SDL_Rect * rect, int markDirty,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    51
                           void **pixels, int *pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    52
static void X11_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture);
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
    53
static int X11_SetDrawBlendMode(SDL_Renderer * renderer);
3596
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    54
static int X11_RenderDrawPoints(SDL_Renderer * renderer,
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    55
                                const SDL_Point * points, int count);
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    56
static int X11_RenderDrawLines(SDL_Renderer * renderer,
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    57
                               const SDL_Point * points, int count);
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    58
static int X11_RenderDrawRects(SDL_Renderer * renderer,
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    59
                               const SDL_Rect ** rects, int count);
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    60
static int X11_RenderFillRects(SDL_Renderer * renderer,
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
    61
                               const SDL_Rect ** rects, int count);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    62
static int X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    63
                          const SDL_Rect * srcrect, const SDL_Rect * dstrect);
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
    64
static int X11_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
    65
                                Uint32 format, void * pixels, int pitch);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
    66
static int X11_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
    67
                                 Uint32 format, const void * pixels, int pitch);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    68
static void X11_RenderPresent(SDL_Renderer * renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    69
static void X11_DestroyTexture(SDL_Renderer * renderer,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    70
                               SDL_Texture * texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    71
static void X11_DestroyRenderer(SDL_Renderer * renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    72
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    73
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    74
SDL_RenderDriver X11_RenderDriver = {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    75
    X11_CreateRenderer,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    76
    {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    77
     "x11",
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    78
     (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY |
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    79
      SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 |
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    80
      SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED),
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    81
     SDL_TEXTUREMODULATE_NONE,
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
    82
     SDL_BLENDMODE_NONE,
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    83
     SDL_TEXTURESCALEMODE_NONE,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    84
     0,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    85
     {0},
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    86
     0,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    87
     0}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    88
};
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    89
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    90
typedef struct
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    91
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    92
    Display *display;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    93
    int screen;
2870
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
    94
    Visual *visual;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
    95
    int depth;
2916
ffdd533f7add Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents: 2901
diff changeset
    96
    int scanline_pad;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
    97
    Window xwindow;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
    98
    Pixmap pixmaps[3];
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
    99
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   100
    Pixmap stencil;
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   101
    Pixmap brush;
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   102
    Picture brush_pict;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
   103
    Picture xwindow_pict;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   104
    Picture pixmap_picts[3];
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
   105
    Picture drawable_pict;
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   106
    Picture stencil_pict;
4588
0ddd78496d68 Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4587
diff changeset
   107
    int blend_op;
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   108
    XRenderPictFormat *xwindow_pict_fmt;
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   109
    XRenderPictFormat *drawable_pict_fmt;
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   110
    GC stencil_gc;
4584
9907c8cc6015 X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4583
diff changeset
   111
    SDL_bool use_xrender;
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   112
#ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   113
    SDL_bool use_xdamage;
4602
4fbf64d504cf Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4600
diff changeset
   114
    Damage stencil_damage;
4fbf64d504cf Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4600
diff changeset
   115
    XserverRegion stencil_parts;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
   116
#endif
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   117
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   118
    int current_pixmap;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   119
    Drawable drawable;
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
   120
    SDL_PixelFormat format;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   121
    GC gc;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   122
    SDL_DirtyRectList dirty;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   123
    SDL_bool makedirty;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   124
} X11_RenderData;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   125
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   126
typedef struct
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   127
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   128
    SDL_SW_YUVTexture *yuv;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   129
    Uint32 format;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   130
    Pixmap pixmap;
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   131
    int depth;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   132
    Visual *visual;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   133
    GC gc;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
   134
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
   135
    Picture picture;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   136
    XRenderPictFormat* picture_fmt;
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   137
    int blend_op;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
   138
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   139
    XImage *image;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   140
#ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   141
    /* MIT shared memory extension information */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   142
    XShmSegmentInfo shminfo;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   143
#endif
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   144
    XImage *scaling_image;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   145
    void *pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   146
    int pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   147
} X11_TextureData;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   148
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   149
#ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   150
/* Shared memory error handler routine */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   151
static int shm_error;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   152
static int (*X_handler) (Display *, XErrorEvent *) = NULL;
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   153
static int
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   154
shm_errhandler(Display * d, XErrorEvent * e)
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   155
{
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   156
    if (e->error_code == BadAccess) {
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   157
        shm_error = True;
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   158
        return (0);
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   159
    } else {
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   160
        return (X_handler(d, e));
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   161
    }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   162
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   163
#endif /* ! NO_SHARED_MEMORY */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   164
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   165
static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   166
UpdateYUVTextureData(SDL_Texture * texture)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   167
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   168
    X11_TextureData *data = (X11_TextureData *) texture->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   169
    SDL_Rect rect;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   170
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   171
    rect.x = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   172
    rect.y = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   173
    rect.w = texture->w;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   174
    rect.h = texture->h;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   175
    SDL_SW_CopyYUVToRGB(data->yuv, &rect, data->format, texture->w,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   176
                        texture->h, data->pixels, data->pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   177
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   178
4605
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   179
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   180
static SDL_bool
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   181
CheckXRender(Display *display, int *major, int *minor) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   182
    const char *env;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   183
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   184
    *major = *minor = 0;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   185
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   186
    env = SDL_getenv("SDL_VIDEO_X11_XRENDER");
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   187
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   188
    if (env && !SDL_atoi(env)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   189
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   190
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   191
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   192
    if (!SDL_X11_HAVE_XRENDER) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   193
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   194
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   195
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   196
    if (!XRenderQueryVersion(display, major, minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   197
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   198
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   199
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   200
    return SDL_TRUE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   201
}
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   202
#endif
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   203
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   204
#ifdef SDL_VIDEO_DRIVER_X11_XFIXES
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   205
static SDL_bool
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   206
CheckXFixes(Display *display, int *major, int *minor) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   207
    const char *env;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   208
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   209
    *major = *minor = 0;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   210
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   211
    env = SDL_getenv("SDL_VIDEO_X11_XFIXES");
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   212
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   213
    if (env && !SDL_atoi(env)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   214
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   215
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   216
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   217
    if (!SDL_X11_HAVE_XFIXES) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   218
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   219
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   220
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   221
    if (!XFixesQueryVersion(display, major, minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   222
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   223
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   224
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   225
    return SDL_TRUE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   226
}
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   227
#endif
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   228
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   229
#ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   230
static SDL_bool
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   231
CheckXDamage(Display *display, int *major, int *minor) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   232
    const char *env;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   233
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   234
    *major = *minor = 0;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   235
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   236
    env = SDL_getenv("SDL_VIDEO_X11_XDAMAGE");
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   237
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   238
    if (env && !SDL_atoi(env)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   239
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   240
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   241
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   242
    if (!SDL_X11_HAVE_XDAMAGE) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   243
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   244
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   245
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   246
    if (!XDamageQueryVersion(display, major, minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   247
        return SDL_FALSE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   248
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   249
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   250
    return SDL_TRUE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   251
}
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   252
#endif
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   253
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   254
void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   255
X11_AddRenderDriver(_THIS)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   256
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   257
    SDL_RendererInfo *info = &X11_RenderDriver.info;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   258
    SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode;
4605
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   259
    SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
3520
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
   260
    int i;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   261
2870
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   262
    info->texture_formats[info->num_texture_formats++] = mode->format;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   263
    info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YV12;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   264
    info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_IYUV;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   265
    info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YUY2;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   266
    info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_UYVY;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   267
    info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YVYU;
4605
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   268
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   269
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   270
    int major, minor;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   271
    if (CheckXRender(data->display, &major, &minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   272
        info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   273
    }
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   274
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   275
3520
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
   276
    for (i = 0; i < _this->num_displays; ++i) {
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
   277
        SDL_AddRenderDriver(&_this->displays[i], &X11_RenderDriver);
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
   278
    }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   279
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   280
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   281
SDL_Renderer *
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   282
X11_CreateRenderer(SDL_Window * window, Uint32 flags)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   283
{
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   284
    SDL_VideoDisplay *display = window->display;
2870
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   285
    SDL_DisplayData *displaydata = (SDL_DisplayData *) display->driverdata;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   286
    SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   287
    SDL_Renderer *renderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   288
    X11_RenderData *data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   289
    XGCValues gcv;
4596
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   290
    gcv.graphics_exposures = False;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   291
    int i, n;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   292
    int bpp;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   293
    Uint32 Rmask, Gmask, Bmask, Amask;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   294
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   295
    renderer = (SDL_Renderer *) SDL_calloc(1, sizeof(*renderer));
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   296
    if (!renderer) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   297
        SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   298
        return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   299
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   300
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   301
    data = (X11_RenderData *) SDL_calloc(1, sizeof(*data));
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   302
    if (!data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   303
        X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   304
        SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   305
        return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   306
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   307
    data->display = windowdata->videodata->display;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   308
    data->screen = displaydata->screen;
2870
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   309
    data->visual = displaydata->visual;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   310
    data->depth = displaydata->depth;
2916
ffdd533f7add Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents: 2901
diff changeset
   311
    data->scanline_pad = displaydata->scanline_pad;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   312
    data->xwindow = windowdata->xwindow;
4590
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   313
    
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   314
    renderer->DisplayModeChanged = X11_DisplayModeChanged;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   315
    renderer->CreateTexture = X11_CreateTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   316
    renderer->QueryTexturePixels = X11_QueryTexturePixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   317
    renderer->SetTextureBlendMode = X11_SetTextureBlendMode;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   318
    renderer->SetTextureScaleMode = X11_SetTextureScaleMode;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   319
    renderer->UpdateTexture = X11_UpdateTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   320
    renderer->LockTexture = X11_LockTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   321
    renderer->UnlockTexture = X11_UnlockTexture;
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
   322
    renderer->SetDrawBlendMode = X11_SetDrawBlendMode;
3596
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
   323
    renderer->RenderDrawPoints = X11_RenderDrawPoints;
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
   324
    renderer->RenderDrawLines = X11_RenderDrawLines;
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
   325
    renderer->RenderDrawRects = X11_RenderDrawRects;
f638ded38b8a Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents: 3559
diff changeset
   326
    renderer->RenderFillRects = X11_RenderFillRects;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   327
    renderer->RenderCopy = X11_RenderCopy;
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
   328
    renderer->RenderReadPixels = X11_RenderReadPixels;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
   329
    renderer->RenderWritePixels = X11_RenderWritePixels;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   330
    renderer->RenderPresent = X11_RenderPresent;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   331
    renderer->DestroyTexture = X11_DestroyTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   332
    renderer->DestroyRenderer = X11_DestroyRenderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   333
    renderer->info = X11_RenderDriver.info;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   334
    renderer->window = window;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   335
    renderer->driverdata = data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   336
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   337
    renderer->info.flags = SDL_RENDERER_ACCELERATED;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   338
4590
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   339
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4605
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   340
    int major, minor;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   341
    data->use_xrender = CheckXRender(data->display, &major, &minor);
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   342
#ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   343
    if (CheckXDamage(data->display, &major, &minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   344
        if (CheckXFixes(data->display, &major, &minor)) {
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   345
            if (major >= 2)
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   346
                data->use_xdamage = SDL_TRUE;
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   347
        }
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   348
    }
4605
0b3a509c53a0 Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4604
diff changeset
   349
#endif
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   350
    if (data->use_xrender) {
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   351
        /* Find the PictFormat from the visual.
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   352
         * Should be an RGB PictFormat most of the time. */
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   353
        data->xwindow_pict_fmt = XRenderFindVisualFormat(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   354
                                                         data->visual);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   355
        if (!data->xwindow_pict_fmt) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   356
            SDL_SetError("XRenderFindVisualFormat() failed");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   357
            return NULL;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   358
        }
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   359
        data->xwindow_pict = XRenderCreatePicture(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   360
                                                  data->xwindow,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   361
                                                  data->xwindow_pict_fmt,
4590
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   362
                                                  0, NULL);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   363
        if (!data->xwindow_pict) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   364
            SDL_SetError("XRenderCreatePicture() failed");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   365
            return NULL;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   366
        }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   367
        // FIXME: Clear the window. Is this required?
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   368
        XRenderComposite(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   369
                         PictOpClear,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   370
                         data->xwindow_pict,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   371
                         None,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   372
                         data->xwindow_pict,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   373
                         0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   374
                         0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   375
                         0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   376
                         window->w, window->h);
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   377
        /* Add some blending modes to the list of supported blending modes */
4590
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   378
        renderer->info.blend_modes |=
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   379
            (SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MASK);
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   380
        /* Create a clip mask that is used for rendering primitives. */
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   381
        data->stencil = XCreatePixmap(data->display, data->xwindow,
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   382
                                   window->w, window->h, 8);
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   383
        
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   384
        /* Create the GC for the clip mask. */
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   385
        data->stencil_gc = XCreateGC(data->display, data->stencil,
4596
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   386
                                  GCGraphicsExposures, &gcv);
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   387
        XSetBackground(data->display, data->stencil_gc, 0x00);
4602
4fbf64d504cf Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4600
diff changeset
   388
        XSetForeground(data->display, data->stencil_gc, 0x00);
4fbf64d504cf Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4600
diff changeset
   389
        XFillRectangle(data->display, data->stencil, data->stencil_gc,
4fbf64d504cf Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4600
diff changeset
   390
                       0, 0, window->w, window->h);
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   391
        XSetForeground(data->display, data->stencil_gc, 0xFF);
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   392
        data->stencil_pict =
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   393
            XRenderCreatePicture(data->display, data->stencil,
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   394
                                 XRenderFindStandardFormat(data->display,
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   395
                                                           PictStandardA8),
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   396
                                 0, NULL);
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   397
#ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   398
        if (data->use_xdamage) {
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   399
            data->stencil_damage =
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   400
                XDamageCreate(data->display, data->stencil, XDamageReportNonEmpty);
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   401
            XDamageSubtract(data->display, data->stencil_damage, None, data->stencil_parts);
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   402
        }
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   403
#endif
4597
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   404
        data->brush =
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   405
            XCreatePixmap(data->display, data->xwindow, 1, 1, 32);
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   406
        XRenderPictureAttributes brush_attr;
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   407
        brush_attr.repeat = RepeatNormal;
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   408
        data->brush_pict =
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   409
            XRenderCreatePicture(data->display, data->brush,
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   410
                                 XRenderFindStandardFormat(data->display,
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   411
                                                           PictStandardARGB32),
95be206b3cb7 Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4596
diff changeset
   412
                                 CPRepeat, &brush_attr);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   413
        // Set the default blending mode.
4590
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   414
        renderer->blendMode = SDL_BLENDMODE_BLEND;
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   415
        data->blend_op = PictOpOver;
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   416
    }
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   417
#endif
1ad70fb49fcb Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4589
diff changeset
   418
    
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   419
    if (flags & SDL_RENDERER_SINGLEBUFFER) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   420
        renderer->info.flags |=
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   421
            (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   422
        n = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   423
    } else if (flags & SDL_RENDERER_PRESENTFLIP2) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   424
        renderer->info.flags |= SDL_RENDERER_PRESENTFLIP2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   425
        n = 2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   426
    } else if (flags & SDL_RENDERER_PRESENTFLIP3) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   427
        renderer->info.flags |= SDL_RENDERER_PRESENTFLIP3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   428
        n = 3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   429
    } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   430
        renderer->info.flags |= SDL_RENDERER_PRESENTCOPY;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   431
        n = 1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   432
    }
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   433
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   434
    if (data->use_xrender) {
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   435
        if (n > 0)
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   436
            data->drawable_pict_fmt =
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   437
                XRenderFindStandardFormat(data->display, PictStandardARGB32);
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   438
        else
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   439
            data->drawable_pict_fmt = data->xwindow_pict_fmt;
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   440
    }
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   441
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   442
    for (i = 0; i < n; ++i) {
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   443
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   444
        if (data->use_xrender) {
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   445
            data->pixmaps[i] = XCreatePixmap(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   446
                                             data->xwindow,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   447
                                             window->w,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   448
                                             window->h,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   449
                                             32);
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   450
        }
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   451
        else
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   452
#endif
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   453
        {
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   454
            data->pixmaps[i] =
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   455
                XCreatePixmap(data->display, data->xwindow, window->w, window->h,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   456
                              displaydata->depth);
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   457
        }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   458
        if (data->pixmaps[i] == None) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   459
            X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   460
            SDL_SetError("XCreatePixmap() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   461
            return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   462
        }
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   463
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   464
        if (data->use_xrender) {
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   465
            /* Create xrender pictures for each of the pixmaps
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   466
             * and clear the pixmaps. */
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   467
            data->pixmap_picts[i] = 
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   468
                XRenderCreatePicture(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   469
                                     data->pixmaps[i],
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   470
                                     XRenderFindStandardFormat(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   471
                                                               PictStandardARGB32),
4583
5c925d4f220f X11_DrawRects now uses a very hacky way of drawing rectangles with XRender. This will be improved in some time.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4582
diff changeset
   472
                                     0, None);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   473
            if (!data->pixmap_picts[i]) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   474
                SDL_SetError("XRenderCreatePicture() failed");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   475
                return NULL;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   476
            }
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   477
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   478
            XRenderComposite(data->display,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   479
                             PictOpClear,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   480
                             data->pixmap_picts[i],
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   481
                             None,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   482
                             data->pixmap_picts[i],
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   483
                             0, 0,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   484
                             0, 0,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   485
                             0, 0,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   486
                             window->w, window->h);
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   487
        }
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   488
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   489
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   490
    if (n > 0) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   491
        data->drawable = data->pixmaps[0];
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   492
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4584
9907c8cc6015 X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4583
diff changeset
   493
        if(data->use_xrender == SDL_TRUE)
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
   494
            data->drawable_pict = data->pixmap_picts[0];
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   495
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   496
        data->makedirty = SDL_TRUE;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   497
    } else {
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   498
        data->drawable = data->xwindow;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   499
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4584
9907c8cc6015 X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4583
diff changeset
   500
        if(data->use_xrender == SDL_TRUE)
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
   501
            data->drawable_pict = data->xwindow_pict;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   502
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   503
        data->makedirty = SDL_FALSE;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   504
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   505
    data->current_pixmap = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   506
4603
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   507
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   508
    if (data->use_xrender) {
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   509
        bpp = data->drawable_pict_fmt->depth;
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   510
        Rmask = ((data->drawable_pict_fmt->direct.redMask)
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   511
                    << (data->drawable_pict_fmt->direct.red));
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   512
        Gmask = ((data->drawable_pict_fmt->direct.greenMask)
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   513
                    << (data->drawable_pict_fmt->direct.green));
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   514
        Bmask = ((data->drawable_pict_fmt->direct.blueMask)
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   515
                    << (data->drawable_pict_fmt->direct.blue));
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   516
        Amask = ((data->drawable_pict_fmt->direct.alphaMask)
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   517
                    << (data->drawable_pict_fmt->direct.alpha));
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   518
    }
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   519
    else
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   520
#endif
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   521
    {
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   522
        /* Get the format of the window */
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   523
        if (!SDL_PixelFormatEnumToMasks
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   524
            (display->current_mode.format, &bpp, &Rmask, &Gmask, &Bmask,
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   525
             &Amask)) {
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   526
            SDL_SetError("Unknown display format");
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   527
            X11_DestroyRenderer(renderer);
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   528
            return NULL;
dffa432f0e2b Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4602
diff changeset
   529
        }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   530
    }
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
   531
    SDL_InitFormat(&data->format, bpp, Rmask, Gmask, Bmask, Amask);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   532
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   533
    /* Create the drawing context */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   534
    gcv.graphics_exposures = False;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   535
    data->gc =
4598
66e13a224bd6 Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4597
diff changeset
   536
        XCreateGC(data->display, data->drawable, GCGraphicsExposures, &gcv);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   537
    if (!data->gc) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   538
        X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   539
        SDL_SetError("XCreateGC() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   540
        return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   541
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   542
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   543
    return renderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   544
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   545
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   546
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   547
X11_DisplayModeChanged(SDL_Renderer * renderer)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   548
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   549
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   550
    SDL_Window *window = renderer->window;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   551
    int i, n;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   552
4596
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   553
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   554
    if (data->use_xrender) {
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   555
        XRenderFreePicture(data->display, data->xwindow_pict);
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   556
        data->xwindow_pict_fmt =
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   557
            XRenderFindVisualFormat(data->display, data->visual);
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   558
        data->xwindow_pict =
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   559
            XRenderCreatePicture(data->display, data->xwindow,
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   560
                                 data->xwindow_pict_fmt, 0, NULL);
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   561
    }
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   562
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   563
    if (renderer->info.flags & SDL_RENDERER_SINGLEBUFFER) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   564
        n = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   565
    } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP2) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   566
        n = 2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   567
    } else if (renderer->info.flags & SDL_RENDERER_PRESENTFLIP3) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   568
        n = 3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   569
    } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   570
        n = 1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   571
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   572
    for (i = 0; i < n; ++i) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   573
        if (data->pixmaps[i] != None) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   574
            XFreePixmap(data->display, data->pixmaps[i]);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   575
            data->pixmaps[i] = None;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   576
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4596
dc26c37ad70e Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4595
diff changeset
   577
            XRenderFreePicture(data->display, data->pixmap_picts[i]);
4577
87a2d87786d4 Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4576
diff changeset
   578
            data->pixmap_picts[i] = None;
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   579
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   580
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   581
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   582
    for (i = 0; i < n; ++i) {
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   583
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   584
        if (data->use_xrender) {
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   585
            data->pixmaps[i] =
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   586
                XCreatePixmap(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   587
                              data->xwindow,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   588
                              window->w,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   589
                              window->h,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   590
                              32);
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   591
        }
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   592
        else
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   593
#endif
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   594
        {
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   595
            data->pixmaps[i] =
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   596
                XCreatePixmap(data->display, data->xwindow, window->w, window->h,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   597
                              data->depth);
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   598
        }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   599
        if (data->pixmaps[i] == None) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   600
            SDL_SetError("XCreatePixmap() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   601
            return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   602
        }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   603
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   604
        if (data->use_xrender) {
4577
87a2d87786d4 Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4576
diff changeset
   605
            data->pixmap_picts[i] = 
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   606
                XRenderCreatePicture(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   607
                                     data->pixmaps[i],
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   608
                                     XRenderFindStandardFormat(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   609
                                                               PictStandardARGB32),
4583
5c925d4f220f X11_DrawRects now uses a very hacky way of drawing rectangles with XRender. This will be improved in some time.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4582
diff changeset
   610
                                     0, None);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   611
            if (!data->pixmap_picts[i]) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   612
                SDL_SetError("XRenderCreatePicture() failed");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   613
                return -1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   614
            }
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   615
            XRenderComposite(data->display,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   616
                             PictOpClear,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   617
                             data->pixmap_picts[i],
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   618
                             None,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   619
                             data->pixmap_picts[i],
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   620
                             0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   621
                             0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   622
                             0, 0,
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   623
                             window->w, window->h);
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   624
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   625
       }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   626
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   627
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   628
    if (n > 0) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   629
        data->drawable = data->pixmaps[0];
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   630
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4577
87a2d87786d4 Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4576
diff changeset
   631
        data->drawable_pict = data->pixmap_picts[0];
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   632
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   633
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   634
    data->current_pixmap = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   635
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   636
    return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   637
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   638
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   639
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   640
static void
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   641
SDLMaskToXRenderMask(Uint32 sdl_mask, short *comp, short *compMask) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   642
    (*comp) = 0;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   643
    (*compMask) = 0;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   644
    while(!(sdl_mask & 1)) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   645
        (*comp)++;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   646
        sdl_mask >>= 1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   647
    }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   648
    while(sdl_mask & 1) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   649
        (*compMask) = ((*compMask) << 1) | 1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   650
        sdl_mask >>= 1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   651
    }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   652
}
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   653
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   654
static XRenderPictFormat*
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   655
PixelFormatEnumToXRenderPictFormat(SDL_Renderer * renderer, Uint32 format) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   656
    XRenderPictFormat* pict_fmt = NULL;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   657
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   658
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   659
    if (data->use_xrender) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   660
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   661
        int bpp;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   662
        Uint32 Amask, Rmask, Gmask, Bmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   663
        SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   664
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   665
        XRenderPictFormat templ;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   666
        unsigned long mask = (PictFormatType | PictFormatDepth | PictFormatRed |
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   667
                              PictFormatRedMask | PictFormatGreen | PictFormatGreenMask |
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   668
                              PictFormatBlue | PictFormatBlueMask | PictFormatAlpha |
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   669
                              PictFormatAlphaMask);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   670
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   671
        templ.type = PictTypeDirect;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   672
        templ.depth = bpp;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   673
        SDLMaskToXRenderMask(Amask, &(templ.direct.alpha), &(templ.direct.alphaMask));
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   674
        SDLMaskToXRenderMask(Rmask, &(templ.direct.red), &(templ.direct.redMask));
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   675
        SDLMaskToXRenderMask(Gmask, &(templ.direct.green), &(templ.direct.greenMask));
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   676
        SDLMaskToXRenderMask(Bmask, &(templ.direct.blue), &(templ.direct.blueMask));
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   677
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   678
        pict_fmt = XRenderFindFormat(data->display, mask, &templ, 0);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   679
    }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   680
    
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   681
    return pict_fmt;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   682
}
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   683
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   684
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   685
static Visual*
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   686
PixelFormatEnumToVisual(SDL_Renderer * renderer, Uint32 format) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   687
    X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   688
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   689
    if (data->use_xrender) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   690
        int bpp;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   691
        Uint32 Amask, Rmask, Gmask, Bmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   692
        SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   693
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   694
        XVisualInfo vinfo_templ;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   695
        long vinfo_mask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   696
        int nitems_return;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   697
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   698
        vinfo_mask = (VisualDepthMask | VisualRedMaskMask |
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   699
                      VisualGreenMaskMask | VisualBlueMaskMask);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   700
        vinfo_templ.depth = bpp;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   701
        vinfo_templ.red_mask = Rmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   702
        vinfo_templ.green_mask = Gmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   703
        vinfo_templ.blue_mask = Bmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   704
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   705
        XVisualInfo * ret = XGetVisualInfo(data->display, vinfo_mask,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   706
                                           &vinfo_templ, &nitems_return);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   707
        
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   708
        if (nitems_return) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   709
            return ret[0].visual;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   710
        }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   711
    }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   712
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   713
    return NULL;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   714
}
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   715
#endif
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   716
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   717
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   718
X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   719
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   720
    X11_RenderData *renderdata = (X11_RenderData *) renderer->driverdata;
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   721
    SDL_Window *window = renderer->window;
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   722
    SDL_VideoDisplay *display = window->display;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   723
    X11_TextureData *data;
2916
ffdd533f7add Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents: 2901
diff changeset
   724
    int pitch_alignmask = ((renderdata->scanline_pad / 8) - 1);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   725
    XGCValues gcv;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   726
    
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   727
    data = (X11_TextureData *) SDL_calloc(1, sizeof(*data));
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   728
    if (!data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   729
        SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   730
        return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   731
    }
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   732
    data->depth = renderdata->depth;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   733
    data->visual = renderdata->visual;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   734
    data->gc = renderdata->gc;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   735
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   736
    texture->driverdata = data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   737
    if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   738
        data->yuv =
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   739
            SDL_SW_CreateYUVTexture(texture->format, texture->w, texture->h);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   740
        if (!data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   741
            return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   742
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   743
        data->format = display->current_mode.format;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   744
    } else {
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   745
        /* If Xrender support is builtin we only need to check whether
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   746
           Xrender is available at runtime. If it is available there
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   747
           can be no BadMatch error since Xrender takes care of that.
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   748
        */
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   749
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4586
e479c1e57c52 SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4585
diff changeset
   750
        if (renderdata->use_xrender == SDL_FALSE) {
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   751
            if (texture->format != display->current_mode.format) {
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   752
                SDL_SetError("Texture format doesn't match window format");
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   753
                return -1;
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   754
            }
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   755
        } else {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   756
            Uint32 Amask, Rmask, Gmask, Bmask;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   757
            SDL_PixelFormatEnumToMasks(texture->format, &(data->depth),
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   758
                                       &Rmask, &Gmask, &Bmask, &Amask);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   759
            data->visual = PixelFormatEnumToVisual(renderer, texture->format);
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   760
        }
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   761
#else
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   762
        /* The image/pixmap depth must be the same as the window or you
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   763
           get a BadMatch error when trying to putimage or copyarea.
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   764
           This BadMatch error
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
   765
        */
2870
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   766
        if (texture->format != display->current_mode.format) {
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   767
            SDL_SetError("Texture format doesn't match window format");
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   768
            return -1;
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
   769
        }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
   770
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   771
        data->format = texture->format;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   772
    }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   773
    data->pitch = texture->w * SDL_BYTESPERPIXEL(data->format);
2916
ffdd533f7add Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents: 2901
diff changeset
   774
    data->pitch = (data->pitch + pitch_alignmask) & ~pitch_alignmask;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   775
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   776
    if (data->yuv || texture->access == SDL_TEXTUREACCESS_STREAMING) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   777
#ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   778
        XShmSegmentInfo *shminfo = &data->shminfo;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   779
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   780
        shm_error = True;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   781
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   782
        if (SDL_X11_HAVE_SHM) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   783
            shminfo->shmid =
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   784
                shmget(IPC_PRIVATE, texture->h * data->pitch,
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   785
                       IPC_CREAT | 0777);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   786
            if (shminfo->shmid >= 0) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   787
                shminfo->shmaddr = (char *) shmat(shminfo->shmid, 0, 0);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   788
                shminfo->readOnly = False;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   789
                if (shminfo->shmaddr != (char *) -1) {
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   790
                    shm_error = False;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   791
                    X_handler = XSetErrorHandler(shm_errhandler);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   792
                    XShmAttach(renderdata->display, shminfo);
3239
ab5aebd50add Fix suggested by Bob
Sam Lantinga <slouken@libsdl.org>
parents: 3066
diff changeset
   793
                    XSync(renderdata->display, False);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   794
                    XSetErrorHandler(X_handler);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   795
                    if (shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   796
                        shmdt(shminfo->shmaddr);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   797
                    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   798
                }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   799
                shmctl(shminfo->shmid, IPC_RMID, NULL);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   800
            }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   801
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   802
        if (!shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   803
            data->pixels = shminfo->shmaddr;
4587
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   804
            data->pixmap =
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   805
                XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w,
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   806
                              texture->h, data->depth);
4587
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   807
            if (data->pixmap == None) {
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   808
                X11_DestroyTexture(renderer, texture);
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   809
                SDL_SetError("XCreatePixmap() failed");
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   810
                return -1;
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   811
            }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   812
            data->image =
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   813
                XShmCreateImage(renderdata->display, data->visual,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   814
                                data->depth, ZPixmap, shminfo->shmaddr,
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
   815
                                shminfo, texture->w, texture->h);
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   816
4586
e479c1e57c52 SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4585
diff changeset
   817
            if (!data->image) {
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   818
                XShmDetach(renderdata->display, shminfo);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   819
                XSync(renderdata->display, False);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   820
                shmdt(shminfo->shmaddr);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   821
                shm_error = True;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   822
            }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   823
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   824
        if (shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   825
            shminfo->shmaddr = NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   826
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   827
        if (!data->image)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   828
#endif /* not NO_SHARED_MEMORY */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   829
        {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   830
            data->pixels = SDL_malloc(texture->h * data->pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   831
            if (!data->pixels) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   832
                X11_DestroyTexture(renderer, texture);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   833
                SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   834
                return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   835
            }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   836
4587
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   837
            data->pixmap =
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   838
                XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w,
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   839
                              texture->h, data->depth);
4587
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   840
            if (data->pixmap == None) {
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   841
                X11_DestroyTexture(renderer, texture);
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   842
                SDL_SetError("XCreatePixmap() failed");
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   843
                return -1;
25391ccf16a0 Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4586
diff changeset
   844
            }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   845
            data->image =
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   846
                XCreateImage(renderdata->display, data->visual,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   847
                             data->depth, ZPixmap, 0, data->pixels,
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
   848
                             texture->w, texture->h,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
   849
                             SDL_BYTESPERPIXEL(data->format) * 8,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
   850
                             data->pitch);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   851
            if (!data->image) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   852
                X11_DestroyTexture(renderer, texture);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   853
                SDL_SetError("XCreateImage() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   854
                return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   855
            }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   856
        }
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   857
    } 
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   858
    else {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   859
        data->pixmap =
3685
64ce267332c6 Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents: 3596
diff changeset
   860
            XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w,
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   861
                          texture->h, data->depth);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   862
        if (data->pixmap == None) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   863
            X11_DestroyTexture(renderer, texture);
3044
b36579172f27 Changes to hopefully handle the creation of a colormap for 8 bit PseudoColor visuals in X11
Bob Pendleton <bob@pendleton.com>
parents: 2967
diff changeset
   864
            SDL_SetError("XCreatePixmap() failed");
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   865
            return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   866
        }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
   867
        data->image =
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   868
            XCreateImage(renderdata->display, data->visual,
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   869
                         data->depth, ZPixmap, 0, NULL,
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   870
                         texture->w, texture->h,
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   871
                         SDL_BYTESPERPIXEL(data->format) * 8,
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
   872
                         data->pitch);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   873
        if (!data->image) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
   874
            X11_DestroyTexture(renderer, texture);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   875
            SDL_SetError("XCreateImage() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   876
            return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   877
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   878
    }
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   879
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   880
    if(renderdata->use_xrender) {
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   881
        gcv.graphics_exposures = False;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   882
        data->gc =
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   883
            XCreateGC(renderdata->display, data->pixmap, GCGraphicsExposures, &gcv);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   884
        if (!data->gc) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   885
            SDL_SetError("XCreateGC() failed");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   886
            return -1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   887
        }
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   888
        data->picture_fmt =
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   889
            PixelFormatEnumToXRenderPictFormat(renderer, texture->format);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   890
        if (data->picture_fmt == NULL) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   891
            X11_DestroyTexture(renderer, texture);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   892
            SDL_SetError("Texture format not supported by driver");
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   893
            return -1;
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   894
        }
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   895
        data->picture =
4586
e479c1e57c52 SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4585
diff changeset
   896
            XRenderCreatePicture(renderdata->display, data->pixmap,
e479c1e57c52 SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4585
diff changeset
   897
                                 data->picture_fmt, 0, NULL);
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   898
        if (!data->picture) {
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   899
            X11_DestroyTexture(renderer, texture);
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   900
            SDL_SetError("XRenderCreatePicture() failed");
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   901
            return -1;
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   902
        }
4593
3892fe2f6537 Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4591
diff changeset
   903
    }
4580
cfea5b007bc7 Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4579
diff changeset
   904
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   905
    return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   906
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   907
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   908
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   909
X11_QueryTexturePixels(SDL_Renderer * renderer, SDL_Texture * texture,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   910
                       void **pixels, int *pitch)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   911
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   912
    X11_TextureData *data = (X11_TextureData *) texture->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   913
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   914
    if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   915
        return SDL_SW_QueryYUVTexturePixels(data->yuv, pixels, pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   916
    } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   917
        *pixels = data->pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   918
        *pitch = data->pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   919
        return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   920
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   921
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   922
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   923
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   924
X11_SetTextureBlendMode(SDL_Renderer * renderer, SDL_Texture * texture)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   925
{
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   926
    X11_TextureData *data = (X11_TextureData *) texture->driverdata;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   927
    switch (texture->blendMode) {
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
   928
    case SDL_BLENDMODE_NONE:
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   929
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   930
        data->blend_op = PictOpSrc;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   931
        return 0;
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   932
    case SDL_BLENDMODE_BLEND:
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   933
        data->blend_op = PictOpOver;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   934
        return 0;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   935
    case SDL_BLENDMODE_ADD:
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   936
        data->blend_op = PictOpAdd;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   937
        return 0;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   938
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   939
    default:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   940
        SDL_Unsupported();
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
   941
        texture->blendMode = SDL_BLENDMODE_NONE;
4591
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   942
#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   943
        texture->blendMode = SDL_BLENDMODE_BLEND;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   944
        data->blend_op = PictOpOver;
1e998db9b597 Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4590
diff changeset
   945
#endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   946
        return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   947
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   948
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   949
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   950
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   951
X11_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   952
{
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   953
    X11_TextureData *data = (X11_TextureData *) texture->driverdata;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   954
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   955
    switch (texture->scaleMode) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   956
    case SDL_TEXTURESCALEMODE_NONE:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   957
        return 0;
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   958
    case SDL_TEXTURESCALEMODE_FAST:
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   959
        /* We can sort of fake it for streaming textures */
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   960
        if (data->yuv || texture->access == SDL_TEXTUREACCESS_STREAMING) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   961
            return 0;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   962
        }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
   963
        /* Fall through to unsupported case */
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   964
    default:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   965
        SDL_Unsupported();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   966
        texture->scaleMode = SDL_TEXTURESCALEMODE_NONE;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   967
        return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   968
    }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   969
    return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   970
}
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   971
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   972
static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   973
X11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   974
                  const SDL_Rect * rect, const void *pixels, int pitch)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   975
{
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   976
    X11_TextureData *data = (X11_TextureData *) texture->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   977
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   978
    if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   979
        if (SDL_SW_UpdateYUVTexture(data->yuv, rect, pixels, pitch) < 0) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   980
            return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   981
        }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   982
        UpdateYUVTextureData(texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   983
        return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   984
    } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   985
        X11_RenderData *renderdata = (X11_RenderData *) renderer->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   986
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   987
        if (data->pixels) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   988
            Uint8 *src, *dst;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   989
            int row;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   990
            size_t length;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   991
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   992
            src = (Uint8 *) pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   993
            dst =
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   994
                (Uint8 *) data->pixels + rect->y * data->pitch +
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   995
                rect->x * SDL_BYTESPERPIXEL(texture->format);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   996
            length = rect->w * SDL_BYTESPERPIXEL(texture->format);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   997
            for (row = 0; row < rect->h; ++row) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
   998
                SDL_memcpy(dst, src, length);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents: