Linux上使用opengl跨线程绘制yuv图像

本文介绍了如何在Linux上利用OpenGL和GLX进行YUV图像的跨线程绘制。首先,需要调用XInitThreads启用Xlib的多线程支持。接着,创建主窗口和子窗口,并在窗口大小改变时调整布局。每个子窗口关联一个OpenGL上下文,并启动独立的绘制线程。通过这种方式,实现了流畅且低延迟的YUV图像显示。作者还分享了遇到的问题及解决方案,提供QQ交流群和GitHub链接以供进一步讨论。
摘要由CSDN通过智能技术生成

     在 X Window上使用opengl绘制yuv图像需要用GLX, glx相关资料和接口说明网上都能找到. opengl想直接绘制yuv图像的话,需要Linux系统和显卡驱动支持较高版本的opengl, 也就是说opengl需要支持可编程渲染管线,然后写个顶点shader和片元shader。另外我的使用场景需要单独的线程调用opengl做绘制。

    下面看看具体实现:

     1. 使用Xlib之前需要调用XInitThreads(); 让Xlib支持多线程. 可以在程序刚启动时就调用,代码如下:

int main(int argc, char *argv[]) 
{
	XInitThreads();
    // 其他代码
    return 0;
 }

    QT也有相关的选项去调用XInitThreads()

    2. 为了使用多线程,先创建了一个主的X窗口和四个X子窗口:

auto main_wid = XCreateSimpleWindow(display, root, 0, 0, main_w, main_h, 0, white_pixel, black_pixel);

XSelectInput(display, main_wid, StructureNotifyMask | KeyPressMask);

CreateSubWindows(display, screen, root, main_wid, gl_vi, gl_renders);

    3. 为了方便测试,主X窗口大小变化时,四个子窗口也重新布局,监听ConfigureNotify事件:

if (xev.type == 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值