[SOLVED] OpenGL + Qt using CMake



  • I have a Qt project created with a .pro file that I need to migrate it to a CMakeLists. This project uses a simple OpenGL animation to show a 3D model of a hand. I already change it to use CMake, but I encounter 2 problems. (The program compiles but it doesn't run properly)

    1. The memory consumption of the program passes from being 20-50 mb using the .pro file, to 1.3 gb using CMake (Maybe some library being loaded completely or something??)
    2. The program runs incredibly slow (like 1 frame every 5-10 seconds) in contrast with the speed from using the .pro file (approx. 3 frames per second)

    The question is, what I am doing wrong and how can I fix it?

    Here is the .pro file

    @ QT += core gui opengl

    TARGET   = RGBD_3D_Viewer
    TEMPLATE = app
    
    
    SOURCES +=  main.cpp\
                mainwindow.cpp \
                glwidget.cpp \
                glwidget_Camera.cpp \
                glwidget_Comm.cpp \
                glwidget_Extractors.cpp \
                glwidget_Rendering.cpp \
                glwidget_Video.cpp \
                glwidget_UI_Mouse.cpp \
                glwidget_OpenGL.cpp \
                mainwindow_Comm.cpp \
                mainwindow_GUI.cpp \
                model.cpp \
                cameraSet.cpp \
                model_Mesh.cpp \
                model_Skeleton.cpp \
                model_Skin.cpp \
                model_Extra_SkinningStuff.cpp \
                animation.cpp \
                animation_Transform.cpp \
                videoSequence.cpp \
                sequence.cpp \
                mainwindow_UI_Keyboard_Mouse.cpp \
                tracker.cpp \
                mainwindow_FrameNumber.cpp \
                model_Limits.cpp \
                animation_Files_CompleteSequence.cpp \
                mainwindow_MODELS_INFO.cpp \
                modelSET.cpp \
                animation_0_RotAxes_Limits.cpp \
                myMATH.cpp \
                types_Background.cpp \
                model_Extra_VOI.cpp \
                fingertipSet.cpp \
                tracker_OnIndexChange.cpp \
                tracker_wFeatureSet.cpp
    
    HEADERS  += mainwindow.h \
                glwidget.h \
                model.h \
                cameraSet.h \
                animation.h \
                videoSequence.h \
                sequence.h \
                tracker.h \
                mymath.h \
                modelSET.h \
                ui_mainwindow.h \
                featureSet.h \
                typesBackground.h \
                fingertipSet.h
    
    FORMS    += mainwindow.ui
    
    
    
    INCLUDEPATH += /usr/include/eigen3/
    
    INCLUDEPATH += /home/cvg11/projects/development/RGBD_3D_Viewer/glm
    
    
    LIBS += -L/usr/local/lib/
    LIBS += -lopencv_core
    LIBS += -lopencv_highgui
    
    
    QMAKE_CXXFLAGS += -O3
    QMAKE_CXXFLAGS += -frounding-math
    #QMAKE_CXXFLAGS += -std=c++0x@
    

    Here is the CMakeLists.txt file

    @ project(3d_viewer)
    cmake_minimum_required(VERSION 2.6 FATAL_ERROR)

    include_directories(${CMAKE_CURRENT_BINARY_DIR})
    include_directories( ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/glm)
    
    find_package( PkgConfig )
    pkg_check_modules( EIGEN3 REQUIRED eigen3 )
    include_directories( ${EIGEN3_INCLUDE_DIRS} )
    
    # Opencv required
    find_package(OpenCV COMPONENTS core highgui REQUIRED)
    include_directories(${OPENCV_INCLUDE_DIRS})
    link_directories(${OPENCV_LIBRARY_DIRS})
    add_definitions(${OPENCV_DEFINITIONS})
    
    message("\n\nFound OpenCV\n\n")
    
    
    # Qt4 required
    find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
    set(QT_USE_QTOPENGL TRUE)
    include(${QT_USE_FILE})
    add_definitions(${QT_DEFINITIONS})
    
    message("\n\nFound QT4\n\n")
    
    
    INCLUDE_DIRECTORIES(${QT_QTOPENGL_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} )
    
    #set the default path for built executables to the "bin" directory
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    #set the default path for built libraries to the "lib" directory
    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    
    
    file(GLOB VIEWER_SOURCES src/*.cpp)
    
    file(GLOB VIEWER_INCLUDES include/*.h)
    
    
    # set QT headers
    SET(QT_HEADERS
        include/mainwindow.h
        include/glwidget.h
        )
    
    #set QT forms
    SET(QT_FORMS
        ui/mainwindow.ui
    )
    
    # create moc for QT
    QT4_WRAP_CPP(QT_MOC ${QT_HEADERS})
    
    # process ui
    QT4_WRAP_UI(QT_FORMS_HEADERS ${QT_FORMS})
    
    ADD_EXECUTABLE(3d_viewer ${VIEWER_SOURCES} ${VIEWER_INCLUDES}
        ${QT_HEADERS}
        ${QT_MOC}
        ${QT_FORMS})
    
    TARGET_LINK_LIBRARIES(3d_viewer ${QT_LIBRARIES} ${OpenCV_LIBS} )
    set_property(TARGET 3d_viewer PROPERTY COMPILE_DEFINITIONS QT_SHARED)@
    

    If needed I can give the output when I compile with @make VERBOSE=1@


  • Lifetime Qt Champion

    Hi and welcome to devnet,

    From a quick look, I haven't found the equivalent of
    @
    QMAKE_CXXFLAGS += -O3
    QMAKE_CXXFLAGS += -frounding-math
    @

    in your CMakeLists.txt



  • Hi, thanks for the welcome

    I already tried the frounding-math variable, without much success, and by default cmake CXXFLAGS uses -O3 -DNDEBUG at least this is my case. Also, I already tried the -lpthreads flag with -D_REENTRANT that aparently is used by the .pro files (not explicitly)



  • After fighting for days with this problem, I found out that it was the -O3 flag. Apparently, Qt is using -O3 -O2 and it is taking the last one, and for the final linking it is using -O1. I changed the flags to use -O2 and everything started to work as fast as it should be and using a normal amount of RAM.


Log in to reply
 

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