Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
SET(CMAKE_CXX_COMPILER "g++")

PROJECT(QtVulkan)

CMAKE_MINIMUM_REQUIRED(VERSION 3.5.0)

SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)

ADD_SUBDIRECTORY(src)
24 changes: 15 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
# qtvulkan

compiles, runs, shows rotating cube!

requires setting VK_LAYER_PATH and LD_LIBRARY_PATH, e.g.
![Example Cube](https://raw.githubusercontent.com/richardlayman/qtvulkan/master/example.png)

* LD_LIBRARY_PATH=$HOME/Vulkan-LoaderAndValidationLayers/loader
* VK_LAYER_PATH=$HOME/Vulkan-LoaderAndValidationLayers/dbuild/layers

or where that lies on your system.
compiles, runs, shows rotating cube!

Also make sure the include and library paths in cube.pro and lib.pro are correct.
# building with CMake
If you would like to build the project using CMake instead of qmake, follow the below instructions

The plan is to port the rotating cube demo, as well as have a Qt Widget that contains a lot of the boilerplate for vulkan setup.
```
$ cd build
$ ./build.sh
$ cd src/cube/
// run the C++ cube demo
$ ./cube
// run the Qml cube demo
$ cd src/qml/
$ ./qml
```

## known issues:
* resizing is stuck after one resize event
* In qml I have to resize the window to display the contents
5 changes: 5 additions & 0 deletions build/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
CMakeCache.txt
cmake_install.cmake
Makefile
CMakeFiles/
src/
15 changes: 15 additions & 0 deletions build/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/bin/bash

# clean up the old build items
rm -rf CMakeCache.txt CMakeFiles/ cmake_install.cmake src/ Makefile

# build the project
cmake ..
make

# post work for assets
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you make this part of the cmake script?

cp ../src/cube/*.spv src/cube
cp ../src/cube/lunarg.ppm src/cube
cp ../src/cube/*.spv src/qml
cp ../src/cube/lunarg.ppm src/qml
cp ../src/qml/main.qml src/qml
12 changes: 0 additions & 12 deletions cube/cube.pro

This file was deleted.

Binary file added example.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 0 additions & 2 deletions qtvulkan.pro

This file was deleted.

4 changes: 4 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
add_subdirectory(lib)
add_subdirectory(app)
add_subdirectory(cube)
add_subdirectory(qml)
58 changes: 58 additions & 0 deletions src/app/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(CMAKE_CXX_LINK_FLAGS "-lvulkan")
SET(CMAKE_CXX_LINK_FLAGS "-lassimp")
SET(CMAKE_CXX_LINK_FLAGS "-lxcb")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")

MESSAGE(STATUS ${VULKAN_LIB})

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -DVK_PROTOTYPES -D_USE_MATH_DEFINES")

ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)

FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
#FIND_PACKAGE(Qt5Quick REQUIRED)
#FIND_PACKAGE(Qt5Qml REQUIRED)

SET(app_SRCS
main.cpp
)

INCLUDE_DIRECTORIES(
${qtvulkan_SOURCE_DIR}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
#${Qt5Quick_INCLUDE_DIRS}
#${Qt5Qml_INCLUDE_DIRS}
)

LINK_LIBRARIES(qtvulkan)

SET(app_LIBS
${Qt5Widgets_LIBRARIES}
${Qt5Quick_LIBRARIES}
${Qt5Core_LIBRARIES}
#${Qt5Gui_LIBRARIES}
#${QT5Qml_LIBRARIES}
)

ADD_EXECUTABLE(app ${app_SRCS})

SET_TARGET_PROPERTIES(app
PROPERTIES
CMAKE_CXX_STANDARD 11
CMAKE_CXX_STANDARD_REQUIRED ON
)

#TARGET_LINK_LIBRARIES(qtvulkan "-lvulkan" ${qtvulkan_LIBS})
TARGET_LINK_LIBRARIES(app "-lvulkan" ${app_LIBS})

# INSTALL
#INSTALL( TARGETS qtvulkan RUNTIME DESTINATION /usr/local/qtvulkan)
File renamed without changes.
60 changes: 60 additions & 0 deletions src/cube/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(CMAKE_CXX_LINK_FLAGS "-lvulkan")
SET(CMAKE_CXX_LINK_FLAGS "-lassimp")
SET(CMAKE_CXX_LINK_FLAGS "-lxcb")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")

MESSAGE(STATUS ${VULKAN_LIB})

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -DVK_PROTOTYPES -D_USE_MATH_DEFINES")

ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)

FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
#FIND_PACKAGE(Qt5Quick REQUIRED)
#FIND_PACKAGE(Qt5Qml REQUIRED)

SET(cube_SRCS
cube.cpp
)

INCLUDE_DIRECTORIES(
${qtvulkan_SOURCE_DIR}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
#${Qt5Quick_INCLUDE_DIRS}
#${Qt5Qml_INCLUDE_DIRS}
)

LINK_LIBRARIES(qtvulkan)

SET(cube_LIBS
${Qt5Widgets_LIBRARIES}
${Qt5Quick_LIBRARIES}
${Qt5Core_LIBRARIES}
#${Qt5Gui_LIBRARIES}
#${QT5Qml_LIBRARIES}
)

ADD_EXECUTABLE(cube ${cube_SRCS})

SET_TARGET_PROPERTIES(cube
PROPERTIES
CMAKE_CXX_STANDARD 11
CMAKE_CXX_STANDARD_REQUIRED ON
)

#TARGET_LINK_LIBRARIES(qtvulkan_cube "-lvulkan" ${qtvulkan_cube_LIBS})

# INSTALL
#INSTALL( TARGETS qtvulkan_cube RUNTIME DESTINATION /usr/local/qtvulkan)

#FILE(GLOB SPIRV_FILES "*.spv")
#INSTALL(FILES ${SPIRV_FILES} DESTINATION /usr/local/qtvulkan/shaders)
File renamed without changes.
File renamed without changes.
5 changes: 4 additions & 1 deletion cube/cube.cpp → src/cube/cube.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,10 @@
#include <QResizeEvent>

#include <QtMath>
#include <qpa/qplatformnativeinterface.h>
//#include <qpa/qplatformnativeinterface.h>
// TODO - I need to fix this below line so that you can build using the above line
#include <QtGui/5.6.0/QtGui/qpa/qplatformnativeinterface.h>
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sorry, I won't merge it if it ties the whole build to this qt version

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you need qplatformnativeinterface for?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.



static PFN_vkGetDeviceProcAddr g_gdpa = NULL;

Expand Down
File renamed without changes.
File renamed without changes.
63 changes: 63 additions & 0 deletions src/lib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
PROJECT(qtvulkan)

SET(CMAKE_AUTOMOC ON)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(CMAKE_CXX_LINK_FLAGS "-lvulkan")
SET(CMAKE_CXX_LINK_FLAGS "-lassimp")
SET(CMAKE_CXX_LINK_FLAGS "-lxcb")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")

MESSAGE(STATUS ${VULKAN_LIB})

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -DVK_PROTOTYPES -D_USE_MATH_DEFINES")

ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)

FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
#FIND_PACKAGE(Qt5Quick REQUIRED)
#FIND_PACKAGE(Qt5Qml REQUIRED)

SET(qtvulkan_SRCS
qvulkaninstance.cpp
qvulkanview.cpp
)

INCLUDE_DIRECTORIES(${Qt5Gui_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
#${Qt5Quick_INCLUDE_DIRS}
#${Qt5Qml_INCLUDE_DIRS}
)

ADD_LIBRARY(qtvulkan SHARED ${qtvulkan_SRCS})

SET(qtvulkan_LIBS
${Qt5Widgets_LIBRARIES}
${Qt5Quick_LIBRARIES}
${Qt5Core_LIBRARIES}
#${Qt5Gui_LIBRARIES}
#${QT5Qml_LIBRARIES}
)

TARGET_LINK_LIBRARIES(qtvulkan "-lvulkan" ${qtvulkan_LIBS})

SET_TARGET_PROPERTIES(qtvulkan
PROPERTIES
CMAKE_CXX_STANDARD 11
CMAKE_CXX_STANDARD_REQUIRED ON
)

SET_TARGET_PROPERTIES(qtvulkan
PROPERTIES
VERSION 0.01
SOVERSION 1
)

# INSTALL
#INSTALL( TARGETS qtvulkan RUNTIME DESTINATION /usr/local/qtvulkan)
File renamed without changes.
File renamed without changes.
File renamed without changes.
5 changes: 4 additions & 1 deletion lib/qvulkanview.cpp → src/lib/qvulkanview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
#include <QApplication>
#include <QStringList>
#include "qvulkaninstance.h"
#include <qpa/qplatformnativeinterface.h>
//#include <qpa/qplatformnativeinterface.h>
// TODO - I need to fix this below line so that you can build using the above line
#include <QtGui/5.6.0/QtGui/qpa/qplatformnativeinterface.h>


QVulkanInstance* QVulkanView::s_vulkanInstance = nullptr;

Expand Down
File renamed without changes.
64 changes: 64 additions & 0 deletions src/qml/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET(CMAKE_AUTOMOC ON)

SET(CMAKE_CXX_LINK_FLAGS "-lvulkan")
SET(CMAKE_CXX_LINK_FLAGS "-lassimp")
SET(CMAKE_CXX_LINK_FLAGS "-lxcb")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DVK_USE_PLATFORM_XCB_KHR")

MESSAGE(STATUS ${VULKAN_LIB})

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DNOMINMAX -DVK_PROTOTYPES -D_USE_MATH_DEFINES")

ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)

FIND_PACKAGE(Qt5Widgets REQUIRED)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Core REQUIRED)
FIND_PACKAGE(Qt5Quick REQUIRED)
FIND_PACKAGE(Qt5Qml REQUIRED)

SET(qml_SRCS
#window.cpp
cube.cpp
main.cpp
)

INCLUDE_DIRECTORIES(
${qtvulkan_SOURCE_DIR}
${Qt5Gui_INCLUDE_DIRS}
${Qt5Core_INCLUDE_DIRS}
${Qt5Widgets_INCLUDE_DIRS}
${Qt5Quick_INCLUDE_DIRS}
${Qt5Qml_INCLUDE_DIRS}
)

LINK_LIBRARIES(qtvulkan)

SET(qml_LIBS
${Qt5Widgets_LIBRARIES}
${Qt5Quick_LIBRARIES}
${Qt5Core_LIBRARIES}
${Qt5Gui_LIBRARIES}
${QT5Qml_LIBRARIES}
)

ADD_EXECUTABLE(qml ${qml_SRCS} ${qml_MOC_SRCS})

SET_TARGET_PROPERTIES(qml
PROPERTIES
CMAKE_CXX_STANDARD 11
CMAKE_CXX_STANDARD_REQUIRED ON
)

TARGET_LINK_LIBRARIES(qml "-lvulkan" ${qml_LIBS})

# INSTALL
#INSTALL( TARGETS qtvulkan_cube RUNTIME DESTINATION /usr/local/qtvulkan)

#FILE(GLOB SPIRV_FILES "*.spv")
#INSTALL(FILES ${SPIRV_FILES} DESTINATION /usr/local/qtvulkan/shaders)
Loading