OpenGL frame rate issue



  • Hi everyone,

    I am working on TI AM5728 EVM board, linux from TI SDK.

    I have an simple Qt openGL widget that just scroll a 1920*640 image on the screen, and the image is preloaded.

    When I set the widget window to 800640 which is the default of the EVM screen, the time between each frame is 16-17ms, or 60 Hz, which is good. And when I connect to a external HDMI display(the monitor is set at 19201080) and the widget stay at 800*640, the time is still 16-17ms, it is normal and reasonable so far.

    but when I increase the resolution to 1000640 and add little by little (1100640 1200640,etc) the strange thing starts.
    @1000
    640: 16-17ms.
    @1100640: 16-17ms.
    @1200
    640: 90% of the time 16-17ms, 10% of the time 33-34 ms, which is 30Hz
    @1300*640: 80% of the time 33-34ms, 20% of the time 16-17 ms.
    @1300+ *640: all 33-34 ms.

    It seems like somewhere around at resolution 1200640, there is a limit, once I cross the limit, it half the FPS.
    My goal is to run it at 1920
    640@60fps.
    Please help.

    There is the part of my code. modified from an example.

    
    MainWidget::MainWidget(QWidget *parent) :
        QOpenGLWidget(parent),
        geometries(0),
        texture(0),
        angularSpeed(0)
    {
    }
    
    MainWidget::~MainWidget()
    {
        // Make sure the context is current when deleting the texture
        // and the buffers.
        makeCurrent();
        delete texture;
        delete geometries;
        doneCurrent();
    }
    
    
    void MainWidget::timerEvent(QTimerEvent *)
    {
            movement=(movement>2)?0:movement+0.006;
          int t=timer0.elapsed()-temp;
          if((t<16)||(t>17))
           qDebug() << t << "milliseconds";
            temp=timer0.elapsed();
        update();
    }
    
    void MainWidget::initializeGL()
    {
    
        QSurfaceFormat format;
        format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
        format.setSwapInterval(1);
    
        setFormat(format);
        initializeOpenGLFunctions();
       glClearColor(1.0f,1.0f,1.0f,1.0f);
        setGeometry(0, 0, 1300, 640);
    
        initShaders();
        initTextures();
    
        glEnable(GL_DEPTH_TEST);
        glEnable(GL_CULL_FACE);
        geometries = new GeometryEngine;
       timer.start(0, this);
    
    }
    
    
    void MainWidget::initTextures()
    {
    
        // Load image
        Image = QImage(800, 640, QImage::Format_RGB888);
        Image = QImage(":/Test.bmp");
        texture = new QOpenGLTexture(Image.mirrored());
       // texture->setFormat(QOpenGLTexture::RGB8U);
    
        // Set nearest filtering mode for texture minification
        //texture->setMinificationFilter(QOpenGLTexture::Nearest);
    
        // Set bilinear filtering mode for texture magnification
        //texture->setMagnificationFilter(QOpenGLTexture::Linear);
    
        // Wrap texture coordinates by repeating
        // f.ex. texture coordinate (1.1, 1.2) is same as (0.1, 0.2)
        //texture->setWrapMode(QOpenGLTexture::Repeat);
    }
    
    void MainWidget::resizeGL(int w, int h)
    {
        // Calculate aspect ratio
        //qreal aspect = qreal(w) / qreal(h ? h : 1);
    
        // Set near plane to 3.0, far plane to 7.0, field of view 45 degrees
        const qreal zNear = 1.0, zFar = 5.5, fov = 28;
    
        // Reset projection
        //projection.setToIdentity();
    
        // Set perspective projection
        projection.perspective(fov, 1, zNear, zFar);
    }
    
    void MainWidget::paintGL()
    {
        texture->bind();
        // Calculate model view transformation
        QMatrix4x4 matrix;
        matrix.translate(movement, 0.0, -5.0);
        //matrix.rotate(rotation);
    
        // Set modelview-projection matrix
        program.setUniformValue("mvp_matrix", projection * matrix);
        // Use texture unit 0 which contains cube.png
        program.setUniformValue("texture", 0);
        // Draw cube geometry
        geometries->drawCubeGeometry(&program);
    
    }
    //your code here
    

  • Moderators

    Hi! Why do you think this issue is related to Qt? Maybe the GL hardware (or driver) just isn't capable enough.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.