Compare commits

...

1 Commits

Author SHA1 Message Date
Shaun Reed 6f7b1396d2 Test packaging 2023-01-15 09:50:57 -05:00
8 changed files with 153 additions and 56 deletions

View File

@ -13,11 +13,11 @@ jobs:
os: [ubuntu-latest, windows-latest, macos-latest] os: [ubuntu-latest, windows-latest, macos-latest]
include: include:
- os: ubuntu-latest - os: ubuntu-latest
cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.3.1/gcc_64/" cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.5.0/gcc_64/"
- os: windows-latest - os: windows-latest
cmake: -DCMAKE_PREFIX_PATH="D:/a/qtk/qtk/Qt/6.3.1/mingw81_64/" cmake: -DCMAKE_PREFIX_PATH="D:/a/qtk/qtk/Qt/6.5.0/mingw81_64/"
- os: macos-latest - os: macos-latest
cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.3.1/gcc_64/" cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.5.0/gcc_64/"
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
@ -26,19 +26,47 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v2 uses: jurplel/install-qt-action@v2
with: with:
version: '6.3.1' version: '6.5.0'
- name: Chocolatey Action - name: Chocolatey Action
if: matrix.os == 'windows-latest' if: matrix.os == 'windows-latest'
uses: crazy-max/ghaction-chocolatey@v2.0.0 uses: crazy-max/ghaction-chocolatey@v2
with: with:
args: install pkgconfiglite --checksum e87b5ea3c9142256af60f2d5b917aa63b571e6a0 --checksum-type sha1 args: install pkgconfiglite
- name: Build Qtk - name: Build Qtk
shell: bash shell: bash
run: | run: |
cmake -S . -B build/ ${{ matrix.cmake }} -DQTK_UPDATE_SUBMODULES=ON && cmake --build build/ \ cmake -B build/ ${{ matrix.cmake }} -DQTK_UPDATE_SUBMODULES=ON
--target qtk-main cmake --build build/
- name: Package Qtk
shell: bash
run: |
cmake --build build/ --target package
- name: Package Qtk Sources
if: matrix.os != 'macos-latest'
shell: bash
run: |
cmake --build build/ --target package_source
- uses: actions/upload-artifact@v3
with:
name: qtk-packages-${{ matrix.os }}
path: |
build/packages/
!build/packages/_CPack_Packages/*
- name: Install Qtk
shell: bash
run: |
cmake --install build/
- uses: actions/upload-artifact@v3
with:
name: qtk-${{ matrix.os }}
path: install/*
Build-Qtk-Assimp-Targets: Build-Qtk-Assimp-Targets:
strategy: strategy:
@ -47,9 +75,9 @@ jobs:
os: [ubuntu-latest, macos-latest] os: [ubuntu-latest, macos-latest]
include: include:
- os: ubuntu-latest - os: ubuntu-latest
cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.3.1/gcc_64/" cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.5.0/gcc_64/"
- os: macos-latest - os: macos-latest
cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.3.1/gcc_64/" -DASSIMP_NEW_INTERFACE=ON cmake: -DCMAKE_PREFIX_PATH="/home/runner/work/qtk/Qt/6.5.0/gcc_64/" -DASSIMP_NEW_INTERFACE=ON
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
@ -58,7 +86,7 @@ jobs:
- name: Install Qt - name: Install Qt
uses: jurplel/install-qt-action@v2 uses: jurplel/install-qt-action@v2
with: with:
version: '6.3.1' version: '6.5.0'
- name: Install Assimp MacOS - name: Install Assimp MacOS
if: matrix.os == 'macos-latest' if: matrix.os == 'macos-latest'
@ -75,5 +103,49 @@ jobs:
- name: Build Qtk - name: Build Qtk
shell: bash shell: bash
run: | run: |
cmake -S . -B build/ ${{ matrix.cmake }} && cmake --build build/ \ cmake -B build/ ${{ matrix.cmake }} && cmake --build build/ --target qtk-main
--target qtk-main
# TODO: Enable with tag only when done testing
# Release-Qtk:
# needs: Build-Qtk
# if: "always()"
# strategy:
# fail-fast: false
# matrix:
# os: [ubuntu-latest, windows-latest, macos-latest]
# include:
# - os: ubuntu-latest
# cqt: CQtDeployer.deb
# url: https://github.com/QuasarApp/CQtDeployer/releases/download/v1.6.2277/CQtDeployer_1.6.2277.ecc6eed_Linux_x86_64.deb
# qmake: /home/runner/work/qtk/Qt/6.5.0/gcc_64/bin/qmake
# - os: windows-latest
# cqt: CQtDeployer.exe
# url: https://github.com/QuasarApp/CQtDeployer/releases/download/v1.6.2277/CQtDeployer_1.6.2277.ecc6eed_Windows_AMD64.exe
# qmake: D:/a/qtk/qtk/Qt/6.5.0/mingw81_64/bin/qmake
# - os: macos-latest
# cqt: CQtDeployer.run
# url: https://github.com/QuasarApp/CQtDeployer/releases/download/v1.6.2277/CQtDeployer_1.6.2277.ecc6eed_Linux_x86_64.run
# qmake: /home/runner/work/qtk/Qt/6.5.0/gcc_64/bin/qmake
# runs-on: ${{ matrix.os }}
#
# steps:
# - uses: actions/download-artifact@v3
# with:
# name: qtk-${{ matrix.os }}
#
# - name: Install Qt
# uses: jurplel/install-qt-action@v2
# with:
# version: '6.5.0'
#
# - name: Package Qtk
# shell: bash
# run: |
# wget -O ${{ matrix.cqt }} ${{ matrix.url }}
# apt install -y ./${{ matrix.cqt }}
# cqtdeployer -bin qtk-main -qmake ${{ matrix.qmake }}
#
# - uses: actions/upload-artifact@v3
# with:
# name: qtk-installer-${{ matrix.os }}
# path: DistributionKit/

View File

@ -55,7 +55,7 @@ option(
OFF OFF
) )
set(QT_DIR "$ENV{HOME}/Code/Clones/Qt/" CACHE PATH "Path to Qt6") set(QT_DIR "$ENV{HOME}/Qt/" CACHE PATH "Path to Qt6")
# Qt Designer will look in different locations if WIN / Unix. # Qt Designer will look in different locations if WIN / Unix.
# These paths are for using Qt Designer integrated within Qt Creator. # These paths are for using Qt Designer integrated within Qt Creator.
@ -70,7 +70,7 @@ else()
endif() endif()
# This should be set to your Qt6 installation directory. # This should be set to your Qt6 installation directory.
set(QT_INSTALL_DIR "${QT_DIR}/6.3.1/gcc_64/" CACHE PATH "Path to Qt6 install") set(QT_INSTALL_DIR "${QT_DIR}/6.5.0/gcc_64" CACHE PATH "Path to Qt6 install")
# Point CMAKE_PREFIX_PATH to Qt6 install directory # Point CMAKE_PREFIX_PATH to Qt6 install directory
# If Qtk is built within Qt Creator this is not required. # If Qtk is built within Qt Creator this is not required.
list(APPEND CMAKE_PREFIX_PATH "${QT_INSTALL_DIR}") list(APPEND CMAKE_PREFIX_PATH "${QT_INSTALL_DIR}")
@ -98,6 +98,7 @@ endforeach()
################################################################################ ################################################################################
# Find Qt # Find Qt
find_package(Qt6 COMPONENTS Core UiPlugin OpenGLWidgets) find_package(Qt6 COMPONENTS Core UiPlugin OpenGLWidgets)
qt_standard_project_setup()
if(NOT Qt6_FOUND) if(NOT Qt6_FOUND)
message( message(
SEND_ERROR "[Qtk] Error: Unable to find Qt6 at CMAKE_PREFIX_PATH: " SEND_ERROR "[Qtk] Error: Unable to find Qt6 at CMAKE_PREFIX_PATH: "
@ -127,37 +128,3 @@ endif()
# Qtk # Qtk
################################################################################ ################################################################################
add_subdirectory(src) add_subdirectory(src)
if(WIN32)
get_target_property(_qt6_qmake_location Qt6::qmake IMPORTED_LOCATION)
execute_process(
COMMAND "${_qt6_qmake_location}" -query QT_INSTALL_PREFIX
RESULT_VARIABLE return_code
OUTPUT_VARIABLE qt6_install_prefix
OUTPUT_STRIP_TRAILING_WHITESPACE
)
file(TO_NATIVE_PATH "${qt6_install_prefix}/bin" qt6_install_prefix)
if(TARGET Qt6::windeployqt)
add_custom_command(
TARGET qtk-main
POST_BUILD
COMMAND set PATH=%PATH%$<SEMICOLON>${qt6_install_prefix}
COMMAND Qt6::windeployqt --dir "${CMAKE_BINARY_DIR}/windeployqt" "$<TARGET_FILE_DIR:qtk-main>/$<TARGET_FILE_NAME:qtk-main>"
)
install(DIRECTORY "${CMAKE_BINARY_DIR}/windeployqt/" DESTINATION bin)
endif()
if(MSVC AND TARGET Qt6::qmake)
set(VSUSER_FILE "${CMAKE_CURRENT_BINARY_DIR}/qtk-main.vcxproj.user")
file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/extern/assimp/assimp/bin" assimp_bin)
file(WRITE ${VSUSER_FILE} "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
file(APPEND ${VSUSER_FILE} "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n")
file(APPEND ${VSUSER_FILE} " <PropertyGroup>\n")
file(APPEND ${VSUSER_FILE} " <LocalDebuggerEnvironment>Path=$(SolutionDir)\\lib\\$(Configuration);${qt6_install_prefix};${assimp_bin};$(Path)\n")
file(APPEND ${VSUSER_FILE} "$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>\n")
file(APPEND ${VSUSER_FILE} " <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n")
file(APPEND ${VSUSER_FILE} " </PropertyGroup>\n")
file(APPEND ${VSUSER_FILE} "</Project>\n")
endif()
endif()

View File

@ -19,6 +19,7 @@ Key features that are planned:
* Save / load for scene data. The current inheritance model is temporary. * Save / load for scene data. The current inheritance model is temporary.
* Basic text editor for quickly modifying shaders attached to objects. * Basic text editor for quickly modifying shaders attached to objects.
* Shader / object properties panel to modify related settings. * Shader / object properties panel to modify related settings.
* Reduce size of application resources and git references.
The Qtk desktop application provides a model loader using [Assimp](https://assimp.org/) within a Qt widget application. The Qtk desktop application provides a model loader using [Assimp](https://assimp.org/) within a Qt widget application.
@ -101,6 +102,13 @@ If you see a small triangle floating by a model it represents the light source
that is being used for the shader rendering the model. These appear on models that is being used for the shader rendering the model. These appear on models
using phong, specular, and diffuse lighting techniques. using phong, specular, and diffuse lighting techniques.
Object names can be double-clicked in the tree view panel for quick camera
navigation. All panels and toolbars are dockable widgets that can be popped out
and reorganized as needed. Panels can be stacked to create a docked widget with
tabs. The central widget that provides the camera view into the scene cannot be
detached from the main window in this way. See the `View` menu to enable debug
console widgets for open scenes or reopen previously closed panels.
![](resources/screenshot.png) ![](resources/screenshot.png)
Spartan with no normals - Spartan with no normals -

Binary file not shown.

Before

Width:  |  Height:  |  Size: 406 KiB

After

Width:  |  Height:  |  Size: 316 KiB

View File

@ -41,4 +41,11 @@ set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
set(CPACK_PACKAGE_VENDOR "Shaun Reed") set(CPACK_PACKAGE_VENDOR "Shaun Reed")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Qt OpenGL 3D graphics library.") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Qt OpenGL 3D graphics library.")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/shaunrd0/qtk") set(CPACK_PACKAGE_HOMEPAGE_URL "https://github.com/shaunrd0/qtk")
set(CPACK_SOURCE_IGNORE_FILES build;install;\.git;\.github;\.idea)
set(CPACK_PACKAGE_DIRECTORY packages/)
if(WIN32)
set(CPACK_SOURCE_GENERATOR ZIP)
else()
set(CPACK_SOURCE_GENERATOR TGZ)
endif()
include(CPack) include(CPack)

View File

@ -11,13 +11,16 @@
# Create a library of widgets used to build Qtk GUI # Create a library of widgets used to build Qtk GUI
set( set(
QTK_PLUGIN_LIBRARY_SOURCES QTK_PLUGIN_LIBRARY_SOURCES
qtkwidget.cpp qtkwidget.h qtkwidget.cpp
debugconsole.cpp debugconsole.ui debugconsole.cpp debugconsole.ui
toolbox.cpp toolbox.ui toolbox.cpp toolbox.ui
treeview.cpp treeview.ui treeview.cpp treeview.ui
qtkmainwindow.cpp qtkmainwindow.ui
) )
set( set(
QTK_PLUGIN_LIBRARY_HEADERS QTK_PLUGIN_LIBRARY_HEADERS
qtkmainwindow.h
qtkwidget.h
debugconsole.h debugconsole.h
toolbox.h toolbox.h
treeview.h treeview.h
@ -72,12 +75,9 @@ install(
set( set(
QTK_APP_SOURCES QTK_APP_SOURCES
examplescene.cpp examplescene.h examplescene.cpp examplescene.h
qtkmainwindow.cpp qtkmainwindow.ui
qtkmainwindow.h
main.cpp main.cpp
) )
# TODO: Qtk library should not depend on these resources. (qtkapi.h)
# Or should some resources be installed somewhere?
qt6_add_resources(QTK_APP_SOURCES "${QTK_RESOURCES}/resources.qrc") qt6_add_resources(QTK_APP_SOURCES "${QTK_RESOURCES}/resources.qrc")
configure_file( configure_file(
resources.h.in resources.h.in
@ -102,3 +102,44 @@ install(
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION bin/lib LIBRARY DESTINATION bin/lib
) )
qt_generate_deploy_app_script(
TARGET qtk-main
FILENAME_VARIABLE deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
if(WIN32)
get_target_property(_qt6_qmake_location Qt6::qmake IMPORTED_LOCATION)
execute_process(
COMMAND "${_qt6_qmake_location}" -query QT_INSTALL_PREFIX
RESULT_VARIABLE return_code
OUTPUT_VARIABLE qt6_install_prefix
OUTPUT_STRIP_TRAILING_WHITESPACE
)
file(TO_NATIVE_PATH "${qt6_install_prefix}/bin" qt6_install_prefix)
if(TARGET Qt6::windeployqt)
add_custom_command(
TARGET qtk-main
POST_BUILD
COMMAND set PATH=%PATH%$<SEMICOLON>${qt6_install_prefix}
COMMAND Qt6::windeployqt --dir "${CMAKE_BINARY_DIR}/windeployqt" "$<TARGET_FILE_DIR:qtk-main>/$<TARGET_FILE_NAME:qtk-main>"
)
install(DIRECTORY "${CMAKE_BINARY_DIR}/windeployqt/" DESTINATION bin)
endif()
if(MSVC AND TARGET Qt6::qmake)
set(VSUSER_FILE "${CMAKE_CURRENT_BINARY_DIR}/qtk-main.vcxproj.user")
file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/extern/assimp/assimp/bin" assimp_bin)
file(WRITE ${VSUSER_FILE} "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
file(APPEND ${VSUSER_FILE} "<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n")
file(APPEND ${VSUSER_FILE} " <PropertyGroup>\n")
file(APPEND ${VSUSER_FILE} " <LocalDebuggerEnvironment>Path=$(SolutionDir)\\lib\\$(Configuration);${qt6_install_prefix};${assimp_bin};$(Path)\n")
file(APPEND ${VSUSER_FILE} "$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>\n")
file(APPEND ${VSUSER_FILE} " <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\n")
file(APPEND ${VSUSER_FILE} " </PropertyGroup>\n")
file(APPEND ${VSUSER_FILE} "</Project>\n")
endif()
endif()

View File

@ -6,8 +6,8 @@
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## ## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
##############################################################################*/ ##############################################################################*/
#include "examplescene.h"
#include "qtkmainwindow.h" #include "qtkmainwindow.h"
#include "examplescene.h"
#include "ui_qtkmainwindow.h" #include "ui_qtkmainwindow.h"
MainWindow * MainWindow::mainWindow_ = Q_NULLPTR; MainWindow * MainWindow::mainWindow_ = Q_NULLPTR;

View File

@ -27,7 +27,9 @@
* This cannot be defined within any namespace, but can be called by ctors. * This cannot be defined within any namespace, but can be called by ctors.
* See object.h for example. * See object.h for example.
*/ */
inline void initResources() { Q_INIT_RESOURCE(resources); } inline void initResources() {
Q_INIT_RESOURCE(resources);
}
namespace Qtk { namespace Qtk {
/** /**