int Emscripten_GLES_LoadLibrary(_THIS, const char *path) { /*we can't load EGL dynamically*/ _this->egl_data = (struct SDL_EGL_VideoData *) SDL_calloc(1, sizeof(SDL_EGL_VideoData)); if (!_this->egl_data) { return SDL_OutOfMemory(); } /* Emscripten forces you to manually cast eglGetProcAddress to the real function type; grep for "__eglMustCastToProperFunctionPointerType" in Emscripten's egl.h for details. */ _this->egl_data->eglGetProcAddress = (void *(EGLAPIENTRY *)(const char *)) eglGetProcAddress; LOAD_FUNC(eglGetDisplay); LOAD_FUNC(eglInitialize); LOAD_FUNC(eglTerminate); LOAD_FUNC(eglChooseConfig); LOAD_FUNC(eglGetConfigAttrib); LOAD_FUNC(eglCreateContext); LOAD_FUNC(eglDestroyContext); LOAD_FUNC(eglCreateWindowSurface); LOAD_FUNC(eglDestroySurface); LOAD_FUNC(eglMakeCurrent); LOAD_FUNC(eglSwapBuffers); LOAD_FUNC(eglSwapInterval); LOAD_FUNC(eglWaitNative); LOAD_FUNC(eglWaitGL); LOAD_FUNC(eglBindAPI); _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(EGL_DEFAULT_DISPLAY); if (!_this->egl_data->egl_display) { return SDL_SetError("Could not get EGL display"); } if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { return SDL_SetError("Could not initialize EGL"); } if (path) { SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1); } else { *_this->gl_config.driver_path = '\0'; } return 0; }
CommonState * CommonCreateState(char **argv, Uint32 flags) { CommonState *state = SDL_calloc(1, sizeof(*state)); if (!state) { SDL_OutOfMemory(); return NULL; } /* Initialize some defaults */ state->argv = argv; state->flags = flags; state->window_title = argv[0]; state->window_flags = 0; state->window_x = SDL_WINDOWPOS_UNDEFINED; state->window_y = SDL_WINDOWPOS_UNDEFINED; state->window_w = DEFAULT_WINDOW_WIDTH; state->window_h = DEFAULT_WINDOW_HEIGHT; state->num_windows = 1; state->audiospec.freq = 22050; state->audiospec.format = AUDIO_S16; state->audiospec.channels = 2; state->audiospec.samples = 2048; /* Set some very sane GL defaults */ state->gl_red_size = 3; state->gl_green_size = 3; state->gl_blue_size = 2; state->gl_alpha_size = 0; state->gl_buffer_size = 0; state->gl_depth_size = 16; state->gl_stencil_size = 0; state->gl_double_buffer = 1; state->gl_accum_red_size = 0; state->gl_accum_green_size = 0; state->gl_accum_blue_size = 0; state->gl_accum_alpha_size = 0; state->gl_stereo = 0; state->gl_multisamplebuffers = 0; state->gl_multisamplesamples = 0; state->gl_retained_backing = 1; state->gl_accelerated = -1; return state; }
void *TIMIDITY_CreateFromRW(SDL_RWops *src, int freesrc) { TIMIDITY_Music *music; SDL_AudioSpec spec; SDL_bool need_stream = SDL_FALSE; music = (TIMIDITY_Music *)SDL_calloc(1, sizeof(*music)); if (!music) { SDL_OutOfMemory(); return NULL; } SDL_memcpy(&spec, &music_spec, sizeof(spec)); if (spec.channels > 2) { need_stream = SDL_TRUE; spec.channels = 2; } music->song = Timidity_LoadSong(src, &spec); if (!music->song) { TIMIDITY_Delete(music); return NULL; } if (need_stream) { music->stream = SDL_NewAudioStream(spec.format, spec.channels, spec.freq, music_spec.format, music_spec.channels, music_spec.freq); if (!music->stream) { TIMIDITY_Delete(music); return NULL; } music->buffer_size = spec.samples * (SDL_AUDIO_BITSIZE(spec.format) / 8) * spec.channels; music->buffer = SDL_malloc(music->buffer_size); if (!music->buffer) { SDL_OutOfMemory(); TIMIDITY_Delete(music); return NULL; } } if (freesrc) { SDL_RWclose(src); } return music; }
static int D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) { D3D_RenderData *renderdata = (D3D_RenderData *) renderer->driverdata; D3D_TextureData *data; D3DPOOL pool; DWORD usage; HRESULT result; data = (D3D_TextureData *) SDL_calloc(1, sizeof(*data)); if (!data) { SDL_OutOfMemory(); return -1; } data->scaleMode = GetScaleQuality(); texture->driverdata = data; #ifdef USE_DYNAMIC_TEXTURE if (texture->access == SDL_TEXTUREACCESS_STREAMING) { pool = D3DPOOL_DEFAULT; usage = D3DUSAGE_DYNAMIC; } else #endif if (texture->access == SDL_TEXTUREACCESS_TARGET) { /* D3DPOOL_MANAGED does not work with D3DUSAGE_RENDERTARGET */ pool = D3DPOOL_DEFAULT; usage = D3DUSAGE_RENDERTARGET; } else { pool = D3DPOOL_MANAGED; usage = 0; } result = IDirect3DDevice9_CreateTexture(renderdata->device, texture->w, texture->h, 1, usage, PixelFormatToD3DFMT(texture->format), pool, &data->texture, NULL); if (FAILED(result)) { D3D_SetError("CreateTexture()", result); return -1; } return 0; }
int PSP_CreateWindow(_THIS, SDL_Window * window) { SDL_WindowData *wdata; /* Allocate window internal data */ wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); if (wdata == NULL) { return SDL_OutOfMemory(); } /* Setup driver data for this window */ window->driverdata = wdata; /* Window has been successfully created */ return 0; }
static int GDI_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) { GDI_RenderData *renderdata = (GDI_RenderData *) renderer->driverdata; SDL_Window *window = renderer->window; SDL_VideoDisplay *display = window->display; GDI_TextureData *data; data = (GDI_TextureData *) SDL_calloc(1, sizeof(*data)); if (!data) { SDL_OutOfMemory(); return -1; } texture->driverdata = data; if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) { data->yuv = SDL_SW_CreateYUVTexture(texture->format, texture->w, texture->h); if (!data->yuv) { return -1; } data->format = display->current_mode.format; } else { data->format = texture->format; } data->pitch = (texture->w * SDL_BYTESPERPIXEL(data->format)); if (data->yuv || texture->access == SDL_TEXTUREACCESS_STREAMING || texture->format != display->current_mode.format) { data->hbm = GDI_CreateDIBSection(renderdata->memory_hdc, texture->w, texture->h, data->pitch, data->format, &data->hpal, &data->pixels); } else { data->hbm = CreateCompatibleBitmap(renderdata->window_hdc, texture->w, texture->h); } if (!data->hbm) { WIN_SetError("Couldn't create bitmap"); return -1; } return 0; }
static int SDL_EVDEV_device_added(const char *devpath) { SDL_evdevlist_item *item; /* Check to make sure it's not already in list. */ for (item = _this->first; item != NULL; item = item->next) { if (strcmp(devpath, item->path) == 0) { return -1; /* already have this one */ } } item = (SDL_evdevlist_item *) SDL_calloc(1, sizeof (SDL_evdevlist_item)); if (item == NULL) { return SDL_OutOfMemory(); } item->fd = open(devpath, O_RDONLY, 0); if (item->fd < 0) { SDL_free(item); return SDL_SetError("Unable to open %s", devpath); } item->path = SDL_strdup(devpath); if (item->path == NULL) { close(item->fd); SDL_free(item); return SDL_OutOfMemory(); } /* Non blocking read mode */ fcntl(item->fd, F_SETFL, O_NONBLOCK); if (_this->last == NULL) { _this->first = _this->last = item; } else { _this->last->next = item; _this->last = item; } SDL_EVDEV_sync_device(item); return _this->numdevices++; }
int Emscripten_GLES_LoadLibrary(_THIS, const char *path) { /*we can't load EGL dynamically*/ _this->egl_data = (struct SDL_EGL_VideoData *) SDL_calloc(1, sizeof(SDL_EGL_VideoData)); if (!_this->egl_data) { return SDL_OutOfMemory(); } LOAD_FUNC(eglGetDisplay); LOAD_FUNC(eglInitialize); LOAD_FUNC(eglTerminate); LOAD_FUNC(eglGetProcAddress); LOAD_FUNC(eglChooseConfig); LOAD_FUNC(eglGetConfigAttrib); LOAD_FUNC(eglCreateContext); LOAD_FUNC(eglDestroyContext); LOAD_FUNC(eglCreateWindowSurface); LOAD_FUNC(eglDestroySurface); LOAD_FUNC(eglMakeCurrent); LOAD_FUNC(eglSwapBuffers); LOAD_FUNC(eglSwapInterval); LOAD_FUNC(eglWaitNative); LOAD_FUNC(eglWaitGL); LOAD_FUNC(eglBindAPI); _this->egl_data->egl_display = _this->egl_data->eglGetDisplay(EGL_DEFAULT_DISPLAY); if (!_this->egl_data->egl_display) { return SDL_SetError("Could not get EGL display"); } if (_this->egl_data->eglInitialize(_this->egl_data->egl_display, NULL, NULL) != EGL_TRUE) { return SDL_SetError("Could not initialize EGL"); } _this->gl_config.driver_loaded = 1; if (path) { SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1); } else { *_this->gl_config.driver_path = '\0'; } return 0; }
int PND_createwindow(_THIS, SDL_Window * window) { SDL_VideoData *phdata = (SDL_VideoData *) _this->driverdata; SDL_WindowData *wdata; /* Allocate window internal data */ wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); if (wdata == NULL) { return SDL_OutOfMemory(); } /* Setup driver data for this window */ window->driverdata = wdata; /* Check if window must support OpenGL ES rendering */ if ((window->flags & SDL_WINDOW_OPENGL) == SDL_WINDOW_OPENGL) { EGLBoolean initstatus; /* Mark this window as OpenGL ES compatible */ wdata->uses_gles = SDL_TRUE; /* Create connection to OpenGL ES */ if (phdata->egl_display == EGL_NO_DISPLAY) { phdata->egl_display = eglGetDisplay((NativeDisplayType) 0); if (phdata->egl_display == EGL_NO_DISPLAY) { return SDL_SetError("PND: Can't get connection to OpenGL ES"); } initstatus = eglInitialize(phdata->egl_display, NULL, NULL); if (initstatus != EGL_TRUE) { return SDL_SetError("PND: Can't init OpenGL ES library"); } } phdata->egl_refcount++; } /* Window has been successfully created */ return 0; }
static int D3D_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture) { D3D_RenderData *renderdata = (D3D_RenderData *) renderer->driverdata; SDL_Window *window = renderer->window; D3DFORMAT display_format = renderdata->pparams.BackBufferFormat; D3D_TextureData *data; D3DPOOL pool; DWORD usage; HRESULT result; data = (D3D_TextureData *) SDL_calloc(1, sizeof(*data)); if (!data) { SDL_OutOfMemory(); return -1; } data->scaleMode = GetScaleQuality(); texture->driverdata = data; #ifdef USE_DYNAMIC_TEXTURE if (texture->access == SDL_TEXTUREACCESS_STREAMING) { pool = D3DPOOL_DEFAULT; usage = D3DUSAGE_DYNAMIC; } else #endif { pool = D3DPOOL_MANAGED; usage = 0; } result = IDirect3DDevice9_CreateTexture(renderdata->device, texture->w, texture->h, 1, usage, PixelFormatToD3DFMT(texture->format), pool, &data->texture, NULL); if (FAILED(result)) { D3D_SetError("CreateTexture()", result); return -1; } return 0; }
static int ANDROIDAUDIO_OpenDevice(_THIS, void *handle, const char *devname, int iscapture) { SDL_AudioFormat test_format; SDL_assert((captureDevice == NULL) || !iscapture); SDL_assert((audioDevice == NULL) || iscapture); if (iscapture) { captureDevice = this; } else { audioDevice = this; } this->hidden = (struct SDL_PrivateAudioData *) SDL_calloc(1, (sizeof *this->hidden)); if (this->hidden == NULL) { return SDL_OutOfMemory(); } test_format = SDL_FirstAudioFormat(this->spec.format); while (test_format != 0) { /* no "UNKNOWN" constant */ if ((test_format == AUDIO_U8) || (test_format == AUDIO_S16) || (test_format == AUDIO_F32)) { this->spec.format = test_format; break; } test_format = SDL_NextAudioFormat(); } if (test_format == 0) { /* Didn't find a compatible format :( */ return SDL_SetError("No compatible audio format!"); } if (Android_JNI_OpenAudioDevice(iscapture, &this->spec) < 0) { return -1; } SDL_CalculateAudioSpec(&this->spec); return 0; }
/* Read a list of tracks from the volume */ static int LoadTracks (SDL_CD *cdrom) { /* Check if tracks are already loaded */ if ( tracks[cdrom->id] != NULL ) return 0; /* Allocate memory for tracks */ tracks[cdrom->id] = (FSRef*) SDL_calloc (1, sizeof(**tracks) * cdrom->numtracks); if (tracks[cdrom->id] == NULL) { SDL_OutOfMemory (); return -1; } /* Load tracks */ if (ListTrackFiles (volumes[cdrom->id], tracks[cdrom->id], cdrom->numtracks) < 0) return -1; return 0; }
static int gf_createtexture(SDL_Renderer* renderer, SDL_Texture* texture) { SDL_RenderData* renderdata=(SDL_RenderData*)renderer->driverdata; SDL_Window* window=SDL_GetWindowFromID(renderer->window); SDL_VideoDisplay* display=SDL_GetDisplayFromWindow(window); SDL_TextureData* tdata=NULL; /* Allocate texture driver data */ tdata=(SDL_TextureData*)SDL_calloc(1, sizeof(SDL_TextureData)); if (tdata==NULL) { SDL_OutOfMemory(); return -1; } /* Set texture driver data */ texture->driverdata=tdata; }
int SDL_EVDEV_Init(void) { if (_this == NULL) { _this = (SDL_EVDEV_PrivateData*)SDL_calloc(1, sizeof(*_this)); if (_this == NULL) { return SDL_OutOfMemory(); } #if SDL_USE_LIBUDEV if (SDL_UDEV_Init() < 0) { SDL_free(_this); _this = NULL; return -1; } /* Set up the udev callback */ if (SDL_UDEV_AddCallback(SDL_EVDEV_udev_callback) < 0) { SDL_UDEV_Quit(); SDL_free(_this); _this = NULL; return -1; } /* Force a scan to build the initial device list */ SDL_UDEV_Scan(); #else /* TODO: Scan the devices manually, like a caveman */ #endif /* SDL_USE_LIBUDEV */ /* We need a physical terminal (not PTS) to be able to translate key code to symbols via the kernel tables */ _this->console_fd = SDL_EVDEV_get_active_tty(); /* Mute the keyboard so keystrokes only generate evdev events and do not leak through to the console */ SDL_EVDEV_mute_keyboard(_this->console_fd, &_this->kb_mode); } _this->ref_count += 1; return 0; }
static int VIVANTE_AddVideoDisplays(_THIS) { SDL_VideoData *videodata = _this->driverdata; SDL_VideoDisplay display; SDL_DisplayMode current_mode; SDL_DisplayData *data; int pitch = 0, bpp = 0; unsigned long pixels = 0; data = (SDL_DisplayData *) SDL_calloc(1, sizeof(SDL_DisplayData)); if (data == NULL) { return SDL_OutOfMemory(); } SDL_zero(current_mode); #if SDL_VIDEO_DRIVER_VIVANTE_VDK data->native_display = vdkGetDisplay(videodata->vdk_private); vdkGetDisplayInfo(data->native_display, ¤t_mode.w, ¤t_mode.h, &pixels, &pitch, &bpp); #else data->native_display = videodata->fbGetDisplayByIndex(0); videodata->fbGetDisplayInfo(data->native_display, ¤t_mode.w, ¤t_mode.h, &pixels, &pitch, &bpp); #endif /* SDL_VIDEO_DRIVER_VIVANTE_VDK */ switch (bpp) { default: /* Is another format used? */ case 16: current_mode.format = SDL_PIXELFORMAT_RGB565; break; } /* FIXME: How do we query refresh rate? */ current_mode.refresh_rate = 60; SDL_zero(display); display.desktop_mode = current_mode; display.current_mode = current_mode; display.driverdata = data; SDL_AddVideoDisplay(&display); return 0; }
int SDL_UDEV_AddCallback(SDL_UDEV_Callback cb) { SDL_UDEV_CallbackList *item; item = (SDL_UDEV_CallbackList *) SDL_calloc(1, sizeof (SDL_UDEV_CallbackList)); if (item == NULL) { return SDL_OutOfMemory(); } item->callback = cb; if (_this->last == NULL) { _this->first = _this->last = item; } else { _this->last->next = item; _this->last = item; } return 1; }
void Wayland_display_add_input(SDL_VideoData *d, uint32_t id) { struct SDL_WaylandInput *input; input = SDL_calloc(1, sizeof *input); if (input == NULL) return; input->display = d; input->seat = wl_registry_bind(d->registry, id, &wl_seat_interface, 1); input->sx_w = wl_fixed_from_int(0); input->sy_w = wl_fixed_from_int(0); d->input = input; wl_seat_add_listener(input->seat, &seat_listener, input); wl_seat_set_user_data(input->seat, input); WAYLAND_wl_display_flush(d->display); }
int VIVANTE_CreateWindow(_THIS, SDL_Window * window) { SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; SDL_DisplayData *displaydata; SDL_WindowData *data; displaydata = SDL_GetDisplayDriverData(0); /* Allocate window internal data */ data = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); if (data == NULL) { return SDL_OutOfMemory(); } /* Setup driver data for this window */ window->driverdata = data; #if SDL_VIDEO_DRIVER_VIVANTE_VDK data->native_window = vdkCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h); #else data->native_window = videodata->fbCreateWindow(displaydata->native_display, window->x, window->y, window->w, window->h); #endif if (!data->native_window) { return SDL_SetError("VIVANTE: Can't create native window"); } #if SDL_VIDEO_OPENGL_EGL if (window->flags & SDL_WINDOW_OPENGL) { data->egl_surface = SDL_EGL_CreateSurface(_this, data->native_window); if (data->egl_surface == EGL_NO_SURFACE) { return SDL_SetError("VIVANTE: Can't create EGL surface"); } } else { data->egl_surface = EGL_NO_SURFACE; } #endif /* Window has been successfully created */ return 0; }
int FB_CreateWindow(_THIS, SDL_Window * window) { SDL_WindowData *wdata; SDL_VideoDisplay *display; /* Allocate window internal data */ wdata = (SDL_WindowData *) SDL_calloc(1, sizeof(SDL_WindowData)); if (wdata == NULL) { return SDL_OutOfMemory(); } display = SDL_GetDisplayForWindow(window); /* Windows have one size for now */ window->w = display->desktop_mode.w; window->h = display->desktop_mode.h; /* OpenGL ES is the law here, buddy */ window->flags |= SDL_WINDOW_OPENGL; if (!_this->egl_data) { if (SDL_GL_LoadLibrary(NULL) < 0) { return -1; } } wdata->egl_surface = SDL_EGL_CreateSurface(_this, 0); if (wdata->egl_surface == EGL_NO_SURFACE) { return SDL_SetError("Could not create GLES window surface"); } /* Setup driver data for this window */ window->driverdata = wdata; /* One window, it always has focus */ SDL_SetMouseFocus(window); SDL_SetKeyboardFocus(window); /* Window has been successfully created */ return 0; }
static SDL_Cursor * X11_CreateSystemCursor(SDL_SystemCursor id) { SDL_Cursor *cursor; unsigned int shape; switch(id) { default: SDL_assert(0); return NULL; /* X Font Cursors reference: */ /* http://tronche.com/gui/x/xlib/appendix/b/ */ case SDL_SYSTEM_CURSOR_ARROW: shape = XC_left_ptr; break; case SDL_SYSTEM_CURSOR_IBEAM: shape = XC_xterm; break; case SDL_SYSTEM_CURSOR_WAIT: shape = XC_watch; break; case SDL_SYSTEM_CURSOR_CROSSHAIR: shape = XC_tcross; break; case SDL_SYSTEM_CURSOR_WAITARROW: shape = XC_watch; break; case SDL_SYSTEM_CURSOR_SIZENWSE: shape = XC_fleur; break; case SDL_SYSTEM_CURSOR_SIZENESW: shape = XC_fleur; break; case SDL_SYSTEM_CURSOR_SIZEWE: shape = XC_sb_h_double_arrow; break; case SDL_SYSTEM_CURSOR_SIZENS: shape = XC_sb_v_double_arrow; break; case SDL_SYSTEM_CURSOR_SIZEALL: shape = XC_fleur; break; case SDL_SYSTEM_CURSOR_NO: shape = XC_pirate; break; case SDL_SYSTEM_CURSOR_HAND: shape = XC_hand2; break; } cursor = SDL_calloc(1, sizeof(*cursor)); if (cursor) { Cursor x11_cursor; x11_cursor = X11_XCreateFontCursor(GetDisplay(), shape); cursor->driverdata = (void*)x11_cursor; } else { SDL_OutOfMemory(); } return cursor; }
static SDL_VideoDevice * Android_CreateDevice(int devindex) { printf("Creating video device\n"); SDL_VideoDevice *device; /* Initialize all variables that we clean on shutdown */ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { SDL_OutOfMemory(); if (device) { SDL_free(device); } return (0); } /* Set the function pointers */ device->VideoInit = Android_VideoInit; device->VideoQuit = Android_VideoQuit; device->PumpEvents = Android_PumpEvents; device->CreateWindow = Android_CreateWindow; device->SetWindowTitle = Android_SetWindowTitle; device->DestroyWindow = Android_DestroyWindow; device->free = Android_DeleteDevice; /* GL pointers */ device->GL_LoadLibrary = Android_GL_LoadLibrary; device->GL_GetProcAddress = Android_GL_GetProcAddress; device->GL_UnloadLibrary = Android_GL_UnloadLibrary; device->GL_CreateContext = Android_GL_CreateContext; device->GL_MakeCurrent = Android_GL_MakeCurrent; device->GL_SetSwapInterval = Android_GL_SetSwapInterval; device->GL_GetSwapInterval = Android_GL_GetSwapInterval; device->GL_SwapWindow = Android_GL_SwapWindow; device->GL_DeleteContext = Android_GL_DeleteContext; return device; }
static SDL_Cursor * WIN_CreateSystemCursor(SDL_SystemCursor id) { SDL_Cursor *cursor; LPCTSTR name; switch(id) { default: SDL_assert(0); return NULL; case SDL_SYSTEM_CURSOR_ARROW: name = IDC_ARROW; break; case SDL_SYSTEM_CURSOR_IBEAM: name = IDC_IBEAM; break; case SDL_SYSTEM_CURSOR_WAIT: name = IDC_WAIT; break; case SDL_SYSTEM_CURSOR_CROSSHAIR: name = IDC_CROSS; break; case SDL_SYSTEM_CURSOR_WAITARROW: name = IDC_WAIT; break; case SDL_SYSTEM_CURSOR_SIZENWSE: name = IDC_SIZENWSE; break; case SDL_SYSTEM_CURSOR_SIZENESW: name = IDC_SIZENESW; break; case SDL_SYSTEM_CURSOR_SIZEWE: name = IDC_SIZEWE; break; case SDL_SYSTEM_CURSOR_SIZENS: name = IDC_SIZENS; break; case SDL_SYSTEM_CURSOR_SIZEALL: name = IDC_SIZEALL; break; case SDL_SYSTEM_CURSOR_NO: name = IDC_NO; break; case SDL_SYSTEM_CURSOR_HAND: name = IDC_HAND; break; } cursor = SDL_calloc(1, sizeof(*cursor)); if (cursor) { HICON hicon; hicon = LoadCursor(NULL, name); cursor->driverdata = hicon; } else { SDL_OutOfMemory(); } return cursor; }
static int SDL_EVDEV_kbd_load_keymaps(SDL_EVDEV_keyboard_state *kbd) { int i, j; kbd->key_maps = (unsigned short **)SDL_calloc(MAX_NR_KEYMAPS, sizeof(unsigned short *)); if (!kbd->key_maps) { return -1; } for (i = 0; i < MAX_NR_KEYMAPS; ++i) { struct kbentry kbe; kbe.kb_table = i; kbe.kb_index = 0; if (ioctl(kbd->console_fd, KDGKBENT, &kbe) < 0) { return -1; } if (kbe.kb_value == K_NOSUCHMAP) { continue; } kbd->key_maps[i] = (unsigned short *)SDL_malloc(NR_KEYS * sizeof(unsigned short)); if (!kbd->key_maps[i]) { return -1; } for (j = 0; j < NR_KEYS; ++j) { kbe.kb_table = i; kbe.kb_index = j; if (ioctl(kbd->console_fd, KDGKBENT, &kbe) < 0) { return -1; } kbd->key_maps[i][j] = (kbe.kb_value ^ 0xf000); } } return 0; }
static SDL_VideoDevice * OFFSCREEN_CreateDevice(int devindex) { SDL_VideoDevice *device; /* Initialize all variables that we clean on shutdown */ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { SDL_OutOfMemory(); return (0); } /* General video */ device->VideoInit = OFFSCREEN_VideoInit; device->VideoQuit = OFFSCREEN_VideoQuit; device->SetDisplayMode = OFFSCREEN_SetDisplayMode; device->PumpEvents = OFFSCREEN_PumpEvents; device->CreateWindowFramebuffer = SDL_OFFSCREEN_CreateWindowFramebuffer; device->UpdateWindowFramebuffer = SDL_OFFSCREEN_UpdateWindowFramebuffer; device->DestroyWindowFramebuffer = SDL_OFFSCREEN_DestroyWindowFramebuffer; device->free = OFFSCREEN_DeleteDevice; /* GL context */ device->GL_SwapWindow = OFFSCREEN_GL_SwapWindow; device->GL_MakeCurrent = OFFSCREEN_GL_MakeCurrent; device->GL_CreateContext = OFFSCREEN_GL_CreateContext; device->GL_DeleteContext = OFFSCREEN_GL_DeleteContext; device->GL_LoadLibrary = OFFSCREEN_GL_LoadLibrary; device->GL_UnloadLibrary = OFFSCREEN_GL_UnloadLibrary; device->GL_GetProcAddress = OFFSCREEN_GL_GetProcAddress; /* "Window" */ device->CreateWindow = OFFSCREEN_CreateWindow; device->DestroyWindow = OFFSCREEN_DestroyWindow; return device; }
KMSDRM_FBInfo * KMSDRM_FBFromBO(_THIS, struct gbm_bo *bo) { uint32_t w, h, stride, handle; int ret; SDL_VideoData *vdata = ((SDL_VideoData *)_this->driverdata); KMSDRM_FBInfo *fb_info; fb_info = (KMSDRM_FBInfo *)KMSDRM_gbm_bo_get_user_data(bo); if (fb_info != NULL) { /* Have a previously used framebuffer, return it */ return fb_info; } /* Here a new DRM FB must be created */ fb_info = (KMSDRM_FBInfo *)SDL_calloc(1, sizeof(KMSDRM_FBInfo)); if (fb_info == NULL) { SDL_OutOfMemory(); return NULL; } fb_info->drm_fd = vdata->drm_fd; w = KMSDRM_gbm_bo_get_width(bo); h = KMSDRM_gbm_bo_get_height(bo); stride = KMSDRM_gbm_bo_get_stride(bo); handle = KMSDRM_gbm_bo_get_handle(bo).u32; ret = KMSDRM_drmModeAddFB(vdata->drm_fd, w, h, 24, 32, stride, handle, &fb_info->fb_id); if (ret < 0) { free(fb_info); return NULL; } SDL_LogDebug(SDL_LOG_CATEGORY_VIDEO, "New DRM FB (%u): %ux%u, stride %u from BO %p", fb_info->fb_id, w, h, stride, (void *)bo); /* Associate our DRM framebuffer with this buffer object */ KMSDRM_gbm_bo_set_user_data(bo, fb_info, KMSDRM_FBDestroyCallback); return fb_info; }
static SDL_VideoDevice *NACL_CreateDevice(int devindex) { SDL_VideoDevice *device; /* Initialize all variables that we clean on shutdown */ device = (SDL_VideoDevice *) SDL_calloc(1, sizeof(SDL_VideoDevice)); if (!device) { SDL_OutOfMemory(); return NULL; } device->driverdata = &nacl; /* Set the function pointers */ device->VideoInit = NACL_VideoInit; device->VideoQuit = NACL_VideoQuit; device->PumpEvents = NACL_PumpEvents; device->CreateSDLWindow = NACL_CreateWindow; device->SetWindowTitle = NACL_SetWindowTitle; device->DestroyWindow = NACL_DestroyWindow; device->SetDisplayMode = NACL_SetDisplayMode; device->free = NACL_DeleteDevice; /* GL pointers */ device->GL_LoadLibrary = NACL_GLES_LoadLibrary; device->GL_GetProcAddress = NACL_GLES_GetProcAddress; device->GL_UnloadLibrary = NACL_GLES_UnloadLibrary; device->GL_CreateContext = NACL_GLES_CreateContext; device->GL_MakeCurrent = NACL_GLES_MakeCurrent; device->GL_SetSwapInterval = NACL_GLES_SetSwapInterval; device->GL_GetSwapInterval = NACL_GLES_GetSwapInterval; device->GL_SwapWindow = NACL_GLES_SwapWindow; device->GL_DeleteContext = NACL_GLES_DeleteContext; return device; }
static SDL_Texture * CreateTexture(SDL_Renderer * renderer, Uint32 format, int w, int h) { SDL_Texture *texture; texture = (SDL_Texture *) SDL_calloc(1, sizeof(*texture)); if (!texture) { SDL_OutOfMemory(); return NULL; } texture->format = format; texture->access = SDL_TEXTUREACCESS_STREAMING; texture->w = w; texture->h = h; texture->renderer = renderer; if (renderer->CreateTexture(renderer, texture) < 0) { SDL_free(texture); return NULL; } return texture; }
int SDL_EVDEV_Init(void) { if (_this == NULL) { _this = (SDL_EVDEV_PrivateData*)SDL_calloc(1, sizeof(*_this)); if (_this == NULL) { return SDL_OutOfMemory(); } #if SDL_USE_LIBUDEV if (SDL_UDEV_Init() < 0) { SDL_free(_this); _this = NULL; return -1; } /* Set up the udev callback */ if (SDL_UDEV_AddCallback(SDL_EVDEV_udev_callback) < 0) { SDL_UDEV_Quit(); SDL_free(_this); _this = NULL; return -1; } /* Force a scan to build the initial device list */ SDL_UDEV_Scan(); #else /* TODO: Scan the devices manually, like a caveman */ #endif /* SDL_USE_LIBUDEV */ _this->kbd = SDL_EVDEV_kbd_init(); } _this->ref_count += 1; return 0; }
static SDL_Cursor * X11_CreateCursor(SDL_Surface * surface, int hot_x, int hot_y) { SDL_Cursor *cursor; cursor = SDL_calloc(1, sizeof(*cursor)); if (cursor) { Cursor x11_cursor = None; #if SDL_VIDEO_DRIVER_X11_XCURSOR if (SDL_X11_HAVE_XCURSOR) { x11_cursor = X11_CreateXCursorCursor(surface, hot_x, hot_y); } #endif if (x11_cursor == None) { x11_cursor = X11_CreatePixmapCursor(surface, hot_x, hot_y); } cursor->driverdata = (void*)x11_cursor; } else { SDL_OutOfMemory(); } return cursor; }
SDL_mutex *SDL_CreateMutex (void) { SDL_mutex *mutex; pthread_mutexattr_t attr; /* Allocate the structure */ mutex = (SDL_mutex *)SDL_calloc(1, sizeof(*mutex)); if ( mutex ) { pthread_mutexattr_init(&attr); #if SDL_THREAD_PTHREAD_NO_RECURSIVE_MUTEX /* No extra attributes necessary */ #else pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); #endif /* SDL_THREAD_PTHREAD_NO_RECURSIVE_MUTEX */ if ( pthread_mutex_init(&mutex->id, &attr) != 0 ) { SDL_SetError("pthread_mutex_init() failed"); SDL_free(mutex); mutex = NULL; } } else { SDL_OutOfMemory(); } return(mutex); }