Mercurial > sdl-ios-xcode
annotate src/video/x11/SDL_x11render.c @ 4606:4e145485971b
Implement support for setting texture scale mode.
author | Sunny Sachanandani <sunnysachanandani@gmail.com> |
---|---|
date | Tue, 20 Jul 2010 11:43:13 +0530 |
parents | 0b3a509c53a0 |
children | 9e9ec5e3be95 |
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; |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
108 XRenderPictFormat *xwindow_pict_fmt; |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
109 XRenderPictFormat *drawable_pict_fmt; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
110 GC stencil_gc; |
4584
9907c8cc6015
X11_RenderFillRects and X11_RenderDrawRects use a server side mask pixmap of 1 bit depth now. All drawing on these pixmaps is done by server side functions such as XDrawRectangles and XFillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4583
diff
changeset
|
111 SDL_bool use_xrender; |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
112 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
113 SDL_bool use_xdamage; |
4602
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
114 Damage stencil_damage; |
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
115 XserverRegion stencil_parts; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
116 #endif |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
117 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
118 int current_pixmap; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
119 Drawable drawable; |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
120 SDL_PixelFormat format; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
121 GC gc; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
122 SDL_DirtyRectList dirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
123 SDL_bool makedirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
124 } X11_RenderData; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
125 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
126 typedef struct |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
127 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
128 SDL_SW_YUVTexture *yuv; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
129 Uint32 format; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
130 Pixmap pixmap; |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
131 int depth; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
132 Visual *visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
133 GC gc; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
134 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
135 Picture picture; |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
136 XRenderPictFormat* picture_fmt; |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
137 int blend_op; |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
138 const char* filter; |
4571
97dcf6f6213c
Added a #define option for compile time Xrender support.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4458
diff
changeset
|
139 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
140 XImage *image; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
141 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
142 /* 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
|
143 XShmSegmentInfo shminfo; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
144 #endif |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
145 XImage *scaling_image; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
146 void *pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
147 int pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
148 } X11_TextureData; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
151 /* 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
|
152 static int shm_error; |
2814 | 153 static int (*X_handler) (Display *, XErrorEvent *) = NULL; |
154 static int | |
155 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
|
156 { |
2814 | 157 if (e->error_code == BadAccess) { |
158 shm_error = True; | |
159 return (0); | |
160 } else { | |
161 return (X_handler(d, e)); | |
162 } | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
163 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 #endif /* ! NO_SHARED_MEMORY */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
167 UpdateYUVTextureData(SDL_Texture * texture) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
168 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
169 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
|
170 SDL_Rect rect; |
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 rect.x = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
173 rect.y = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
174 rect.w = texture->w; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
175 rect.h = texture->h; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
176 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
|
177 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
|
178 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
179 |
4605
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
180 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
181 static SDL_bool |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
182 CheckXRender(Display *display, int *major, int *minor) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
183 const char *env; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
184 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
185 *major = *minor = 0; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
186 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
187 env = SDL_getenv("SDL_VIDEO_X11_XRENDER"); |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
188 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
189 if (env && !SDL_atoi(env)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
190 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
191 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
192 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
193 if (!SDL_X11_HAVE_XRENDER) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
194 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
195 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
196 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
197 if (!XRenderQueryVersion(display, major, minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
198 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
199 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
200 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
201 return SDL_TRUE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
202 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
203 #endif |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
204 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
205 #ifdef SDL_VIDEO_DRIVER_X11_XFIXES |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
206 static SDL_bool |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
207 CheckXFixes(Display *display, int *major, int *minor) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
208 const char *env; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
209 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
210 *major = *minor = 0; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
211 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
212 env = SDL_getenv("SDL_VIDEO_X11_XFIXES"); |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
213 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
214 if (env && !SDL_atoi(env)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
215 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
216 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
217 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
218 if (!SDL_X11_HAVE_XFIXES) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
219 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
220 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
221 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
222 if (!XFixesQueryVersion(display, major, minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
223 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
224 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
225 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
226 return SDL_TRUE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
227 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
228 #endif |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
229 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
230 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
231 static SDL_bool |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
232 CheckXDamage(Display *display, int *major, int *minor) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
233 const char *env; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
234 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
235 *major = *minor = 0; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
236 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
237 env = SDL_getenv("SDL_VIDEO_X11_XDAMAGE"); |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
238 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
239 if (env && !SDL_atoi(env)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
240 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
241 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
242 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
243 if (!SDL_X11_HAVE_XDAMAGE) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
244 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
245 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
246 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
247 if (!XDamageQueryVersion(display, major, minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
248 return SDL_FALSE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
249 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
250 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
251 return SDL_TRUE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
252 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
253 #endif |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
254 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
255 void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
256 X11_AddRenderDriver(_THIS) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
257 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
258 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
|
259 SDL_DisplayMode *mode = &SDL_CurrentDisplay->desktop_mode; |
4605
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
260 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata; |
3520
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
261 int i; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
262 |
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
|
263 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
|
264 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
|
265 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
|
266 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
|
267 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
|
268 info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_YVYU; |
4605
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
269 |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
270 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
271 int major, minor; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
272 if (CheckXRender(data->display, &major, &minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
273 info->texture_formats[info->num_texture_formats++] = SDL_PIXELFORMAT_ARGB8888; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
274 } |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
275 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
276 |
3520
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
277 for (i = 0; i < _this->num_displays; ++i) { |
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
278 SDL_AddRenderDriver(&_this->displays[i], &X11_RenderDriver); |
83518f8fcd61
Fixed calls to SDL_AddRenderDriver()
Sam Lantinga <slouken@libsdl.org>
parents:
3239
diff
changeset
|
279 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
280 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
281 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
282 SDL_Renderer * |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
283 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
|
284 { |
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
|
285 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
|
286 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
|
287 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
|
288 SDL_Renderer *renderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
289 X11_RenderData *data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
290 XGCValues gcv; |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
291 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
|
292 int i, n; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
293 int bpp; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
294 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
|
295 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
296 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
|
297 if (!renderer) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
298 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
299 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
300 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
301 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
302 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
|
303 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
304 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
305 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
306 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
307 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
308 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
|
309 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
|
310 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
|
311 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
|
312 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
|
313 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
|
314 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
315 renderer->DisplayModeChanged = X11_DisplayModeChanged; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
316 renderer->CreateTexture = X11_CreateTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
317 renderer->QueryTexturePixels = X11_QueryTexturePixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
318 renderer->SetTextureBlendMode = X11_SetTextureBlendMode; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
319 renderer->SetTextureScaleMode = X11_SetTextureScaleMode; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
320 renderer->UpdateTexture = X11_UpdateTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
321 renderer->LockTexture = X11_LockTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
322 renderer->UnlockTexture = X11_UnlockTexture; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
323 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
|
324 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
|
325 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
|
326 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
|
327 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
|
328 renderer->RenderCopy = X11_RenderCopy; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
329 renderer->RenderReadPixels = X11_RenderReadPixels; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
330 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
|
331 renderer->RenderPresent = X11_RenderPresent; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
332 renderer->DestroyTexture = X11_DestroyTexture; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
333 renderer->DestroyRenderer = X11_DestroyRenderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
334 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
|
335 renderer->window = window; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
336 renderer->driverdata = data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
337 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
338 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
|
339 |
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
|
340 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4605
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
341 int major, minor; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
342 data->use_xrender = CheckXRender(data->display, &major, &minor); |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
343 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
344 if (CheckXDamage(data->display, &major, &minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
345 if (CheckXFixes(data->display, &major, &minor)) { |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
346 if (major >= 2) |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
347 data->use_xdamage = SDL_TRUE; |
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
348 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
349 } |
4605
0b3a509c53a0
Respect environment variables.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4604
diff
changeset
|
350 #endif |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
351 if (data->use_xrender) { |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
352 /* Find the PictFormat from the visual. |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
353 * 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
|
354 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
|
355 data->visual); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
356 if (!data->xwindow_pict_fmt) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
357 SDL_SetError("XRenderFindVisualFormat() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
358 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
359 } |
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
|
360 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
|
361 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
|
362 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
|
363 0, NULL); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
364 if (!data->xwindow_pict) { |
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 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
368 // 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
|
369 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
|
370 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
|
371 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
|
372 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
|
373 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
|
374 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
375 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
376 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
|
377 window->w, window->h); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
378 /* 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
|
379 renderer->info.blend_modes |= |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
380 (SDL_BLENDMODE_BLEND | SDL_BLENDMODE_ADD | SDL_BLENDMODE_MASK | SDL_BLENDMODE_MOD); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
381 /* 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
|
382 data->stencil = XCreatePixmap(data->display, data->xwindow, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
383 window->w, window->h, 8); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
384 |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
385 /* 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
|
386 data->stencil_gc = XCreateGC(data->display, data->stencil, |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
387 GCGraphicsExposures, &gcv); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
388 XSetBackground(data->display, data->stencil_gc, 0x00); |
4602
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
389 XSetForeground(data->display, data->stencil_gc, 0x00); |
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
390 XFillRectangle(data->display, data->stencil, data->stencil_gc, |
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
391 0, 0, window->w, window->h); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
392 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
393 data->stencil_pict = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
394 XRenderCreatePicture(data->display, data->stencil, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
395 XRenderFindStandardFormat(data->display, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
396 PictStandardA8), |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
397 0, NULL); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
398 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
399 if (data->use_xdamage) { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
400 data->stencil_damage = |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
401 XDamageCreate(data->display, data->stencil, XDamageReportNonEmpty); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
402 XDamageSubtract(data->display, data->stencil_damage, None, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
403 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
404 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
405 data->brush = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
406 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
|
407 XRenderPictureAttributes brush_attr; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
408 brush_attr.repeat = RepeatNormal; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
409 data->brush_pict = |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
410 XRenderCreatePicture(data->display, data->brush, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
411 XRenderFindStandardFormat(data->display, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
412 PictStandardARGB32), |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
413 CPRepeat, &brush_attr); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
414 // 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
|
415 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
|
416 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
|
417 } |
1ad70fb49fcb
Fix so many things that there is little place in this column to list them all but the result is that blending modes just work now for drawing primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4589
diff
changeset
|
418 #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
|
419 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
420 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
|
421 renderer->info.flags |= |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
422 (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
|
423 n = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
424 } 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
|
425 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
|
426 n = 2; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
427 } 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
|
428 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
|
429 n = 3; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
430 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
431 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
|
432 n = 1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
433 } |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
434 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
435 if (data->use_xrender) { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
436 if (n > 0) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
437 data->drawable_pict_fmt = |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
438 XRenderFindStandardFormat(data->display, PictStandardARGB32); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
439 else |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
440 data->drawable_pict_fmt = data->xwindow_pict_fmt; |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
441 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
442 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
443 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
|
444 #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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 } |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
452 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
|
453 #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
|
454 { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
455 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
|
456 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
|
457 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
|
458 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
459 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
|
460 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
461 SDL_SetError("XCreatePixmap() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
462 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
463 } |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
464 #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
|
465 if (data->use_xrender) { |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
466 /* Create xrender pictures for each of the pixmaps |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
467 * 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
|
468 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
|
469 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
|
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 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
|
472 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
|
473 0, None); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
474 if (!data->pixmap_picts[i]) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
475 SDL_SetError("XRenderCreatePicture() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
476 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
477 } |
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
|
478 |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
479 XRenderComposite(data->display, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
480 PictOpClear, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
481 data->pixmap_picts[i], |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
482 None, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
483 data->pixmap_picts[i], |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
484 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
485 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
486 0, 0, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
487 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
|
488 } |
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
489 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
490 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
491 if (n > 0) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
492 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
|
493 #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
|
494 if(data->use_xrender == SDL_TRUE) |
4576
2b98162b536a
Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4575
diff
changeset
|
495 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
|
496 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
497 data->makedirty = SDL_TRUE; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
498 } 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
|
499 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
|
500 #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
|
501 if(data->use_xrender == SDL_TRUE) |
4576
2b98162b536a
Add Xrender support to X11_FillRectangles.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4575
diff
changeset
|
502 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
|
503 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
504 data->makedirty = SDL_FALSE; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
505 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
506 data->current_pixmap = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
507 |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
508 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
509 if (data->use_xrender) { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
510 bpp = data->drawable_pict_fmt->depth; |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
511 Rmask = ((data->drawable_pict_fmt->direct.redMask) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
512 << (data->drawable_pict_fmt->direct.red)); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
513 Gmask = ((data->drawable_pict_fmt->direct.greenMask) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
514 << (data->drawable_pict_fmt->direct.green)); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
515 Bmask = ((data->drawable_pict_fmt->direct.blueMask) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
516 << (data->drawable_pict_fmt->direct.blue)); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
517 Amask = ((data->drawable_pict_fmt->direct.alphaMask) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
518 << (data->drawable_pict_fmt->direct.alpha)); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
519 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
520 else |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
521 #endif |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
522 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
523 /* Get the format of the window */ |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
524 if (!SDL_PixelFormatEnumToMasks |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
525 (display->current_mode.format, &bpp, &Rmask, &Gmask, &Bmask, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
526 &Amask)) { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
527 SDL_SetError("Unknown display format"); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
528 X11_DestroyRenderer(renderer); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
529 return NULL; |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
530 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
531 } |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
532 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
|
533 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
534 /* Create the drawing context */ |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
535 gcv.graphics_exposures = False; |
2814 | 536 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
|
537 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
|
538 if (!data->gc) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
539 X11_DestroyRenderer(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
540 SDL_SetError("XCreateGC() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
541 return NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
542 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
543 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
544 return renderer; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
545 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
546 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
547 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
548 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
|
549 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
550 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
|
551 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
|
552 int i, n; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
553 |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
554 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
555 if (data->use_xrender) { |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
556 XRenderFreePicture(data->display, data->xwindow_pict); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
557 data->xwindow_pict_fmt = |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
558 XRenderFindVisualFormat(data->display, data->visual); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
559 data->xwindow_pict = |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
560 XRenderCreatePicture(data->display, data->xwindow, |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
561 data->xwindow_pict_fmt, 0, NULL); |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
562 } |
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
563 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
564 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
|
565 n = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
566 } 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
|
567 n = 2; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
568 } 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
|
569 n = 3; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
570 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
571 n = 1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
572 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
573 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
|
574 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
|
575 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
|
576 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
|
577 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4596
dc26c37ad70e
Got testsprite2 to work reasonably.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4595
diff
changeset
|
578 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
|
579 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
|
580 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
581 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
582 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
583 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
|
584 #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
|
585 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
|
586 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
|
587 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
|
588 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
|
589 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
|
590 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
|
591 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
|
592 } |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
593 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
|
594 #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
|
595 { |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
596 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
|
597 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
|
598 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
|
599 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
600 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
|
601 SDL_SetError("XCreatePixmap() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
602 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
603 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
604 #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
|
605 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
|
606 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
|
607 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
|
608 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
|
609 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
|
610 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
|
611 0, None); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
612 if (!data->pixmap_picts[i]) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
613 SDL_SetError("XRenderCreatePicture() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
614 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
615 } |
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
|
616 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
|
617 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
|
618 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
|
619 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
|
620 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
|
621 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
622 0, 0, |
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
623 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
|
624 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
|
625 |
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
|
626 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
627 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
628 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
629 if (n > 0) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
630 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
|
631 #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
|
632 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
|
633 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
634 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
635 data->current_pixmap = 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
636 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
637 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
638 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
639 |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
640 #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
|
641 static void |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
642 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
|
643 (*comp) = 0; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
644 (*compMask) = 0; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
645 while(!(sdl_mask & 1)) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
646 (*comp)++; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
647 sdl_mask >>= 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
648 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
649 while(sdl_mask & 1) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
650 (*compMask) = ((*compMask) << 1) | 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
651 sdl_mask >>= 1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
652 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
653 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
654 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
655 static XRenderPictFormat* |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
656 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
|
657 XRenderPictFormat* pict_fmt = NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
658 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
|
659 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
660 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
661 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
662 int bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
663 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
664 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
|
665 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
666 XRenderPictFormat templ; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
667 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
|
668 PictFormatRedMask | PictFormatGreen | PictFormatGreenMask | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
669 PictFormatBlue | PictFormatBlueMask | PictFormatAlpha | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
670 PictFormatAlphaMask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
671 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
672 templ.type = PictTypeDirect; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
673 templ.depth = bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
674 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
|
675 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
|
676 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
|
677 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
|
678 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
679 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
|
680 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
681 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
682 return pict_fmt; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
683 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
684 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
685 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
686 static Visual* |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
687 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
|
688 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
|
689 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
690 if (data->use_xrender) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
691 int bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
692 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
693 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
|
694 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
695 XVisualInfo vinfo_templ; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
696 long vinfo_mask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
697 int nitems_return; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
698 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
699 vinfo_mask = (VisualDepthMask | VisualRedMaskMask | |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
700 VisualGreenMaskMask | VisualBlueMaskMask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
701 vinfo_templ.depth = bpp; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
702 vinfo_templ.red_mask = Rmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
703 vinfo_templ.green_mask = Gmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
704 vinfo_templ.blue_mask = Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
705 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
706 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
|
707 &vinfo_templ, &nitems_return); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
708 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
709 if (nitems_return) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
710 return ret[0].visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
711 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
712 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
713 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
714 return NULL; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
715 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
716 #endif |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
717 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
718 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
719 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
|
720 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
721 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
|
722 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
|
723 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
|
724 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
|
725 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
|
726 XGCValues gcv; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
727 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
728 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
|
729 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
730 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
731 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
732 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
733 data->depth = renderdata->depth; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
734 data->visual = renderdata->visual; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
735 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
|
736 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
737 texture->driverdata = data; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
738 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
|
739 data->yuv = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
740 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
|
741 if (!data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
742 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
743 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
744 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
|
745 } else { |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
746 /* 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
|
747 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
|
748 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
|
749 */ |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
750 #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
|
751 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
|
752 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
|
753 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
|
754 return -1; |
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
755 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
756 } else { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
757 Uint32 Amask, Rmask, Gmask, Bmask; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
758 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
|
759 &Rmask, &Gmask, &Bmask, &Amask); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
760 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
|
761 } |
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
762 #else |
4573
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
763 /* 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
|
764 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
|
765 This BadMatch error |
6399178be313
Completed work on X11_CreateTexture. Added lots of safety features.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4572
diff
changeset
|
766 */ |
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
|
767 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
|
768 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
|
769 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
|
770 } |
4572
266ec93f49af
Correctly handle the availability of Xrender in X11_CreateRenderer and X11_DisplayModeChanged.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4571
diff
changeset
|
771 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
772 data->format = texture->format; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
773 } |
2814 | 774 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
|
775 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
|
776 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
777 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
|
778 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
779 XShmSegmentInfo *shminfo = &data->shminfo; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
780 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
781 shm_error = True; |
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 if (SDL_X11_HAVE_SHM) { |
2814 | 784 shminfo->shmid = |
785 shmget(IPC_PRIVATE, texture->h * data->pitch, | |
786 IPC_CREAT | 0777); | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
787 if (shminfo->shmid >= 0) { |
2814 | 788 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
|
789 shminfo->readOnly = False; |
2814 | 790 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
|
791 shm_error = False; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
792 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
|
793 XShmAttach(renderdata->display, shminfo); |
3239 | 794 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
|
795 XSetErrorHandler(X_handler); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
796 if (shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
797 shmdt(shminfo->shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
798 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
799 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
800 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
|
801 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
802 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
803 if (!shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
804 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
|
805 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
|
806 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
|
807 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
|
808 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
|
809 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
|
810 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
|
811 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
|
812 } |
2814 | 813 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
814 XShmCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
815 data->depth, ZPixmap, shminfo->shmaddr, |
2874 | 816 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
|
817 |
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
|
818 if (!data->image) { |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
819 XShmDetach(renderdata->display, shminfo); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
820 XSync(renderdata->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
821 shmdt(shminfo->shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
822 shm_error = True; |
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 if (shm_error) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
826 shminfo->shmaddr = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
827 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
828 if (!data->image) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
829 #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
|
830 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
831 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
|
832 if (!data->pixels) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
833 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
|
834 SDL_OutOfMemory(); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
835 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
836 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
837 |
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
|
838 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
|
839 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
|
840 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
|
841 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
|
842 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
|
843 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
|
844 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
|
845 } |
2814 | 846 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
847 XCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
848 data->depth, ZPixmap, 0, data->pixels, |
2874 | 849 texture->w, texture->h, |
850 SDL_BYTESPERPIXEL(data->format) * 8, | |
851 data->pitch); | |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
852 if (!data->image) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
853 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
|
854 SDL_SetError("XCreateImage() failed"); |
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 } |
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
|
858 } |
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
|
859 else { |
2814 | 860 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
|
861 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
|
862 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
|
863 if (data->pixmap == None) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
864 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
|
865 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
|
866 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
867 } |
2814 | 868 data->image = |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
869 XCreateImage(renderdata->display, data->visual, |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
870 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
|
871 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
|
872 SDL_BYTESPERPIXEL(data->format) * 8, |
2874 | 873 data->pitch); |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
874 if (!data->image) { |
2868
3b595278f813
Fixed BadMatch error in X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2859
diff
changeset
|
875 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
|
876 SDL_SetError("XCreateImage() failed"); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
877 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
878 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
879 } |
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
|
880 #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
|
881 if(renderdata->use_xrender) { |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
882 gcv.graphics_exposures = False; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
883 data->gc = |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
884 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
|
885 if (!data->gc) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
886 SDL_SetError("XCreateGC() failed"); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
887 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
888 } |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
889 data->picture_fmt = |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
890 PixelFormatEnumToXRenderPictFormat(renderer, texture->format); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
891 if (data->picture_fmt == NULL) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
892 X11_DestroyTexture(renderer, texture); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
893 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
|
894 return -1; |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
895 } |
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
|
896 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
|
897 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
|
898 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
|
899 if (!data->picture) { |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
900 X11_DestroyTexture(renderer, texture); |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
901 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
|
902 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
|
903 } |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
904 } |
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
|
905 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
906 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
907 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
908 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
909 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
910 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
|
911 void **pixels, int *pitch) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
912 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
913 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
|
914 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
915 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
916 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
|
917 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
918 *pixels = data->pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
919 *pitch = data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
920 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
921 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
922 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
923 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
924 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
925 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
|
926 { |
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
|
927 X11_TextureData *data = (X11_TextureData *) texture->driverdata; |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
928 X11_RenderData *renderdata = (X11_RenderData *) renderer->driverdata; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
929 switch (texture->blendMode) { |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
930 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
|
931 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
932 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
933 data->blend_op = PictOpSrc; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
934 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
935 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
936 case SDL_BLENDMODE_MOD: |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
937 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
938 data->blend_op = PictOpSrc; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
939 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
940 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
941 case SDL_BLENDMODE_MASK: |
4591
1e998db9b597
Implement blending modes for textures. Fix off-screen pixmaps to be ARGB rather than RGB to enable blending across frames. Clear the screen and off-screen pixmaps when the renderer is created.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4590
diff
changeset
|
942 case SDL_BLENDMODE_BLEND: |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
943 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
944 data->blend_op = PictOpOver; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
945 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
946 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
947 case SDL_BLENDMODE_ADD: |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
948 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
949 data->blend_op = PictOpAdd; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
950 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
951 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
952 #endif |
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
|
953 return 0; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
954 default: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
955 SDL_Unsupported(); |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
956 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
|
957 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
958 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
959 texture->blendMode = SDL_BLENDMODE_BLEND; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
960 data->blend_op = PictOpOver; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
961 } |
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
|
962 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
963 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
964 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
965 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
966 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
967 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
968 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
|
969 { |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
970 X11_TextureData *data = (X11_TextureData *) texture->driverdata; |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
971 X11_RenderData *renderdata = (X11_RenderData *) renderer->driverdata; |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
972 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
973 switch (texture->scaleMode) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
974 case SDL_TEXTURESCALEMODE_NONE: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
975 return 0; |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
976 case SDL_TEXTURESCALEMODE_FAST: |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
977 /* 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
|
978 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
|
979 return 0; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
980 } |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
981 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
982 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
983 data->filter = FilterFast; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
984 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
985 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
986 case SDL_TEXTURESCALEMODE_SLOW: |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
987 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
988 data->filter = FilterGood; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
989 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
990 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
991 case SDL_TEXTURESCALEMODE_BEST: |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
992 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
993 data->filter = FilterBest; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
994 return 0; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
995 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
996 #endif |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
997 /* 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
|
998 default: |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
999 SDL_Unsupported(); |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1000 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1001 if (renderdata->use_xrender) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1002 texture->scaleMode = SDL_TEXTURESCALEMODE_FAST; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1003 data->filter = FilterFast; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1004 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1005 else |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1006 #endif |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1007 texture->scaleMode = SDL_TEXTURESCALEMODE_NONE; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1008 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1009 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1010 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1011 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1012 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1013 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1014 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
|
1015 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
|
1016 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1017 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
|
1018 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1019 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1020 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
|
1021 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1022 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1023 UpdateYUVTextureData(texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1024 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1025 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1026 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
|
1027 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1028 if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1029 Uint8 *src, *dst; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1030 int row; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1031 size_t length; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1032 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1033 src = (Uint8 *) pixels; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1034 dst = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1035 (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
|
1036 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
|
1037 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
|
1038 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
|
1039 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
|
1040 src += pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1041 dst += data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1042 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1043 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1044 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
|
1045 data->image->height = rect->h; |
2814 | 1046 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
|
1047 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
|
1048 XPutImage(renderdata->display, data->pixmap, data->gc, |
2814 | 1049 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
|
1050 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1051 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1052 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1053 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1054 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1055 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1056 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
|
1057 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
|
1058 int *pitch) |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1059 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1060 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
|
1061 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1062 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1063 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
|
1064 pitch); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1065 } else if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1066 *pixels = |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1067 (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
|
1068 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
|
1069 *pitch = data->pitch; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1070 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1071 } else { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1072 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
|
1073 return -1; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1074 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1075 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1076 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1077 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1078 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
|
1079 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1080 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
|
1081 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1082 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1083 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
|
1084 UpdateYUVTextureData(texture); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1085 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1086 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1087 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1088 static int |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1089 X11_SetDrawBlendMode(SDL_Renderer * renderer) |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1090 { |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1091 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
|
1092 switch (renderer->blendMode) { |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1093 case SDL_BLENDMODE_NONE: |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1094 #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
|
1095 //PictOpSrc |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1096 data->blend_op = PictOpSrc; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1097 return 0; |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1098 case SDL_BLENDMODE_MOD: |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1099 case SDL_BLENDMODE_MASK: |
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
|
1100 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
|
1101 data->blend_op = PictOpOver; |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1102 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
|
1103 case SDL_BLENDMODE_ADD: // PictOpAdd |
4588
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1104 data->blend_op = PictOpAdd; |
0ddd78496d68
Preliminary support for blending modes on drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4587
diff
changeset
|
1105 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
|
1106 /* 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
|
1107 #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
|
1108 return 0; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1109 default: |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1110 SDL_Unsupported(); |
4589
8d8a889530eb
Fix blending modes for primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4588
diff
changeset
|
1111 #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
|
1112 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
|
1113 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
|
1114 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
|
1115 } |
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
|
1116 else |
4589
8d8a889530eb
Fix blending modes for primitives.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4588
diff
changeset
|
1117 #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
|
1118 { |
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
|
1119 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
|
1120 } |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1121 return -1; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1122 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1123 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1124 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1125 static Uint32 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1126 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
|
1127 { |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1128 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
|
1129 Uint8 r = renderer->r; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1130 Uint8 g = renderer->g; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1131 Uint8 b = renderer->b; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1132 Uint8 a = renderer->a; |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1133 if (premult) |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
1134 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
|
1135 ((int) g * (int) a) / 255, |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1136 ((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
|
1137 else |
2967
e4a469d6ddab
Implemented SDL_SetWindowIcon(), with translucent icon support under X11.
Sam Lantinga <slouken@libsdl.org>
parents:
2927
diff
changeset
|
1138 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
|
1139 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1140 |
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
|
1141 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
|
1142 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
|
1143 { |
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
|
1144 // 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
|
1145 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
|
1146 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
|
1147 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
|
1148 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
|
1149 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
|
1150 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
|
1151 |
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
|
1152 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
|
1153 |
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
|
1154 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
|
1155 (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
|
1156 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
|
1157 (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
|
1158 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
|
1159 (unsigned short) ((renderer->b / 255.0) * alphad * 0xFFFF); |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1160 |
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
|
1161 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
|
1162 } |
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
|
1163 |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1164 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
|
1165 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
|
1166 int count) |
2901 | 1167 { |
1168 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
|
1169 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
|
1170 XPoint *xpoints, *xpoint; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1171 int i, xcount; |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1172 SDL_Rect clip; |
2901 | 1173 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1174 clip.x = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1175 clip.y = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1176 clip.w = window->w; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1177 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
|
1178 if (data->makedirty) { |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1179 SDL_Rect rect; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1180 |
4598
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1181 /* 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
|
1182 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
|
1183 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
|
1184 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
|
1185 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
|
1186 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
|
1187 /* 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
|
1188 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
|
1189 } |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1190 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
|
1191 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1192 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1193 xpoint = xpoints = SDL_stack_alloc(XPoint, count); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1194 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1195 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1196 int x = points[i].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1197 int y = points[i].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1198 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
|
1199 continue; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1200 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1201 xpoint->x = (short)x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1202 xpoint->y = (short)y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1203 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1204 ++xcount; |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1205 } |
4602
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
1206 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1207 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1208 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1209 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1210 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1211 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1212 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1213 { |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1214 XSetForeground(data->display, data->stencil_gc, 0x00000000); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1215 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1216 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1217 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1218 /* Update only those parts which were changed |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1219 * in the previous drawing operation */ |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1220 XFixesSetGCClipRegion(data->display, data->stencil_gc, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1221 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1222 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1223 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1224 XFillRectangle(data->display, data->stencil, data->stencil_gc, |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1225 0, 0, window->w, window->h); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1226 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1227 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1228 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1229 XFixesSetGCClipRegion(data->display, data->stencil_gc, 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1230 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1231 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1232 XSetForeground(data->display, data->stencil_gc, 0xFF); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1233 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1234 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
|
1235 CoordModeOrigin); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1236 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1237 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1238 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1239 /* Store the damaged region in stencil_parts */ |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1240 XDamageSubtract(data->display, data->stencil_damage, None, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1241 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1242 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1243 } |
4602
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
1244 #endif |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1245 } |
4602
4fbf64d504cf
Use XDamage to optimise drawing operations.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4600
diff
changeset
|
1246 |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1247 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1248 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1249 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1250 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1251 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1252 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1253 { |
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
|
1254 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
|
1255 foreground = xrenderdrawcolor(renderer); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1256 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1257 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1258 &foreground, 0, 0, 1, 1); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1259 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1260 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1261 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1262 /* Update only those parts which drawn |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1263 * to in the current drawing operation */ |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1264 XFixesSetPictureClipRegion(data->display, data->drawable_pict, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1265 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1266 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1267 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1268 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
|
1269 data->stencil_pict, data->drawable_pict, |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1270 0, 0, 0, 0, 0, 0, window->w, window->h); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1271 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1272 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1273 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1274 XFixesSetPictureClipRegion(data->display, data->drawable_pict, 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1275 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1276 #endif |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1277 } |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1278 else |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1279 #endif |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1280 { |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1281 unsigned long foreground = renderdrawcolor(renderer, 1); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1282 XSetForeground(data->display, data->gc, foreground); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1283 |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1284 |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1285 if (xcount > 0) { |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1286 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
|
1287 CoordModeOrigin); |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1288 } |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1289 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1290 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1291 SDL_stack_free(xpoints); |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1292 |
2894 | 1293 return 0; |
2884
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1294 } |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1295 |
9dde605c7540
Date: Fri, 19 Dec 2008 20:17:35 +0100
Sam Lantinga <slouken@libsdl.org>
parents:
2882
diff
changeset
|
1296 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
|
1297 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
|
1298 int count) |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1299 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1300 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
|
1301 SDL_Window *window = renderer->window; |
4458
c9584df65367
Removed unused variables
Sam Lantinga <slouken@libsdl.org>
parents:
3697
diff
changeset
|
1302 SDL_Rect clip; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1303 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
|
1304 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
|
1305 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
|
1306 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
|
1307 int maxx, maxy; |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1308 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1309 clip.x = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1310 clip.y = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1311 clip.w = window->w; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1312 clip.h = window->h; |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1313 { |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1314 Pixmap drawable; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1315 GC gc; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1316 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1317 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1318 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1319 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1320 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1321 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1322 { |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1323 drawable = data->stencil; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1324 gc = data->stencil_gc; |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1325 |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1326 XSetForeground(data->display, data->stencil_gc, 0x00000000); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1327 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1328 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1329 XFixesSetGCClipRegion(data->display, data->stencil_gc, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1330 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1331 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1332 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
|
1333 0, 0, window->w, window->h); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1334 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1335 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1336 XFixesSetGCClipRegion(data->display, data->stencil_gc, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1337 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1338 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1339 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1340 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1341 else |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1342 #endif |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1343 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1344 drawable = data->drawable; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1345 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
|
1346 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1347 |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1348 foreground = renderdrawcolor(renderer, 1); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1349 XSetForeground(data->display, data->gc, foreground); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1350 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1351 xpoint = xpoints = SDL_stack_alloc(XPoint, count); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1352 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1353 minx = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1354 miny = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1355 maxx = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1356 maxy = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1357 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1358 int x = points[i].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1359 int y = points[i].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1360 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1361 /* 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
|
1362 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
|
1363 if (x < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1364 minx = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1365 } else if (x > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1366 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
|
1367 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1368 if (y < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1369 miny = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1370 } else if (y > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1371 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
|
1372 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1373 xpoint->x = (short)x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1374 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
|
1375 ++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
|
1376 ++xcount; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1377 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
|
1378 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1379 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1380 /* 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
|
1381 if (xcount > 0) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1382 int x1 = xpoint[-1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1383 int y1 = xpoint[-1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1384 int x2 = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1385 int y2 = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1386 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
|
1387 if (x2 < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1388 minx = x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1389 } else if (x2 > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1390 maxx = x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1391 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1392 if (y2 < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1393 miny = y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1394 } else if (y2 > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1395 maxy = y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1396 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1397 xpoint->x = (short)x2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1398 xpoint->y = (short)y2; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1399 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1400 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1401 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1402 XDrawLines(data->display, drawable, gc, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1403 xpoints, xcount, CoordModeOrigin); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1404 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
|
1405 XDrawPoint(data->display, drawable, gc, x2, y2); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1406 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1407 if (data->makedirty) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1408 SDL_Rect rect; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1409 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1410 rect.x = minx; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1411 rect.y = miny; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1412 rect.w = (maxx - minx) + 1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1413 rect.h = (maxy - miny) + 1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1414 SDL_AddDirtyRect(&data->dirty, &rect); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1415 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1416 xpoint = xpoints; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1417 xcount = 0; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1418 minx = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1419 miny = INT_MAX; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1420 maxx = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1421 maxy = INT_MIN; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1422 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1423 if (i < (count-1)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1424 int x1 = x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1425 int y1 = y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1426 int x2 = points[i+1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1427 int y2 = points[i+1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1428 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
|
1429 if (x1 < minx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1430 minx = x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1431 } else if (x1 > maxx) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1432 maxx = x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1433 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1434 if (y1 < miny) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1435 miny = y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1436 } else if (y1 > maxy) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1437 maxy = y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1438 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1439 xpoint->x = (short)x1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1440 xpoint->y = (short)y1; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1441 ++xpoint; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1442 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1443 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1444 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1445 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1446 if (xcount > 1) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1447 int x2 = xpoint[-1].x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1448 int y2 = xpoint[-1].y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1449 XDrawLines(data->display, drawable, gc, xpoints, xcount, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1450 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
|
1451 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
|
1452 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
|
1453 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1454 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
|
1455 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
|
1456 |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1457 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
|
1458 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
|
1459 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
|
1460 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
|
1461 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
|
1462 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1463 } |
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1464 } |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1465 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1466 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1467 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1468 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1469 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1470 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1471 { |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1472 XRenderColor xrforeground = xrenderdrawcolor(renderer); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1473 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1474 &xrforeground, 0, 0, 1, 1); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1475 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1476 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1477 { |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1478 XDamageSubtract(data->display, data->stencil_damage, None, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1479 |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1480 XFixesSetPictureClipRegion(data->display, data->drawable_pict, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1481 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1482 } |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1483 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1484 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
|
1485 data->stencil_pict, data->drawable_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1486 0, 0, 0, 0, 0, 0, window->w, window->h); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1487 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1488 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1489 XFixesSetPictureClipRegion(data->display, data->drawable_pict, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1490 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1491 #endif |
4585
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1492 } |
21600c6d6445
X11_RenderDrawLines and X11_RenderDrawPoints use XRender now.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4584
diff
changeset
|
1493 #endif |
3543
c2154674c0c1
Fixed X11 line implementation - clip lines that are going to go outside the window.
Sam Lantinga <slouken@libsdl.org>
parents:
3538
diff
changeset
|
1494 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
|
1495 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1496 return 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1497 } |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1498 |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1499 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
|
1500 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
|
1501 { |
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
|
1502 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
|
1503 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
|
1504 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
|
1505 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
|
1506 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
|
1507 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
|
1508 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
|
1509 |
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
|
1510 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
|
1511 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
|
1512 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
|
1513 clip.h = window->h; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1514 { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1515 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1516 for (i = 0; i < count; ++i) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1517 if (!SDL_IntersectRect(rects[i], &clip, &rect)) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1518 continue; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1519 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1520 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1521 xrect->x = (short)rect.x; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1522 xrect->y = (short)rect.y; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1523 xrect->width = (unsigned short)rect.w; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1524 xrect->height = (unsigned short)rect.h; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1525 ++xrect; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1526 ++xcount; |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1527 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1528 if (data->makedirty) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1529 SDL_AddDirtyRect(&data->dirty, &rect); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1530 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1531 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1532 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1533 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1534 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1535 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1536 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1537 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1538 { |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1539 XSetForeground(data->display, data->stencil_gc, 0x00000000); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1540 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1541 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1542 XFixesSetGCClipRegion(data->display, data->stencil_gc, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1543 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1544 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1545 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
|
1546 0, 0, window->w, window->h); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1547 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1548 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1549 XFixesSetGCClipRegion(data->display, data->stencil_gc, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1550 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1551 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1552 XSetForeground(data->display, data->stencil_gc, 0xFF); |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1553 |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1554 XDrawRectangles(data->display, data->stencil, data->stencil_gc, xrects, xcount); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1555 |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1556 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1557 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1558 XDamageSubtract(data->display, data->stencil_damage, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1559 None, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1560 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1561 } |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1562 #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
|
1563 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1564 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1565 if (data->use_xrender && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1566 (renderer->blendMode != SDL_BLENDMODE_NONE) && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1567 !(renderer->a == 0xFF && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1568 renderer->blendMode != SDL_BLENDMODE_ADD && |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1569 renderer->blendMode != SDL_BLENDMODE_MOD)) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1570 { |
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
|
1571 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
|
1572 foreground = xrenderdrawcolor(renderer); |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1573 XRenderFillRectangle(data->display, PictOpSrc, data->brush_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1574 &foreground, 0, 0, 1, 1); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1575 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1576 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1577 XFixesSetPictureClipRegion(data->display, data->drawable_pict, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1578 0, 0, data->stencil_parts); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1579 #endif |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1580 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
|
1581 data->stencil_pict, data->drawable_pict, |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1582 0, 0, 0, 0, 0, 0, window->w, window->h); |
4603
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1583 #ifdef SDL_VIDEO_DRIVER_X11_XDAMAGE |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1584 if (data->use_xdamage) |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1585 XFixesSetPictureClipRegion(data->display, data->drawable_pict, |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1586 0, 0, None); |
dffa432f0e2b
Massive speed-up. Fixed the format that is set for the renderer. Included runtime checks for XDamage.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4602
diff
changeset
|
1587 #endif |
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
|
1588 } |
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
|
1589 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
|
1590 #endif |
5c925d4f220f
X11_DrawRects now uses a very hacky way of drawing rectangles with XRender. This will be improved in some time.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4582
diff
changeset
|
1591 { |
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
|
1592 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
|
1593 |
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
|
1594 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
|
1595 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
|
1596 |
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
|
1597 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
|
1598 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
|
1599 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
|
1600 } |
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
|
1601 } |
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
|
1602 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
|
1603 |
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
|
1604 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
|
1605 } |
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
|
1606 |
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
|
1607 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
|
1608 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
|
1609 { |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1610 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
|
1611 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
|
1612 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
|
1613 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1614 clip.x = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1615 clip.y = 0; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1616 clip.w = window->w; |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1617 clip.h = window->h; |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1618 |
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
|
1619 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
|
1620 XRectangle *xrects, *xrect; |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1621 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
|
1622 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
|
1623 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
|
1624 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
|
1625 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
|
1626 } |
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
|
1627 |
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
|
1628 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
|
1629 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
|
1630 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
|
1631 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
|
1632 ++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
|
1633 ++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
|
1634 |
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
|
1635 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
|
1636 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
|
1637 } |
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
|
1638 } |
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
|
1639 |
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
|
1640 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
1641 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
|
1642 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
|
1643 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
|
1644 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
|
1645 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
|
1646 &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
|
1647 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
|
1648 } |
66e13a224bd6
Major changes to drawing. Reverted back to core X11 functions due to regressions.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4597
diff
changeset
|
1649 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
|
1650 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
|
1651 &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
|
1652 } |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1653 } |
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
|
1654 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
|
1655 #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
|
1656 { |
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
|
1657 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
|
1658 |
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
|
1659 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
|
1660 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
|
1661 |
3538
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1662 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
|
1663 xrects, xcount); |
a1896642a47e
X11 driver compiles again, lines are not yet implemented
Sam Lantinga <slouken@libsdl.org>
parents:
3520
diff
changeset
|
1664 } |
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
|
1665 |
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
|
1666 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
|
1667 return 0; |
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 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1670 static int |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1671 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
|
1672 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
|
1673 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1674 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
|
1675 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
|
1676 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1677 if (data->makedirty) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1678 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
|
1679 } |
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
|
1680 #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
|
1681 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
|
1682 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
|
1683 #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
|
1684 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
|
1685 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
|
1686 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
|
1687 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
|
1688 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
|
1689 } |
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
|
1690 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
|
1691 #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
|
1692 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
|
1693 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
|
1694 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
|
1695 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
|
1696 } |
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
|
1697 } |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1698 Picture src, mask, dst; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1699 XRenderPictureAttributes attr; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1700 if(texture->blendMode == SDL_BLENDMODE_NONE) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1701 src = texturedata->picture; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1702 mask = None; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1703 dst = data->drawable_pict; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1704 } |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1705 /*else if (texture->blendMode == SDL_BLENDMODE_MOD) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1706 src = data->drawable_pict; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1707 mask = texturedata->picture; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1708 dst = data->drawable_pict; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1709 attr.alpha_map = mask; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1710 }*/ |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1711 else { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1712 src = texturedata->picture; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1713 mask = texturedata->picture; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1714 dst = data->drawable_pict; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1715 } |
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
|
1716 if(srcrect->w == dstrect->w && srcrect->h == dstrect->h) { |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1717 /*if (texture->blendMode == SDL_BLENDMODE_MOD) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1718 attr.component_alpha = True; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1719 XRenderChangePicture(data->display, texturedata->picture, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1720 CPComponentAlpha, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1721 XRenderChangePicture(data->display, src, CPAlphaMap, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1722 }*/ |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1723 XRenderComposite(data->display, texturedata->blend_op, src, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1724 mask, dst, srcrect->x, srcrect->y, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1725 srcrect->x, srcrect->y, dstrect->x, dstrect->y, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1726 srcrect->w, srcrect->h); |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1727 } 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
|
1728 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
|
1729 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
|
1730 XTransform xform = {{ |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1731 {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
|
1732 {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
|
1733 {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
|
1734 XRenderSetPictureTransform(data->display, texturedata->picture, &xform); |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1735 |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1736 /*if (texture->blendMode == SDL_BLENDMODE_MOD) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1737 attr.component_alpha = True; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1738 XRenderChangePicture(data->display, texturedata->picture, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1739 CPComponentAlpha, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1740 XRenderChangePicture(data->display, src, CPAlphaMap, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1741 }*/ |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1742 |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1743 XRenderSetPictureFilter(data->display, texturedata->picture, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1744 texturedata->filter, 0, 0); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1745 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1746 XRenderComposite(data->display, texturedata->blend_op, |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1747 src, mask, dst, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1748 srcrect->x, srcrect->y, srcrect->x, srcrect->y, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1749 dstrect->x, dstrect->y, dstrect->w, dstrect->h); |
4593
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1750 |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1751 XTransform identity = {{ |
3892fe2f6537
Fixed so many things. See the changelog listed below.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4591
diff
changeset
|
1752 {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
|
1753 {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
|
1754 {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
|
1755 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
|
1756 } |
4606
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1757 /*if (renderer->blendMode == SDL_BLENDMODE_MOD) { |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1758 attr.component_alpha = False; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1759 XRenderChangePicture(data->display, texturedata->picture, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1760 CPComponentAlpha, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1761 attr.alpha_map = None; |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1762 XRenderChangePicture(data->display, data->drawable_pict, |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1763 CPAlphaMap, &attr); |
4e145485971b
Implement support for setting texture scale mode.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4605
diff
changeset
|
1764 }*/ |
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
|
1765 } |
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
|
1766 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
|
1767 #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
|
1768 { |
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
|
1769 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
|
1770 #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
|
1771 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
|
1772 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
|
1773 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
|
1774 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
|
1775 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
|
1776 } 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
|
1777 #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
|
1778 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
|
1779 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
|
1780 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
|
1781 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
|
1782 } 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
|
1783 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
|
1784 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
|
1785 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
|
1786 } |
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
|
1787 } 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
|
1788 || 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
|
1789 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
|
1790 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
|
1791 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
|
1792 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
|
1793 |
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
|
1794 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
|
1795 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
|
1796 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
|
1797 |
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
|
1798 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
|
1799 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
|
1800 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
|
1801 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
|
1802 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
|
1803 } |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1804 |
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
|
1805 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
|
1806 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
|
1807 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
|
1808 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
|
1809 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
|
1810 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
|
1811 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
|
1812 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
|
1813 } |
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
|
1814 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
|
1815 |
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
|
1816 } 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
|
1817 || !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
|
1818 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
|
1819 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
|
1820 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
|
1821 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
|
1822 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
|
1823 (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
|
1824 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
|
1825 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
|
1826 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
|
1827 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
|
1828 } |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1829 } |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1830 |
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
|
1831 /* 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
|
1832 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
|
1833 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
|
1834 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
|
1835 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
|
1836 #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
|
1837 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
|
1838 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
|
1839 } 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
|
1840 #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
|
1841 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
|
1842 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
|
1843 |
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
|
1844 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
|
1845 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
|
1846 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
|
1847 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
|
1848 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
|
1849 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
|
1850 |
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
|
1851 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
|
1852 |
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
|
1853 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
|
1854 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
|
1855 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
|
1856 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
|
1857 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
|
1858 return -1; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1859 } |
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
|
1860 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
|
1861 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
|
1862 } 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
|
1863 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
|
1864 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
|
1865 srcrect->x, srcrect->y); |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
1866 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1867 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1868 return 0; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1869 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1870 |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1871 static int |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1872 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
|
1873 Uint32 format, void * pixels, int pitch) |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1874 { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1875 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
|
1876 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
|
1877 SDL_VideoDisplay *display = window->display; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1878 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
|
1879 XImage *image; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1880 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1881 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
|
1882 rect->w, rect->h, AllPlanes, ZPixmap); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1883 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1884 SDL_ConvertPixels(rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1885 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
|
1886 format, pixels, pitch); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1887 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1888 XDestroyImage(image); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1889 return 0; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1890 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1891 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1892 static int |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1893 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
|
1894 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
|
1895 { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1896 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
|
1897 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
|
1898 SDL_VideoDisplay *display = window->display; |
3559
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1899 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
|
1900 XImage *image; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1901 void *image_pixels; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1902 int image_pitch; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1903 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1904 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
|
1905 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
|
1906 if (!image_pixels) { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1907 SDL_OutOfMemory(); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1908 return -1; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1909 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1910 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1911 image = XCreateImage(data->display, data->visual, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1912 data->depth, ZPixmap, 0, image_pixels, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1913 rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1914 SDL_BYTESPERPIXEL(screen_format) * 8, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1915 image_pitch); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1916 if (!image) { |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1917 SDL_SetError("XCreateImage() failed"); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1918 return -1; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1919 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1920 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1921 SDL_ConvertPixels(rect->w, rect->h, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1922 format, pixels, pitch, |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1923 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
|
1924 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1925 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
|
1926 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
|
1927 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1928 image->data = NULL; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1929 XDestroyImage(image); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1930 |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1931 SDL_free(image_pixels); |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1932 return 0; |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1933 } |
5f26a7eb5ff0
Implemented read/write pixels for the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
3543
diff
changeset
|
1934 |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1935 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1936 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
|
1937 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1938 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
|
1939 SDL_DirtyRect *dirty; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1940 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1941 /* 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
|
1942 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
|
1943 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
|
1944 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
|
1945 #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
|
1946 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
|
1947 { |
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
|
1948 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
|
1949 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
|
1950 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
|
1951 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
|
1952 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
|
1953 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
|
1954 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
|
1955 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
|
1956 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
|
1957 } |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1958 else |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1959 #endif |
d490d63bcc5e
X11_RenderPresent now uses XRender to blit back-buffers to the screen.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4578
diff
changeset
|
1960 { |
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
|
1961 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
|
1962 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
|
1963 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
|
1964 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1965 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1966 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
|
1967 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1968 XSync(data->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1969 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1970 /* 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
|
1971 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
|
1972 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
|
1973 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
|
1974 #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
|
1975 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
|
1976 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1977 } 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
|
1978 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
|
1979 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
|
1980 #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
|
1981 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
|
1982 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1983 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1984 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1985 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1986 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1987 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
|
1988 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1989 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
|
1990 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
|
1991 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1992 if (!data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1993 return; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1994 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1995 if (data->yuv) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1996 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
|
1997 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1998 if (data->pixmap != None) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1999 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
|
2000 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2001 if (data->image) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2002 data->image->data = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2003 XDestroyImage(data->image); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2004 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2005 #ifndef NO_SHARED_MEMORY |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2006 if (data->shminfo.shmaddr) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2007 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
|
2008 XSync(renderdata->display, False); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2009 shmdt(data->shminfo.shmaddr); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2010 data->pixels = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2011 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2012 #endif |
2828
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
2013 if (data->scaling_image) { |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
2014 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
|
2015 data->scaling_image->data = NULL; |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
2016 XDestroyImage(data->scaling_image); |
7e5ff6cd05bf
Added very slow software scaling to the X11 renderer
Sam Lantinga <slouken@libsdl.org>
parents:
2827
diff
changeset
|
2017 } |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2018 if (data->pixels) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2019 SDL_free(data->pixels); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2020 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2021 SDL_free(data); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2022 texture->driverdata = NULL; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2023 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2024 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2025 static void |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2026 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
|
2027 { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2028 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
|
2029 int i; |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2030 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2031 if (data) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2032 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
|
2033 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
|
2034 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
|
2035 } |
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
|
2036 #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
|
2037 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
|
2038 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
|
2039 } |
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
|
2040 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2041 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2042 if (data->gc) { |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2043 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
|
2044 } |
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
|
2045 #ifdef SDL_VIDEO_DRIVER_X11_XRENDER |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
2046 if (data->stencil_gc) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
2047 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
|
2048 } |
4597
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
2049 if (data->stencil) { |
95be206b3cb7
Start experimental branch for client-side rasterization.
Sunny Sachanandani <sunnysachanandani@gmail.com>
parents:
4596
diff
changeset
|
2050 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
|
2051 } |
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
|
2052 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
|
2053 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
|
2054 } |
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
|
2055 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
|
2056 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
|
2057 } |
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
|
2058 #endif |
2810
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2059 SDL_FreeDirtyRects(&data->dirty); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2060 SDL_free(data); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2061 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2062 SDL_free(renderer); |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2063 } |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2064 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2065 #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
|
2066 |
27cb878a278e
Implemented the X11 (non-OpenGL) renderer, no alpha or scaling available.
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2067 /* vi: set ts=4 sw=4 expandtab: */ |