MirPixelFormat MirDisplayConnection::default_pixel_format() const { MirPixelFormat format; unsigned int nformats; mir_connection_get_available_surface_formats(connection_, &format, 1, &nformats); return format; }
static void get_pixel_formats (MirConnection *connection, MirPixelFormat *sw_pixel_format, MirPixelFormat *hw_pixel_format) { MirPixelFormat formats[mir_pixel_formats]; unsigned int n_formats, i; mir_connection_get_available_surface_formats (connection, formats, mir_pixel_formats, &n_formats); if (sw_pixel_format) { *sw_pixel_format = mir_pixel_format_invalid; for (i = 0; i < n_formats && *sw_pixel_format == mir_pixel_format_invalid; i++) { switch (formats[i]) { case mir_pixel_format_abgr_8888: case mir_pixel_format_xbgr_8888: case mir_pixel_format_argb_8888: case mir_pixel_format_xrgb_8888: case mir_pixel_format_rgb_565: *sw_pixel_format = formats[i]; break; default: break; } } } if (hw_pixel_format) { *hw_pixel_format = mir_pixel_format_invalid; for (i = 0; i < n_formats && *hw_pixel_format == mir_pixel_format_invalid; i++) { switch (formats[i]) { case mir_pixel_format_abgr_8888: case mir_pixel_format_xbgr_8888: case mir_pixel_format_argb_8888: case mir_pixel_format_xrgb_8888: case mir_pixel_format_rgb_565: *hw_pixel_format = formats[i]; break; default: break; } } } }
/* FIXME Soon to be changed upstream mir! So we can use an egl config to figure out the best pixel format! */ static MirPixelFormat findValidPixelFormat(void) { unsigned int i, validFormats, mirPixelFormats = 32; MirPixelFormat formats[mir_pixel_formats]; mir_connection_get_available_surface_formats(_glfw.mir.connection, formats, mirPixelFormats, &validFormats); for (i = 0; i < validFormats; i++) { if (formats[i] == mir_pixel_format_abgr_8888 || formats[i] == mir_pixel_format_xbgr_8888 || formats[i] == mir_pixel_format_argb_8888 || formats[i] == mir_pixel_format_xrgb_8888) { return formats[i]; } } return mir_pixel_format_invalid; }
int Mir_VideoInit(_THIS, SDL_PixelFormat *vformat) { this->hidden->connection = mir_connect_sync(NULL, __PRETTY_FUNCTION__); if (!mir_connection_is_valid(this->hidden->connection)) { SDL_SetError("Failed to connect to the Mir Server: %s", mir_connection_get_error_message(this->hidden->connection)); mir_connection_release(this->hidden->connection); return -1; } MirPixelFormat formats[mir_pixel_formats]; Uint32 n_formats; mir_connection_get_available_surface_formats (this->hidden->connection, formats, mir_pixel_formats, &n_formats); if (n_formats == 0 || formats[0] == mir_pixel_format_invalid) { SDL_SetError("No valid pixel formats found"); mir_connection_release(this->hidden->connection); return -1; } this->hidden->pixel_format = formats[0]; vformat->BitsPerPixel = MIR_BYTES_PER_PIXEL(this->hidden->pixel_format) * 8; Mir_InitQueue(this->hidden->buffer_queue); Mir_ModeListUpdate(this); mir_connection_set_display_config_change_callback(this->hidden->connection, Mir_DisplayConfigChanged, this); this->info.wm_available = 1; return 0; }