21#include "../../SDL_internal.h"
23#if SDL_VIDEO_DRIVER_X11
29#ifndef NO_SHARED_MEMORY
33static int (*X_handler)(Display *, XErrorEvent *) =
NULL;
34static 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,
117 X11_XShmDetach(display, shminfo);
118 X11_XSync(display, False);
119 shmdt(shminfo->shmaddr);
123 *
pixels = shminfo->shmaddr;
135 data->ximage = X11_XCreateImage(display,
data->visual,
136 vinfo.depth, ZPixmap, 0, (
char *)(*
pixels),
153#ifndef NO_SHARED_MEMORY
154 if (
data->use_mitshm) {
155 for (
i = 0;
i < numrects; ++
i) {
161 if (
w <= 0 ||
h <= 0 || (
x +
w) <= 0 || (
y +
h) <= 0) {
180 X11_XShmPutImage(display,
data->xwindow,
data->gc,
data->ximage,
187 for (
i = 0;
i < numrects; ++
i) {
193 if (
w <= 0 ||
h <= 0 || (
x +
w) <= 0 || (
y +
h) <= 0) {
212 X11_XPutImage(display,
data->xwindow,
data->gc,
data->ximage,
217 X11_XSync(display, False);
236 XDestroyImage(
data->ximage);
238#ifndef NO_SHARED_MEMORY
239 if (
data->use_mitshm) {
240 X11_XShmDetach(display, &
data->shminfo);
241 X11_XSync(display, False);
242 shmdt(
data->shminfo.shmaddr);
250 X11_XFreeGC(display,
data->gc);
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
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
#define SDL_OutOfMemory()
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei GLsizei GLint GLenum GLenum const GLvoid * pixels
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLint GLint GLint x
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
GLfloat GLfloat GLfloat GLfloat h
GLubyte GLubyte GLubyte GLubyte w
#define SDL_BYTESPERPIXEL(X)
@ SDL_PIXELFORMAT_UNKNOWN
static SDL_VideoDevice * _this
void X11_DestroyWindowFramebuffer(_THIS, SDL_Window *window)
int X11_CreateWindowFramebuffer(_THIS, SDL_Window *window, Uint32 *format, void **pixels, int *pitch)
int X11_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect *rects, int numrects)
Uint32 X11_GetPixelFormatFromVisualInfo(Display *display, XVisualInfo *vinfo)
int X11_GetVisualInfoFromVisual(Display *display, Visual *visual, XVisualInfo *vinfo)
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)
EGLSurface EGLNativeWindowType * window
EGLSurface EGLint * rects
A rectangle, with the origin at the upper left (integer).
struct wl_display * display
struct SDL_VideoData * videodata
The type used to identify a window.