Qt5-based Viewer: fix build.
authorKim Kulling <kim.kulling@googlemail.com>
Fri, 21 Oct 2016 10:50:41 +0000 (12:50 +0200)
committerKim Kulling <kim.kulling@googlemail.com>
Fri, 21 Oct 2016 10:50:41 +0000 (12:50 +0200)
CMakeLists.txt
tools/assimp_qt_viewer/CMakeLists.txt
tools/assimp_qt_viewer/glview.cpp
tools/assimp_qt_viewer/mainwindow.cpp
tools/assimp_qt_viewer/mainwindow.hpp

index 77de1ee..1f0cc2b 100644 (file)
@@ -40,20 +40,20 @@ cmake_minimum_required( VERSION 2.8 )
 PROJECT( Assimp )
 
 # All supported options ###############################################
-OPTION( BUILD_SHARED_LIBS 
-  "Build package with shared libraries." 
+OPTION( BUILD_SHARED_LIBS
+  "Build package with shared libraries."
   ON
 )
 OPTION( ASSIMP_DOUBLE_PRECISION
   "Set to ON to enable double precision processing"
   OFF
 )
-OPTION( ASSIMP_OPT_BUILD_PACKAGES 
-  "Set to ON to generate CPack configuration files and packaging targets" 
+OPTION( ASSIMP_OPT_BUILD_PACKAGES
+  "Set to ON to generate CPack configuration files and packaging targets"
   OFF
 )
-OPTION( ASSIMP_ANDROID_JNIIOSYSTEM 
-  "Android JNI IOSystem support is active" 
+OPTION( ASSIMP_ANDROID_JNIIOSYSTEM
+  "Android JNI IOSystem support is active"
   OFF
 )
 OPTION( ASSIMP_NO_EXPORT
@@ -77,6 +77,7 @@ OPTION ( ASSIMP_BUILD_TESTS
   ON
 )
 IF(MSVC)
+  set (CMAKE_PREFIX_PATH "D:\\libs\\devil")
   OPTION( ASSIMP_INSTALL_PDB
     "Install MSVC debug files."
     ON
@@ -336,10 +337,10 @@ IF ( ASSIMP_BUILD_ASSIMP_TOOLS )
   # Why here? Maybe user do not want Qt viewer and have no Qt.
   # Why assimp_qt_viewer/CMakeLists.txt still contain similar check?
   # Because viewer can be build independently of Assimp.
-  FIND_PACKAGE(Qt5 QUIET)
+  FIND_PACKAGE(Qt5Widgets QUIET)
   FIND_PACKAGE(DevIL QUIET)
   FIND_PACKAGE(OpenGL QUIET)
-  IF ( Qt5_FOUND AND IL_FOUND AND OPENGL_FOUND)
+  IF ( Qt5Widgets_FOUND AND IL_FOUND AND OPENGL_FOUND)
     ADD_SUBDIRECTORY( tools/assimp_qt_viewer/ )
   ELSE()
     SET ( ASSIMP_QT_VIEWER_DEPENDENCIES "")
@@ -356,7 +357,7 @@ IF ( ASSIMP_BUILD_ASSIMP_TOOLS )
     ENDIF (NOT OPENGL_FOUND)
 
     MESSAGE (WARNING "Build of assimp_qt_viewer is disabled. Unsatisfied dendencies: ${ASSIMP_QT_VIEWER_DEPENDENCIES}")
-  ENDIF ( Qt5_FOUND AND IL_FOUND AND OPENGL_FOUND)
+  ENDIF ( Qt5Widgets_FOUND AND IL_FOUND AND OPENGL_FOUND)
 ENDIF ( ASSIMP_BUILD_ASSIMP_TOOLS )
 
 IF ( ASSIMP_BUILD_SAMPLES)
index 26f43c1..2985d6e 100644 (file)
@@ -3,12 +3,12 @@ set(PROJECT_VERSION "")
 
 cmake_minimum_required(VERSION 2.6)
 
-find_package(Qt4 REQUIRED)
+find_package(Qt5Widgets REQUIRED)
 find_package(DevIL REQUIRED)
 find_package(OpenGL REQUIRED)
 
 include_directories(
-       ${QT_INCLUDES}
+       ${Qt5Widgets_INCLUDES}
        ${Assimp_SOURCE_DIR}/include
        ${Assimp_SOURCE_DIR}/code
        ${CMAKE_CURRENT_BINARY_DIR}
@@ -21,15 +21,16 @@ link_directories(${Assimp_BINARY_DIR})
 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pedantic -Wall")
 
 set(assimp_qt_viewer_SRCS main.cpp loggerview.cpp glview.cpp mainwindow.cpp)
-qt4_wrap_ui(UISrcs mainwindow.ui)
-qt4_wrap_cpp(MOCrcs mainwindow.hpp glview.hpp)
+qt5_wrap_ui(UISrcs mainwindow.ui)
+qt5_wrap_cpp(MOCrcs mainwindow.hpp glview.hpp)
 
 add_executable(${PROJECT_NAME} ${assimp_qt_viewer_SRCS} ${UISrcs} ${MOCrcs})
 target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${IL_LIBRARIES} ${OPENGL_LIBRARIES} assimp)
 
+qt5_use_modules(${PROJECT_NAME} Widgets OpenGL)
 if(WIN32) # Check if we are on Windows
        if(MSVC) # Check if we are using the Visual Studio compiler
-               set_target_properties(TestProject PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
+               #set_target_properties(TestProject PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
        elseif(CMAKE_COMPILER_IS_GNUCXX)
                # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mwindows") # Not tested
        else()
index a51e8ab..7203f8a 100644 (file)
@@ -9,7 +9,7 @@
 #include <GL/glu.h>
 
 // Header files, DevIL.
-#include <IL/il.h>
+#include <il.h>
 
 // Header files, Assimp.
 #include <assimp/DefaultLogger.hpp>
@@ -56,15 +56,15 @@ void CGLView::SHelper_Camera::SetDefault()
 
 void CGLView::Material_Apply(const aiMaterial* pMaterial)
 {
-GLfloat tcol[4];
-aiColor4D taicol;
-unsigned int max;
-int ret1, ret2;
-int texture_index = 0;
-aiString texture_path;
+    GLfloat tcol[4];
+    aiColor4D taicol;
+    unsigned int max;
+    int ret1, ret2;
+    int texture_index = 0;
+    aiString texture_path;
 
-auto set_float4 = [](float f[4], float a, float b, float c, float d) { f[0] = a, f[1] = b, f[2] = c, f[3] = d; };
-auto color4_to_float4 = [](const aiColor4D *c, float f[4]) { f[0] = c->r, f[1] = c->g, f[2] = c->b, f[3] = c->a; };
+    auto set_float4 = [](float f[4], float a, float b, float c, float d) { f[0] = a, f[1] = b, f[2] = c, f[3] = d; };
+    auto color4_to_float4 = [](const aiColor4D *c, float f[4]) { f[0] = c->r, f[1] = c->g, f[2] = c->b, f[3] = c->a; };
 
        ///TODO: cache materials
        // Disable color material because glMaterial is used.
@@ -158,124 +158,127 @@ std::list<aiMatrix4x4> mat_list;
                } while(node_cur != nullptr);
        }
 
-       // multiplicate all matrices in reverse order
-       for(std::list<aiMatrix4x4>::reverse_iterator rit = mat_list.rbegin(); rit != mat_list.rend(); rit++) pOutMatrix = pOutMatrix * (*rit);
+       // multiply all matrices in reverse order
+    for ( std::list<aiMatrix4x4>::reverse_iterator rit = mat_list.rbegin(); rit != mat_list.rend(); rit++)
+    {
+        pOutMatrix = pOutMatrix * (*rit);
+    }
 }
 
 void CGLView::ImportTextures(const QString& pScenePath)
 {
-auto LoadTexture = [&](const QString& pFileName) -> bool ///TODO: IME texture mode, operation.
-{
-ILboolean success;
-GLuint id_ogl_texture;// OpenGL texture ID.
-
-       if(!pFileName.startsWith(AI_EMBEDDED_TEXNAME_PREFIX))
-       {
-               ILuint id_image;// DevIL image ID.
-               QString basepath = pScenePath.left(pScenePath.lastIndexOf('/') + 1);// path with '/' at the end.
-               QString fileloc = (basepath + pFileName);
-
-               fileloc.replace('\\', "/");
-               ilGenImages(1, &id_image);// Generate DevIL image ID.
-               ilBindImage(id_image);
-               success = ilLoadImage(fileloc.toLocal8Bit());
-               if(!success)
-               {
-                       LogError(QString("Couldn't load Image: %1").arg(fileloc));
-
-                       return false;
-               }
-
-               // Convert every colour component into unsigned byte. If your image contains alpha channel you can replace IL_RGB with IL_RGBA.
-               success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
-               if(!success)
-               {
-                       LogError("Couldn't convert image.");
-
-                       return false;
-               }
-
-               glGenTextures(1, &id_ogl_texture);// Texture ID generation.
-               mTexture_IDMap[pFileName] = id_ogl_texture;// save texture ID for filename in map
-               glBindTexture(GL_TEXTURE_2D, id_ogl_texture);// Binding of texture ID.
-               // Redefine standard texture values
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// We will use linear interpolation for magnification filter.
-               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);// We will use linear interpolation for minifying filter.
-               glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 0,
-                                               ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());// Texture specification.
-
-               //Cleanup
-               ilDeleteImages(1, &id_image);// Because we have already copied image data into texture data we can release memory used by image.
-       }
-       else
-       {
-               struct SPixel_Description
-               {
-                       const char* FormatHint;
-                       const GLint Image_InternalFormat;
-                       const GLint Pixel_Format;
-               };
-
-               constexpr SPixel_Description Pixel_Description[] = {
-                       {"rgba8880", GL_RGB, GL_RGB},
-                       {"rgba8888", GL_RGBA, GL_RGBA}
-               };
-
-               constexpr size_t Pixel_Description_Count = sizeof(Pixel_Description) / sizeof(SPixel_Description);
-
-               size_t idx_description;
-               // Get texture index.
-               bool ok;
-               size_t idx_texture = pFileName.right(strlen(AI_EMBEDDED_TEXNAME_PREFIX)).toULong(&ok);
-
-               if(!ok)
-               {
-                       LogError("Can not get index of the embedded texture from path in material.");
-
-                       return false;
-               }
-
-               // Create alias for conveniance.
-               const aiTexture& als = *mScene->mTextures[idx_texture];
-
-               if(als.mHeight == 0)// Compressed texture.
-               {
-                       LogError("IME: compressed embedded textures are not implemented.");
-               }
-               else
-               {
-                       ok = false;
-                       for(size_t idx = 0; idx < Pixel_Description_Count; idx++)
-                       {
-                               if(als.CheckFormat(Pixel_Description[idx].FormatHint))
-                               {
-                                       idx_description = idx;
-                                       ok = true;
-                                       break;
-                               }
-                       }
-
-                       if(!ok)
-                       {
-                               LogError(QString("Unsupported format hint for embedded texture: [%1]").arg(als.achFormatHint));
-
-                               return false;
-                       }
-
-                       glGenTextures(1, &id_ogl_texture);// Texture ID generation.
-                       mTexture_IDMap[pFileName] = id_ogl_texture;// save texture ID for filename in map
-                       glBindTexture(GL_TEXTURE_2D, id_ogl_texture);// Binding of texture ID.
-                       // Redefine standard texture values
-                       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// We will use linear interpolation for magnification filter.
-                       glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);// We will use linear interpolation for minifying filter.
-                       // Texture specification.
-                       glTexImage2D(GL_TEXTURE_2D, 0, Pixel_Description[idx_description].Image_InternalFormat, als.mWidth, als.mHeight, 0,
-                                                       Pixel_Description[idx_description].Pixel_Format, GL_UNSIGNED_BYTE, (uint8_t*)als.pcData);
-               }// if(als.mHeight == 0) else
-       }// if(!filename.startsWith(AI_EMBEDDED_TEXNAME_PREFIX)) else
-
-       return true;
-};// auto LoadTexture = [&](const aiString& pPath)
+    auto LoadTexture = [&](const QString& pFileName) -> bool ///TODO: IME texture mode, operation.
+    {
+        ILboolean success;
+        GLuint id_ogl_texture;// OpenGL texture ID.
+
+           if(!pFileName.startsWith(AI_EMBEDDED_TEXNAME_PREFIX))
+           {
+                   ILuint id_image;// DevIL image ID.
+                   QString basepath = pScenePath.left(pScenePath.lastIndexOf('/') + 1);// path with '/' at the end.
+                   QString fileloc = (basepath + pFileName);
+
+                   fileloc.replace('\\', "/");
+                   ilGenImages(1, &id_image);// Generate DevIL image ID.
+                   ilBindImage(id_image);
+                   success = ilLoadImage(fileloc.toLocal8Bit());
+                   if(!success)
+                   {
+                           LogError(QString("Couldn't load Image: %1").arg(fileloc));
+
+                           return false;
+                   }
+
+                   // Convert every colour component into unsigned byte. If your image contains alpha channel you can replace IL_RGB with IL_RGBA.
+                   success = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
+                   if(!success)
+                   {
+                           LogError("Couldn't convert image.");
+
+                           return false;
+                   }
+
+                   glGenTextures(1, &id_ogl_texture);// Texture ID generation.
+                   mTexture_IDMap[pFileName] = id_ogl_texture;// save texture ID for filename in map
+                   glBindTexture(GL_TEXTURE_2D, id_ogl_texture);// Binding of texture ID.
+                   // Redefine standard texture values
+                   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// We will use linear interpolation for magnification filter.
+                   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);// We will use linear interpolation for minifying filter.
+                   glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 0,
+                                                   ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE, ilGetData());// Texture specification.
+
+                   //Cleanup
+                   ilDeleteImages(1, &id_image);// Because we have already copied image data into texture data we can release memory used by image.
+           }
+           else
+           {
+                   struct SPixel_Description
+                   {
+                           const char* FormatHint;
+                           const GLint Image_InternalFormat;
+                           const GLint Pixel_Format;
+                   };
+
+                   constexpr SPixel_Description Pixel_Description[] = {
+                           {"rgba8880", GL_RGB, GL_RGB},
+                           {"rgba8888", GL_RGBA, GL_RGBA}
+                   };
+
+                   constexpr size_t Pixel_Description_Count = sizeof(Pixel_Description) / sizeof(SPixel_Description);
+
+                   size_t idx_description;
+                   // Get texture index.
+                   bool ok;
+                   size_t idx_texture = pFileName.right(strlen(AI_EMBEDDED_TEXNAME_PREFIX)).toULong(&ok);
+
+                   if(!ok)
+                   {
+                           LogError("Can not get index of the embedded texture from path in material.");
+
+                           return false;
+                   }
+
+                   // Create alias for conveniance.
+                   const aiTexture& als = *mScene->mTextures[idx_texture];
+
+                   if(als.mHeight == 0)// Compressed texture.
+                   {
+                           LogError("IME: compressed embedded textures are not implemented.");
+                   }
+                   else
+                   {
+                           ok = false;
+                           for(size_t idx = 0; idx < Pixel_Description_Count; idx++)
+                           {
+                                   if(als.CheckFormat(Pixel_Description[idx].FormatHint))
+                                   {
+                                           idx_description = idx;
+                                           ok = true;
+                                           break;
+                                   }
+                           }
+
+                           if(!ok)
+                           {
+                                   LogError(QString("Unsupported format hint for embedded texture: [%1]").arg(als.achFormatHint));
+
+                                   return false;
+                           }
+
+                           glGenTextures(1, &id_ogl_texture);// Texture ID generation.
+                           mTexture_IDMap[pFileName] = id_ogl_texture;// save texture ID for filename in map
+                           glBindTexture(GL_TEXTURE_2D, id_ogl_texture);// Binding of texture ID.
+                           // Redefine standard texture values
+                           glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// We will use linear interpolation for magnification filter.
+                           glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);// We will use linear interpolation for minifying filter.
+                           // Texture specification.
+                           glTexImage2D(GL_TEXTURE_2D, 0, Pixel_Description[idx_description].Image_InternalFormat, als.mWidth, als.mHeight, 0,
+                                                           Pixel_Description[idx_description].Pixel_Format, GL_UNSIGNED_BYTE, (uint8_t*)als.pcData);
+                   }// if(als.mHeight == 0) else
+           }// if(!filename.startsWith(AI_EMBEDDED_TEXNAME_PREFIX)) else
+
+           return true;
+    };// auto LoadTexture = [&](const aiString& pPath)
 
        if(mScene == nullptr)
        {
index ea4a6ef..cb4c4a6 100644 (file)
@@ -325,7 +325,7 @@ bool selected = ui->lstLight->isItemSelected(ui->lstLight->currentItem());
        mGLView->updateGL();
 }
 
-void MainWindow::on_lstCamera_clicked(__unused const QModelIndex &index)
+void MainWindow::on_lstCamera_clicked( const QModelIndex &)
 {
        mGLView->Camera_Set(ui->lstLight->currentRow());
        mGLView->updateGL();
index f51e023..940840a 100644 (file)
@@ -6,7 +6,7 @@
 #pragma once
 
 // Header files, Qt.
-#include <QMainWindow>
+#include <QtWidgets>
 
 // Header files, project.
 #include "glview.hpp"