21 #include "../../SDL_internal.h" 23 #if SDL_VIDEO_DRIVER_X11 29 #ifndef NO_SHARED_MEMORY 33 static int (*X_handler)(Display *, XErrorEvent *) =
NULL;
34 static int shm_errhandler(Display *
d, XErrorEvent *
e)
36 if ( e->error_code == BadAccess ) {
40 return(X_handler(d,e));
48 return SDL_X11_HAVE_SHM;
57 void **
pixels,
int *pitch)
68 gcv.graphics_exposures = False;
69 data->
gc = X11_XCreateGC(display, data->
xwindow, GCGraphicsExposures, &gcv);
76 return SDL_SetError(
"Couldn't get window visual information");
88 #ifndef NO_SHARED_MEMORY 90 XShmSegmentInfo *shminfo = &data->
shminfo;
92 shminfo->shmid = shmget(IPC_PRIVATE, window->
h*(*pitch), IPC_CREAT | 0777);
93 if ( shminfo->shmid >= 0 ) {
94 shminfo->shmaddr = (
char *)shmat(shminfo->shmid, 0, 0);
95 shminfo->readOnly = False;
96 if ( shminfo->shmaddr != (
char *)-1 ) {
98 X_handler = X11_XSetErrorHandler(shm_errhandler);
99 X11_XShmAttach(display, shminfo);
100 X11_XSync(display, False);
101 X11_XSetErrorHandler(X_handler);
103 shmdt(shminfo->shmaddr);
107 shmctl(shminfo->shmid, IPC_RMID,
NULL);
112 data->
ximage = X11_XShmCreateImage(display, data->
visual,
113 vinfo.depth, ZPixmap,
114 shminfo->shmaddr, shminfo,
115 window->
w, window->
h);
117 X11_XShmDetach(display, shminfo);
118 X11_XSync(display, False);
119 shmdt(shminfo->shmaddr);
123 *pixels = shminfo->shmaddr;
131 if (*pixels ==
NULL) {
136 vinfo.depth, ZPixmap, 0, (
char *)(*pixels),
137 window->
w, window->
h, 32, 0);
153 #ifndef NO_SHARED_MEMORY
155 for (
i = 0;
i < numrects; ++
i) {
161 if (
w <= 0 ||
h <= 0 || (x +
w) <= 0 || (
y +
h) <= 0) {
175 if (x +
w > window->
w)
177 if (
y +
h > window->
h)
181 x,
y, x,
y,
w,
h, False);
187 for (
i = 0;
i < numrects; ++
i) {
193 if (
w <= 0 ||
h <= 0 || (x +
w) <= 0 || (
y +
h) <= 0) {
207 if (x +
w > window->
w)
209 if (
y +
h > window->
h)
217 X11_XSync(display, False);
236 XDestroyImage(data->
ximage);
238 #ifndef NO_SHARED_MEMORY 240 X11_XShmDetach(display, &data->
shminfo);
241 X11_XSync(display, False);
250 X11_XFreeGC(display, data->
gc);
Uint32 X11_GetPixelFormatFromVisualInfo(Display *display, XVisualInfo *vinfo)
int X11_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 SDL_AssertionHandler void SDL_SpinLock SDL_atomic_t int int return SDL_atomic_t return void void void return void return int return SDL_AudioSpec SDL_AudioSpec return int int return return int SDL_RWops int SDL_AudioSpec Uint8 Uint32 * e
GLint GLint GLint GLint GLint x
struct wl_display * display
GLfloat GLfloat GLfloat GLfloat h
int X11_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
#define SDL_BYTESPERPIXEL(X)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
void X11_DestroyWindowFramebuffer(_THIS, SDL_Window *window)
static SDL_VideoDevice * _this
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char int SDL_PRINTF_FORMAT_STRING const char const char SDL_SCANF_FORMAT_STRING const char return SDL_ThreadFunction const char void return Uint32 return Uint32 SDL_AssertionHandler void SDL_SpinLock SDL_atomic_t int int return SDL_atomic_t return void void void return void return int return SDL_AudioSpec SDL_AudioSpec return int int return return int SDL_RWops int SDL_AudioSpec Uint8 ** d
struct SDL_VideoData * videodata
GLubyte GLubyte GLubyte GLubyte w
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
#define SDL_OutOfMemory()
EGLSurface EGLNativeWindowType * window
The type used to identify a window.
EGLSurface EGLint * rects
int X11_GetVisualInfoFromVisual(Display *display, Visual *visual, XVisualInfo *vinfo)
A rectangle, with the origin at the upper left.