annotate src/video/x11/SDL_x11render.c @ 4585:21600c6d6445

X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
author Sunny Sachanandani <sunnysachanandani@gmail.com>
date Tue, 15 Jun 2010 19:10:06 +0530
parents 9907c8cc6015
children e479c1e57c52
rev   line source
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"
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33
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
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
100 Pixmap mask;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
101 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
102 Picture pixmap_picts[3];
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
103 Picture drawable_pict;
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
104 Picture mask_pict;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
105 XRenderPictFormat* xwindow_pict_fmt;
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
106 GC mask_gc;
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
107 SDL_bool use_xrender;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
108 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109 int current_pixmap;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110 Drawable drawable;
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
111 SDL_PixelFormat format;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 GC gc;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 SDL_DirtyRectList dirty;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 SDL_bool makedirty;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115 } X11_RenderData;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 typedef struct
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 SDL_SW_YUVTexture *yuv;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 Uint32 format;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 Pixmap pixmap;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
122 #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
123 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
124 XRenderPictFormat* picture_fmt;
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
125 XRenderPictureAttributes picture_attr;
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
126 unsigned int picture_attr_valuemask;
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
127 SDL_bool use_xrender;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
128 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
129 XImage *image;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
130 #ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
131 /* 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
132 XShmSegmentInfo shminfo;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
133 #endif
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
134 XImage *scaling_image;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135 void *pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136 int pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
137 } X11_TextureData;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
138
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
139 #ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140 /* 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
141 static int shm_error;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
142 static int (*X_handler) (Display *, XErrorEvent *) = NULL;
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
143 static int
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
144 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
145 {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
146 if (e->error_code == BadAccess) {
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
147 shm_error = True;
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
148 return (0);
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
149 } else {
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
150 return (X_handler(d, e));
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
151 }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 #endif /* ! NO_SHARED_MEMORY */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156 UpdateYUVTextureData(SDL_Texture * texture)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158 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
159 SDL_Rect rect;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161 rect.x = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
162 rect.y = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
163 rect.w = texture->w;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
164 rect.h = texture->h;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
165 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
166 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
167 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
168
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169 void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
170 X11_AddRenderDriver(_THIS)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
171 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
172 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
173 SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode;
3520
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
174 int i;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
175
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
176 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
177 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
178 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
179 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
180 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
181 info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YVYU;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
182
3520
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
183 for (i = 0; i < _this->num_displays; ++i) {
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
184 SDL_AddRenderDriver(&_this->displays[i], &X11_RenderDriver);
83518f8fcd61 Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents: 3239
diff changeset
185 }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
186 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
187
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
188 SDL_Renderer *
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
189 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
190 {
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
191 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
192 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
193 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
194 SDL_Renderer *renderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
195 X11_RenderData *data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
196 XGCValues gcv;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
197 int i, n;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
198 int bpp;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
199 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
200
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
201 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
202 if (!renderer) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
203 SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
204 return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
205 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
206
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
207 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
208 if (!data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
209 X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
210 SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
211 return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
212 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
213 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
214 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
215 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
216 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
217 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
218 data->xwindow = windowdata->xwindow;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
219 #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
220 int event_basep, error_basep;
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
221 if(XRenderQueryExtension(data->display, &event_basep, &error_basep) == True) {
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
222 data->use_xrender = SDL_TRUE;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
223 data->xwindow_pict_fmt = XRenderFindVisualFormat(data->display, data->visual);
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
224 if(!data->xwindow_pict_fmt) {
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
225 data->use_xrender = SDL_FALSE;
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
226 goto fallback;
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
227 }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
228 data->xwindow_pict = XRenderCreatePicture(data->display, data->xwindow, data->xwindow_pict_fmt,
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
229 0, NULL);
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
230 if(!data->xwindow_pict) {
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
231 data->use_xrender = SDL_FALSE;
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
232 goto fallback;
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
233 }
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
234 // Create a 1 bit depth mask
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
235 data->mask = XCreatePixmap(data->display, data->xwindow, window->w, window->h, 1);
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
236 data->mask_pict = XRenderCreatePicture(data->display, data->mask,
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
237 XRenderFindStandardFormat(data->display, PictStandardA1),
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
238 0, NULL);
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
239 XGCValues gcv_mask;
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
240 gcv_mask.foreground = 1;
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
241 gcv_mask.background = 0;
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
242 data->mask_gc = XCreateGC(data->display, data->mask, GCBackground | GCForeground, &gcv_mask);
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
243 }
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
244 else {
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
245 data->use_xrender = SDL_FALSE;
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
246 }
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
247 fallback:
4571
97dcf6f6213c Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4458
diff changeset
248 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
249 renderer->DisplayModeChanged = X11_DisplayModeChanged;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
250 renderer->CreateTexture = X11_CreateTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
251 renderer->QueryTexturePixels = X11_QueryTexturePixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
252 renderer->SetTextureBlendMode = X11_SetTextureBlendMode;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
253 renderer->SetTextureScaleMode = X11_SetTextureScaleMode;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
254 renderer->UpdateTexture = X11_UpdateTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
255 renderer->LockTexture = X11_LockTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
256 renderer->UnlockTexture = X11_UnlockTexture;
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
257 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
258 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
259 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
260 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
261 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
262 renderer->RenderCopy = X11_RenderCopy;
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
263 renderer->RenderReadPixels = X11_RenderReadPixels;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
264 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
265 renderer->RenderPresent = X11_RenderPresent;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
266 renderer->DestroyTexture = X11_DestroyTexture;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
267 renderer->DestroyRenderer = X11_DestroyRenderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
268 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
269 renderer->window = window;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
270 renderer->driverdata = data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
271
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
272 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
273
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
274 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
275 renderer->info.flags |=
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
276 (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
277 n = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
278 } 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
279 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
280 n = 2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
281 } 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
282 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
283 n = 3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
284 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
285 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
286 n = 1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
287 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
288 for (i = 0; i < n; ++i) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
289 data->pixmaps[i] =
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
290 XCreatePixmap(data->display, data->xwindow, window->w, window->h,
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
291 displaydata->depth);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
292 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
293 X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294 SDL_SetError("XCreatePixmap() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
295 return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
296 }
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
297 #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
298 if(data->use_xrender == SDL_TRUE) {
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
299 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
300 XRenderCreatePicture(data->display, data->pixmaps[i], data->xwindow_pict_fmt,
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
301 0, None);
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
302 if(!data->pixmap_picts[i]) {
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
303 data->use_xrender = SDL_FALSE;
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
304 }
4581
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
305 XRenderComposite(data->display, PictOpClear, data->pixmap_picts[i], None, data->pixmap_picts[i],
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
306 0, 0, 0, 0, 0, 0, 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
307 }
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
308 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
309 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
310 if (n > 0) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
311 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
312 #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
313 if(data->use_xrender == SDL_TRUE)
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
314 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
315 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
316 data->makedirty = SDL_TRUE;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 } 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
318 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
319 #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
320 if(data->use_xrender == SDL_TRUE)
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
321 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
322 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
323 data->makedirty = SDL_FALSE;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
324 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
325 data->current_pixmap = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
326
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
327 /* Get the format of the window */
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
328 if (!SDL_PixelFormatEnumToMasks
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
329 (display->current_mode.format, &bpp, &Rmask, &Gmask, &Bmask,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
330 &Amask)) {
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
331 SDL_SetError("Unknown display 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
332 X11_DestroyRenderer(renderer);
b801df19835f The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents: 2868
diff changeset
333 return NULL;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
334 }
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
335 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
336
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
337 /* Create the drawing context */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
338 gcv.graphics_exposures = False;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
339 data->gc =
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
340 XCreateGC(data->display, data->xwindow, GCGraphicsExposures, &gcv);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
341 if (!data->gc) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342 X11_DestroyRenderer(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 SDL_SetError("XCreateGC() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344 return NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
345 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
346
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
347 return renderer;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
348 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
349
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
350 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
351 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
352 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
353 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
354 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
355 int i, n;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
356
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
357 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
358 n = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
359 } 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
360 n = 2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361 } 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
362 n = 3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
363 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
364 n = 1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
365 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
366 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
367 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
368 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
369 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
370 #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
371 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
372 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
373 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
374 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
375 for (i = 0; i < n; ++i) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
376 data->pixmaps[i] =
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
377 XCreatePixmap(data->display, data->xwindow, window->w, window->h,
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
378 data->depth);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
379 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
380 SDL_SetError("XCreatePixmap() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
381 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
382 }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
383 #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
384 if(data->use_xrender == SDL_TRUE) {
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
385 data->pixmap_picts[i] =
87a2d87786d4 Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4576
diff changeset
386 XRenderCreatePicture(data->display, data->pixmaps[i], data->xwindow_pict_fmt,
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
387 0, None);
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
388 if(!data->pixmap_picts[i]) {
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
389 data->use_xrender = SDL_FALSE;
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
390 }
4581
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
391 XRenderComposite(data->display, PictOpClear, data->pixmap_picts[i], None, data->pixmap_picts[i],
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
392 0, 0, 0, 0, 0, 0, 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
393 }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
394 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
395 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
396 if (n > 0) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
397 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
398 #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
399 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
400 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
401 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
402 data->current_pixmap = 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
403
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
404 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
405 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 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
409 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
410 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
411 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
412 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
413 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
414 int pitch_alignmask = ((renderdata->scanline_pad / 8) - 1);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
415
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
416 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
417 if (!data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
418 SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
419 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
420 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
421
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
422 texture->driverdata = data;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
423 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
424 data->yuv =
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
425 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
426 if (!data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
427 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
428 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
429 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
430 } else {
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
431 /* 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
432 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
433 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
434 */
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
435 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
4574
bfb4933c0efa Fix initial value of the xrender_available boolean in X11_CreateTexture.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4573
diff changeset
436 // Assume the texture is supported by 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
437 data->use_xrender = SDL_TRUE;
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
438 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
439 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
440 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
441 return -1;
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
442 }
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
443 }
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
444 #else
4573
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
445 /* 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
446 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
447 This BadMatch error
6399178be313 Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4572
diff changeset
448 */
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
449 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
450 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
451 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
452 }
4572
266ec93f49af Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4571
diff changeset
453 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
454 data->format = texture->format;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
455 }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
456 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
457 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
458
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459 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
460 #ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
461 XShmSegmentInfo *shminfo = &data->shminfo;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
462
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
463 shm_error = True;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
464
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
465 if (SDL_X11_HAVE_SHM) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
466 shminfo->shmid =
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
467 shmget(IPC_PRIVATE, texture->h * data->pitch,
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
468 IPC_CREAT | 0777);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
469 if (shminfo->shmid >= 0) {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
470 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
471 shminfo->readOnly = False;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
472 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
473 shm_error = False;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
474 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
475 XShmAttach(renderdata->display, shminfo);
3239
ab5aebd50add Fix suggested by Bob
Sam Lantinga <slouken@libsdl.org>
parents: 3066
diff changeset
476 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
477 XSetErrorHandler(X_handler);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
478 if (shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
479 shmdt(shminfo->shmaddr);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
480 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
481 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
482 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
483 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
484 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
485 if (!shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
486 data->pixels = shminfo->shmaddr;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
487
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
488 data->image =
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
489 XShmCreateImage(renderdata->display, renderdata->visual,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
490 renderdata->depth, ZPixmap, shminfo->shmaddr,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
491 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
492
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
493 // This Pixmap is used by Xrender
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
494 data->pixmap =
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
495 XShmCreatePixmap(renderdata->display, renderdata->xwindow, shminfo->shmaddr,
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
496 shminfo, texture->w, texture->h, renderdata->depth);
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
497
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
498 if (!(data->pixmap && data->image)) {
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
499 XShmDetach(renderdata->display, shminfo);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
500 XSync(renderdata->display, False);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
501 shmdt(shminfo->shmaddr);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
502 shm_error = True;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
503 }
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 if (shm_error) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
506 shminfo->shmaddr = NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
507 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
508 if (!data->image)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
509 #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
510 {
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
511 /* This is the case where the server does not have
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
512 shared memory support and the texture is streaming.
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
513 It does not make sense to use Xrender here because
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
514 we would have to copy the data onto a server side
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
515 pixmap with XPutImage first and only then can we
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
516 use Xrender
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
517 */
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
518
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
519 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
520 if (!data->pixels) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
521 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
522 SDL_OutOfMemory();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
523 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
524 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
525
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
526 data->image =
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
527 XCreateImage(renderdata->display, renderdata->visual,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
528 renderdata->depth, ZPixmap, 0, data->pixels,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
529 texture->w, texture->h,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
530 SDL_BYTESPERPIXEL(data->format) * 8,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
531 data->pitch);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
532 if (!data->image) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
533 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
534 SDL_SetError("XCreateImage() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
535 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
536 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
537 }
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
538 }
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
539 else {
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
540 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
541 XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w,
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
542 texture->h, renderdata->depth);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
543 if (data->pixmap == None) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
544 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
545 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
546 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
547 }
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
548 data->image =
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
549 XCreateImage(renderdata->display, renderdata->visual,
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
550 renderdata->depth, ZPixmap, 0, NULL,
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
551 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
552 SDL_BYTESPERPIXEL(data->format) * 8,
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
553 data->pitch);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
554 if (!data->image) {
2868
3b595278f813 Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
555 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
556 SDL_SetError("XCreateImage() failed");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
557 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
558 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
559 }
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
560 #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
561 if(renderdata->use_xrender && data->pixmap) {
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
562 data->use_xrender = SDL_TRUE;
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
563 unsigned long x11_fmt_mask; // Format mask
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
564 XRenderPictFormat x11_templ_fmt; // Format template
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
565 x11_fmt_mask =
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
566 (PictFormatDepth | PictFormatRedMask | PictFormatGreenMask
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
567 | PictFormatBlueMask);
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
568 Uint32 Rmask, Gmask, Bmask, Amask;
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
569 int bpp;
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
570 SDL_PixelFormatEnumToMasks(data->format, &bpp, &Rmask, &Gmask, &Bmask, &Amask);
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
571 x11_templ_fmt.depth = bpp;
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
572 x11_templ_fmt.direct.redMask = Rmask;
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
573 x11_templ_fmt.direct.greenMask = Gmask;
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
574 x11_templ_fmt.direct.blueMask = Bmask;
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
575 x11_templ_fmt.direct.alphaMask = Amask;
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
576 /* Return one matching XRenderPictFormat */
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
577 data->picture_fmt =
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
578 XRenderFindFormat(renderdata->display, x11_fmt_mask, &x11_templ_fmt, 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
579 if(!data->picture_fmt) {
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
580 data->use_xrender = SDL_FALSE;
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
581 }
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
582 data->picture_attr_valuemask = CPGraphicsExposure;
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
583 (data->picture_attr).graphics_exposures = False;
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
584 data->picture =
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
585 XRenderCreatePicture(renderdata->display, data->pixmap, data->picture_fmt,
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
586 data->picture_attr_valuemask, &(data->picture_attr));
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
587 if(!data->picture) {
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
588 data->use_xrender = SDL_FALSE;
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
589 }
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
590 }
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
591 /* We thought we could render the texture with Xrender but this was
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
592 not possible for some reason. Now we must ensure that texture
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
593 format and window format match to avoid a BadMatch error.
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
594 */
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
595 if(data->use_xrender == SDL_FALSE) {
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
596 if (texture->format != display->current_mode.format) {
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
597 SDL_SetError("Texture format doesn't match window format");
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
598 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
599 }
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
600 }
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
601 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
602 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
603 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
604
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
605 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
606 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
607 void **pixels, int *pitch)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
608 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
609 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
610
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
611 if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
612 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
613 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
614 *pixels = data->pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
615 *pitch = data->pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
616 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
617 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
618 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
619
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
620 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
621 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
622 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
623 switch (texture->blendMode) {
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
624 case SDL_BLENDMODE_NONE:
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
625 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
626 default:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
627 SDL_Unsupported();
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
628 texture->blendMode = SDL_BLENDMODE_NONE;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
629 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
630 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
631 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
632
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
633 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
634 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
635 {
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
636 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
637
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
638 switch (texture->scaleMode) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
639 case SDL_TEXTURESCALEMODE_NONE:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
640 return 0;
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
641 case SDL_TEXTURESCALEMODE_FAST:
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
642 /* 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
643 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
644 return 0;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
645 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
646 /* 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
647 default:
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
648 SDL_Unsupported();
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
649 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
650 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
651 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
652 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
653 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
654
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
655 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
656 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
657 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
658 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
659 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
660
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
661 if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
662 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
663 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
664 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
665 UpdateYUVTextureData(texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
666 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
667 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
668 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
669
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
670 if (data->pixels) {
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
671 // If we have already allocated memory or were given memory by XShm
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
672 Uint8 *src, *dst;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
673 int row;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
674 size_t length;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
675
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
676 src = (Uint8 *) pixels;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
677 dst =
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
678 (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
679 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
680 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
681 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
682 SDL_memcpy(dst, src, length);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
683 src += pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
684 dst += data->pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
685 }
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
686 /* If this is a static texture we would use Xrender for it
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
687 but this requires that the server side Pixmap associated
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
688 with this texture be updated with the data as well and
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
689 that the pixmap is not a shared memory pixmap.
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
690 Hopefully the user will not update static textures so
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
691 frequently as to cause a slowdown.
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
692 */
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
693 if (texture->access == SDL_TEXTUREACCESS_STATIC) {
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
694 #ifndef NO_SHARED_MEMORY
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
695 if(!data->shminfo.shmaddr)
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
696 #endif
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
697 {
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
698 XPutImage(renderdata->display, data->pixmap, renderdata->gc,
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
699 data->image, 0, 0, rect->x, rect->y, rect->w, rect->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
700 }
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
701 }
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
702
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
703 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
704 data->image->width = rect->w;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
705 data->image->height = rect->h;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
706 data->image->data = (char *) pixels;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
707 data->image->bytes_per_line = pitch;
2814
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
708 XPutImage(renderdata->display, data->pixmap, renderdata->gc,
Sam Lantinga <slouken@libsdl.org>
parents: 2811
diff changeset
709 data->image, 0, 0, rect->x, rect->y, rect->w, rect->h);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
710 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
711 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
712 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
713 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
714
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
715 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
716 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
717 const SDL_Rect * rect, int markDirty, void **pixels,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
718 int *pitch)
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_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
721
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
722 if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
723 return SDL_SW_LockYUVTexture(data->yuv, rect, markDirty, pixels,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
724 pitch);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
725 } else if (data->pixels) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
726 *pixels =
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
727 (void *) ((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
728 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
729 *pitch = data->pitch;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
730 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
731 } else {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
732 SDL_SetError("No pixels available");
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
733 return -1;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
734 }
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
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
737 static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
738 X11_UnlockTexture(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
739 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
740 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
741
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
742 if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
743 SDL_SW_UnlockYUVTexture(data->yuv);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
744 UpdateYUVTextureData(texture);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
745 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
746 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
747
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
748 static int
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
749 X11_SetDrawBlendMode(SDL_Renderer * renderer)
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
750 {
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
751 switch (renderer->blendMode) {
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
752 case SDL_BLENDMODE_NONE:
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
753 return 0;
4581
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
754 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
755 case SDL_BLENDMODE_MASK: // Use src pict as mask
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
756 case SDL_BLENDMODE_ADD: // PictOpAdd
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
757 case SDL_BLENDMODE_BLEND: // PictOpOver
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
758 /* FIXME case SDL_BLENDMODE_MOD: */
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
759 #endif
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
760 return 0;
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
761 default:
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
762 SDL_Unsupported();
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
763 renderer->blendMode = SDL_BLENDMODE_NONE;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
764 return -1;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
765 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
766 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
767
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
768 static Uint32
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
769 renderdrawcolor(SDL_Renderer * renderer, int premult)
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
770 {
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
771 X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
772 Uint8 r = renderer->r;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
773 Uint8 g = renderer->g;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
774 Uint8 b = renderer->b;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
775 Uint8 a = renderer->a;
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
776 if (premult)
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
777 return SDL_MapRGBA(&data->format, ((int) r * (int) a) / 255,
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
778 ((int) g * (int) a) / 255,
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
779 ((int) b * (int) a) / 255, 255);
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
780 else
2967
e4a469d6ddab Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents: 2927
diff changeset
781 return SDL_MapRGBA(&data->format, r, g, b, a);
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
782 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
783
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
784 static XRenderColor
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
785 xrenderdrawcolor(SDL_Renderer *renderer)
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
786 {
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
787 // Premultiply the color channels as well as modulate them to a 16 bit color space
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
788 XRenderColor xrender_color;
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
789 xrender_color.red = ((unsigned short)renderer->r + 1) * ((unsigned short)renderer->a + 1) - 1;
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
790 xrender_color.green = ((unsigned short)renderer->g + 1) * ((unsigned short)renderer->a + 1) - 1;
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
791 xrender_color.blue = ((unsigned short)renderer->b + 1) * ((unsigned short)renderer->a + 1) - 1;
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
792 xrender_color.alpha = ((unsigned short)renderer->a + 1) * ((unsigned short)renderer->a + 1) - 1;
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
793 return xrender_color;
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
794 }
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
795
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
796 static int
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
797 X11_RenderDrawPoints(SDL_Renderer * renderer, const SDL_Point * points,
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
798 int count)
2901
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
799 {
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
800 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
801 SDL_Window *window = renderer->window;
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
802 XPoint *xpoints, *xpoint;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
803 int i, xcount;
2901
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
804
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
805 if (data->makedirty) {
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
806 SDL_Rect rect;
133601e3b255 Added RenderPiont() API
Sam Lantinga <slouken@libsdl.org>
parents: 2894
diff changeset
807
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
808 /* Get the smallest rectangle that contains everything */
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
809 rect.x = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
810 rect.y = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
811 rect.w = window->w;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
812 rect.h = window->h;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
813 if (!SDL_EnclosePoints(points, count, &rect, &rect)) {
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
814 /* Nothing to draw */
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
815 return 0;
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
816 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
817 SDL_AddDirtyRect(&data->dirty, &rect);
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
818 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
819
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
820 xpoint = xpoints = SDL_stack_alloc(XPoint, count);
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
821 xcount = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
822 for (i = 0; i < count; ++i) {
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
823 int x = points[i].x;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
824 int y = points[i].y;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
825 if (x < 0 || x >= window->w || y < 0 || y >= window->h) {
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
826 continue;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
827 }
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
828 xpoint->x = (short)x;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
829 xpoint->y = (short)y;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
830 ++xpoint;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
831 ++xcount;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
832 }
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
833 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
834 if (data->use_xrender == SDL_TRUE) {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
835 XRenderComposite(data->display, PictOpClear, data->mask_pict, None, data->mask_pict,
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
836 0, 0, 0, 0, 0, 0, window->w, window->h);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
837 XDrawPoints(data->display, data->mask, data->mask_gc, xpoints, xcount,
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
838 CoordModeOrigin);
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
839 XRenderColor foreground = xrenderdrawcolor(renderer);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
840 Picture fill =
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
841 XRenderCreateSolidFill(data->display, &foreground);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
842 XRenderComposite(data->display, PictOpOver, fill, data->mask_pict, data->drawable_pict,
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
843 0, 0, 0, 0, 0, 0, window->w, window->h);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
844 XRenderFreePicture(data->display, fill);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
845 }
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
846 else
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
847 #endif
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
848 {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
849 unsigned long foreground = renderdrawcolor(renderer, 1);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
850 XSetForeground(data->display, data->gc, foreground);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
851
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
852
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
853 if (xcount > 0) {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
854 XDrawPoints(data->display, data->drawable, data->gc, xpoints, xcount,
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
855 CoordModeOrigin);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
856 }
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
857 }
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
858 SDL_stack_free(xpoints);
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
859
2894
e80f347b6d29 Added missing return
Sam Lantinga <slouken@libsdl.org>
parents: 2888
diff changeset
860 return 0;
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
861 }
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
862
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
863 static int
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
864 X11_RenderDrawLines(SDL_Renderer * renderer, const SDL_Point * points,
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
865 int count)
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
866 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
867 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
868 SDL_Window *window = renderer->window;
4458
c9584df65367 Removed unused variables
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
869 SDL_Rect clip;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
870 unsigned long foreground;
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
871 XPoint *xpoints, *xpoint;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
872 int i, xcount;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
873 int minx, miny;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
874 int maxx, maxy;
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
875
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
876 clip.x = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
877 clip.y = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
878 clip.w = window->w;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
879 clip.h = window->h;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
880
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
881 Pixmap drawable;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
882 GC gc;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
883 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
884 if (data->use_xrender == SDL_TRUE) {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
885 drawable = data->mask;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
886 gc = data->mask_gc;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
887 XRenderComposite(data->display, PictOpClear, data->mask_pict, None, data->mask_pict,
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
888 0, 0, 0, 0, 0, 0, window->w, window->h);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
889 }
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
890 else
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
891 #endif
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
892 {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
893 drawable = data->drawable;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
894 gc = data->gc;
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
895 }
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
896
2884
9dde605c7540 Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents: 2882
diff changeset
897 foreground = renderdrawcolor(renderer, 1);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
898 XSetForeground(data->display, data->gc, foreground);
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
899
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
900 xpoint = xpoints = SDL_stack_alloc(XPoint, count);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
901 xcount = 0;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
902 minx = 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
903 miny = 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
904 maxx = INT_MIN;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
905 maxy = INT_MIN;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
906 for (i = 0; i < count; ++i) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
907 int x = points[i].x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
908 int y = points[i].y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
909
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
910 /* If the point is inside the window, add it to the list */
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
911 if (x >= 0 && x < window->w && y >= 0 && y < window->h) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
912 if (x < minx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
913 minx = x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
914 } else if (x > maxx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
915 maxx = x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
916 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
917 if (y < miny) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
918 miny = y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
919 } else if (y > maxy) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
920 maxy = y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
921 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
922 xpoint->x = (short)x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
923 xpoint->y = (short)y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
924 ++xpoint;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
925 ++xcount;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
926 continue;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
927 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
928
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
929 /* We need to clip the line segments joined by this point */
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
930 if (xcount > 0) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
931 int x1 = xpoint[-1].x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
932 int y1 = xpoint[-1].y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
933 int x2 = x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
934 int y2 = y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
935 if (SDL_IntersectRectAndLine(&clip, &x1, &y1, &x2, &y2)) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
936 if (x2 < minx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
937 minx = x2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
938 } else if (x2 > maxx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
939 maxx = x2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
940 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
941 if (y2 < miny) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
942 miny = y2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
943 } else if (y2 > maxy) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
944 maxy = y2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
945 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
946 xpoint->x = (short)x2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
947 xpoint->y = (short)y2;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
948 ++xpoint;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
949 ++xcount;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
950 }
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
951 XDrawLines(data->display, drawable, gc,
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
952 xpoints, xcount, CoordModeOrigin);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
953 if (xpoints[0].x != x2 || xpoints[0].y != y2) {
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
954 XDrawPoint(data->display, drawable, gc, x2, y2);
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
955 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
956 if (data->makedirty) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
957 SDL_Rect rect;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
958
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
959 rect.x = minx;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
960 rect.y = miny;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
961 rect.w = (maxx - minx) + 1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
962 rect.h = (maxy - miny) + 1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
963 SDL_AddDirtyRect(&data->dirty, &rect);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
964 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
965 xpoint = xpoints;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
966 xcount = 0;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
967 minx = 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
968 miny = 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
969 maxx = INT_MIN;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
970 maxy = INT_MIN;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
971 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
972 if (i < (count-1)) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
973 int x1 = x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
974 int y1 = y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
975 int x2 = points[i+1].x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
976 int y2 = points[i+1].y;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
977 if (SDL_IntersectRectAndLine(&clip, &x1, &y1, &x2, &y2)) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
978 if (x1 < minx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
979 minx = x1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
980 } else if (x1 > maxx) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
981 maxx = x1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
982 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
983 if (y1 < miny) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
984 miny = y1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
985 } else if (y1 > maxy) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
986 maxy = y1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
987 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
988 xpoint->x = (short)x1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
989 xpoint->y = (short)y1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
990 ++xpoint;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
991 ++xcount;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
992 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
993 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
994 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
995 if (xcount > 1) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
996 int x2 = xpoint[-1].x;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
997 int y2 = xpoint[-1].y;
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
998 XDrawLines(data->display, drawable, gc, xpoints, xcount,
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
999 CoordModeOrigin);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1000 if (xpoints[0].x != x2 || xpoints[0].y != y2) {
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1001 XDrawPoint(data->display, drawable, gc, x2, y2);
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
1002 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1003 if (data->makedirty) {
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1004 SDL_Rect rect;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1005
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1006 rect.x = minx;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1007 rect.y = miny;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1008 rect.w = (maxx - minx) + 1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1009 rect.h = (maxy - miny) + 1;
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1010 SDL_AddDirtyRect(&data->dirty, &rect);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1011 }
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1012 }
4585
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1013 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1014 if(data->use_xrender == SDL_TRUE) {
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1015 XRenderColor xrforeground = xrenderdrawcolor(renderer);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1016 Picture fill = XRenderCreateSolidFill(data->display, &xrforeground);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1017 XRenderComposite(data->display, PictOpOver, fill, data->mask_pict, data->drawable_pict,
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1018 0, 0, 0, 0, 0, 0, window->w, window->h);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1019 XRenderFreePicture(data->display, fill);
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1020 }
21600c6d6445 X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4584
diff changeset
1021 #endif
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
1022 SDL_stack_free(xpoints);
c2154674c0c1 Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents: 3538
diff changeset
1023
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1024 return 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1025 }
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1026
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1027 static int
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
1028 X11_RenderDrawRects(SDL_Renderer * renderer, 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
1029 {
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
1030 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
1031 SDL_Window *window = renderer->window;
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
1032 SDL_Rect clip, rect;
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
1033 int i, xcount;
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
1034 XRectangle *xrects, *xrect;
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
1035
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
1036 clip.x = 0;
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
1037 clip.y = 0;
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
1038 clip.w = window->w;
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
1039 clip.h = window->h;
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
1040
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
1041 #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
1042 if(data->use_xrender == SDL_TRUE) {
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
1043 XRectangle xclip;
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
1044
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
1045 xclip.x = (short)clip.x;
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
1046 xclip.y = (short)clip.y;
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
1047 xclip.width = (unsigned short)clip.w;
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
1048 xclip.height = (unsigned short)clip.h;
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
1049
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
1050 XRenderColor foreground;
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
1051 foreground = xrenderdrawcolor(renderer);
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
1052
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
1053 xrect = xrects = SDL_stack_alloc(XRectangle, count);
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
1054 xcount = 0;
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
1055 for (i = 0; i < count; ++i) {
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
1056 xrect->x = (short)rects[i]->x;
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
1057 xrect->y = (short)rects[i]->y;
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
1058 xrect->width = (unsigned short)rects[i]->w;
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
1059 xrect->height = (unsigned short)rects[i]->h;
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
1060 ++xrect;
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
1061 ++xcount;
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
1062 }
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
1063 if (data->makedirty) {
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
1064 SDL_AddDirtyRect(&data->dirty, &clip);
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
1065 }
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
1066 XRenderComposite(data->display, PictOpClear, data->mask_pict, None, data->mask_pict,
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
1067 0, 0, 0, 0, 0, 0, window->w, window->h);
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
1068 XDrawRectangles(data->display, data->mask, data->mask_gc, xrects, xcount);
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
1069 Picture fill =
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
1070 XRenderCreateSolidFill(data->display, &foreground);
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
1071 XRenderSetPictureClipRectangles(data->display, data->drawable_pict, 0, 0, &xclip, 1);
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
1072 XRenderComposite(data->display, PictOpOver, fill, data->mask_pict, data->drawable_pict,
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
1073 0, 0, 0, 0, 0, 0, window->w, window->h);
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
1074 XRenderFreePicture(data->display, fill);
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
1075 SDL_stack_free(xrects);
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
1076 }
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
1077 else
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
1078 #endif
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
1079 {
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
1080
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
1081 unsigned long foreground;
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
1082
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
1083 foreground = renderdrawcolor(renderer, 1);
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
1084 XSetForeground(data->display, data->gc, foreground);
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
1085
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
1086 xrect = xrects = SDL_stack_alloc(XRectangle, count);
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
1087 xcount = 0;
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
1088 for (i = 0; i < count; ++i) {
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
1089 if (!SDL_IntersectRect(rects[i], &clip, &rect)) {
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
1090 continue;
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
1091 }
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
1092
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
1093 xrect->x = (short)rect.x;
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
1094 xrect->y = (short)rect.y;
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
1095 xrect->width = (unsigned short)rect.w;
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
1096 xrect->height = (unsigned short)rect.h;
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
1097 ++xrect;
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
1098 ++xcount;
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
1099
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
1100 if (data->makedirty) {
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
1101 SDL_AddDirtyRect(&data->dirty, &rect);
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
1102 }
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
1103 }
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
1104 if (xcount > 0) {
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
1105 XDrawRectangles(data->display, data->drawable, data->gc,
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
1106 xrects, xcount);
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
1107 }
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
1108 }
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
1109 SDL_stack_free(xrects);
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
1110
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
1111 return 0;
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
1112 }
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
1113
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
1114 static int
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
1115 X11_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, int count)
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1116 {
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1117 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
1118 SDL_Window *window = renderer->window;
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1119 SDL_Rect clip, rect;
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
1120
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1121 clip.x = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1122 clip.y = 0;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1123 clip.w = window->w;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1124 clip.h = window->h;
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1125
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
1126 int i, xcount;
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
1127 XRectangle *xrects, *xrect;
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1128
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1129 xrect = xrects = SDL_stack_alloc(XRectangle, count);
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1130 xcount = 0;
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
1131
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
1132 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
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
1133 if(data->use_xrender == SDL_TRUE) {
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
1134 XRectangle xclip;
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
1135
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
1136 xclip.x = (short)clip.x;
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
1137 xclip.y = (short)clip.y;
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
1138 xclip.width = (unsigned short)clip.w;
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
1139 xclip.height = (unsigned short)clip.h;
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1140
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
1141 XRenderColor foreground;
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1142
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
1143 foreground = xrenderdrawcolor(renderer);
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
1144
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
1145 for (i = 0; i < count; ++i) {
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
1146 xrect->x = (short)rects[i]->x;
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
1147 xrect->y = (short)rects[i]->y;
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
1148 xrect->width = (unsigned short)rects[i]->w;
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
1149 xrect->height = (unsigned short)rects[i]->h;
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
1150 ++xrect;
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
1151 ++xcount;
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
1152 }
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1153 if (data->makedirty) {
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
1154 SDL_AddDirtyRect(&data->dirty, &clip);
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1155 }
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
1156 XRenderComposite(data->display, PictOpClear, data->mask_pict, None, data->mask_pict,
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
1157 0, 0, 0, 0, 0, 0, window->w, window->h);
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
1158 XFillRectangles(data->display, data->mask, data->mask_gc,
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
1159 xrects, xcount);
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
1160 XRenderSetPictureClipRectangles(data->display, data->drawable_pict, 0, 0, &xclip, 1);
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
1161 Picture fill =
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
1162 XRenderCreateSolidFill(data->display, &foreground);
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
1163 XRenderComposite(data->display, PictOpOver, fill, data->mask_pict, data->drawable_pict,
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
1164 0, 0, 0, 0, 0, 0, window->w, window->h);
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
1165 XRenderFreePicture(data->display, fill);
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
1166 SDL_stack_free(xrects);
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
1167
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1168 }
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
1169 else
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
1170 #endif
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
1171 {
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
1172 unsigned long foreground;
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
1173 XRectangle *xrects, *xrect;
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
1174
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
1175 foreground = renderdrawcolor(renderer, 1);
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
1176 XSetForeground(data->display, data->gc, foreground);
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
1177
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
1178 xrect = xrects = SDL_stack_alloc(XRectangle, count);
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
1179 xcount = 0;
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
1180 for (i = 0; i < count; ++i) {
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
1181 if (!SDL_IntersectRect(rects[i], &clip, &rect)) {
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
1182 continue;
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
1183 }
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
1184
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
1185 xrect->x = (short)rect.x;
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
1186 xrect->y = (short)rect.y;
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
1187 xrect->width = (unsigned short)rect.w;
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
1188 xrect->height = (unsigned short)rect.h;
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
1189 ++xrect;
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
1190 ++xcount;
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
1191
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
1192 if (data->makedirty) {
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
1193 SDL_AddDirtyRect(&data->dirty, &rect);
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
1194 }
4576
2b98162b536a Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4575
diff changeset
1195 }
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1196 XFillRectangles(data->display, data->drawable, data->gc,
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1197 xrects, xcount);
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
1198 SDL_stack_free(xrects);
3538
a1896642a47e X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents: 3520
diff changeset
1199 }
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
1200
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1201 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1202 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1203
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1204 static int
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1205 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
1206 const SDL_Rect * srcrect, const SDL_Rect * dstrect)
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1207 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1208 X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1209 X11_TextureData *texturedata = (X11_TextureData *) texture->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1210
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1211 if (data->makedirty) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1212 SDL_AddDirtyRect(&data->dirty, dstrect);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1213 }
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1214 if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) {
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1215 #ifndef NO_SHARED_MEMORY
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1216 if (texturedata->shminfo.shmaddr) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1217 XShmPutImage(data->display, data->drawable, data->gc,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1218 texturedata->image, srcrect->x, srcrect->y,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1219 dstrect->x, dstrect->y, srcrect->w, srcrect->h,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1220 False);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1221 } else
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1222 #endif
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1223 if (texturedata->pixels) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1224 XPutImage(data->display, data->drawable, data->gc,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1225 texturedata->image, srcrect->x, srcrect->y, dstrect->x,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1226 dstrect->y, srcrect->w, srcrect->h);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1227 } else {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1228 XCopyArea(data->display, texturedata->pixmap, data->drawable,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1229 data->gc, srcrect->x, srcrect->y, dstrect->w,
3066
8cbf68bdf81b Fixed destination of XCopyArea()
Sam Lantinga <slouken@libsdl.org>
parents: 3044
diff changeset
1230 dstrect->h, dstrect->x, dstrect->y);
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1231 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1232 } else if (texturedata->yuv
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1233 || texture->access == SDL_TEXTUREACCESS_STREAMING) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1234 SDL_Surface src, dst;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1235 SDL_PixelFormat fmt;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1236 SDL_Rect rect;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1237 XImage *image = texturedata->scaling_image;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1238
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1239 if (!image) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1240 void *pixels;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1241 int pitch;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1242
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1243 pitch = dstrect->w * SDL_BYTESPERPIXEL(texturedata->format);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1244 pixels = SDL_malloc(dstrect->h * pitch);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1245 if (!pixels) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1246 SDL_OutOfMemory();
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1247 return -1;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1248 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1249
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1250 image =
2874
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
1251 XCreateImage(data->display, data->visual, data->depth,
Sam Lantinga <slouken@libsdl.org>
parents: 2870
diff changeset
1252 ZPixmap, 0, pixels, dstrect->w, dstrect->h,
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1253 SDL_BYTESPERPIXEL(texturedata->format) * 8,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1254 pitch);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1255 if (!image) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1256 SDL_SetError("XCreateImage() failed");
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1257 return -1;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1258 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1259 texturedata->scaling_image = image;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1260
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1261 } else if (image->width != dstrect->w || image->height != dstrect->h
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1262 || !image->data) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1263 image->width = dstrect->w;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1264 image->height = dstrect->h;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1265 image->bytes_per_line =
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1266 image->width * SDL_BYTESPERPIXEL(texturedata->format);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1267 image->data =
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1268 (char *) SDL_realloc(image->data,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1269 image->height * image->bytes_per_line);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1270 if (!image->data) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1271 SDL_OutOfMemory();
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1272 return -1;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1273 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1274 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1275
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1276 /* Set up fake surfaces for SDL_SoftStretch() */
2882
04e89201f6ed Fixed crash when resizing YUV textures
Sam Lantinga <slouken@libsdl.org>
parents: 2874
diff changeset
1277 SDL_zero(src);
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1278 src.format = &fmt;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1279 src.w = texture->w;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1280 src.h = texture->h;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1281 #ifndef NO_SHARED_MEMORY
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1282 if (texturedata->shminfo.shmaddr) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1283 src.pixels = texturedata->shminfo.shmaddr;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1284 } else
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1285 #endif
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1286 src.pixels = texturedata->pixels;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1287 src.pitch = texturedata->pitch;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1288
2882
04e89201f6ed Fixed crash when resizing YUV textures
Sam Lantinga <slouken@libsdl.org>
parents: 2874
diff changeset
1289 SDL_zero(dst);
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1290 dst.format = &fmt;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1291 dst.w = image->width;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1292 dst.h = image->height;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1293 dst.pixels = image->data;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1294 dst.pitch = image->bytes_per_line;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1295
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1296 fmt.BytesPerPixel = SDL_BYTESPERPIXEL(texturedata->format);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1297
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1298 rect.x = 0;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1299 rect.y = 0;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1300 rect.w = dstrect->w;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1301 rect.h = dstrect->h;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1302 if (SDL_SoftStretch(&src, srcrect, &dst, &rect) < 0) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1303 return -1;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1304 }
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1305 XPutImage(data->display, data->drawable, data->gc, image, 0, 0,
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1306 dstrect->x, dstrect->y, dstrect->w, dstrect->h);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1307 } else {
2827
aec4399c507a If scaling isn't supported, do an unscaled copy instead of not showing anything.
Sam Lantinga <slouken@libsdl.org>
parents: 2814
diff changeset
1308 XCopyArea(data->display, texturedata->pixmap, data->drawable,
aec4399c507a If scaling isn't supported, do an unscaled copy instead of not showing anything.
Sam Lantinga <slouken@libsdl.org>
parents: 2814
diff changeset
1309 data->gc, srcrect->x, srcrect->y, dstrect->w, dstrect->h,
aec4399c507a If scaling isn't supported, do an unscaled copy instead of not showing anything.
Sam Lantinga <slouken@libsdl.org>
parents: 2814
diff changeset
1310 srcrect->x, srcrect->y);
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1311 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1312 return 0;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1313 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1314
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1315 static int
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1316 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
1317 Uint32 format, void * pixels, int pitch)
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1318 {
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1319 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
1320 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
1321 SDL_VideoDisplay *display = window->display;
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1322 Uint32 screen_format = display->current_mode.format;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1323 XImage *image;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1324
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1325 image = XGetImage(data->display, data->drawable, rect->x, rect->y,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1326 rect->w, rect->h, AllPlanes, ZPixmap);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1327
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1328 SDL_ConvertPixels(rect->w, rect->h,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1329 screen_format, image->data, image->bytes_per_line,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1330 format, pixels, pitch);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1331
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1332 XDestroyImage(image);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1333 return 0;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1334 }
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1335
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1336 static int
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1337 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
1338 Uint32 format, const void * pixels, int pitch)
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1339 {
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1340 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
1341 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
1342 SDL_VideoDisplay *display = window->display;
3559
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1343 Uint32 screen_format = display->current_mode.format;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1344 XImage *image;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1345 void *image_pixels;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1346 int image_pitch;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1347
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1348 image_pitch = rect->w * SDL_BYTESPERPIXEL(screen_format);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1349 image_pixels = SDL_malloc(rect->h * image_pitch);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1350 if (!image_pixels) {
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1351 SDL_OutOfMemory();
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1352 return -1;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1353 }
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1354
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1355 image = XCreateImage(data->display, data->visual,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1356 data->depth, ZPixmap, 0, image_pixels,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1357 rect->w, rect->h,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1358 SDL_BYTESPERPIXEL(screen_format) * 8,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1359 image_pitch);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1360 if (!image) {
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1361 SDL_SetError("XCreateImage() failed");
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1362 return -1;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1363 }
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1364
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1365 SDL_ConvertPixels(rect->w, rect->h,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1366 format, pixels, pitch,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1367 screen_format, image->data, image->bytes_per_line);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1368
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1369 XPutImage(data->display, data->drawable, data->gc,
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1370 image, 0, 0, rect->x, rect->y, rect->w, rect->h);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1371
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1372 image->data = NULL;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1373 XDestroyImage(image);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1374
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1375 SDL_free(image_pixels);
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1376 return 0;
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1377 }
5f26a7eb5ff0 Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 3543
diff changeset
1378
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1379 static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1380 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
1381 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1382 X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1383 SDL_DirtyRect *dirty;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1384
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1385 /* Send the data to the display */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1386 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
1387 for (dirty = data->dirty.list; dirty; dirty = dirty->next) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1388 const SDL_Rect *rect = &dirty->rect;
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1389 #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
1390 if(data->use_xrender == SDL_TRUE)
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1391 {
4581
ef0aa488fff6 Fix X11_FillRects to work with double buffering as well as triple buffering. This requires that the buffer pixmap be cleared after every render.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4580
diff changeset
1392 XRenderComposite(data->display, PictOpOver, data->drawable_pict, None, data->xwindow_pict,
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
1393 rect->x, rect->y, 0, 0, rect->x, rect->y, rect->w, rect->h);
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1394 }
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1395 else
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1396 #endif
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1397 {
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
1398 XCopyArea(data->display, data->drawable, data->xwindow,
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1399 data->gc, rect->x, rect->y, rect->w, rect->h,
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1400 rect->x, rect->y);
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1401 }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1402 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1403 SDL_ClearDirtyRects(&data->dirty);
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
1404 }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1405 XSync(data->display, False);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1406
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1407 /* Update the flipping chain, if any */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1408 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
1409 data->current_pixmap = (data->current_pixmap + 1) % 2;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1410 data->drawable = data->pixmaps[data->current_pixmap];
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1411 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1412 data->drawable_pict = data->pixmap_picts[data->current_pixmap];
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1413 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1414 } 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
1415 data->current_pixmap = (data->current_pixmap + 1) % 3;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1416 data->drawable = data->pixmaps[data->current_pixmap];
4579
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1417 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1418 data->drawable_pict = data->pixmap_picts[data->current_pixmap];
d490d63bcc5e X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents: 4578
diff changeset
1419 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1420 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1421 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1422
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1423 static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1424 X11_DestroyTexture(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
1425 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1426 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
1427 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
1428
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1429 if (!data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1430 return;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1431 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1432 if (data->yuv) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1433 SDL_SW_DestroyYUVTexture(data->yuv);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1434 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1435 if (data->pixmap != None) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1436 XFreePixmap(renderdata->display, data->pixmap);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1437 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1438 if (data->image) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1439 data->image->data = NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1440 XDestroyImage(data->image);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1441 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1442 #ifndef NO_SHARED_MEMORY
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1443 if (data->shminfo.shmaddr) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1444 XShmDetach(renderdata->display, &data->shminfo);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1445 XSync(renderdata->display, False);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1446 shmdt(data->shminfo.shmaddr);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1447 data->pixels = NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1448 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1449 #endif
2828
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1450 if (data->scaling_image) {
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1451 SDL_free(data->scaling_image->data);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1452 data->scaling_image->data = NULL;
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1453 XDestroyImage(data->scaling_image);
7e5ff6cd05bf Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents: 2827
diff changeset
1454 }
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1455 if (data->pixels) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1456 SDL_free(data->pixels);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1457 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1458 SDL_free(data);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1459 texture->driverdata = NULL;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1460 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1461
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1462 static void
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1463 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
1464 {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1465 X11_RenderData *data = (X11_RenderData *) renderer->driverdata;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1466 int i;
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1467
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1468 if (data) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1469 for (i = 0; i < SDL_arraysize(data->pixmaps); ++i) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1470 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
1471 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
1472 }
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
1473 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
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
1474 if (data->pixmap_picts[i] != None) {
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
1475 XRenderFreePicture(data->display, data->pixmap_picts[i]);
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
1476 }
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
1477 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1478 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1479 if (data->gc) {
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1480 XFreeGC(data->display, data->gc);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1481 }
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
1482 if (data->drawable) {
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
1483 XFreePixmap(data->display, data->drawable);
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
1484 }
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
1485 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER
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
1486 if (data->mask_gc) {
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
1487 XFreeGC(data->display, data->gc);
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
1488 }
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
1489 if (data->mask_pict) {
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
1490 XRenderFreePicture(data->display, data->mask_pict);
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
1491 }
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
1492 if (data->mask) {
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
1493 XFreePixmap(data->display, data->mask);
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
1494 }
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
1495 if (data->drawable_pict) {
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
1496 XRenderFreePicture(data->display, data->drawable_pict);
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
1497 }
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
1498 if (data->xwindow_pict) {
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
1499 XRenderFreePicture(data->display, data->xwindow_pict);
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
1500 }
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
1501 #endif
2810
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1502 SDL_FreeDirtyRects(&data->dirty);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1503 SDL_free(data);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1504 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1505 SDL_free(renderer);
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1506 }
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1507
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1508 #endif /* SDL_VIDEO_RENDER_X11 */
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1509
27cb878a278e Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1510 /* vi: set ts=4 sw=4 expandtab: */