OUT_FENCE_PTR配合原子提交刷新buffer完整代码
时间: 2023-08-03 14:06:43 浏览: 123
当使用OUT_FENCE_PTR与原子提交刷新缓冲区时,以下是一个示例代码:
```c
#include <xf86drm.h>
#include <xf86drmMode.h>
int main() {
int drm_fd;
int crtc_id;
int buffer_id;
drmModeAtomicReqPtr atomic_req;
drmModeCrtcPtr saved_crtc;
drmModeModeInfoPtr mode;
// 打开DRM设备
drm_fd = drmOpen("drm", NULL);
// 获取CRTC ID
drmModeResPtr resources = drmModeGetResources(drm_fd);
crtc_id = resources->crtcs[0];
// 获取显示模式
drmModeConnectorPtr connector = drmModeGetConnector(drm_fd, resources->connectors[0]);
mode = &connector->modes[0];
// 创建原子请求
atomic_req = drmModeAtomicAlloc();
// 创建缓冲区
// ...
// 添加设置模式的请求
drmModeAtomicSetCrtc(atomic_req, crtc_id, buffer_id, 0, 0,
&connector->connector_id, 1, mode);
// 提交原子请求
int ret = drmModeAtomicCommit(drm_fd, atomic_req,
DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT,
/* user_data */ NULL);
if (ret < 0) {
// 处理提交失败的情况
// ...
}
// 等待垂直同步信号
drmEventContext evctx;
memset(&evctx, 0, sizeof(evctx));
evctx.version = DRM_EVENT_CONTEXT_VERSION;
evctx.page_flip_handler = /* page
阅读全文