我使用qt的qopenglwidget进行绘图,将ffmpeg解码的数据通过信号槽发送给它,但渲染速度略慢,求解答



  •     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    
        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, id_y);
        glTexImage2D ( GL_TEXTURE_2D, 0, GL_RED, pixel_w, pixel_h, 0, GL_RED, GL_UNSIGNED_BYTE, plane[0]);
        m_program->setUniformValue(textureUniformY, 0);
    
        glActiveTexture(GL_TEXTURE1);
        glBindTexture(GL_TEXTURE_2D, id_u);
        glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, pixel_w/2, pixel_h/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, plane[1]);
        m_program->setUniformValue(textureUniformU, 1);
    
        glActiveTexture(GL_TEXTURE2);
        glBindTexture(GL_TEXTURE_2D, id_v);
        glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, pixel_w/2, pixel_h/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, plane[2]);
        m_program->setUniformValue(textureUniformV, 2);
    
        glDisable(GL_DEPTH_TEST);//should be put before glDrawArrays
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    
        glDisable(GL_DEPTH_TEST);
    

    这是paintGL()里的代码,实测我的widget渲染速度慢,SDL渲染速度正常。我知道SDL是先UpdateTexture(data),然后RENDER。想知道OPENGL那些函数做如下操作:将数据发过来提前绘制好,等到需要显示的时候,show一下就行。主要是想提高渲染速度



  • @flowerlove

     glTexImage2D ( GL_TEXTURE_2D, 0, GL_LUMINANCE, pixel_w/2, pixel_h/2, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, plane[2]);
    
    

    这个是耗时操作。
    要使用glTexSubImage2D来替换,并且用算法来优化调用,这样就好了。



  • @jiangcaiyang 0_1453691368011_QQ图片20160125110838.png
    已经改成sub,但速度仍然慢,注掉显示部分(opengl绘图),fps 29,视频文件的fps为29.加上显示之后fps只有23,单个窗口就已经降低了6帧。多个窗口不能看。



  • 你可能需要这么做,将视频数据渲染到FBO,然后多个窗口共享。Qt有很方便的QOpenGLFramebufferObject可以使用,具体还是看看Qt的帮助文档吧。



  • @jiangcaiyang 嗯,谢了。不过在这之前,有一个热心的群友告诉我,可以用PBO,或者新版本的函数glTexStorage2D,不知道您对此怎么看。



  • @jiangcaiyang 我的目标并不是多个窗口同时渲染一个文件。我做的是视频播放器,只不过是我测试的时候,打开了同一个而已。你说的这种方法,仅是为了多个窗口共享吗? 真实情况是有好多不同的视频需要播放



  • @flowerlove 那可能借助成熟的框架来做了。比如说听说QtAV挺好的,我还没有尝试过。
    https://github.com/wang-bin/QtAV


Log in to reply
 

走马观花

最近的回复

  • H
    Toou 2D 拿来即用,为简单而生。

    简称T2D,是一款采用自身模块规范编写的轻量级UI框架,遵循Qt书写与组织形式门槛极低无需深入学习简单易用可拿来即用,丰富的控件模块适合界面的快速开发,让程序人员拥有更多的精力来实现业务逻辑与算法。

    统一交互规范,丰富的Ui控件几十种常用控件放弃了Qt Controls 及 Controls 2 来提高性能。

    完善的主题系统,业务逻辑与界面主题设计分离,可通过简单修改变量自定义主题皮肤。灵活的多主题皮肤绑定机制、在不需要重启App即实现一键换肤

    ini皮肤配置规则与每一个控件融合。可在应用内配置也可在应用外动态扩展配置。

    框架自动化安装支持动态库、静态库多模式编译。使用方便更安全更自由。

    提供丰富Demo、全面的帮助文档,Api查阅快速方便。项目必备开源框架!

    已经集成最新版 Font Awesome 4.7

    开源地址:https://github.com/ShowFL/Toou-2D

    read more
  • 刚刚毕业,工作用QT开发,以后有问题多多请教各位前辈😬 抱拳了。

    read more

关注我们

微博
QQ群