commit dfd497d728cc00099087f9b25bfcd20ac401f9e4 Author: bart Date: Sun Nov 8 11:22:15 2026 +0100 init versie diff --git a/.qmake.stash b/.qmake.stash new file mode 100644 index 0000000..99e66aa --- /dev/null +++ b/.qmake.stash @@ -0,0 +1,23 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 201703L +QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 13 +QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3 +QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_GCC_MAJOR_VERSION \ + QMAKE_GCC_MINOR_VERSION \ + QMAKE_GCC_PATCH_VERSION +QMAKE_CXX.INCDIRS = \ + /usr/include/c++/13 \ + /usr/include/x86_64-linux-gnu/c++/13 \ + /usr/include/c++/13/backward \ + /usr/lib/gcc/x86_64-linux-gnu/13/include \ + /usr/local/include \ + /usr/include/x86_64-linux-gnu \ + /usr/include +QMAKE_CXX.LIBDIRS = \ + /usr/lib/gcc/x86_64-linux-gnu/13 \ + /usr/lib/x86_64-linux-gnu \ + /usr/lib \ + /lib/x86_64-linux-gnu \ + /lib diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..dae7817 --- /dev/null +++ b/Makefile @@ -0,0 +1,508 @@ +############################################################################# +# Makefile for building: tiletest +# Generated by qmake (3.1) (Qt 5.15.13) +# Project: tiletest.pro +# Template: app +# Command: /usr/lib/qt5/bin/qmake -o Makefile tiletest.pro +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = tiletest1.0.0 +DISTDIR = /home/bart/project/tiletest/.tmp/tiletest1.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 +LIBS = $(SUBLIBS) -L/usr/lib64 -lGLEW -lX11 -lGLU /usr/lib/x86_64-linux-gnu/libQt5Widgets.so /usr/lib/x86_64-linux-gnu/libQt5Gui.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lGL -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + qscenerenderer.cpp \ + vertex.cpp \ + tile.cpp \ + tilevertexinfo.cpp \ + face.cpp qrc_shaders.cpp \ + moc_mainwindow.cpp +OBJECTS = main.o \ + mainwindow.o \ + qscenerenderer.o \ + vertex.o \ + tile.o \ + tilevertexinfo.o \ + face.o \ + qrc_shaders.o \ + moc_mainwindow.o +DIST = shaders/simple.vert \ + shaders/simple.frag \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + tiletest.pro mainwindow.h \ + qscenerenderer.h \ + vertex.h \ + tile.h \ + terrain.h \ + tilevertexinfo.h \ + matrix2d.h \ + face.h main.cpp \ + mainwindow.cpp \ + qscenerenderer.cpp \ + vertex.cpp \ + tile.cpp \ + tilevertexinfo.cpp \ + face.cpp +QMAKE_TARGET = tiletest +DESTDIR = +TARGET = tiletest + + +first: all +####### Build rules + +tiletest: ui_mainwindow.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: tiletest.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \ + /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \ + tiletest.pro \ + shaders.qrc + $(QMAKE) -o Makefile tiletest.pro +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/sanitize.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-base.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/qconfig.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/toolchain.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_pre.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/default_post.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/warn_on.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qt.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources_functions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/resources.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/moc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/uic.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/file_copies.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf: +/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf: +tiletest.pro: +shaders.qrc: +qmake: FORCE + @$(QMAKE) -o Makefile tiletest.pro + +qmake_all: FORCE + + +all: Makefile tiletest + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents shaders.qrc $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.h qscenerenderer.h vertex.h tile.h terrain.h tilevertexinfo.h matrix2d.h face.h $(DISTDIR)/ + $(COPY_FILE) --parents main.cpp mainwindow.cpp qscenerenderer.cpp vertex.cpp tile.cpp tilevertexinfo.cpp face.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.ui $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: qrc_shaders.cpp +compiler_rcc_clean: + -$(DEL_FILE) qrc_shaders.cpp +qrc_shaders.cpp: shaders.qrc \ + /usr/lib/qt5/bin/rcc \ + shaders/simple.frag \ + shaders/simple.vert + /usr/lib/qt5/bin/rcc -name shaders shaders.qrc -o qrc_shaders.cpp + +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -O2 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: moc_mainwindow.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp +moc_mainwindow.cpp: mainwindow.h \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /home/bart/project/tiletest/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/bart/project/tiletest -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include mainwindow.h -o moc_mainwindow.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_mainwindow.h +compiler_uic_clean: + -$(DEL_FILE) ui_mainwindow.h +ui_mainwindow.h: mainwindow.ui \ + /usr/lib/qt5/bin/uic \ + qscenerenderer.h \ + terrain.h \ + tile.h \ + vertex.h \ + face.h \ + tilevertexinfo.h \ + matrix2d.h + /usr/lib/qt5/bin/uic mainwindow.ui -o ui_mainwindow.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean + +####### Compile + +main.o: main.cpp mainwindow.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + ui_mainwindow.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +qscenerenderer.o: qscenerenderer.cpp qscenerenderer.h \ + terrain.h \ + tile.h \ + vertex.h \ + face.h \ + tilevertexinfo.h \ + matrix2d.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qscenerenderer.o qscenerenderer.cpp + +vertex.o: vertex.cpp vertex.h \ + face.h \ + tilevertexinfo.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o vertex.o vertex.cpp + +tile.o: tile.cpp tile.h \ + vertex.h \ + face.h \ + tilevertexinfo.h \ + terrain.h \ + matrix2d.h \ + qscenerenderer.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o tile.o tile.cpp + +tilevertexinfo.o: tilevertexinfo.cpp tilevertexinfo.h \ + vertex.h \ + face.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o tilevertexinfo.o tilevertexinfo.cpp + +face.o: face.cpp face.h \ + vertex.h \ + tilevertexinfo.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o face.o face.cpp + +qrc_shaders.o: qrc_shaders.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_shaders.o qrc_shaders.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/face.cpp b/face.cpp new file mode 100644 index 0000000..3520ade --- /dev/null +++ b/face.cpp @@ -0,0 +1,70 @@ +#include "face.h" + + +float Face::sign (QVector2D p1, QVector2D p2, QVector2D p3) +{ + return (p1.x() - p3.x()) * (p2.y() - p3.y()) - (p2.x() - p3.x()) * (p1.y() - p3.y()); +} + +bool Face::PointInFace (QVector2D pt) +{ + bool b1, b2, b3; + + //b1 = sign(pt, v1, v2) < 0.0f; + //b2 = sign(pt, v2, v3) < 0.0f; + // b3 = sign(pt, v3, v1) < 0.0f; + + return ((b1 == b2) && (b2 == b3)); +} + +Face::Face(Vertex *v1,TileVertexInfo *vi1, Vertex *v2,TileVertexInfo *vi2,Vertex *v3,TileVertexInfo *vi3) +{m_subface= NULL; + setSettings(v1,vi1,v2,vi2,v3,vi3); +} + +void Face::setSettings(Vertex *v1, TileVertexInfo *vi1, Vertex *v2, TileVertexInfo *vi2, Vertex *v3, TileVertexInfo *vi3) +{ + m_v1 = v1; + m_v2 = v2; + m_v3 = v3; + m_vi1 = vi1; + m_vi2 = vi2; + m_vi3 = vi3; + recalcNormal(); +} + +void Face::recalcNormal() +{ + QVector3D v1=QVector3D(m_v1->position().x(),m_v1->position().y(),m_vi1->height()); + QVector3D v2=QVector3D(m_v2->position().x(),m_v2->position().y(),m_vi2->height()); + QVector3D v3=QVector3D(m_v3->position().x(),m_v3->position().y(),m_vi3->height()); + + QVector3D va = v1 - v2; + QVector3D vb = v3 - v2; + m_normal = QVector3D::crossProduct(va,vb); + /*float norm_len = sqrt(dot(norm, norm)); + norm /= norm_len; */ +} + +QVector3D Face::normal() +{ + return m_normal; +} + +void Face::findFaces(std::vector &vec, QVector2D s) +{ + if (m_subface!=NULL) { + for (int i=0; i<4;i++) { + m_subface[i].findFaces(vec,s); + } + } + else { + if ( + ((m_v1->position().x() == s.x()) && (m_v1->position().y() == s.y())) || + ((m_v2->position().x() == s.x()) && (m_v2->position().y() == s.y())) || + ((m_v3->position().x()== s.x()) && (m_v3->position().y() == s.y())) + ) { + vec.push_back(this); + } + } +} diff --git a/face.h b/face.h new file mode 100644 index 0000000..cef0633 --- /dev/null +++ b/face.h @@ -0,0 +1,61 @@ +#ifndef FACE_H +#define FACE_H +#include "vertex.h" +#include "tilevertexinfo.h" +#include +class Face; +class Vertex; +class TileVertexInfo; +class Face +{ +private: + Vertex *m_v1; + Vertex *m_v2; + Vertex *m_v3; + + TileVertexInfo *m_vi1; + TileVertexInfo *m_vi2; + TileVertexInfo *m_vi3; + + Face * m_parent; + + QVector3D m_normal; + Face * m_subface = NULL; + float sign (QVector2D p1, QVector2D p2, QVector2D p3); + bool PointInFace (QVector2D pt); + +public: + Face () { m_subface= NULL;} + Face(Vertex *v1 + , TileVertexInfo *vi1 + , Vertex *v2 + , TileVertexInfo *vi2 + , Vertex *v3 + , TileVertexInfo *vi3); + + void setSettings(Vertex *v1 + , TileVertexInfo *vi1 + , Vertex *v2 + , TileVertexInfo *vi2 + , Vertex *v3 + , TileVertexInfo *vi3); + + void recalcNormal(); + QVector3D normal(); + + inline TileVertexInfo * getVi1() { return m_vi1; } + inline TileVertexInfo * getVi2() { return m_vi2; } + inline TileVertexInfo * getVi3() { return m_vi3; } + + void createSub() { + m_subface = new Face[4]; + for (int i=0; i<4;i++) { + m_subface[i].setParent(this); + } + } + inline Face &getSub(int nr) { return m_subface[nr]; } + inline void setParent(Face *parent) {m_parent = parent;} + void findFaces(std::vector &vec, QVector2D s); +}; + +#endif // FACE_H diff --git a/face.o b/face.o new file mode 100644 index 0000000..a9b0921 Binary files /dev/null and b/face.o differ diff --git a/images/border.png b/images/border.png new file mode 100644 index 0000000..0cb016a Binary files /dev/null and b/images/border.png differ diff --git a/images/border.xcf b/images/border.xcf new file mode 100644 index 0000000..90b4df5 Binary files /dev/null and b/images/border.xcf differ diff --git a/images/grass.bmp b/images/grass.bmp new file mode 100644 index 0000000..a6a63a1 Binary files /dev/null and b/images/grass.bmp differ diff --git a/images/grass.jpg b/images/grass.jpg new file mode 100644 index 0000000..691bd67 Binary files /dev/null and b/images/grass.jpg differ diff --git a/images/heightmap.jpg b/images/heightmap.jpg new file mode 100644 index 0000000..939b34c Binary files /dev/null and b/images/heightmap.jpg differ diff --git a/images/rock.jpg b/images/rock.jpg new file mode 100644 index 0000000..c80bd80 Binary files /dev/null and b/images/rock.jpg differ diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/main.o b/main.o new file mode 100644 index 0000000..37fe770 Binary files /dev/null and b/main.o differ diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..49d64fc --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..5093e42 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,22 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H +#include +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.o b/mainwindow.o new file mode 100644 index 0000000..9f18cef Binary files /dev/null and b/mainwindow.o differ diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..a8db950 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,38 @@ + + + MainWindow + + + + 0 + 0 + 606 + 463 + + + + MainWindow + + + + + + + Qt::StrongFocus + + + + + + + + + + QSceneRenderer + QOpenGLWidget +
qscenerenderer.h
+
+
+ + +
diff --git a/matrix2d.cpp b/matrix2d.cpp new file mode 100644 index 0000000..f811a60 --- /dev/null +++ b/matrix2d.cpp @@ -0,0 +1,6 @@ +#include "matrix2d.h" + +Matrix2D::Matrix2D() +{ + +} diff --git a/matrix2d.h b/matrix2d.h new file mode 100644 index 0000000..0cc4932 --- /dev/null +++ b/matrix2d.h @@ -0,0 +1,33 @@ +#ifndef MATRIX2D_H +#define MATRIX2D_H + + +template +class Matrix2D { + std::vector data; + unsigned int sizeX, sizeY; +public: + Matrix2D (unsigned int x, unsigned int y) + : sizeX (x), sizeY (y) { + data.resize (sizeX*sizeY); + } + + T& operator()( int x, int y) { + if (x >= (int) sizeX ) + x-= sizeX; + if (x < 0 ) + x+= sizeX; + if (y<0) y=0; + if (y >= (int) sizeY ) + y =sizeY-1; + //if (y>= sizeY || y<0) + // throw std::out_of_range("OOB access"); // Throw something more appropriate + return data[sizeX*y + x]; // Stride-aware access + } + + T* row(unsigned int y) { + if (y >= sizeY) y = sizeY - 1; + return &data[sizeX * y]; + } +}; +#endif // MATRIX2D_H diff --git a/moc_mainwindow.cpp b/moc_mainwindow.cpp new file mode 100644 index 0000000..9712332 --- /dev/null +++ b/moc_mainwindow.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'mainwindow.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "mainwindow.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'mainwindow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.15.13. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_MainWindow_t { + QByteArrayData data[1]; + char stringdata0[11]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = { + { +QT_MOC_LITERAL(0, 0, 10) // "MainWindow" + + }, + "MainWindow" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_MainWindow[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 0, 0, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + 0 // eod +}; + +void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + (void)_o; + (void)_id; + (void)_c; + (void)_a; +} + +QT_INIT_METAOBJECT const QMetaObject MainWindow::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_meta_stringdata_MainWindow.data, + qt_meta_data_MainWindow, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *MainWindow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MainWindow::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0)) + return static_cast(this); + return QMainWindow::qt_metacast(_clname); +} + +int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/moc_mainwindow.o b/moc_mainwindow.o new file mode 100644 index 0000000..cab902c Binary files /dev/null and b/moc_mainwindow.o differ diff --git a/moc_predefs.h b/moc_predefs.h new file mode 100644 index 0000000..f29ad61 --- /dev/null +++ b/moc_predefs.h @@ -0,0 +1,464 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __CET__ 3 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __OPTIMIZE__ 1 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __SSP_STRONG__ 3 +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define __ATOMIC_SEQ_CST 5 +#define _FORTIFY_SOURCE 3 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __cpp_return_type_deduction 201304L +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __FLT64X_MANT_DIG__ 64 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 13 +#define __GXX_RTTI 1 +#define __pie__ 2 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 201703L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 13 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1018 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "13.3.0" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __FLT32_MANT_DIG__ 24 +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __FLT32X_MIN_EXP__ (-1021) +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 201603L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __LDBL_MANT_DIG__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201411L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __pic__ 2 +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_decltype 200707L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define __cpp_inheriting_constructors 201511L +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 0 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __PIC__ 2 +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201703L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 3 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __PIE__ 2 +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201304L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201304L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/qrc_shaders.cpp b/qrc_shaders.cpp new file mode 100644 index 0000000..edb440d --- /dev/null +++ b/qrc_shaders.cpp @@ -0,0 +1,327 @@ +/**************************************************************************** +** Resource object code +** +** Created by: The Resource Compiler for Qt version 5.15.13 +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +static const unsigned char qt_resource_data[] = { + // /home/bart/project/tiletest/shaders/simple.frag + 0x0,0x0,0xa,0x2f, + 0x23, + 0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x30,0x30,0xa,0x75,0x6e,0x69,0x66, + 0x6f,0x72,0x6d,0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x74,0x65, + 0x78,0x3b,0x20,0x2f,0x2f,0x74,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65, + 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, + 0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x62,0x6f,0x72,0x64,0x65, + 0x72,0x3b,0x20,0x2f,0x2f,0x74,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65, + 0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, + 0x20,0x73,0x61,0x6d,0x70,0x6c,0x65,0x72,0x32,0x44,0x20,0x72,0x6f,0x63,0x6b,0x3b, + 0x20,0x2f,0x2f,0x74,0x68,0x69,0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74, + 0x65,0x78,0x74,0x75,0x72,0x65,0xa,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x20,0x69,0x6e, + 0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0xa,0x73, + 0x6d,0x6f,0x6f,0x74,0x68,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x57, + 0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x33, + 0x20,0x66,0x72,0x61,0x67,0x56,0x65,0x72,0x74,0x3b,0xa,0x69,0x6e,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f, + 0x72,0x6d,0x20,0x76,0x65,0x63,0x33,0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x50,0x6f, + 0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0xa,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d, + 0x20,0x6d,0x61,0x74,0x34,0x20,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72,0x69, + 0x78,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x74,0x69,0x6c,0x65,0x50, + 0x6f,0x73,0x3b,0xa,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x66,0x72,0x61,0x67, + 0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x3b,0x20,0x2f,0x2f,0x74,0x68,0x69,0x73, + 0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x20, + 0x63,0x6f,0x6f,0x72,0x64,0xa,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x66, + 0x69,0x6e,0x61,0x6c,0x43,0x6f,0x6c,0x6f,0x72,0x3b,0x20,0x2f,0x2f,0x74,0x68,0x69, + 0x73,0x20,0x69,0x73,0x20,0x74,0x68,0x65,0x20,0x6f,0x75,0x74,0x70,0x75,0x74,0x20, + 0x63,0x6f,0x6c,0x6f,0x72,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x70,0x69,0x78, + 0x65,0x6c,0xa,0xa,0xa,0xa,0xa,0x73,0x74,0x72,0x75,0x63,0x74,0x20,0x53,0x69, + 0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c, + 0x69,0x67,0x68,0x74,0xa,0x7b,0xa,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76, + 0x43,0x6f,0x6c,0x6f,0x72,0x3b,0xa,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76, + 0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x3b,0xa,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x66,0x41,0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65, + 0x6e,0x73,0x69,0x74,0x79,0x3b,0xa,0x7d,0x3b,0xa,0xa,0xa,0xa,0x75,0x6e,0x69, + 0x66,0x6f,0x72,0x6d,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63, + 0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x20,0x73,0x75,0x6e,0x4c, + 0x69,0x67,0x68,0x74,0x3b,0xa,0xa,0x76,0x65,0x63,0x34,0x20,0x47,0x65,0x74,0x44, + 0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x43, + 0x6f,0x6c,0x6f,0x72,0x28,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65,0x63, + 0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x20,0x64,0x69,0x72,0x4c, + 0x69,0x67,0x68,0x74,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72,0x6d, + 0x61,0x6c,0x29,0xa,0x7b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c, + 0x6f,0x61,0x74,0x20,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65, + 0x6e,0x73,0x69,0x74,0x79,0x20,0x3d,0x20,0x20,0x64,0x6f,0x74,0x28,0x76,0x4e,0x6f, + 0x72,0x6d,0x61,0x6c,0x2c,0x20,0x2d,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e, + 0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x4d,0x75,0x6c,0x74, + 0x20,0x3d,0x20,0x70,0x6f,0x77,0x28,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e, + 0x66,0x41,0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74, + 0x79,0x2b,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73, + 0x69,0x74,0x79,0x2c,0x31,0x2e,0x30,0x29,0x3b,0x2f,0x2f,0x63,0x6c,0x61,0x6d,0x70, + 0x28,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x66,0x41,0x6d,0x62,0x69,0x65, + 0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x2b,0x66,0x44,0x69,0x66, + 0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x2c,0x20,0x2d, + 0x31,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x2f,0x2f,0x20, + 0x69,0x66,0x28,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x69,0x53,0x6b,0x79, + 0x62,0x6f,0x78,0x20,0x3d,0x3d,0x20,0x31,0x29,0x66,0x4d,0x75,0x6c,0x74,0x20,0x3d, + 0x20,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x66,0x41,0x6d,0x62,0x69,0x65, + 0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x3b,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x76,0x65,0x63,0x34, + 0x28,0x64,0x69,0x72,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x43,0x6f,0x6c,0x6f,0x72, + 0x2a,0x66,0x4d,0x75,0x6c,0x74,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x7d,0xa, + 0xa,0x76,0x65,0x63,0x34,0x20,0x47,0x65,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61, + 0x72,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x76,0x65,0x63,0x33,0x20,0x76,0x57,0x6f,0x72, + 0x6c,0x64,0x50,0x6f,0x73,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x45,0x79,0x65, + 0x50,0x6f,0x73,0x2c,0x20,0x20,0x53,0x69,0x6d,0x70,0x6c,0x65,0x44,0x69,0x72,0x65, + 0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68,0x74,0x20,0x64,0x4c,0x69, + 0x67,0x68,0x74,0x2c,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72,0x6d,0x61, + 0x6c,0x29,0xa,0x7b,0xa,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x52,0x65, + 0x73,0x75,0x6c,0x74,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x30,0x2e,0x30,0x2c, + 0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b, + 0xa,0xa,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x52,0x65,0x66,0x6c,0x65, + 0x63,0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f,0x72, + 0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x64, + 0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e, + 0x2c,0x20,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x29,0x29,0x3b,0xa,0x20,0x20,0x20, + 0x76,0x65,0x63,0x33,0x20,0x76,0x56,0x65,0x72,0x74,0x65,0x78,0x54,0x6f,0x45,0x79, + 0x65,0x56,0x65,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c, + 0x69,0x7a,0x65,0x28,0x76,0x45,0x79,0x65,0x50,0x6f,0x73,0x2d,0x76,0x57,0x6f,0x72, + 0x6c,0x64,0x50,0x6f,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, + 0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72, + 0x20,0x3d,0x20,0x64,0x6f,0x74,0x28,0x76,0x56,0x65,0x72,0x74,0x65,0x78,0x54,0x6f, + 0x45,0x79,0x65,0x56,0x65,0x63,0x74,0x6f,0x72,0x2c,0x20,0x76,0x52,0x65,0x66,0x6c, + 0x65,0x63,0x74,0x65,0x64,0x56,0x65,0x63,0x74,0x6f,0x72,0x29,0x3b,0xa,0xa,0x20, + 0x20,0x20,0x69,0x66,0x20,0x28,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46, + 0x61,0x63,0x74,0x6f,0x72,0x20,0x3e,0x20,0x30,0x29,0xa,0x20,0x20,0x20,0x7b,0xa, + 0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46, + 0x61,0x63,0x74,0x6f,0x72,0x20,0x3d,0x20,0x70,0x6f,0x77,0x28,0x66,0x53,0x70,0x65, + 0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63,0x74,0x6f,0x72,0x2c,0x20,0x31,0x2e,0x30, + 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x52,0x65,0x73,0x75,0x6c,0x74, + 0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x64,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76, + 0x43,0x6f,0x6c,0x6f,0x72,0x2c,0x20,0x31,0x2e,0x30,0x29,0x20,0x2a,0x20,0x31,0x2e, + 0x30,0x20,0x2a,0x20,0x66,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x46,0x61,0x63, + 0x74,0x6f,0x72,0x3b,0xa,0x20,0x20,0x20,0x7d,0xa,0xa,0x20,0x20,0x20,0x72,0x65, + 0x74,0x75,0x72,0x6e,0x20,0x76,0x52,0x65,0x73,0x75,0x6c,0x74,0x3b,0xa,0x7d,0xa, + 0xa,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x20,0x7b,0xa,0xa, + 0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x73,0x75,0x72,0x66,0x61,0x63,0x65, + 0x54,0x6f,0x4c,0x69,0x67,0x68,0x74,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c, + 0x69,0x7a,0x65,0x28,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x44,0x69, + 0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65, + 0x63,0x33,0x20,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x50,0x6f,0x73,0x20,0x3d,0x20, + 0x76,0x65,0x63,0x33,0x28,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72,0x69,0x78, + 0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x66,0x72,0x61,0x67,0x56,0x65,0x72,0x74, + 0x2c,0x20,0x31,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20, + 0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x54,0x6f,0x43,0x61,0x6d,0x65,0x72,0x61,0x20, + 0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x63,0x61,0x6d,0x65, + 0x72,0x61,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x2d,0x20,0x73,0x75,0x72, + 0x66,0x61,0x63,0x65,0x50,0x6f,0x73,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65, + 0x63,0x34,0x20,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x74,0x65,0x78,0x74, + 0x75,0x72,0x65,0x28,0x62,0x6f,0x72,0x64,0x65,0x72,0x2c,0x20,0x76,0x65,0x63,0x32, + 0x28,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73,0x2e,0x78,0x2c,0x74,0x69,0x6c,0x65,0x50, + 0x6f,0x73,0x2e,0x79,0x2a,0x31,0x2e,0x31,0x35,0x34,0x37,0x33,0x34,0x34,0x31,0x31, + 0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x66,0x44, + 0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79,0x20, + 0x3d,0x20,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x64,0x6f,0x74,0x28,0x6e, + 0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c, + 0x29,0x2c,0x20,0x2d,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x44,0x69, + 0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x29,0x29,0x3b,0xa,0xa,0x20,0x20,0x20,0x20, + 0x66,0x6c,0x6f,0x61,0x74,0x20,0x61,0x64,0x64,0x76,0x61,0x6c,0x20,0x3d,0x20,0x62, + 0x63,0x6f,0x6c,0x6f,0x72,0x2e,0x61,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63, + 0x34,0x20,0x76,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x43,0x6f,0x6c,0x6f,0x72, + 0x20,0x3d,0x20,0x47,0x65,0x74,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x43,0x6f, + 0x6c,0x6f,0x72,0x28,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x2c,0x20,0x63, + 0x61,0x6d,0x65,0x72,0x61,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x73, + 0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69, + 0x7a,0x65,0x28,0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x29,0x29,0x2b,0x20,0x47,0x65, + 0x74,0x44,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x4c,0x69,0x67,0x68, + 0x74,0x43,0x6f,0x6c,0x6f,0x72,0x28,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2c, + 0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x76,0x4e,0x6f,0x72,0x6d,0x61, + 0x6c,0x29,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x67,0x72, + 0x6f,0x75,0x6e,0x64,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74, + 0x65,0x78,0x2c,0x20,0x66,0x72,0x61,0x67,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64, + 0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x72,0x6f,0x63,0x6b, + 0x74,0x20,0x3d,0x20,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x72,0x6f,0x63,0x6b, + 0x2c,0x20,0x66,0x72,0x61,0x67,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x29,0x3b, + 0xa,0xa,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x67,0x6e,0x64,0x66, + 0x61,0x63,0x20,0x3d,0x20,0x31,0x2e,0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x69,0x66, + 0x20,0x28,0x7a,0x5f,0x70,0x6f,0x73,0x3e,0x30,0x2e,0x33,0x29,0xa,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x20,0x20,0x67,0x6e,0x64,0x66,0x61,0x63,0x20,0x3d,0x20,0x30, + 0x2e,0x30,0x3b,0xa,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x20,0x69,0x66,0x20, + 0x28,0x7a,0x5f,0x70,0x6f,0x73,0x3e,0x30,0x2e,0x31,0x29,0xa,0x20,0x20,0x20,0x20, + 0x20,0x20,0x20,0x20,0x67,0x6e,0x64,0x66,0x61,0x63,0x3d,0x31,0x2e,0x30,0x20,0x2d, + 0x20,0x31,0x2e,0x30,0x20,0x2f,0x20,0x30,0x2e,0x32,0x20,0x2a,0x20,0x28,0x7a,0x5f, + 0x70,0x6f,0x73,0x2d,0x30,0x2e,0x31,0x29,0x20,0x3b,0xa,0x20,0x20,0x20,0x20,0x66, + 0x69,0x6e,0x61,0x6c,0x43,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x28,0x67,0x72,0x6f, + 0x75,0x6e,0x64,0x20,0x2a,0x67,0x6e,0x64,0x66,0x61,0x63,0x2b,0x72,0x6f,0x63,0x6b, + 0x74,0x20,0x2a,0x28,0x31,0x2e,0x30,0x2d,0x67,0x6e,0x64,0x66,0x61,0x63,0x29,0x20, + 0x2b,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x2a,0x61,0x64,0x64,0x76,0x61,0x6c,0x29,0x20, + 0x2a,0x20,0x76,0x53,0x70,0x65,0x63,0x75,0x6c,0x61,0x72,0x43,0x6f,0x6c,0x6f,0x72, + 0x3b,0x20,0x2f,0x2f,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65,0x78,0x2c, + 0x20,0x66,0x72,0x61,0x67,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x29,0x20,0x2a, + 0x20,0x70,0x6f,0x77,0x28,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x64,0x6f, + 0x74,0x28,0x73,0x75,0x72,0x66,0x61,0x63,0x65,0x54,0x6f,0x43,0x61,0x6d,0x65,0x72, + 0x61,0x2c,0x20,0x72,0x65,0x66,0x6c,0x65,0x63,0x74,0x28,0x2d,0x73,0x75,0x72,0x66, + 0x61,0x63,0x65,0x54,0x6f,0x4c,0x69,0x67,0x68,0x74,0x2c,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x29,0x29,0x29,0x2c,0x20,0x30,0x2e,0x35,0x29,0x3b,0xa,0xa,0x20,0x20, + 0x20,0x20,0x2f,0x2f,0x20,0x28,0x74,0x65,0x78,0x74,0x75,0x72,0x65,0x28,0x74,0x65, + 0x78,0x2c,0x20,0x66,0x72,0x61,0x67,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x29, + 0x2b,0x62,0x63,0x6f,0x6c,0x6f,0x72,0x2a,0x61,0x64,0x64,0x76,0x61,0x6c,0x29,0x2a, + 0x76,0x65,0x63,0x34,0x28,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2e,0x76,0x43, + 0x6f,0x6c,0x6f,0x72,0x2a,0x28,0x73,0x75,0x6e,0x4c,0x69,0x67,0x68,0x74,0x2e,0x66, + 0x41,0x6d,0x62,0x69,0x65,0x6e,0x74,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69,0x74,0x79, + 0x2b,0x66,0x44,0x69,0x66,0x66,0x75,0x73,0x65,0x49,0x6e,0x74,0x65,0x6e,0x73,0x69, + 0x74,0x79,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0xa,0x7d,0xa, + // /home/bart/project/tiletest/shaders/simple.vert + 0x0,0x0,0x3,0xf9, + 0x23, + 0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x30,0x30,0xa,0x75,0x6e,0x69,0x66, + 0x6f,0x72,0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x63,0x61,0x6d,0x65,0x72,0x61,0x3b, + 0xa,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x6d,0x6f, + 0x64,0x65,0x6c,0x56,0x69,0x65,0x77,0x4d,0x61,0x74,0x72,0x69,0x78,0x3b,0xa,0x75, + 0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x70,0x72,0x6f,0x6a, + 0x65,0x63,0x74,0x69,0x6f,0x6e,0x4d,0x61,0x74,0x72,0x69,0x78,0x3b,0xa,0xa,0x75, + 0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x4d,0x61,0x74,0x72,0x69,0x78,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72, + 0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72, + 0x69,0x78,0x3b,0xa,0xa,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61, + 0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63, + 0x33,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0xa,0x6c,0x61,0x79,0x6f, + 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29, + 0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x32,0x20,0x69,0x6e,0x43,0x6f,0x6f,0x72,0x64, + 0x3b,0xa,0xa,0x6c,0x61,0x79,0x6f,0x75,0x74,0x20,0x28,0x6c,0x6f,0x63,0x61,0x74, + 0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x66,0x6c,0x6f,0x61, + 0x74,0x20,0x7a,0x50,0x6f,0x73,0x3b,0xa,0x6c,0x61,0x79,0x6f,0x75,0x74,0x20,0x28, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x33,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x33,0x20,0x69,0x6e,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x3b,0xa,0xa, + 0x2f,0x2f,0x69,0x6e,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x68,0x65,0x69,0x67,0x68, + 0x74,0x3b,0xa,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x32,0x20,0x66,0x72,0x61,0x67, + 0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x3b,0xa,0x6f,0x75,0x74,0x20,0x76,0x65, + 0x63,0x32,0x20,0x74,0x69,0x6c,0x65,0x50,0x6f,0x73,0x3b,0xa,0x6f,0x75,0x74,0x20, + 0x76,0x65,0x63,0x33,0x20,0x66,0x72,0x61,0x67,0x56,0x65,0x72,0x74,0x3b,0xa,0x73, + 0x6d,0x6f,0x6f,0x74,0x68,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x76, + 0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x3b,0xa,0x75,0x6e,0x69,0x66,0x6f,0x72, + 0x6d,0x20,0x6d,0x61,0x74,0x34,0x20,0x4d,0x56,0x50,0x3b,0xa,0x73,0x6d,0x6f,0x6f, + 0x74,0x68,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x33,0x20,0x76,0x4e,0x6f,0x72, + 0x6d,0x61,0x6c,0x3b,0xa,0x6f,0x75,0x74,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x7a, + 0x5f,0x70,0x6f,0x73,0x3b,0xa,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28, + 0x29,0xa,0x7b,0xa,0xa,0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x50,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x53,0x63,0x61,0x6c,0x65,0x64,0x20,0x3d,0x20,0x76,0x65,0x63, + 0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2c,0x20,0x31,0x2e,0x30,0x29, + 0x3b,0xa,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20, + 0x3d,0x20,0x4d,0x56,0x50,0x20,0x2a,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x2e,0x78,0x2c,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e, + 0x79,0x2c,0x7a,0x50,0x6f,0x73,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20, + 0x76,0x65,0x63,0x34,0x20,0x74,0x65,0x78,0x70,0x3d,0x20,0x6d,0x6f,0x64,0x65,0x6c, + 0x56,0x69,0x65,0x77,0x4d,0x61,0x74,0x72,0x69,0x78,0x20,0x2a,0x76,0x65,0x63,0x34, + 0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x2c,0x70,0x6f,0x73,0x69, + 0x74,0x69,0x6f,0x6e,0x2e,0x79,0x2c,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa, + 0x20,0x20,0x66,0x72,0x61,0x67,0x54,0x65,0x78,0x43,0x6f,0x6f,0x72,0x64,0x20,0x3d, + 0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x65,0x78,0x70,0x2e,0x78,0x2f,0x32,0x2c,0x74, + 0x65,0x78,0x70,0x2e,0x79,0x2f,0x32,0x29,0x3b,0xa,0x20,0x20,0x76,0x65,0x63,0x34, + 0x20,0x74,0x70,0x6f,0x73,0x20,0x3d,0x20,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74, + 0x72,0x69,0x78,0x2a,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x2e,0x78,0x2c,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x79,0x2c,0x30, + 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x74,0x69,0x6c,0x65,0x50,0x6f, + 0x73,0x20,0x3d,0x20,0x76,0x65,0x63,0x32,0x28,0x74,0x70,0x6f,0x73,0x2e,0x78,0x2c, + 0x74,0x70,0x6f,0x73,0x2e,0x79,0x29,0x3b,0xa,0x20,0x20,0x2f,0x2f,0x76,0x43,0x6f, + 0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x63,0x6f,0x6c,0x6f,0x72, + 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x76, + 0x52,0x65,0x73,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x69,0x6e,0x4e,0x6f,0x72, + 0x6d,0x61,0x6c,0x2c,0x20,0x30,0x2e,0x30,0x29,0x3b,0xa,0x20,0x20,0x20,0x20,0x20, + 0x76,0x4e,0x6f,0x72,0x6d,0x61,0x6c,0x20,0x3d,0x20,0x69,0x6e,0x4e,0x6f,0x72,0x6d, + 0x61,0x6c,0x2e,0x78,0x79,0x7a,0x3b,0xa,0x20,0x20,0x66,0x72,0x61,0x67,0x56,0x65, + 0x72,0x74,0x20,0x3d,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0xa,0xa, + 0x20,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73, + 0x4c,0x6f,0x63,0x61,0x6c,0x20,0x3d,0x6d,0x6f,0x64,0x65,0x6c,0x4d,0x61,0x74,0x72, + 0x69,0x78,0x2a,0x69,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x53,0x63,0x61, + 0x6c,0x65,0x64,0x3b,0xa,0x20,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73, + 0x20,0x3d,0x20,0x76,0x57,0x6f,0x72,0x6c,0x64,0x50,0x6f,0x73,0x4c,0x6f,0x63,0x61, + 0x6c,0x2e,0x78,0x79,0x7a,0x3b,0xa,0x20,0x20,0x7a,0x5f,0x70,0x6f,0x73,0x3d,0x7a, + 0x50,0x6f,0x73,0x3b,0xa,0x7d,0xa,0xa, + +}; + +static const unsigned char qt_resource_name[] = { + // shaders + 0x0,0x7, + 0x9,0xe7,0xac,0x73, + 0x0,0x73, + 0x0,0x68,0x0,0x61,0x0,0x64,0x0,0x65,0x0,0x72,0x0,0x73, + // simple.frag + 0x0,0xb, + 0x2,0xb0,0xd0,0x97, + 0x0,0x73, + 0x0,0x69,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x66,0x0,0x72,0x0,0x61,0x0,0x67, + // simple.vert + 0x0,0xb, + 0x2,0xb1,0xc4,0x74, + 0x0,0x73, + 0x0,0x69,0x0,0x6d,0x0,0x70,0x0,0x6c,0x0,0x65,0x0,0x2e,0x0,0x76,0x0,0x65,0x0,0x72,0x0,0x74, + +}; + +static const unsigned char qt_resource_struct[] = { + // : + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x1, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/shaders + 0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2,0x0,0x0,0x0,0x2, +0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, + // :/shaders/simple.frag + 0x0,0x0,0x0,0x14,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0, +0x0,0x0,0x1,0x70,0x12,0x77,0x25,0xb5, + // :/shaders/simple.vert + 0x0,0x0,0x0,0x30,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0xa,0x33, +0x0,0x0,0x1,0x70,0x12,0x77,0x25,0x9d, + +}; + +#ifdef QT_NAMESPACE +# define QT_RCC_PREPEND_NAMESPACE(name) ::QT_NAMESPACE::name +# define QT_RCC_MANGLE_NAMESPACE0(x) x +# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b +# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b) +# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2( \ + QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE)) +#else +# define QT_RCC_PREPEND_NAMESPACE(name) name +# define QT_RCC_MANGLE_NAMESPACE(name) name +#endif + +#ifdef QT_NAMESPACE +namespace QT_NAMESPACE { +#endif + +bool qRegisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); +bool qUnregisterResourceData(int, const unsigned char *, const unsigned char *, const unsigned char *); + +#ifdef QT_NAMESPACE +} +#endif + +int QT_RCC_MANGLE_NAMESPACE(qInitResources_shaders)(); +int QT_RCC_MANGLE_NAMESPACE(qInitResources_shaders)() +{ + int version = 3; + QT_RCC_PREPEND_NAMESPACE(qRegisterResourceData) + (version, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_shaders)(); +int QT_RCC_MANGLE_NAMESPACE(qCleanupResources_shaders)() +{ + int version = 3; + QT_RCC_PREPEND_NAMESPACE(qUnregisterResourceData) + (version, qt_resource_struct, qt_resource_name, qt_resource_data); + return 1; +} + +namespace { + struct initializer { + initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources_shaders)(); } + ~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources_shaders)(); } + } dummy; +} diff --git a/qrc_shaders.o b/qrc_shaders.o new file mode 100644 index 0000000..a93197e Binary files /dev/null and b/qrc_shaders.o differ diff --git a/qscenerenderer.cpp b/qscenerenderer.cpp new file mode 100644 index 0000000..af93242 --- /dev/null +++ b/qscenerenderer.cpp @@ -0,0 +1,180 @@ +#include "qscenerenderer.h" +#include + + + +GLuint vertexbuffer; + GLuint VertexArrayID; +QSceneRenderer::QSceneRenderer(QWidget* parent): QOpenGLWidget(parent) +{ + setFocusPolicy(Qt::FocusPolicy::StrongFocus); + installEventFilter(this); + QImage img = QImage("/home/bart/project/tiletest/images/heightmap.jpg").convertToFormat(QImage::Format_RGB32); + m_zoom = 4; + m_point = new Matrix2D(img.width(),img.height()); + m_numPoints05= img.width()/MAP_WIDTH/1.5/2; + for (int y = 0; yrow(y); + for (int x = 0; xoperator ()(x,y).height = abs((x*10%200)-100); + }*/ + + tiles=new Matrix2D(MAP_WIDTH,MAP_HEIGHT); +} + +Tile * QSceneRenderer::getTile(int x, int y) +{ + return &tiles->operator ()(x,y); +} + +void QSceneRenderer::mousePressEvent(QMouseEvent *event) +{ + lastPos = event->pos(); +} + +void QSceneRenderer::mouseMoveEvent(QMouseEvent *event) +{ + /*int dx = event->x() - lastPos.x(); + int dy = event->y() - lastPos.y(); + + if (event->buttons() & Qt::LeftButton) { + zRot += 8 * dx; + } else if (event->buttons() & Qt::RightButton) { + zRot -= 8 * dx; + } + lastPos = event->pos(); + update();*/ + +} + +void QSceneRenderer::keyPressEvent(QKeyEvent *e) +{ + if (e->key()== Qt::Key_A) { + cameraPosition.setX(cameraPosition.x()+ 0.1f*cos(PI*(zRot+90)/180.0f)); + cameraPosition.setY(cameraPosition.y()+ 0.1f*sin(PI*(zRot+90)/180.0f)); + } + else if (e->key()== Qt::Key_D) { + cameraPosition.setX(cameraPosition.x()+ 0.1f*cos(PI*(zRot-90)/180.0f)); + cameraPosition.setY(cameraPosition.y()+ 0.1f*sin(PI*(zRot-90)/180.0f)); + } + + if (e->key()== Qt::Key_W) { + cameraPosition.setX(cameraPosition.x()+ 0.1f*cos(PI*(zRot+0)/180.0f)); + cameraPosition.setY(cameraPosition.y()+ 0.1f*sin(PI*(zRot+0)/180.0f)); + } + else if (e->key()== Qt::Key_S) { + cameraPosition.setX(cameraPosition.x()+ 0.1f*cos(PI*(zRot+180)/180.0f)); + cameraPosition.setY(cameraPosition.y()+ 0.1f*sin(PI*(zRot+180)/180.0f)); + } + else if (e->key()== Qt::Key_E) { + zRot --; + if (zRot<0.0) + zRot+=360.0; + } + else if (e->key()== Qt::Key_Q) { + zRot ++; + if (zRot>=360.0) + zRot-=360.0; + } + update(); +} + +void QSceneRenderer::wheelEvent(QWheelEvent *e) +{ + m_zoom -= e->delta()/100.0; + if (m_zoom<2) m_zoom =2; + if (m_zoom>10)m_zoom =10; + update(); +} + +void QSceneRenderer::initializeGL() +{ + glEnable(GL_DEPTH_TEST); + glDepthFunc(GL_LESS); +} + +void QSceneRenderer::resizeGL(int width, int height) +{ + Projection= QMatrix4x4(); + Projection.perspective(45, (float) width / (float)height,0.1f,100.0f); + + +} + +void QSceneRenderer::paintGL() +{ + glEnable(GL_DEPTH_TEST); + QMatrix4x4 cameraTransformation; + QMatrix4x4 vMatrix; + + cameraTransformation.rotate(zRot, 0, 0, 1); + cameraUpDirection = cameraTransformation * QVector3D(0, 0, 1); + cameraPosition.setZ(m_zoom); + + QVector3D lookat = QVector3D(cameraPosition.x()+ m_zoom*m_zoom/5.0f*cos(PI*zRot/180.0f) + , cameraPosition.y()+ m_zoom*m_zoom/5.0f*sin(PI*zRot/180.0f) + ,0); + vMatrix.lookAt(cameraPosition, lookat, cameraUpDirection); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // Bounding box of the visible area in world coordinates + float minWorldX = std::min(cameraPosition.x(), lookat.x()); + float maxWorldX = std::max(cameraPosition.x(), lookat.x()); + float minWorldY = std::min(cameraPosition.y(), lookat.y()); + float maxWorldY = std::max(cameraPosition.y(), lookat.y()); + + float margin = m_zoom * 2.5f + 8.0f; + minWorldX -= margin; + maxWorldX += margin; + minWorldY -= margin; + maxWorldY += margin; + + float tileStepX = LOD_0_SIZE * 0.75f; + float tileStepY = LOD_0_SIZE_Y * 2.0f; + + int minTileX = std::max(0, (int)floor(minWorldX / tileStepX)); + int maxTileX = std::min(MAP_WIDTH - 1, (int)ceil(maxWorldX / tileStepX)); + int minTileY = std::max(0, (int)floor(minWorldY / tileStepY)); + int maxTileY = std::min(MAP_HEIGHT - 1, (int)ceil(maxWorldY / tileStepY)); + + // Expand margin by 1 for neighbor normal calculations + int initMinX = std::max(0, minTileX - 1); + int initMaxX = std::min(MAP_WIDTH - 1, maxTileX + 1); + int initMinY = std::max(0, minTileY - 1); + int initMaxY = std::min(MAP_HEIGHT - 1, maxTileY + 1); + + // 1. Lazy initialize visible tiles and direct neighbors + for (int y = initMinY; y <= initMaxY; ++y) { + for (int x = initMinX; x <= initMaxX; ++x) { + tiles->operator()(x, y).ensureInitialized(this, x, y); + } + } + + // 2. Ensure normals are built for visible tiles + for (int y = minTileY; y <= maxTileY; ++y) { + for (int x = minTileX; x <= maxTileX; ++x) { + tiles->operator()(x, y).ensureNormalsBuilt(); + } + } + + // 3. Render only visible tiles + for (int y = minTileY; y <= maxTileY; ++y) { + for (int x = minTileX; x <= maxTileX; ++x) { + tiles->operator()(x, y).paint(Projection, cameraPosition, cameraUpDirection, vMatrix, zRot); + } + } + +} diff --git a/qscenerenderer.cpp.autosave.e31744 b/qscenerenderer.cpp.autosave.e31744 new file mode 100644 index 0000000..e69de29 diff --git a/qscenerenderer.h b/qscenerenderer.h new file mode 100644 index 0000000..83f961e --- /dev/null +++ b/qscenerenderer.h @@ -0,0 +1,51 @@ +#ifndef QSCENERENDERER_H +#define QSCENERENDERER_H + +#include +#include +#include +#include "terrain.h" +#include "tile.h" +#include +#include +#include "matrix2d.h" + + +class QSceneRenderer : public QOpenGLWidget +{ +public: + QSceneRenderer(QWidget* parent = Q_NULLPTR) ; + inline Matrix2D * getMapPoints() {return m_point;} + inline int getNumPointsWidth() const {return m_numPointsWidth;} + inline int getNumPointsHeight() const {return m_numPointsHeight;} + inline int getNumPoints05() const {return m_numPoints05;} + + Tile * getTile(int x, int y); +protected: + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void keyPressEvent(QKeyEvent * e); + void wheelEvent(QWheelEvent * e); + void initializeGL(); + void resizeGL(int w, int h); + void paintGL(); + + float m_camera_x =10.0; + float m_camera_y=0.0; + QMatrix4x4 Projection; + QMatrix4x4 cameraTransformation; + QVector3D cameraPosition; + QVector3D cameraUpDirection; + + + Matrix2D * m_point; + Matrix2D * tiles; + QPoint lastPos; + float zRot=0; + float m_numPointsWidth; + float m_numPointsHeight; + int m_numPoints05; + float m_zoom; +}; + +#endif // QSCENERENDERER_H diff --git a/qscenerenderer.o b/qscenerenderer.o new file mode 100644 index 0000000..97d61b7 Binary files /dev/null and b/qscenerenderer.o differ diff --git a/shaders.qrc b/shaders.qrc new file mode 100644 index 0000000..402dcfb --- /dev/null +++ b/shaders.qrc @@ -0,0 +1,6 @@ + + + shaders/simple.vert + shaders/simple.frag + + diff --git a/shaders/simple.frag b/shaders/simple.frag new file mode 100644 index 0000000..eee1a38 --- /dev/null +++ b/shaders/simple.frag @@ -0,0 +1,77 @@ +#version 400 +uniform sampler2D tex; //this is the texture +uniform sampler2D border; //this is the texture +uniform sampler2D rock; //this is the texture +smooth in vec3 vNormal; +smooth in vec3 vWorldPos; +in vec3 fragVert; +in float z_pos; +uniform vec3 cameraPosition; + +uniform mat4 modelMatrix; +in vec2 tilePos; +in vec2 fragTexCoord; //this is the texture coord +out vec4 finalColor; //this is the output color of the pixel + + + + +struct SimpleDirectionalLight +{ + vec3 vColor; + vec3 vDirection; + float fAmbientIntensity; +}; + + + +uniform SimpleDirectionalLight sunLight; + +vec4 GetDirectionalLightColor(SimpleDirectionalLight dirLight, vec3 vNormal) +{ + float fDiffuseIntensity = dot(vNormal, -dirLight.vDirection); + float fMult = pow(dirLight.fAmbientIntensity+fDiffuseIntensity,1.0);//clamp(dirLight.fAmbientIntensity+fDiffuseIntensity, -1.0, 1.0); + // if(dirLight.iSkybox == 1)fMult = dirLight.fAmbientIntensity; + return vec4(dirLight.vColor*fMult, 1.0); +} + +vec4 GetSpecularColor(vec3 vWorldPos, vec3 vEyePos, SimpleDirectionalLight dLight, vec3 vNormal) +{ + vec4 vResult = vec4(0.0, 0.0, 0.0, 0.0); + + vec3 vReflectedVector = normalize(reflect(dLight.vDirection, vNormal)); + vec3 vVertexToEyeVector = normalize(vEyePos-vWorldPos); + float fSpecularFactor = dot(vVertexToEyeVector, vReflectedVector); + + if (fSpecularFactor > 0) + { + fSpecularFactor = pow(fSpecularFactor, 1.0); + vResult = vec4(dLight.vColor, 1.0) * 1.0 * fSpecularFactor; + } + + return vResult; +} + +void main() { + + vec3 surfaceToLight = normalize(sunLight.vDirection); + vec3 surfacePos = vec3(modelMatrix * vec4(fragVert, 1)); + vec3 surfaceToCamera = normalize(cameraPosition - surfacePos); + vec4 bcolor = texture(border, vec2(tilePos.x,tilePos.y*1.154734411)); + float fDiffuseIntensity = max(0.0, dot(normalize(vNormal), -sunLight.vDirection)); + + float addval = bcolor.a; + vec4 vSpecularColor = GetSpecularColor(vWorldPos, cameraPosition, sunLight, normalize(vNormal))+ GetDirectionalLightColor(sunLight,normalize(vNormal)); + vec4 ground = texture(tex, fragTexCoord); + vec4 rockt = texture(rock, fragTexCoord); + + float gndfac = 1.0; + if (z_pos>0.3) + gndfac = 0.0; + else if (z_pos>0.1) + gndfac=1.0 - 1.0 / 0.2 * (z_pos-0.1) ; + finalColor = (ground *gndfac+rockt *(1.0-gndfac) +bcolor*addval) * vSpecularColor; //texture(tex, fragTexCoord) * pow(max(0.0, dot(surfaceToCamera, reflect(-surfaceToLight, normal))), 0.5); + + // (texture(tex, fragTexCoord)+bcolor*addval)*vec4(sunLight.vColor*(sunLight.fAmbientIntensity+fDiffuseIntensity), 1.0); + +} diff --git a/shaders/simple.vert b/shaders/simple.vert new file mode 100644 index 0000000..c872316 --- /dev/null +++ b/shaders/simple.vert @@ -0,0 +1,41 @@ +#version 400 +uniform mat4 camera; +uniform mat4 modelViewMatrix; +uniform mat4 projectionMatrix; + +uniform mat4 normalMatrix; +uniform mat4 modelMatrix; + +layout(location = 0) in vec3 position; +layout(location = 1) in vec2 inCoord; + +layout (location = 2) in float zPos; +layout (location =3) in vec3 inNormal; + +//in float height; +out vec2 fragTexCoord; +out vec2 tilePos; +out vec3 fragVert; +smooth out vec3 vWorldPos; +uniform mat4 MVP; +smooth out vec3 vNormal; +out float z_pos; +void main() +{ + +vec4 inPositionScaled = vec4(position, 1.0); + gl_Position = MVP *vec4(position.x,position.y,zPos, 1.0); + vec4 texp= modelViewMatrix *vec4(position.x,position.y,0, 1.0); + fragTexCoord = vec2(texp.x/2,texp.y/2); + vec4 tpos = modelMatrix*vec4(position.x,position.y,0, 1.0); + tilePos = vec2(tpos.x,tpos.y); + //vColor = vec4(color, 1.0); + vec4 vRes = vec4(inNormal, 0.0); + vNormal = inNormal.xyz; + fragVert = position; + + vec4 vWorldPosLocal =modelMatrix*inPositionScaled; + vWorldPos = vWorldPosLocal.xyz; + z_pos=zPos; +} + diff --git a/terrain.h b/terrain.h new file mode 100644 index 0000000..15292b6 --- /dev/null +++ b/terrain.h @@ -0,0 +1,28 @@ +#ifndef TERRAIN_H +#define TERRAIN_H + +#define MAP_WIDTH 300 +#define MAP_HEIGHT 125 +#define NUM_TRIANGLES_0 6 +#define NUM_TRIANGLES_SUB 4 +#define NUM_TRIANGLE_VERTICES 3 +#define LOD_0_SIZE 1.0f +#define LOD_0_SIZE_Y 0.4328799197461722f +//#define LOD_0_S 0.75f + +//#define NUM_POINTS_05f 10 + +//#define NUM_POINTS_WIDTH (NUM_POINTS_05f * 3 * MAP_WIDTH*2) + +//#define NUM_POINTS_HEIGHT (NUM_POINTS_05f * MAP_HEIGHT) + +#define NUM_TRIANGLES NUM_TRIANGLES_0*NUM_TRIANGLES_SUB * NUM_TRIANGLES_SUB + +#define PI 3.14159265359f + +struct TerrainPoint { + char height; + +}; + +#endif // TERRAIN_H diff --git a/tile.cpp b/tile.cpp new file mode 100644 index 0000000..2017a78 --- /dev/null +++ b/tile.cpp @@ -0,0 +1,388 @@ +#include "tile.h" +#include "matrix2d.h" +#include +#include "qscenerenderer.h" +#include +QImage * Tile::m_image = NULL; +QOpenGLTexture * Tile::m_texture = NULL; +QImage * Tile::m_image_border = NULL; +QOpenGLTexture * Tile::m_texture_border = NULL; +QOpenGLTexture * Tile::m_texture_rock = NULL; +QImage * Tile::m_image_rock = NULL; + +Vertex * Tile::m_vertices= NULL; + int Tile::m_numVertex; + + QOpenGLBuffer Tile::m_vertex=QOpenGLBuffer(); + QOpenGLVertexArrayObject Tile::m_object; + QOpenGLShaderProgram *Tile::m_program= NULL; + + +Tile::Tile() + : m_scene(NULL), m_tilevertices(NULL), m_x(0), m_y(0), + m_startpoint_x(0.0f), m_startpoint_y(0.0f), + m_initialized(false), m_normalsBuilt(false) +{ + +} + +void Tile::ensureInitialized(QSceneRenderer* s, int x, int y) +{ + if (!m_initialized) { + init(s, x, y); + } +} + +void Tile::ensureNormalsBuilt() +{ + if (!m_normalsBuilt && m_initialized) { + buildNormals(); + m_normalsBuilt = true; + } +} + +void Tile::init(QSceneRenderer* s, int x, int y) +{ + m_x = x; + m_y = y; + m_scene = s; + + //m_x*LOD_0_SIZE *1.5+ (m_y%2==1 ?( LOD_0_SIZE*1.5f)/2.0f:0),m_y*LOD_0_SIZE/2.0f,1.0f) + + // m_startpoint_x =( m_scene->getNumPoints05()*3*x)+ (y%2==1? (m_scene->getNumPoints05()*1.5):0); + //m_startpoint_y = m_scene->getNumPoints05()*y; + + m_startpoint_x =( m_scene->getNumPoints05()*1.5f*x) ; + m_startpoint_y = m_scene->getNumPoints05()*y*2.0f + (x%2==1? (m_scene->getNumPoints05()):0) ; + + bool first = false; + if (m_vertices==NULL){ + buildVertices();first=true; + } + + buildHeights(); + + if (Tile::m_image == NULL) + Tile::m_image = new QImage("/home/bart/project/tiletest/images/grass.jpg"); + if (Tile::m_image_border == NULL) + Tile::m_image_border = new QImage("/home/bart/project/tiletest/images/border.png"); + if (Tile::m_image_rock == NULL) + Tile::m_image_rock = new QImage("/home/bart/project/tiletest/images/rock.jpg"); + + if (Tile::m_texture_rock == NULL) { + m_texture_rock = new QOpenGLTexture(*m_image_rock); + m_texture_rock->setWrapMode(QOpenGLTexture::Repeat); + m_texture_rock->setMinificationFilter(QOpenGLTexture::NearestMipMapNearest); + m_texture_rock->setMagnificationFilter(QOpenGLTexture::Nearest); + //m_texture->setFormat(QOpenGLTexture::RGB32F);33 + m_texture_rock->allocateStorage(); + } + if (Tile::m_texture_border == NULL) { + m_texture_border = new QOpenGLTexture(*m_image_border); + m_texture_border->setWrapMode(QOpenGLTexture::Repeat); + m_texture_border->setMinificationFilter(QOpenGLTexture::NearestMipMapNearest); + m_texture_border->setMagnificationFilter(QOpenGLTexture::Nearest); + //m_texture->setFormat(QOpenGLTexture::RGB32F);33 + m_texture_border->allocateStorage(); + } + if (Tile::m_texture == NULL) { + m_texture = new QOpenGLTexture(*m_image); + m_texture->setWrapMode(QOpenGLTexture::Repeat); + m_texture->setMinificationFilter(QOpenGLTexture::NearestMipMapNearest); + m_texture->setMagnificationFilter(QOpenGLTexture::Nearest); + //m_texture->setFormat(QOpenGLTexture::RGB32F); + m_texture->allocateStorage(); + } + + if (first){ + m_program = new QOpenGLShaderProgram(); + m_program->addShaderFromSourceFile(QOpenGLShader::Vertex, "/home/bart/project/tiletest/shaders/simple.vert"); + m_program->addShaderFromSourceFile(QOpenGLShader::Fragment, "/home/bart/project/tiletest/shaders/simple.frag"); + m_program->link(); + } + m_program->bind(); + // Generate 1 buffer, put the resulting identifier in vertexbuffer + // Create Buffer (Do not release until VAO is created) + if (first) { + m_vertex.create(); + m_vertex.bind(); + m_vertex.setUsagePattern(QOpenGLBuffer::StaticDraw); + m_vertex.allocate(m_vertices, sizeof(Vertex) * (m_numVertex+1)); + + + + // Create Vertex Array Object + m_object.create(); + m_object.bind(); + m_program->enableAttributeArray(0); + m_program->enableAttributeArray(1); + + m_program->setAttributeBuffer(0, GL_FLOAT, Vertex::positionOffset(), Vertex::PositionTupleSize, Vertex::stride()); + m_program->setAttributeBuffer(1, GL_FLOAT, Vertex::colorOffset(), Vertex::ColorTupleSize, Vertex::stride()); + + + + // Release (unbind) all + m_object.release(); + m_vertex.release(); + m_program->release(); + +} + + m_initialized = true; +} + +void Tile::paint(QMatrix4x4 p, QVector3D& cameraPosition,QVector3D& cameraUpDirection,QMatrix4x4& vMatrix, float zRot) +{ + if (!m_initialized) return; + + + QMatrix4x4 mModelToCamera; + QMatrix4x4 rMatrix; + QMatrix4x4 mMatrix; + + float fSunAngle = 45.0; + + + QVector3D vSunPos(-sin(fSunAngle*PI/180.0f), -cos(fSunAngle*PI/180.0f), 0.0); + + glActiveTexture(GL_TEXTURE0); + + //mMatrix.translate(m_x*LOD_0_SIZE *1.5+ (m_y%2==1 ?( LOD_0_SIZE*1.5f)/2.0f:0),m_y*LOD_0_SIZE/2.0f,1.0f); + mMatrix.translate(m_x*(LOD_0_SIZE*0.75) ,(m_y*(LOD_0_SIZE_Y*2)+(m_x%2==0?0:LOD_0_SIZE_Y)) ,1.0f); + + m_texture->bind(0); + m_texture_border->bind(1); + m_texture_rock->bind(2); + // Render using our shader + m_program->bind(); + + m_heightsbuffer.create(); + m_heightsbuffer.bind(); + m_heightsbuffer.setUsagePattern(QOpenGLBuffer::StaticDraw); + m_heightsbuffer.allocate(m_tilevertices, sizeof(TileVertexInfo) * (m_numVertex+1)); + + { vSunPos.normalize(); + float fSign = -1.0f; // This just returns -1.0f or 1.0f (try to examine this) + m_program->setUniformValue("sunLight.vColor", QVector3D(1.0f, 1.0f, 1.0f)); + m_program->setUniformValue("sunLight.fAmbientIntensity",0.8f); + m_program->setUniformValue("sunLight.vDirection", vSunPos); + QVector3D vPos = QVector3D(fSign*15.0f, 0.0f, 50.0f-float(0)*25.0f); + vPos.setZ(vPos.z()+1.0f); + mModelToCamera =vMatrix * mMatrix.inverted().transposed();//QMatrix4x4();// vPos.translate(1.0f); + + //mModelToCamera.scale(0.8); + + + m_program->setUniformValue("grass", 0); + m_program->setUniformValue("border", 1); + m_program->setUniformValue("rock", 2); + m_object.bind(); + + m_heightsbuffer.bind(); + m_program->enableAttributeArray(2); + m_program->setAttributeBuffer(2, GL_FLOAT,TileVertexInfo::heightOffset(),TileVertexInfo::HeightTupleSize, TileVertexInfo::stride()); + m_program->enableAttributeArray(3); + m_program->setAttributeBuffer(3, GL_FLOAT,TileVertexInfo::normalOffset(),TileVertexInfo::NormalTupleSize, TileVertexInfo::stride()); + + m_heightsbuffer.release(); + + + +rMatrix.translate(0.5f,LOD_0_SIZE_Y,0); + +m_program->setUniformValue("cameraPosition", cameraPosition); + //mModelToCamera =vMatrix * mMatrix.inverted().transposed();//QMatrix4x4();// vPos.translate(1.0f); + m_program->setUniformValue("normalMatrix", mModelToCamera); + m_program->setUniformValue("modelMatrix", rMatrix); + m_program->setUniformValue("modelViewMatrix", vMatrix * mMatrix); + m_program->setUniformValue("MVP", p * vMatrix * mMatrix); + glDrawArrays(GL_TRIANGLES, 0, NUM_TRIANGLES*NUM_TRIANGLE_VERTICES); + + + + m_object.release(); + + + }m_heightsbuffer.destroy(); + m_program->release(); +} + +void Tile::buildVertices() +{ + m_numVertex= NUM_TRIANGLES*NUM_TRIANGLE_VERTICES; + m_vertices = new Vertex[m_numVertex]; + int cnt =0; + + + for (int i = 0; i< NUM_TRIANGLES_0; i++) { + + addTriangleVertices(cnt + , QVector2D( 0.0f, 0.0f) + , QVector2D( 0.5f*cos(PI*60.0f*i/180.0f)*-1.0f , 0.5f*sin(PI*60.0f*i/180.0f))//, QVector2D(-LOD_0_SIZE/2.0f , 0.0f ) ) + , QVector2D( 0.5f*cos(PI*60.0f*(i+1)/180.0f)*-1.0f , 0.5f*sin(PI*60.0f*(i+1)/180.0f))//, QVector2D(-LOD_0_SIZE/4.0f , LOD_0_SIZE/2.0f) ) + //, QVector2D(0.0f , 0.0f ) ) + , 1 , 0, 0 ); + } + +} + + + +void Tile::addTriangleVertices(int &cnt, QVector2D t1, QVector2D t2, QVector2D t3,int level, int hex, int l1) +{ + if (level>0) { + level--; + addTriangleVertices(cnt + , QVector2D( t1.x(), t1.y())//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , level, hex, 0 + ); + + addTriangleVertices(cnt + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f)//, QVector2D(0,0) ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f)//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , level, hex, 1 + ); + + addTriangleVertices(cnt + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( t2.x(), t2.y() )//, t1.texturepos()*0.7f ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f)//,QVector2D(0,0) ) + , level, hex, 2 + ); + + addTriangleVertices(cnt + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//,QVector2D(0,0) ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( t3.x(), t3.y() )//, t1.texturepos()) + , level, hex, 3 + ); + } + else { + drawSubTriangleVertices(cnt + , QVector2D( t1.x(), t1.y())//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , hex, l1,0 + ); + + drawSubTriangleVertices(cnt + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f)//, QVector2D(0,0) ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f)//, QVector2D(0,0) ) + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , hex, l1,1 + ); + + drawSubTriangleVertices(cnt + , QVector2D( (t1.x()+t2.x())/2.0f, (t1.y()+t2.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( t2.x(), t2.y() )//, t1.texturepos()*0.7f ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f)//,QVector2D(0,0) ) + , hex, l1,2 + ); + + drawSubTriangleVertices(cnt + , QVector2D( (t1.x()+t3.x())/2.0f , (t1.y()+t3.y())/2.0f )//,QVector2D(0,0) ) + , QVector2D( (t2.x()+t3.x())/2.0f, (t2.y()+t3.y())/2.0f )//, QVector2D(0,0) ) + , QVector2D( t3.x(), t3.y() )//, t1.texturepos()) + , hex, l1,3 + ); + } + +} + +void Tile::drawSubTriangleVertices(int &cnt, QVector2D t1, QVector2D t2, QVector2D t3, int hex, int l1, int l2) +{ + + m_vertices[cnt++] = Vertex( t1 + , QVector2D(t1.x()+LOD_0_SIZE/2.0f,t1.y()+LOD_0_SIZE/2.0f) + + ); + m_vertices[cnt++] = Vertex( t2 + , QVector2D(t2.x()+LOD_0_SIZE/2.0f,t2.y()+LOD_0_SIZE/2.0f) + + ); + m_vertices[cnt++] = Vertex( t3 + , QVector2D(t3.x()+LOD_0_SIZE/2.0f,t3.y()+LOD_0_SIZE/2.0f) + + ); + + +} + + + +void Tile::buildHeights() { + m_tilevertices = new TileVertexInfo[m_numVertex]; + Matrix2D * points = Tile::m_scene->getMapPoints(); + for (int i = 0; i< m_numVertex; i++) { + + /*float x=m_vertices[i].position().x(); + int xpos = m_vertices[i].position().x()*(m_scene->getNumPoints05()*2); + int mappos=(int) round( m_startpoint_x+ ( m_vertices[i].position().x())*(m_scene->getNumPoints05()*2)); + int res = (int) round( m_startpoint_x+ ( m_vertices[i].position().x())*(m_scene->getNumPoints05()*2));*/ + float r = points->operator ()( (int) round( m_startpoint_x+ ( m_vertices[i].position().x())*(m_scene->getNumPoints05()*2.0f)) + ,(int) round( m_startpoint_y+ ( m_vertices[i].position().y())*(m_scene->getNumPoints05()*2.0f))).height /255.0f; + //m_heights[i] = 1r; + m_tilevertices[i].setHeight(r); + //m_tilevertices[i].setNormal(QVector3D(rand()%20/10.0f-1.0,rand()%20/10.0f-1.0,rand()%20/10.0f-1.0)); + + } + m_faces.reserve(m_numVertex/3); + int i =0; + for (int h = 0; h< 6; h++) { + m_face[h].createSub(); + for (int l0 = 0; l0< 4; l0++) { + m_face[h].getSub(l0).createSub(); + for (int l1 = 0; l1< 4; l1++) { + + m_face[h].getSub(l0).getSub(l1).setSettings( + &m_vertices[i],&m_tilevertices[i], + &m_vertices[i+1],&m_tilevertices[i+1], + &m_vertices[i+2],&m_tilevertices[i+2] + ); + m_faces.push_back(m_face[h].getSub(l0).getSub(l1)); + i +=3; + } + } + } +} + +void Tile::findFaces(std::vector &vec, QVector2D s) +{ + if (!m_initialized) return; + for (int h = 0; h< 6; h++) { + m_face[h].findFaces(vec, s); + + } +} + +void Tile::buildNormals() +{ + if (!m_initialized) return; + std::vector vec; + for (int i=0; igetTile(m_x-1,m_y)->findFaces(vec,m_vertices[i].position()); + m_scene->getTile(m_x+1,m_y)->findFaces(vec,m_vertices[i].position()); + + QVector3D r; + float cnt =0; + for (std::vector::iterator it = vec.begin() ; it != vec.end(); ++it) { + QVector3D v = (*it)->normal(); + cnt++; + r.setX(r.x() + v.x()); + r.setY(r.y() + v.y()); + r.setZ(r.z() + v.z()); + } + + r.setX(r.x() /cnt); + r.setY(r.y() /cnt); + r.setZ(r.z() /cnt); + m_tilevertices[i].setNormal(r); + } +} diff --git a/tile.h b/tile.h new file mode 100644 index 0000000..08d6845 --- /dev/null +++ b/tile.h @@ -0,0 +1,59 @@ +#ifndef TILE_H +#define TILE_H +#include +#include +#include +#include +#include "vertex.h" +#include "terrain.h" +#include "tilevertexinfo.h" +#include +#include "face.h" +class QSceneRenderer; + +class Tile +{ +public: + Tile(); + void init(QSceneRenderer* s,int x, int y); + void paint(QMatrix4x4 p,QVector3D& cameraPosition,QVector3D& cameraUpDirection,QMatrix4x4& vMatrix, float zRot); + void buildVertices(); + void buildNormals(); + bool isInitialized() const { return m_initialized; } + bool normalsBuilt() const { return m_normalsBuilt; } + void ensureInitialized(QSceneRenderer* s, int x, int y); + void ensureNormalsBuilt(); + void findFaces(std::vector &vec, QVector2D s); +protected: + void addTriangleVertices(int &cnt, QVector2D t1, QVector2D t2, QVector2D t3,int level, int hex, int l1); + void drawSubTriangleVertices(int &cnt, QVector2D t1, QVector2D t2, QVector2D t3, int hex, int l1, int l2); + void buildHeights(); + + QOpenGLBuffer m_heightsbuffer; + static QOpenGLBuffer m_vertex; + static QOpenGLVertexArrayObject m_object; + static QOpenGLShaderProgram *m_program; + QSceneRenderer *m_scene; + static int m_numVertex; + TileVertexInfo * m_tilevertices; + + std::vector m_faces; + Face m_face[6]; + + int m_x; + int m_y; + + float m_startpoint_x; + float m_startpoint_y; + bool m_initialized; + bool m_normalsBuilt; + static Vertex * m_vertices; + static QOpenGLTexture * m_texture; + static QOpenGLTexture * m_texture_border; + static QOpenGLTexture * m_texture_rock; + static QImage * m_image; + static QImage * m_image_rock; + static QImage * m_image_border; +}; + +#endif // TILE_H diff --git a/tile.o b/tile.o new file mode 100644 index 0000000..85f60c9 Binary files /dev/null and b/tile.o differ diff --git a/tiletest b/tiletest new file mode 100755 index 0000000..04c44f8 Binary files /dev/null and b/tiletest differ diff --git a/tiletest.pro b/tiletest.pro new file mode 100644 index 0000000..a994d2d --- /dev/null +++ b/tiletest.pro @@ -0,0 +1,42 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-05-02T19:47:48 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = tiletest +TEMPLATE = app + + +SOURCES += main.cpp\ + mainwindow.cpp \ + qscenerenderer.cpp \ + vertex.cpp \ + tile.cpp \ + tilevertexinfo.cpp \ + face.cpp + +HEADERS += mainwindow.h \ + qscenerenderer.h \ + vertex.h \ + tile.h \ + terrain.h \ + tilevertexinfo.h \ + matrix2d.h \ + face.h + +FORMS += mainwindow.ui + +unix: CONFIG += link_pkgconfig +unix: PKGCONFIG += glew + +DISTFILES += \ + shaders/simple.vert \ + shaders/simple.frag + +RESOURCES += \ + shaders.qrc diff --git a/tiletest.pro.user b/tiletest.pro.user new file mode 100644 index 0000000..89ccd32 --- /dev/null +++ b/tiletest.pro.user @@ -0,0 +1,334 @@ + + + + + + EnvironmentId + {f0a66801-0dd7-42e1-b4c1-85787695328d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.6.0 GCC 64bit + Desktop Qt 5.6.0 GCC 64bit + qt.56.gcc_64_kit + 0 + 0 + 0 + + /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /home/bart/project/build-tiletest-Desktop_Qt_5_6_0_GCC_64bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + tiletest + + Qt4ProjectManager.Qt4RunConfiguration:/home/bart/project/tiletest/tiletest.pro + true + + tiletest.pro + false + false + + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/tilevertexinfo.cpp b/tilevertexinfo.cpp new file mode 100644 index 0000000..baa3b79 --- /dev/null +++ b/tilevertexinfo.cpp @@ -0,0 +1,4 @@ +#include "tilevertexinfo.h" + + + diff --git a/tilevertexinfo.h b/tilevertexinfo.h new file mode 100644 index 0000000..6633e75 --- /dev/null +++ b/tilevertexinfo.h @@ -0,0 +1,35 @@ +#ifndef TILEVERTEXINFO_H +#define TILEVERTEXINFO_H + +#include +#include +#include "vertex.h" +class TileVertexInfo +{ + +public: + Q_DECL_CONSTEXPR inline TileVertexInfo(){} + Q_DECL_CONSTEXPR inline TileVertexInfo(float z):m_z(z){} + // Accessors / Mutators + Q_DECL_CONSTEXPR const float& height() const { return m_z; } + + void inline setHeight(float f){m_z=f;} + void inline setNormal(QVector3D n){m_normal=n;} + //void calculateNormal(QVector2D v); + + static const int HeightTupleSize = 1; + static const int NormalTupleSize = 3; + static int heightOffset() { return offsetof(TileVertexInfo, m_z); } + static int normalOffset() { return offsetof(TileVertexInfo, m_normal); } + static int stride() { return sizeof(TileVertexInfo); } + +private: + float m_z=0.0f; + QVector3D m_normal; +}; + +Q_DECLARE_TYPEINFO(TileVertexInfo, Q_MOVABLE_TYPE); + + + +#endif // TILEVERTEXINFO_H diff --git a/tilevertexinfo.o b/tilevertexinfo.o new file mode 100644 index 0000000..e3b0154 Binary files /dev/null and b/tilevertexinfo.o differ diff --git a/ui_mainwindow.h b/ui_mainwindow.h new file mode 100644 index 0000000..75725d0 --- /dev/null +++ b/ui_mainwindow.h @@ -0,0 +1,65 @@ +/******************************************************************************** +** Form generated from reading UI file 'mainwindow.ui' +** +** Created by: Qt User Interface Compiler version 5.15.13 +** +** WARNING! All changes made in this file will be lost when recompiling UI file! +********************************************************************************/ + +#ifndef UI_MAINWINDOW_H +#define UI_MAINWINDOW_H + +#include +#include +#include +#include +#include +#include "qscenerenderer.h" + +QT_BEGIN_NAMESPACE + +class Ui_MainWindow +{ +public: + QWidget *centralWidget; + QHBoxLayout *horizontalLayout; + QSceneRenderer *openGLWidget; + + void setupUi(QMainWindow *MainWindow) + { + if (MainWindow->objectName().isEmpty()) + MainWindow->setObjectName(QString::fromUtf8("MainWindow")); + MainWindow->resize(606, 463); + centralWidget = new QWidget(MainWindow); + centralWidget->setObjectName(QString::fromUtf8("centralWidget")); + horizontalLayout = new QHBoxLayout(centralWidget); + horizontalLayout->setSpacing(6); + horizontalLayout->setContentsMargins(11, 11, 11, 11); + horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout")); + openGLWidget = new QSceneRenderer(centralWidget); + openGLWidget->setObjectName(QString::fromUtf8("openGLWidget")); + openGLWidget->setFocusPolicy(Qt::StrongFocus); + + horizontalLayout->addWidget(openGLWidget); + + MainWindow->setCentralWidget(centralWidget); + + retranslateUi(MainWindow); + + QMetaObject::connectSlotsByName(MainWindow); + } // setupUi + + void retranslateUi(QMainWindow *MainWindow) + { + MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr)); + } // retranslateUi + +}; + +namespace Ui { + class MainWindow: public Ui_MainWindow {}; +} // namespace Ui + +QT_END_NAMESPACE + +#endif // UI_MAINWINDOW_H diff --git a/vertex.cpp b/vertex.cpp new file mode 100644 index 0000000..9a1554d --- /dev/null +++ b/vertex.cpp @@ -0,0 +1 @@ +#include "vertex.h" diff --git a/vertex.h b/vertex.h new file mode 100644 index 0000000..e9af46d --- /dev/null +++ b/vertex.h @@ -0,0 +1,58 @@ +#ifndef VERTEX_H +#define VERTEX_H + +#include +#include +#include "face.h" +class Vertex +{ +public: + // Constructors + Q_DECL_CONSTEXPR Vertex(); + //Q_DECL_CONSTEXPR explicit Vertex(const QVector2D &position); + Q_DECL_CONSTEXPR Vertex(const QVector2D &position, const QVector2D &texturepos); + + // Accessors / Mutators + Q_DECL_CONSTEXPR const QVector2D& position() const; + Q_DECL_CONSTEXPR const QVector2D& texturepos() const; + void setPosition(const QVector2D& position); + void setTexturepos(const QVector2D& texturepos); + + // OpenGL Helpers + static const int PositionTupleSize = 3; + static const int ColorTupleSize = 3; + static Q_DECL_CONSTEXPR int positionOffset(); + static Q_DECL_CONSTEXPR int colorOffset(); + static Q_DECL_CONSTEXPR int stride(); + +private: + QVector2D m_position; + QVector2D m_texturepos; + +}; + +/******************************************************************************* + * Inline Implementation + ******************************************************************************/ + +// Note: Q_MOVABLE_TYPE means it can be memcpy'd. +Q_DECLARE_TYPEINFO(Vertex, Q_MOVABLE_TYPE); + +// Constructors +Q_DECL_CONSTEXPR inline Vertex::Vertex() {} +//Q_DECL_CONSTEXPR inline Vertex::Vertex(const QVector2D &position) : m_position(position) {} +Q_DECL_CONSTEXPR inline Vertex::Vertex(const QVector2D &position, const QVector2D &texturepos) + : m_position(position), m_texturepos(texturepos) {} + +// Accessors / Mutators +Q_DECL_CONSTEXPR inline const QVector2D& Vertex::position() const { return m_position; } +Q_DECL_CONSTEXPR inline const QVector2D& Vertex::texturepos() const { return m_texturepos; } +void inline Vertex::setPosition(const QVector2D& position) { m_position = position; } +void inline Vertex::setTexturepos(const QVector2D& texturepos) { m_texturepos = texturepos; } + +// OpenGL Helpers +Q_DECL_CONSTEXPR inline int Vertex::positionOffset() { return offsetof(Vertex, m_position); } +Q_DECL_CONSTEXPR inline int Vertex::colorOffset() { return offsetof(Vertex, m_texturepos); } +Q_DECL_CONSTEXPR inline int Vertex::stride() { return sizeof(Vertex); } + +#endif // VERTEX_H diff --git a/vertex.o b/vertex.o new file mode 100644 index 0000000..6ce4df3 Binary files /dev/null and b/vertex.o differ