#include "drm-internal.h"
PEPPER_API pepper_drm_t *
-pepper_drm_create(pepper_object_t *compositor, const char *device)
+pepper_drm_create(pepper_object_t *compositor, const char *device, const char *renderer)
{
pepper_drm_t *drm;
wl_list_init(&drm->output_list);
- if (!pepper_drm_output_create(drm))
+ if (!pepper_drm_output_create(drm, renderer))
{
PEPPER_ERROR("Failed to connect drm output in %s\n", __FUNCTION__);
goto error;
{
drm_output_t *output, *next;
+ if (!drm)
+ return;
+
+ if (drm->renderer)
+ free(drm->renderer);
+
if (drm->udev_monitor_source)
wl_event_source_remove(drm->udev_monitor_source);
struct gbm_device *gbm_device;
+ char *renderer;
pepper_renderer_t *pixman_renderer;
pepper_renderer_t *gl_renderer;
};
};
pepper_bool_t
-pepper_drm_output_create(pepper_drm_t *drm);
+pepper_drm_output_create(pepper_drm_t *drm, const char *renderer);
void
pepper_drm_output_destroy(drm_output_t *output);
static drm_output_t *
drm_output_create(pepper_drm_t *drm, struct udev_device *device,
- drmModeRes *res, drmModeConnector *conn, const char *renderer)
+ drmModeRes *res, drmModeConnector *conn)
{
int i;
drm_output_t *output;
}
}
- if (!init_renderer(output, renderer))
+ if (!init_renderer(output, drm->renderer))
{
PEPPER_ERROR("Failed to initialize renderer in %s\n", __FUNCTION__);
goto error;
}
/* TODO: Get renderer string from somewhere else. i.e. config file. */
- output = drm_output_create(drm, device, res, conn, "pixman");
+ output = drm_output_create(drm, device, res, conn);
if (!output)
{
PEPPER_ERROR("Failed to create drm_output in %s\n", __FUNCTION__);
else if (!output && conn->connection == DRM_MODE_CONNECTED)
{
/* TODO: Get renderer string from somewhere else. */
- output = drm_output_create(drm, device, res, conn, "pixman");
+ output = drm_output_create(drm, device, res, conn);
if (!output)
{
PEPPER_ERROR("Failed to create drm_output in %s\n", __FUNCTION__);
}
pepper_bool_t
-pepper_drm_output_create(pepper_drm_t *drm)
+pepper_drm_output_create(pepper_drm_t *drm, const char *renderer)
{
struct udev_device *drm_device;
const char *filepath;
goto error;
}
+ if (renderer)
+ drm->renderer = strdup(renderer);
+
/* create gl-renderer & pixman-renderer */
drm->gbm_device = gbm_create_device(drm->drm_fd);
if (drm->gbm_device)
typedef struct pepper_drm pepper_drm_t;
PEPPER_API pepper_drm_t *
-pepper_drm_create(pepper_object_t *compositor, const char *device);
+pepper_drm_create(pepper_object_t *compositor, const char *device, const char *renderer);
PEPPER_API void
pepper_drm_destroy(pepper_drm_t *drm);
compositor = pepper_compositor_create("wayland-0");
PEPPER_ASSERT(compositor);
- drm = pepper_drm_create(compositor, "");
+ drm = pepper_drm_create(compositor, ""/*device*/, "gl"/*renderer*/);
PEPPER_ASSERT(drm);
if (!pepper_desktop_shell_init(compositor))