linux graphic drm

linux graphic drm

DRM设备节点

card0 controlD64 renderD128

打开设备

int fd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC);

检查能力

drmIoctl(fd, DRM_IOCTL_GET_CAP, &cap)
drmGetCap(fd, DRM_CAP_DUMB_BUFFER, &has_dumb)
#DRM_CAP_ASYNC_PAGE_FLIP
#DRM_CAP_DUMB_BUFFER
#DRM_CAP_CURSOR_WIDTH
#DRM_CAP_CURSOR_HEIGHT
#DRM_CAP_TIMESTAMP_MONOTONIC

检索

drmModeResPtr drmModeGetResources(int fd)
drmModeGetResources(fd);

获取连接

drmModeConnector *conn = drmModeGetConnector(fd, res->connectors[i]);

Encoder结构

drmModeEncoder *enc = drmModeGetEncoder(fd, conn->encoder_id);
drmIoctl(fd, DRM_IOCTL_MODE_GETENCODER, &enc)

CRTC结构

struct crtc {
    drmModeCrtc *crtc;
    drmModeObjectProperties *props;
    drmModePropertyRes **props_info;
    drmModeModeInfo *mode;
};
typedef struct _drmModeCrtc {
    uint32_t crtc_id;
    uint32_t buffer_id; /**< FB id to connect to 0 = disconnect */

    uint32_t x, y; /**< Position on the framebuffer */
    uint32_t width, height;
    int mode_valid;
    drmModeModeInfo mode;

    int gamma_size; /**< Number of gamma stops */

} drmModeCrtc, *drmModeCrtcPtr;
drmIoctl(fd, DRM_IOCTL_MODE_GETCRTC, &crtc)
DRM_IOCTL(fd, DRM_IOCTL_MODE_SETCRTC, &crtc);

FrameBuffer

drmIoctl(fd, DRM_IOCTL_MODE_CREATE_DUMB, &creq);
drmModeAddFB(fd, dev->width, dev->height, 24, 32, dev->stride,dev->handle, &dev->fb);
drmIoctl(fd, DRM_IOCTL_MODE_MAP_DUMB, &mreq);
dev->map = mmap(0, dev->size, PROT_READ | PROT_WRITE, MAP_SHARED,fd, mreq.offset);

rgba

rgb565 rgba8888 rgb888 xrgb8888
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值