Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11render.c @ 4600:8b22d33d8260
Remove experimental cruft.
author | Sunny Sachanandani <sunnysachanandani@gmail.com> |
---|---|
date | Sun, 18 Jul 2010 18:45:30 +0530 |
parents | 66e13a224bd6 |
children | 4fbf64d504cf |
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 | 4 Copyright (C) 1997-2010 Sam Lantinga |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 This library is free software; you can redistribute it and/or |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 modify it under the terms of the GNU Lesser General Public |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 License as published by the Free Software Foundation; either |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 version 2.1 of the License, or (at your option) any later version. |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 This library is distributed in the hope that it will be useful, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 Lesser General Public License for more details. |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 You should have received a copy of the GNU Lesser General Public |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 License along with this library; if not, write to the Free Software |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 Sam Lantinga |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 slouken@libsdl.org |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 #include "SDL_config.h" |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 #if SDL_VIDEO_RENDER_X11 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
26 |
3543
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
27 #include <limits.h> /* For INT_MIN and INT_MAX */ |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
28 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "SDL_x11video.h" |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 #include "../SDL_rect_c.h" |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #include "../SDL_pixels_c.h" |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 #include "../SDL_yuv_sw_c.h" |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
33 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 /* X11 renderer implementation */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 static SDL_Renderer *X11_CreateRenderer(SDL_Window * window, Uint32 flags); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 static int X11_DisplayModeChanged(SDL_Renderer * renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 static int X11_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 static int X11_QueryTexturePixels(SDL_Renderer * renderer, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 SDL_Texture * texture, void **pixels, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 int *pitch); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
42 static int X11_SetTextureBlendMode(SDL_Renderer * renderer, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
43 SDL_Texture * texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
44 static int X11_SetTextureScaleMode(SDL_Renderer * renderer, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
45 SDL_Texture * texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 static int X11_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
47 const SDL_Rect * rect, const void *pixels, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 int pitch); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 static int X11_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 const SDL_Rect * rect, int markDirty, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 void **pixels, int *pitch); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 static void X11_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture); |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
53 static int X11_SetDrawBlendMode(SDL_Renderer * renderer); |
3596
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
54 static int X11_RenderDrawPoints(SDL_Renderer * renderer, |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
55 const SDL_Point * points, int count); |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
56 static int X11_RenderDrawLines(SDL_Renderer * renderer, |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
57 const SDL_Point * points, int count); |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
58 static int X11_RenderDrawRects(SDL_Renderer * renderer, |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
59 const SDL_Rect ** rects, int count); |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
60 static int X11_RenderFillRects(SDL_Renderer * renderer, |
f638ded38b8a
Added SDL_RenderClear() as a fast method of clearing the screen to the drawing color.
Sam Lantinga <slouken@libsdl.org>
parents:
3559
diff
changeset
|
61 const SDL_Rect ** rects, int count); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 static int X11_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 const SDL_Rect * srcrect, const SDL_Rect * dstrect); |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
64 static int X11_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
65 Uint32 format, void * pixels, int pitch); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
66 static int X11_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
67 Uint32 format, const void * pixels, int pitch); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
68 static void X11_RenderPresent(SDL_Renderer * renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
69 static void X11_DestroyTexture(SDL_Renderer * renderer, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
70 SDL_Texture * texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
71 static void X11_DestroyRenderer(SDL_Renderer * renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
73 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
74 SDL_RenderDriver X11_RenderDriver = { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
75 X11_CreateRenderer, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
76 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
77 "x11", |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
78 (SDL_RENDERER_SINGLEBUFFER | SDL_RENDERER_PRESENTCOPY | |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
79 SDL_RENDERER_PRESENTFLIP2 | SDL_RENDERER_PRESENTFLIP3 | |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
80 SDL_RENDERER_PRESENTDISCARD | SDL_RENDERER_ACCELERATED), |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
81 SDL_TEXTUREMODULATE_NONE, |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
82 SDL_BLENDMODE_NONE, |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
83 SDL_TEXTURESCALEMODE_NONE, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 0, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
85 {0}, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 0, |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 0} |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 }; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
89 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
90 typedef struct |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
91 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
92 Display *display; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
93 int screen; |
2870
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2868
diff
changeset
|
94 Visual *visual; |
b801df19835f
The X11 window and all pixmaps and images share the same visual and depth.
Sam Lantinga <slouken@libsdl.org>
parents:
2868
diff
changeset
|
95 int depth; |
2916
ffdd533f7add
Fixed pitch alignment problem causing MITSHM error on 16-bit displays
Sam Lantinga <slouken@libsdl.org>
parents:
2901
diff
changeset
|
96 int scanline_pad; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3596
diff
changeset
|
97 Window xwindow; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
98 Pixmap pixmaps[3]; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
99 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
100 Pixmap stencil; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
101 Pixmap brush; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
102 Picture brush_pict; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
103 Picture xwindow_pict; |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
104 Picture pixmap_picts[3]; |
4576
2b98162b536a
Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4575
diff
changeset
|
105 Picture drawable_pict; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
106 Picture stencil_pict; |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
107 int blend_op; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
108 XRenderPictFormat* xwindow_pict_fmt; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
109 GC stencil_gc; |
4584
9907c8cc6015
X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4583
diff
changeset
|
110 SDL_bool use_xrender; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
111 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
112 int current_pixmap; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
113 Drawable drawable; |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
114 SDL_PixelFormat format; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
115 GC gc; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
116 SDL_DirtyRectList dirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
117 SDL_bool makedirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 } X11_RenderData; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
120 typedef struct |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 SDL_SW_YUVTexture *yuv; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 Uint32 format; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 Pixmap pixmap; |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
125 int depth; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
126 Visual *visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
127 GC gc; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
128 #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
|
129 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
|
130 XRenderPictFormat* picture_fmt; |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
131 int blend_op; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
132 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
133 XImage *image; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
134 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
135 /* 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
|
136 XShmSegmentInfo shminfo; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
137 #endif |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
138 XImage *scaling_image; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
139 void *pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 int pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 } X11_TextureData; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
143 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 /* 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
|
145 static int shm_error; |
2814 | 146 static int (*X_handler) (Display *, XErrorEvent *) = NULL; |
147 static int | |
148 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
|
149 { |
2814 | 150 if (e->error_code == BadAccess) { |
151 shm_error = True; | |
152 return (0); | |
153 } else { | |
154 return (X_handler(d, e)); | |
155 } | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 #endif /* ! NO_SHARED_MEMORY */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
158 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
159 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
160 UpdateYUVTextureData(SDL_Texture * texture) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
161 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
162 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
|
163 SDL_Rect rect; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 rect.x = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 rect.y = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 rect.w = texture->w; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 rect.h = texture->h; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 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
|
170 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
|
171 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
172 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 X11_AddRenderDriver(_THIS) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 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
|
177 SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode; |
3520
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
178 int i; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 |
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
|
180 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
|
181 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
|
182 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
|
183 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
|
184 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
|
185 info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YVYU; |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
186 info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
187 |
3520
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
188 for (i = 0; i < _this->num_displays; ++i) { |
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
189 SDL_AddRenderDriver(&_this->displays[i], &X11_RenderDriver); |
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
190 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
191 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
192 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
193 SDL_Renderer * |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
194 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
|
195 { |
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
|
196 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
|
197 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
|
198 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
|
199 SDL_Renderer *renderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
200 X11_RenderData *data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
201 XGCValues gcv; |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
202 gcv.graphics_exposures = False; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
203 int i, n; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
204 int bpp; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
205 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
|
206 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
207 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
|
208 if (!renderer) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
209 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
210 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
211 } |
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 = (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
|
214 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
215 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
216 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
217 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
218 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
219 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
|
220 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
|
221 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
|
222 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
|
223 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
|
224 data->xwindow = windowdata->xwindow; |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
225 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
226 renderer->DisplayModeChanged = X11_DisplayModeChanged; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
227 renderer->CreateTexture = X11_CreateTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
228 renderer->QueryTexturePixels = X11_QueryTexturePixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
229 renderer->SetTextureBlendMode = X11_SetTextureBlendMode; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
230 renderer->SetTextureScaleMode = X11_SetTextureScaleMode; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
231 renderer->UpdateTexture = X11_UpdateTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
232 renderer->LockTexture = X11_LockTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
233 renderer->UnlockTexture = X11_UnlockTexture; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 renderer->RenderCopy = X11_RenderCopy; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
240 renderer->RenderReadPixels = X11_RenderReadPixels; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
241 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
|
242 renderer->RenderPresent = X11_RenderPresent; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
243 renderer->DestroyTexture = X11_DestroyTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
244 renderer->DestroyRenderer = X11_DestroyRenderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
245 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
|
246 renderer->window = window; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
247 renderer->driverdata = data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
248 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
249 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
|
250 |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
251 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
252 data->use_xrender = SDL_FALSE; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
253 if (SDL_X11_HAVE_XRENDER) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
254 // Query the extension. This is the server runtime check. |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
255 int event_basep, error_basep; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
256 if(XRenderQueryExtension(data->display, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
257 &event_basep, &error_basep) == True) |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
258 data->use_xrender = SDL_TRUE; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
259 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
260 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
261 // Find the PictFormat from the visual. |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
262 // Should be an RGB PictFormat most of the time. |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
263 data->xwindow_pict_fmt = XRenderFindVisualFormat(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
264 data->visual); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
265 if (!data->xwindow_pict_fmt) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
266 SDL_SetError("XRenderFindVisualFormat() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
267 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
268 } |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
269 data->xwindow_pict = XRenderCreatePicture(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
270 data->xwindow, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
271 data->xwindow_pict_fmt, |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
272 0, NULL); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
273 if (!data->xwindow_pict) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
274 SDL_SetError("XRenderCreatePicture() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
275 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
276 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
277 // FIXME: Clear the window. Is this required? |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
278 XRenderComposite(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
279 PictOpClear, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
280 data->xwindow_pict, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
281 None, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
282 data->xwindow_pict, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
283 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
284 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
285 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
286 window->w, window->h); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
287 // Add some blending modes to the list of supported blending modes |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
288 renderer->info.blend_modes |= |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
289 (SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MASK); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
290 // Create a clip mask that is used for rendering primitives. |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
291 data->stencil = XCreatePixmap(data->display, data->xwindow, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
292 window->w, window->h, 8); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
293 |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
294 // Create the GC for the clip mask. |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
295 data->stencil_gc = XCreateGC(data->display, data->stencil, |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
296 GCGraphicsExposures, &gcv); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
297 XSetBackground(data->display, data->stencil_gc, 0x00); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
298 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
299 data->stencil_pict = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
300 XRenderCreatePicture(data->display, data->stencil, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
301 XRenderFindStandardFormat(data->display, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
302 PictStandardA8), |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
303 0, NULL); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
304 data->brush = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
305 XCreatePixmap(data->display, data->xwindow, 1, 1, 32); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
306 XRenderPictureAttributes brush_attr; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
307 brush_attr.repeat = RepeatNormal; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
308 data->brush_pict = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
309 XRenderCreatePicture(data->display, data->brush, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
310 XRenderFindStandardFormat(data->display, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
311 PictStandardARGB32), |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
312 CPRepeat, &brush_attr); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
313 // Set the default blending mode. |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
314 renderer->blendMode = SDL_BLENDMODE_BLEND; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
315 data->blend_op = PictOpOver; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
316 } |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
317 #endif |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
318 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 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
|
320 renderer->info.flags |= |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 (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
|
322 n = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
323 } 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
|
324 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
|
325 n = 2; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
326 } 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
|
327 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
|
328 n = 3; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
329 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
330 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
|
331 n = 1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 for (i = 0; i < n; ++i) { |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
334 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
335 if (data->use_xrender) { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
336 data->pixmaps[i] = XCreatePixmap(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
337 data->xwindow, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
338 window->w, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
339 window->h, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
340 32); |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
341 } |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
342 else |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
343 #endif |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
344 { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
345 data->pixmaps[i] = |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
346 XCreatePixmap(data->display, data->xwindow, window->w, window->h, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
347 displaydata->depth); |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
348 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
349 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
|
350 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
351 SDL_SetError("XCreatePixmap() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
352 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
353 } |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
354 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
355 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
356 // Create xrender pictures for each of the pixmaps |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
357 // and clear the pixmaps. |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
358 data->pixmap_picts[i] = |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
359 XRenderCreatePicture(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
360 data->pixmaps[i], |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
361 XRenderFindStandardFormat(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
362 PictStandardARGB32), |
4583
5c925d4f220f
X11_DrawRects now uses a very hacky way of drawing rectangles with XRender. This will be improved in some time.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4582
diff
changeset
|
363 0, None); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
364 if (!data->pixmap_picts[i]) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
365 SDL_SetError("XRenderCreatePicture() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
366 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
367 } |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
368 |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
369 XRenderComposite(data->display, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
370 PictOpClear, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
371 data->pixmap_picts[i], |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
372 None, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
373 data->pixmap_picts[i], |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
374 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
375 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
376 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
377 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
|
378 } |
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
379 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
380 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
381 if (n > 0) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
382 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
|
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) |
4576
2b98162b536a
Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4575
diff
changeset
|
385 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
|
386 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
387 data->makedirty = SDL_TRUE; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
388 } 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
|
389 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
|
390 #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
|
391 if(data->use_xrender == SDL_TRUE) |
4576
2b98162b536a
Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4575
diff
changeset
|
392 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
|
393 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
394 data->makedirty = SDL_FALSE; |
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 data->current_pixmap = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
397 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
398 /* Get the format of the window */ |
2874 | 399 if (!SDL_PixelFormatEnumToMasks |
400 (display->current_mode.format, &bpp, &Rmask, &Gmask, &Bmask, | |
401 &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
|
402 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
|
403 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
|
404 return NULL; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
405 } |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
406 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
|
407 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
408 /* Create the drawing context */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
409 gcv.graphics_exposures = False; |
2814 | 410 data->gc = |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
411 XCreateGC(data->display, data->drawable, GCGraphicsExposures, &gcv); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
412 if (!data->gc) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
413 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
414 SDL_SetError("XCreateGC() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
415 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
416 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
417 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
418 return renderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
419 } |
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 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 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
|
423 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 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
|
425 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
|
426 int i, n; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
428 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
429 if (data->use_xrender) { |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
430 XRenderFreePicture(data->display, data->xwindow_pict); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
431 data->xwindow_pict_fmt = |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
432 XRenderFindVisualFormat(data->display, data->visual); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
433 data->xwindow_pict = |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
434 XRenderCreatePicture(data->display, data->xwindow, |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
435 data->xwindow_pict_fmt, 0, NULL); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
436 } |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
437 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
438 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
|
439 n = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
440 } 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
|
441 n = 2; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
442 } 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
|
443 n = 3; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
444 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
445 n = 1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
446 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
447 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
|
448 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
|
449 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
|
450 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
|
451 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
452 XRenderFreePicture(data->display, data->pixmap_picts[i]); |
4577
87a2d87786d4
Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4576
diff
changeset
|
453 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
|
454 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
455 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
456 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
457 for (i = 0; i < n; ++i) { |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
458 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
459 if (data->use_xrender) { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
460 data->pixmaps[i] = |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
461 XCreatePixmap(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
462 data->xwindow, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
463 window->w, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
464 window->h, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
465 32); |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
466 } |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
467 else |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
468 #endif |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
469 { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
470 data->pixmaps[i] = |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
471 XCreatePixmap(data->display, data->xwindow, window->w, window->h, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
472 data->depth); |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
473 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
474 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
|
475 SDL_SetError("XCreatePixmap() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
476 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
477 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
478 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
479 if (data->use_xrender) { |
4577
87a2d87786d4
Modified configure.in to allow building with Xrender. Fixed all problems that prevented compilation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4576
diff
changeset
|
480 data->pixmap_picts[i] = |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
481 XRenderCreatePicture(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
482 data->pixmaps[i], |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
483 XRenderFindStandardFormat(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
484 PictStandardARGB32), |
4583
5c925d4f220f
X11_DrawRects now uses a very hacky way of drawing rectangles with XRender. This will be improved in some time.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4582
diff
changeset
|
485 0, None); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
486 if (!data->pixmap_picts[i]) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
487 SDL_SetError("XRenderCreatePicture() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
488 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
489 } |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
490 XRenderComposite(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
491 PictOpClear, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
492 data->pixmap_picts[i], |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
493 None, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
494 data->pixmap_picts[i], |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
495 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
496 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
497 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
498 window->w, window->h); |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
499 |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
500 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
501 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
502 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
503 if (n > 0) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 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
|
505 #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
|
506 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
|
507 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
508 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
509 data->current_pixmap = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
510 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
511 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
512 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
513 |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
514 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
515 static void |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
516 SDLMaskToXRenderMask(Uint32 sdl_mask, short *comp, short *compMask) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
517 (*comp) = 0; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
518 (*compMask) = 0; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
519 while(!(sdl_mask & 1)) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
520 (*comp)++; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
521 sdl_mask >>= 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
522 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
523 while(sdl_mask & 1) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
524 (*compMask) = ((*compMask) << 1) | 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
525 sdl_mask >>= 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
526 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
527 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
528 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
529 static XRenderPictFormat* |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
530 PixelFormatEnumToXRenderPictFormat(SDL_Renderer * renderer, Uint32 format) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
531 XRenderPictFormat* pict_fmt = NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
532 X11_RenderData *data = (X11_RenderData *) renderer->driverdata; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
533 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
534 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
535 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
536 int bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
537 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
538 SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
539 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
540 XRenderPictFormat templ; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
541 unsigned long mask = (PictFormatType | PictFormatDepth | PictFormatRed | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
542 PictFormatRedMask | PictFormatGreen | PictFormatGreenMask | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
543 PictFormatBlue | PictFormatBlueMask | PictFormatAlpha | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
544 PictFormatAlphaMask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
545 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
546 templ.type = PictTypeDirect; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
547 templ.depth = bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
548 SDLMaskToXRenderMask(Amask, &(templ.direct.alpha), &(templ.direct.alphaMask)); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
549 SDLMaskToXRenderMask(Rmask, &(templ.direct.red), &(templ.direct.redMask)); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
550 SDLMaskToXRenderMask(Gmask, &(templ.direct.green), &(templ.direct.greenMask)); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
551 SDLMaskToXRenderMask(Bmask, &(templ.direct.blue), &(templ.direct.blueMask)); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
552 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
553 pict_fmt = XRenderFindFormat(data->display, mask, &templ, 0); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
554 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
555 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
556 return pict_fmt; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
557 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
558 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
559 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
560 static Visual* |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
561 PixelFormatEnumToVisual(SDL_Renderer * renderer, Uint32 format) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
562 X11_RenderData *data = (X11_RenderData *) renderer->driverdata; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
563 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
564 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
565 int bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
566 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
567 SDL_PixelFormatEnumToMasks(format, &bpp, &Rmask, &Gmask, &Bmask, &Amask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
568 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
569 XVisualInfo vinfo_templ; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
570 long vinfo_mask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
571 int nitems_return; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
572 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
573 vinfo_mask = (VisualDepthMask | VisualRedMaskMask | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
574 VisualGreenMaskMask | VisualBlueMaskMask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
575 vinfo_templ.depth = bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
576 vinfo_templ.red_mask = Rmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
577 vinfo_templ.green_mask = Gmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
578 vinfo_templ.blue_mask = Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
579 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
580 XVisualInfo * ret = XGetVisualInfo(data->display, vinfo_mask, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
581 &vinfo_templ, &nitems_return); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
582 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
583 if (nitems_return) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
584 return ret[0].visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
585 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
586 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
587 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
588 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
589 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
590 #endif |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
591 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
592 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
593 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
|
594 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
595 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
|
596 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
|
597 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
|
598 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
|
599 int pitch_alignmask = ((renderdata->scanline_pad / 8) - 1); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
600 XGCValues gcv; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
601 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 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
|
603 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
604 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
605 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
606 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
607 data->depth = renderdata->depth; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
608 data->visual = renderdata->visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
609 data->gc = renderdata->gc; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
610 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
611 texture->driverdata = data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
612 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
|
613 data->yuv = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
614 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
|
615 if (!data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
616 return -1; |
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 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
|
619 } else { |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
620 /* 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
|
621 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
|
622 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
|
623 */ |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
624 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
625 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
|
626 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
|
627 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
|
628 return -1; |
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
629 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
630 } else { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
631 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
632 SDL_PixelFormatEnumToMasks(texture->format, &(data->depth), |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
633 &Rmask, &Gmask, &Bmask, &Amask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
634 data->visual = PixelFormatEnumToVisual(renderer, texture->format); |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
635 } |
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
636 #else |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
637 /* 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
|
638 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
|
639 This BadMatch error |
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
640 */ |
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
|
641 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
|
642 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
|
643 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
|
644 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
645 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
646 data->format = texture->format; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
647 } |
2814 | 648 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
|
649 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
|
650 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
651 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
|
652 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
653 XShmSegmentInfo *shminfo = &data->shminfo; |
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 shm_error = True; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
656 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
657 if (SDL_X11_HAVE_SHM) { |
2814 | 658 shminfo->shmid = |
659 shmget(IPC_PRIVATE, texture->h * data->pitch, | |
660 IPC_CREAT | 0777); | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
661 if (shminfo->shmid >= 0) { |
2814 | 662 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
|
663 shminfo->readOnly = False; |
2814 | 664 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
|
665 shm_error = False; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
666 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
|
667 XShmAttach(renderdata->display, shminfo); |
3239 | 668 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
|
669 XSetErrorHandler(X_handler); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
670 if (shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
671 shmdt(shminfo->shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
672 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
673 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
674 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
|
675 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
676 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
677 if (!shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
678 data->pixels = shminfo->shmaddr; |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
679 data->pixmap = |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
680 XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w, |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
681 texture->h, data->depth); |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
682 if (data->pixmap == None) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
683 X11_DestroyTexture(renderer, texture); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
684 SDL_SetError("XCreatePixmap() failed"); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
685 return -1; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
686 } |
2814 | 687 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
688 XShmCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
689 data->depth, ZPixmap, shminfo->shmaddr, |
2874 | 690 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
|
691 |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
692 if (!data->image) { |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
693 XShmDetach(renderdata->display, shminfo); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
694 XSync(renderdata->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
695 shmdt(shminfo->shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
696 shm_error = True; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
697 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
698 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
699 if (shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
700 shminfo->shmaddr = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
701 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
702 if (!data->image) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
703 #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
|
704 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
705 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
|
706 if (!data->pixels) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
707 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
|
708 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
709 return -1; |
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 |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
712 data->pixmap = |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
713 XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w, |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
714 texture->h, data->depth); |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
715 if (data->pixmap == None) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
716 X11_DestroyTexture(renderer, texture); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
717 SDL_SetError("XCreatePixmap() failed"); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
718 return -1; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
719 } |
2814 | 720 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
721 XCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
722 data->depth, ZPixmap, 0, data->pixels, |
2874 | 723 texture->w, texture->h, |
724 SDL_BYTESPERPIXEL(data->format) * 8, | |
725 data->pitch); | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
726 if (!data->image) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
727 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
|
728 SDL_SetError("XCreateImage() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
729 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
730 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
731 } |
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
|
732 } |
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
|
733 else { |
2814 | 734 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
|
735 XCreatePixmap(renderdata->display, renderdata->xwindow, texture->w, |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
736 texture->h, data->depth); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
737 if (data->pixmap == None) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
738 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
|
739 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
|
740 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
741 } |
2814 | 742 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
743 XCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
744 data->depth, ZPixmap, 0, NULL, |
4580
cfea5b007bc7
Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4579
diff
changeset
|
745 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
|
746 SDL_BYTESPERPIXEL(data->format) * 8, |
2874 | 747 data->pitch); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
748 if (!data->image) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
749 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
|
750 SDL_SetError("XCreateImage() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
751 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
752 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
753 } |
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
|
754 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
755 if(renderdata->use_xrender) { |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
756 gcv.graphics_exposures = False; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
757 data->gc = |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
758 XCreateGC(renderdata->display, data->pixmap, GCGraphicsExposures, &gcv); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
759 if (!data->gc) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
760 SDL_SetError("XCreateGC() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
761 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
762 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
763 data->picture_fmt = |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
764 PixelFormatEnumToXRenderPictFormat(renderer, texture->format); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
765 if (data->picture_fmt == NULL) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
766 X11_DestroyTexture(renderer, texture); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
767 SDL_SetError("Texture format not supported by driver"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
768 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
769 } |
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
|
770 data->picture = |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
771 XRenderCreatePicture(renderdata->display, data->pixmap, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
772 data->picture_fmt, 0, NULL); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
773 if (!data->picture) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
774 X11_DestroyTexture(renderer, texture); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
775 SDL_SetError("XRenderCreatePicture() failed"); |
4580
cfea5b007bc7
Fix the rendering color channels to be premultiplied with the alpha channel as thats what Xrender expects. Small fixes in X11_CreateTexture. Add some new functions in SDL_x11sym.h as well as support for Xrender.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4579
diff
changeset
|
776 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
|
777 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
778 } |
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
|
779 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
781 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
782 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
783 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
784 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
|
785 void **pixels, int *pitch) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
786 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
787 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
|
788 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
789 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
790 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
|
791 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 *pixels = data->pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
793 *pitch = data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
794 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
795 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 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
|
800 { |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
801 X11_TextureData *data = (X11_TextureData *) texture->driverdata; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 switch (texture->blendMode) { |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
803 case SDL_BLENDMODE_NONE: |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
804 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
805 data->blend_op = PictOpSrc; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
806 return 0; |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
807 case SDL_BLENDMODE_BLEND: |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
808 data->blend_op = PictOpOver; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
809 return 0; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
810 case SDL_BLENDMODE_ADD: |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
811 data->blend_op = PictOpAdd; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
812 return 0; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
813 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
814 default: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
815 SDL_Unsupported(); |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
816 texture->blendMode = SDL_BLENDMODE_NONE; |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
817 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
818 texture->blendMode = SDL_BLENDMODE_BLEND; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
819 data->blend_op = PictOpOver; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
820 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
823 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
824 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
825 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
826 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
|
827 { |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
828 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
|
829 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
830 switch (texture->scaleMode) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
831 case SDL_TEXTURESCALEMODE_NONE: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
832 return 0; |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
833 case SDL_TEXTURESCALEMODE_FAST: |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
834 /* 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
|
835 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
|
836 return 0; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
837 } |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
838 /* 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
|
839 default: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
840 SDL_Unsupported(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
841 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
|
842 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
843 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
844 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
845 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
846 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
847 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
848 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
|
849 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
|
850 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
851 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
|
852 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
853 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
854 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
|
855 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
856 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
857 UpdateYUVTextureData(texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
858 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
859 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
860 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
|
861 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
862 if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
863 Uint8 *src, *dst; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
864 int row; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
865 size_t length; |
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 src = (Uint8 *) pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
868 dst = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
869 (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
|
870 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
|
871 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
|
872 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
|
873 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
|
874 src += pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
875 dst += data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
876 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
877 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
878 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
|
879 data->image->height = rect->h; |
2814 | 880 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
|
881 data->image->bytes_per_line = pitch; |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
882 XPutImage(renderdata->display, data->pixmap, data->gc, |
2814 | 883 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
|
884 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
885 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
886 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
887 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
888 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
889 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
890 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
|
891 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
|
892 int *pitch) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
893 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
894 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
|
895 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
896 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
897 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
|
898 pitch); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
899 } else if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
900 *pixels = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
901 (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
|
902 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
|
903 *pitch = data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
904 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
905 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 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
|
907 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
909 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
911 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 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
|
913 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
914 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
|
915 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
917 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
|
918 UpdateYUVTextureData(texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
919 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
921 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
922 static int |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
923 X11_SetDrawBlendMode(SDL_Renderer * renderer) |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
924 { |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
925 X11_RenderData *data = (X11_RenderData *) renderer->driverdata; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
926 switch (renderer->blendMode) { |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
927 case SDL_BLENDMODE_NONE: |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
928 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
929 //PictOpSrc |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
930 data->blend_op = PictOpSrc; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
931 return 0; |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
932 case SDL_BLENDMODE_BLEND: // PictOpOver |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
933 data->blend_op = PictOpOver; |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
934 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
|
935 case SDL_BLENDMODE_ADD: // PictOpAdd |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
936 data->blend_op = PictOpAdd; |
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
937 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
|
938 /* 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
|
939 #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
|
940 return 0; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
941 default: |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
942 SDL_Unsupported(); |
4589
8d8a889530eb
Fix blending modes for primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4588
diff
changeset
|
943 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
944 if(data->use_xrender) { |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
945 renderer->blendMode = SDL_BLENDMODE_BLEND; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
946 data->blend_op = PictOpOver; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
947 } |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
948 else |
4589
8d8a889530eb
Fix blending modes for primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4588
diff
changeset
|
949 #endif |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
950 { |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
951 renderer->blendMode = SDL_BLENDMODE_NONE; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
952 } |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
953 return -1; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
954 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
955 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
956 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
957 static Uint32 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
958 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
|
959 { |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
960 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
|
961 Uint8 r = renderer->r; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
962 Uint8 g = renderer->g; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
963 Uint8 b = renderer->b; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
964 Uint8 a = renderer->a; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
965 if (premult) |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
966 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
|
967 ((int) g * (int) a) / 255, |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
968 ((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
|
969 else |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
970 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
|
971 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
972 |
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
|
973 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
|
974 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
|
975 { |
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
|
976 // 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
|
977 XRenderColor xrender_color; |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
978 double alphad; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
979 if(renderer->blendMode == SDL_BLENDMODE_NONE) |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
980 alphad = 1.0; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
981 else |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
982 alphad = (renderer->a) / 255.0; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
983 |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
984 xrender_color.alpha = (unsigned short) ((renderer->a / 255.0) * 0xFFFF); |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
985 |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
986 xrender_color.red = |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
987 (unsigned short) ((renderer->r / 255.0) * alphad * 0xFFFF); |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
988 xrender_color.green = |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
989 (unsigned short) ((renderer->g / 255.0) * alphad * 0xFFFF); |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
990 xrender_color.blue = |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
991 (unsigned short) ((renderer->b / 255.0) * alphad * 0xFFFF); |
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
|
992 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
|
993 } |
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
|
994 |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
995 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
|
996 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
|
997 int count) |
2901 | 998 { |
999 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
|
1000 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
|
1001 XPoint *xpoints, *xpoint; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1002 int i, xcount; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1003 SDL_Rect clip, rect; |
2901 | 1004 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1005 clip.x = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1006 clip.y = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1007 clip.w = window->w; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1008 clip.h = window->h; |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1009 if (data->makedirty) { |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1010 |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1011 /* Get the smallest rectangle that contains everything */ |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1012 rect.x = 0; |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1013 rect.y = 0; |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1014 rect.w = window->w; |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1015 rect.h = window->h; |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1016 if (!SDL_EnclosePoints(points, count, &rect, &rect)) { |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1017 /* Nothing to draw */ |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1018 return 0; |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1019 } |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1020 SDL_AddDirtyRect(&data->dirty, &rect); |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1021 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1022 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1023 xpoint = xpoints = SDL_stack_alloc(XPoint, count); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1024 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1025 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1026 int x = points[i].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1027 int y = points[i].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1028 if (x < 0 || x >= window->w || y < 0 || y >= window->h) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1029 continue; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1030 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1031 xpoint->x = (short)x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1032 xpoint->y = (short)y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1033 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1034 ++xcount; |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1035 } |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1036 /* |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1037 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1038 if (data->use_xrender) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1039 XSetForeground(data->display, data->stencil_gc, 0x00); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1040 XFillRectangle(data->display, data->stencil, data->stencil_gc, |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1041 rect.x, rect.y, rect.w, rect.h); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1042 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1043 XDrawPoints(data->display, data->stencil, data->stencil_gc, xpoints, xcount, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1044 CoordModeOrigin); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1045 } |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1046 #endif*/ |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1047 } |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1048 /* |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1049 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1050 if (data->use_xrender) { |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1051 XRenderColor foreground; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1052 foreground = xrenderdrawcolor(renderer); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1053 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1054 &foreground, 0, 0, 1, 1); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1055 XRenderComposite(data->display, data->blend_op, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1056 data->stencil_pict, data->drawable_pict, |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1057 rect.x, rect.y, rect.x, rect.y, rect.x, rect.y, rect.w, rect.h); |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1058 } |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1059 else |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1060 #endif |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1061 */ |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1062 { |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1063 unsigned long foreground = renderdrawcolor(renderer, 1); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1064 XSetForeground(data->display, data->gc, foreground); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1065 |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1066 |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1067 if (xcount > 0) { |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1068 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
|
1069 CoordModeOrigin); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1070 } |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1071 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1072 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1073 SDL_stack_free(xpoints); |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1074 |
2894 | 1075 return 0; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1076 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1077 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1078 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
|
1079 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
|
1080 int count) |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1081 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1082 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
|
1083 SDL_Window *window = renderer->window; |
4458
c9584df65367
Removed unused variables
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
1084 SDL_Rect clip; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1085 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
|
1086 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
|
1087 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
|
1088 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
|
1089 int maxx, maxy; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1090 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1091 clip.x = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1092 clip.y = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1093 clip.w = window->w; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1094 clip.h = window->h; |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1095 { |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1096 Pixmap drawable; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1097 GC gc; |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1098 /* |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1099 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1100 if (data->use_xrender) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1101 drawable = data->stencil; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1102 gc = data->stencil_gc; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1103 XSetForeground(data->display, data->stencil_gc, 0x00); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1104 XFillRectangle(data->display, data->stencil, data->stencil_gc, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1105 0, 0, window->w, window->h); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1106 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1107 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1108 else |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1109 #endif |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1110 */ |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1111 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1112 drawable = data->drawable; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1113 gc = data->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
|
1114 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1115 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1116 foreground = renderdrawcolor(renderer, 1); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1117 XSetForeground(data->display, data->gc, foreground); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1118 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1119 xpoint = xpoints = SDL_stack_alloc(XPoint, count); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1120 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1121 minx = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1122 miny = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1123 maxx = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1124 maxy = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1125 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1126 int x = points[i].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1127 int y = points[i].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1128 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1129 /* If the point is inside the window, add it to the list */ |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1130 if (x >= 0 && x < window->w && y >= 0 && y < window->h) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1131 if (x < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1132 minx = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1133 } else if (x > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1134 maxx = x; |
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
|
1135 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1136 if (y < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1137 miny = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1138 } else if (y > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1139 maxy = y; |
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
|
1140 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1141 xpoint->x = (short)x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1142 xpoint->y = (short)y; |
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
|
1143 ++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
|
1144 ++xcount; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1145 continue; |
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
|
1146 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1147 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1148 /* We need to clip the line segments joined by this point */ |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1149 if (xcount > 0) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1150 int x1 = xpoint[-1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1151 int y1 = xpoint[-1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1152 int x2 = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1153 int y2 = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1154 if (SDL_IntersectRectAndLine(&clip, &x1, &y1, &x2, &y2)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1155 if (x2 < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1156 minx = x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1157 } else if (x2 > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1158 maxx = x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1159 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1160 if (y2 < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1161 miny = y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1162 } else if (y2 > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1163 maxy = y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1164 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1165 xpoint->x = (short)x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1166 xpoint->y = (short)y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1167 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1168 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1169 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1170 XDrawLines(data->display, drawable, gc, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1171 xpoints, xcount, CoordModeOrigin); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1172 if (xpoints[0].x != x2 || xpoints[0].y != y2) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1173 XDrawPoint(data->display, drawable, gc, x2, y2); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1174 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1175 if (data->makedirty) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1176 SDL_Rect rect; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1177 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1178 rect.x = minx; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1179 rect.y = miny; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1180 rect.w = (maxx - minx) + 1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1181 rect.h = (maxy - miny) + 1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1182 SDL_AddDirtyRect(&data->dirty, &rect); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1183 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1184 xpoint = xpoints; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1185 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1186 minx = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1187 miny = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1188 maxx = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1189 maxy = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1190 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1191 if (i < (count-1)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1192 int x1 = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1193 int y1 = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1194 int x2 = points[i+1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1195 int y2 = points[i+1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1196 if (SDL_IntersectRectAndLine(&clip, &x1, &y1, &x2, &y2)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1197 if (x1 < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1198 minx = x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1199 } else if (x1 > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1200 maxx = x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1201 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1202 if (y1 < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1203 miny = y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1204 } else if (y1 > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1205 maxy = y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1206 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1207 xpoint->x = (short)x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1208 xpoint->y = (short)y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1209 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1210 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1211 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1212 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1213 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1214 if (xcount > 1) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1215 int x2 = xpoint[-1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1216 int y2 = xpoint[-1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1217 XDrawLines(data->display, drawable, gc, xpoints, xcount, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1218 CoordModeOrigin); |
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
|
1219 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
|
1220 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
|
1221 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1222 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
|
1223 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
|
1224 |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1225 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
|
1226 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
|
1227 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
|
1228 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
|
1229 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
|
1230 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1231 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1232 } |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1233 /* |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1234 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1235 if (data->use_xrender) { |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1236 XRenderColor xrforeground = xrenderdrawcolor(renderer); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1237 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1238 &xrforeground, 0, 0, 1, 1); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1239 XRenderComposite(data->display, data->blend_op, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1240 data->stencil_pict, data->drawable_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1241 0, 0, 0, 0, 0, 0, window->w, window->h); |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1242 } |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1243 #endif |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1244 */ |
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
|
1245 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
|
1246 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1247 return 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1248 } |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1249 |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1250 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
|
1251 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
|
1252 { |
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
|
1253 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
|
1254 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
|
1255 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
|
1256 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
|
1257 XRectangle *xrects, *xrect; |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1258 xrect = xrects = SDL_stack_alloc(XRectangle, count); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1259 xcount = 0; |
4590
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
1260 |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
1261 clip.x = 0; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
1262 clip.y = 0; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
1263 clip.w = window->w; |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
1264 clip.h = window->h; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1265 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1266 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1267 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1268 if (!SDL_IntersectRect(rects[i], &clip, &rect)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1269 continue; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1270 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1271 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1272 xrect->x = (short)rect.x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1273 xrect->y = (short)rect.y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1274 xrect->width = (unsigned short)rect.w; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1275 xrect->height = (unsigned short)rect.h; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1276 ++xrect; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1277 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1278 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1279 if (data->makedirty) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1280 SDL_AddDirtyRect(&data->dirty, &rect); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1281 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1282 } |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1283 /* |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1284 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1285 if (data->use_xrender) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1286 XSetForeground(data->display, data->stencil_gc, 0x00); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1287 XFillRectangle(data->display, data->stencil, data->stencil_gc, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1288 0, 0, window->w, window->h); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1289 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1290 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1291 XDrawRectangles(data->display, data->stencil, data->stencil_gc, xrects, xcount); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1292 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1293 #endif |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1294 */ |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1295 } |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1296 /* |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1297 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1298 if (data->use_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
|
1299 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
|
1300 foreground = xrenderdrawcolor(renderer); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1301 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1302 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1303 &foreground, 0, 0, 1, 1); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1304 XRenderComposite(data->display, data->blend_op, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1305 data->stencil_pict, data->drawable_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1306 0, 0, 0, 0, 0, 0, window->w, window->h); |
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
|
1307 } |
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
|
1308 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
|
1309 #endif |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1310 */ |
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
|
1311 { |
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
|
1312 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
|
1313 |
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
|
1314 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
|
1315 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
|
1316 |
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
|
1317 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
|
1318 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
|
1319 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
|
1320 } |
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
|
1321 } |
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
|
1322 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
|
1323 |
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
|
1324 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
|
1325 } |
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
|
1326 |
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
|
1327 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
|
1328 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
|
1329 { |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1330 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
|
1331 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
|
1332 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
|
1333 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1334 clip.x = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1335 clip.y = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1336 clip.w = window->w; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1337 clip.h = window->h; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1338 |
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
|
1339 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
|
1340 XRectangle *xrects, *xrect; |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1341 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
|
1342 xcount = 0; |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1343 for (i = 0; i < count; ++i) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1344 if (!SDL_IntersectRect(rects[i], &clip, &rect)) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1345 continue; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1346 } |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1347 |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1348 xrect->x = (short)rect.x; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1349 xrect->y = (short)rect.y; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1350 xrect->width = (unsigned short)rect.w; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1351 xrect->height = (unsigned short)rect.h; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1352 ++xrect; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1353 ++xcount; |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1354 |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1355 if (data->makedirty) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1356 SDL_AddDirtyRect(&data->dirty, &rect); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1357 } |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1358 } |
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
|
1359 |
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
|
1360 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1361 if (data->use_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
|
1362 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
|
1363 foreground = xrenderdrawcolor(renderer); |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1364 if (xcount == 1) { |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1365 XRenderFillRectangle(data->display, data->blend_op, data->drawable_pict, |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1366 &foreground, xrects[0].x, xrects[0].y, |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1367 xrects[0].width, xrects[0].height); |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1368 } |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1369 else if (xcount > 1) { |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1370 XRenderFillRectangles(data->display, data->blend_op, data->drawable_pict, |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1371 &foreground, xrects, xcount); |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1372 } |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1373 } |
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
|
1374 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
|
1375 #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
|
1376 { |
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
|
1377 unsigned long foreground; |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1378 |
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
|
1379 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
|
1380 XSetForeground(data->display, data->gc, foreground); |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1381 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1382 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
|
1383 xrects, xcount); |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1384 } |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1385 |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1386 SDL_stack_free(xrects); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1387 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1388 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1389 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1390 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1391 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
|
1392 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
|
1393 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1394 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
|
1395 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
|
1396 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1397 if (data->makedirty) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1398 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
|
1399 } |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1400 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1401 if (data->use_xrender) { |
4587
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1402 if(texture->access == SDL_TEXTUREACCESS_STREAMING) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1403 #ifndef NO_SHARED_MEMORY |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1404 if(texturedata->shminfo.shmaddr) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1405 XShmPutImage(data->display, texturedata->pixmap, data->gc, |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1406 texturedata->image, srcrect->x, srcrect->y, |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1407 srcrect->x, srcrect->y, srcrect->w, srcrect->h, |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1408 False); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1409 } |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1410 else |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1411 #endif |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1412 if (texturedata->pixels) { |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1413 XPutImage(data->display, texturedata->pixmap, data->gc, |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1414 texturedata->image, srcrect->x, srcrect->y, dstrect->x, |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1415 dstrect->y, srcrect->w, srcrect->h); |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1416 } |
25391ccf16a0
Texture rendering mostly works now. Even SDL_TEXTUREACCESS_STREAMING is supported now with a little overhead. Scaling of textures happens using XRender. :D
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4586
diff
changeset
|
1417 } |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1418 Picture pict; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1419 if(texture->blendMode == SDL_BLENDMODE_NONE) |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1420 pict = None; |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1421 else |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1422 pict = texturedata->picture; |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1423 if(srcrect->w == dstrect->w && srcrect->h == dstrect->h) { |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1424 XRenderComposite(data->display, texturedata->blend_op, texturedata->picture, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1425 pict, data->drawable_pict, srcrect->x, srcrect->y, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1426 srcrect->x, srcrect->y, dstrect->x, dstrect->y, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1427 srcrect->w, srcrect->h); |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1428 } else { |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1429 double xscale = ((double) dstrect->w) / srcrect->w; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1430 double yscale = ((double) dstrect->h) / srcrect->h; |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1431 XTransform xform = {{ |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1432 {XDoubleToFixed(xscale), XDoubleToFixed(0), XDoubleToFixed(0)}, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1433 {XDoubleToFixed(0), XDoubleToFixed(yscale), XDoubleToFixed(0)}, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1434 {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(xscale * yscale)}}}; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1435 XRenderSetPictureTransform(data->display, texturedata->picture, &xform); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1436 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1437 XRenderComposite(data->display, texturedata->blend_op, |
4595
73eeadf7ed8e
Fixed a minor bug with texture blending.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4594
diff
changeset
|
1438 texturedata->picture, pict, data->drawable_pict, |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1439 0, 0, 0, 0, dstrect->x, dstrect->y, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1440 dstrect->w, dstrect->h); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1441 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1442 XTransform identity = {{ |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1443 {XDoubleToFixed(1), XDoubleToFixed(0), XDoubleToFixed(0)}, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1444 {XDoubleToFixed(0), XDoubleToFixed(1), XDoubleToFixed(0)}, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1445 {XDoubleToFixed(0), XDoubleToFixed(0), XDoubleToFixed(1)}}}; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1446 XRenderSetPictureTransform(data->display, texturedata->picture, &identity); |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1447 } |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1448 } |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1449 else |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1450 #endif |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1451 { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1452 if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1453 #ifndef NO_SHARED_MEMORY |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1454 if (texturedata->shminfo.shmaddr) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1455 XShmPutImage(data->display, data->drawable, data->gc, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1456 texturedata->image, srcrect->x, srcrect->y, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1457 dstrect->x, dstrect->y, srcrect->w, srcrect->h, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1458 False); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1459 } else |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1460 #endif |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1461 if (texturedata->pixels) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1462 XPutImage(data->display, data->drawable, data->gc, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1463 texturedata->image, srcrect->x, srcrect->y, dstrect->x, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1464 dstrect->y, srcrect->w, srcrect->h); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1465 } else { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1466 XCopyArea(data->display, texturedata->pixmap, data->drawable, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1467 data->gc, srcrect->x, srcrect->y, dstrect->w, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1468 dstrect->h, dstrect->x, dstrect->y); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1469 } |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1470 } else if (texturedata->yuv |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1471 || texture->access == SDL_TEXTUREACCESS_STREAMING) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1472 SDL_Surface src, dst; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1473 SDL_PixelFormat fmt; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1474 SDL_Rect rect; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1475 XImage *image = texturedata->scaling_image; |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1476 |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1477 if (!image) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1478 void *pixels; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1479 int pitch; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1480 |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1481 pitch = dstrect->w * SDL_BYTESPERPIXEL(texturedata->format); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1482 pixels = SDL_malloc(dstrect->h * pitch); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1483 if (!pixels) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1484 SDL_OutOfMemory(); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1485 return -1; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1486 } |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1487 |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1488 image = |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1489 XCreateImage(data->display, data->visual, data->depth, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1490 ZPixmap, 0, pixels, dstrect->w, dstrect->h, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1491 SDL_BYTESPERPIXEL(texturedata->format) * 8, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1492 pitch); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1493 if (!image) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1494 SDL_SetError("XCreateImage() failed"); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1495 return -1; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1496 } |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1497 texturedata->scaling_image = image; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1498 |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1499 } else if (image->width != dstrect->w || image->height != dstrect->h |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1500 || !image->data) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1501 image->width = dstrect->w; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1502 image->height = dstrect->h; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1503 image->bytes_per_line = |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1504 image->width * SDL_BYTESPERPIXEL(texturedata->format); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1505 image->data = |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1506 (char *) SDL_realloc(image->data, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1507 image->height * image->bytes_per_line); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1508 if (!image->data) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1509 SDL_OutOfMemory(); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1510 return -1; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1511 } |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1512 } |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1513 |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1514 /* Set up fake surfaces for SDL_SoftStretch() */ |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1515 SDL_zero(src); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1516 src.format = &fmt; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1517 src.w = texture->w; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1518 src.h = texture->h; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1519 #ifndef NO_SHARED_MEMORY |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1520 if (texturedata->shminfo.shmaddr) { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1521 src.pixels = texturedata->shminfo.shmaddr; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1522 } else |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1523 #endif |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1524 src.pixels = texturedata->pixels; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1525 src.pitch = texturedata->pitch; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1526 |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1527 SDL_zero(dst); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1528 dst.format = &fmt; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1529 dst.w = image->width; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1530 dst.h = image->height; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1531 dst.pixels = image->data; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1532 dst.pitch = image->bytes_per_line; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1533 |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1534 fmt.BytesPerPixel = SDL_BYTESPERPIXEL(texturedata->format); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1535 |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1536 rect.x = 0; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1537 rect.y = 0; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1538 rect.w = dstrect->w; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1539 rect.h = dstrect->h; |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1540 if (SDL_SoftStretch(&src, srcrect, &dst, &rect) < 0) { |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1541 return -1; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1542 } |
4586
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1543 XPutImage(data->display, data->drawable, data->gc, image, 0, 0, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1544 dstrect->x, dstrect->y, dstrect->w, dstrect->h); |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1545 } else { |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1546 XCopyArea(data->display, texturedata->pixmap, data->drawable, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1547 data->gc, srcrect->x, srcrect->y, dstrect->w, dstrect->h, |
e479c1e57c52
SDL_Textures should work with XRender now provided that the texture format and screen format match. This is only a temporary limitation.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4585
diff
changeset
|
1548 srcrect->x, srcrect->y); |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1549 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1550 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1551 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1552 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1553 |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1554 static int |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1555 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
|
1556 Uint32 format, void * pixels, int pitch) |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1557 { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1558 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
|
1559 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
|
1560 SDL_VideoDisplay *display = window->display; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1561 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
|
1562 XImage *image; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1563 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1564 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
|
1565 rect->w, rect->h, AllPlanes, ZPixmap); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1566 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1567 SDL_ConvertPixels(rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1568 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
|
1569 format, pixels, pitch); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1570 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1571 XDestroyImage(image); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1572 return 0; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1573 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1574 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1575 static int |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1576 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
|
1577 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
|
1578 { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1579 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
|
1580 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
|
1581 SDL_VideoDisplay *display = window->display; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1582 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
|
1583 XImage *image; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1584 void *image_pixels; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1585 int image_pitch; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1586 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1587 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
|
1588 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
|
1589 if (!image_pixels) { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1590 SDL_OutOfMemory(); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1591 return -1; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1592 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1593 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1594 image = XCreateImage(data->display, data->visual, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1595 data->depth, ZPixmap, 0, image_pixels, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1596 rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1597 SDL_BYTESPERPIXEL(screen_format) * 8, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1598 image_pitch); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1599 if (!image) { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1600 SDL_SetError("XCreateImage() failed"); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1601 return -1; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1602 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1603 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1604 SDL_ConvertPixels(rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1605 format, pixels, pitch, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1606 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
|
1607 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1608 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
|
1609 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
|
1610 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1611 image->data = NULL; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1612 XDestroyImage(image); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1613 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1614 SDL_free(image_pixels); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1615 return 0; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1616 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1617 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1618 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1619 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
|
1620 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1621 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
|
1622 SDL_DirtyRect *dirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1623 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1624 /* 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
|
1625 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
|
1626 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
|
1627 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
|
1628 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1629 if (data->use_xrender) |
4579
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1630 { |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1631 XRenderComposite(data->display, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1632 data->blend_op, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1633 data->drawable_pict, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1634 None, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1635 data->xwindow_pict, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1636 rect->x, rect->y, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1637 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1638 rect->x, rect->y, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
1639 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
|
1640 } |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1641 else |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1642 #endif |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1643 { |
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
|
1644 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
|
1645 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
|
1646 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
|
1647 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1648 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1649 SDL_ClearDirtyRects(&data->dirty); |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1650 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1651 XSync(data->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1652 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1653 /* 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
|
1654 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
|
1655 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
|
1656 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
|
1657 #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
|
1658 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
|
1659 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1660 } 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
|
1661 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
|
1662 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
|
1663 #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
|
1664 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
|
1665 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1666 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1667 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1668 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1669 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1670 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
|
1671 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1672 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
|
1673 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
|
1674 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1675 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1676 return; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1677 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1678 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1679 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
|
1680 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1681 if (data->pixmap != None) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1682 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
|
1683 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1684 if (data->image) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1685 data->image->data = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1686 XDestroyImage(data->image); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1687 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1688 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1689 if (data->shminfo.shmaddr) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1690 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
|
1691 XSync(renderdata->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1692 shmdt(data->shminfo.shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1693 data->pixels = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1694 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1695 #endif |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1696 if (data->scaling_image) { |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1697 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
|
1698 data->scaling_image->data = NULL; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1699 XDestroyImage(data->scaling_image); |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1700 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1701 if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1702 SDL_free(data->pixels); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1703 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1704 SDL_free(data); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1705 texture->driverdata = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1706 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1707 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1708 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1709 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
|
1710 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1711 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
|
1712 int i; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1713 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1714 if (data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1715 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
|
1716 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
|
1717 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
|
1718 } |
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
|
1719 #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
|
1720 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
|
1721 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
|
1722 } |
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
|
1723 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1724 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1725 if (data->gc) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1726 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
|
1727 } |
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
|
1728 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1729 if (data->stencil_gc) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1730 XFreeGC(data->display, data->stencil_gc); |
4584
9907c8cc6015
X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4583
diff
changeset
|
1731 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1732 if (data->stencil) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1733 XFreePixmap(data->display, data->stencil); |
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
|
1734 } |
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
|
1735 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
|
1736 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
|
1737 } |
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
|
1738 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
|
1739 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
|
1740 } |
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
|
1741 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1742 SDL_FreeDirtyRects(&data->dirty); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1743 SDL_free(data); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1744 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1745 SDL_free(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1746 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1747 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1748 #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
|
1749 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1750 /* vi: set ts=4 sw=4 expandtab: */ |