summaryrefslogtreecommitdiffstats
path: root/examples/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/opengl')
-rw-r--r--examples/opengl/2dpainting/2dpainting.pro2
-rw-r--r--examples/opengl/2dpainting/CMakeLists.txt39
-rw-r--r--examples/opengl/CMakeLists.txt17
-rw-r--r--examples/opengl/computegles31/CMakeLists.txt45
-rw-r--r--examples/opengl/computegles31/computegles31.pro2
-rw-r--r--examples/opengl/contextinfo/CMakeLists.txt35
-rw-r--r--examples/opengl/contextinfo/contextinfo.pro2
-rw-r--r--examples/opengl/contextinfo/renderwindow.cpp2
-rw-r--r--examples/opengl/cube/CMakeLists.txt61
-rw-r--r--examples/opengl/cube/cube.pro2
-rw-r--r--examples/opengl/doc/src/2dpainting.qdoc27
-rw-r--r--examples/opengl/doc/src/cube.qdoc10
-rw-r--r--examples/opengl/hellogl2/CMakeLists.txt39
-rw-r--r--examples/opengl/hellogl2/hellogl2.pro2
-rw-r--r--examples/opengl/hellogles3/CMakeLists.txt46
-rw-r--r--examples/opengl/hellogles3/hellogles3.pro2
-rw-r--r--examples/opengl/hellowindow/CMakeLists.txt34
-rw-r--r--examples/opengl/hellowindow/hellowindow.h2
-rw-r--r--examples/opengl/hellowindow/hellowindow.pro2
-rw-r--r--examples/opengl/legacy/README4
-rw-r--r--examples/opengl/legacy/framebufferobject2/cubelogo.pngbin2884 -> 0 bytes
-rw-r--r--examples/opengl/legacy/framebufferobject2/framebufferobject2.pro11
-rw-r--r--examples/opengl/legacy/framebufferobject2/framebufferobject2.qrc5
-rw-r--r--examples/opengl/legacy/framebufferobject2/glwidget.cpp257
-rw-r--r--examples/opengl/legacy/framebufferobject2/glwidget.h75
-rw-r--r--examples/opengl/legacy/framebufferobject2/main.cpp71
-rw-r--r--examples/opengl/legacy/grabber/glwidget.cpp286
-rw-r--r--examples/opengl/legacy/grabber/glwidget.h107
-rw-r--r--examples/opengl/legacy/grabber/grabber.pro12
-rw-r--r--examples/opengl/legacy/grabber/main.cpp61
-rw-r--r--examples/opengl/legacy/grabber/mainwindow.cpp216
-rw-r--r--examples/opengl/legacy/grabber/mainwindow.h104
-rw-r--r--examples/opengl/legacy/hellogl/glwidget.cpp207
-rw-r--r--examples/opengl/legacy/hellogl/hellogl.pro17
-rw-r--r--examples/opengl/legacy/hellogl/main.cpp69
-rw-r--r--examples/opengl/legacy/hellogl/window.cpp107
-rw-r--r--examples/opengl/legacy/legacy.pro16
-rw-r--r--examples/opengl/legacy/overpainting/bubble.cpp122
-rw-r--r--examples/opengl/legacy/overpainting/bubble.h77
-rw-r--r--examples/opengl/legacy/overpainting/glwidget.cpp293
-rw-r--r--examples/opengl/legacy/overpainting/glwidget.h114
-rw-r--r--examples/opengl/legacy/overpainting/main.cpp61
-rw-r--r--examples/opengl/legacy/overpainting/overpainting.pro19
-rw-r--r--examples/opengl/legacy/pbuffers/cube.cpp338
-rw-r--r--examples/opengl/legacy/pbuffers/cube.h159
-rw-r--r--examples/opengl/legacy/pbuffers/cubelogo.pngbin2884 -> 0 bytes
-rw-r--r--examples/opengl/legacy/pbuffers/glwidget.cpp256
-rw-r--r--examples/opengl/legacy/pbuffers/glwidget.h99
-rw-r--r--examples/opengl/legacy/pbuffers/main.cpp75
-rw-r--r--examples/opengl/legacy/pbuffers/pbuffers.pro13
-rw-r--r--examples/opengl/legacy/pbuffers/pbuffers.qrc5
-rw-r--r--examples/opengl/legacy/pbuffers2/bubbles.svg215
-rw-r--r--examples/opengl/legacy/pbuffers2/designer.pngbin2810 -> 0 bytes
-rw-r--r--examples/opengl/legacy/pbuffers2/glwidget.cpp328
-rw-r--r--examples/opengl/legacy/pbuffers2/glwidget.h94
-rw-r--r--examples/opengl/legacy/pbuffers2/main.cpp71
-rw-r--r--examples/opengl/legacy/pbuffers2/pbuffers2.pro11
-rw-r--r--examples/opengl/legacy/pbuffers2/pbuffers2.qrc6
-rw-r--r--examples/opengl/legacy/samplebuffers/glwidget.cpp174
-rw-r--r--examples/opengl/legacy/samplebuffers/glwidget.h71
-rw-r--r--examples/opengl/legacy/samplebuffers/main.cpp81
-rw-r--r--examples/opengl/legacy/samplebuffers/samplebuffers.pro10
-rw-r--r--examples/opengl/legacy/shared/qtlogo.cpp398
-rw-r--r--examples/opengl/legacy/shared/qtlogo.h78
-rw-r--r--examples/opengl/opengl.pro4
-rw-r--r--examples/opengl/openglwindow/.prev_CMakeLists.txt36
-rw-r--r--examples/opengl/openglwindow/CMakeLists.txt36
-rw-r--r--examples/opengl/openglwindow/main.cpp177
-rw-r--r--examples/opengl/openglwindow/openglwindow.cpp (renamed from examples/opengl/legacy/hellogl/glwidget.h)142
-rw-r--r--examples/opengl/openglwindow/openglwindow.h (renamed from examples/opengl/legacy/hellogl/window.h)47
-rw-r--r--examples/opengl/openglwindow/openglwindow.pri4
-rw-r--r--examples/opengl/openglwindow/openglwindow.pro7
-rw-r--r--examples/opengl/paintedwindow/CMakeLists.txt32
-rw-r--r--examples/opengl/paintedwindow/paintedwindow.h4
-rw-r--r--examples/opengl/paintedwindow/paintedwindow.pro2
-rw-r--r--examples/opengl/qopenglwidget/CMakeLists.txt51
-rw-r--r--examples/opengl/qopenglwidget/mainwindow.cpp2
-rw-r--r--examples/opengl/qopenglwidget/qopenglwidget.pro2
-rw-r--r--examples/opengl/qopenglwindow/CMakeLists.txt49
-rw-r--r--examples/opengl/qopenglwindow/qopenglwindow.pro1
-rw-r--r--examples/opengl/textures/CMakeLists.txt55
-rw-r--r--examples/opengl/textures/textures.pro2
-rw-r--r--examples/opengl/threadedqopenglwidget/CMakeLists.txt37
-rw-r--r--examples/opengl/threadedqopenglwidget/threadedqopenglwidget.pro2
84 files changed, 965 insertions, 4891 deletions
diff --git a/examples/opengl/2dpainting/2dpainting.pro b/examples/opengl/2dpainting/2dpainting.pro
index b9611f5b40..751c2022fd 100644
--- a/examples/opengl/2dpainting/2dpainting.pro
+++ b/examples/opengl/2dpainting/2dpainting.pro
@@ -1,4 +1,4 @@
-QT += widgets
+QT += widgets opengl openglwidgets
HEADERS = glwidget.h \
helper.h \
diff --git a/examples/opengl/2dpainting/CMakeLists.txt b/examples/opengl/2dpainting/CMakeLists.txt
new file mode 100644
index 0000000000..31f8005a19
--- /dev/null
+++ b/examples/opengl/2dpainting/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Generated from 2dpainting.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(2dpainting LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/2dpainting")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(2dpainting
+ glwidget.cpp glwidget.h
+ helper.cpp helper.h
+ main.cpp
+ widget.cpp widget.h
+ window.cpp window.h
+)
+target_link_libraries(2dpainting PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+install(TARGETS 2dpainting
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/CMakeLists.txt b/examples/opengl/CMakeLists.txt
new file mode 100644
index 0000000000..3d5b055b1a
--- /dev/null
+++ b/examples/opengl/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Generated from opengl.pro.
+
+add_subdirectory(hellowindow)
+add_subdirectory(paintedwindow)
+add_subdirectory(openglwindow)
+add_subdirectory(qopenglwindow)
+if(TARGET Qt::Widgets)
+ add_subdirectory(contextinfo)
+ add_subdirectory(threadedqopenglwidget)
+ add_subdirectory(2dpainting)
+ add_subdirectory(hellogl2)
+ add_subdirectory(qopenglwidget)
+ add_subdirectory(cube)
+ add_subdirectory(textures)
+ add_subdirectory(hellogles3)
+ add_subdirectory(computegles31)
+endif()
diff --git a/examples/opengl/computegles31/CMakeLists.txt b/examples/opengl/computegles31/CMakeLists.txt
new file mode 100644
index 0000000000..2012fca361
--- /dev/null
+++ b/examples/opengl/computegles31/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Generated from computegles31.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(computegles31 LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/computegles31")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(computegles31
+ glwindow.cpp glwindow.h
+ main.cpp
+)
+target_link_libraries(computegles31 PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+
+# Resources:
+set(computegles31_resource_files
+ "Qt-logo-medium.png"
+)
+
+qt6_add_resources(computegles31 "computegles31"
+ PREFIX
+ "/"
+ FILES
+ ${computegles31_resource_files}
+)
+
+install(TARGETS computegles31
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/computegles31/computegles31.pro b/examples/opengl/computegles31/computegles31.pro
index 5b9d7e4387..8d9b00ba83 100644
--- a/examples/opengl/computegles31/computegles31.pro
+++ b/examples/opengl/computegles31/computegles31.pro
@@ -1,3 +1,5 @@
+QT += opengl
+
HEADERS = $$PWD/glwindow.h
SOURCES = $$PWD/glwindow.cpp \
diff --git a/examples/opengl/contextinfo/CMakeLists.txt b/examples/opengl/contextinfo/CMakeLists.txt
new file mode 100644
index 0000000000..124dfd4b52
--- /dev/null
+++ b/examples/opengl/contextinfo/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Generated from contextinfo.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(contextinfo LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/contextinfo")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(contextinfo
+ main.cpp
+ renderwindow.cpp renderwindow.h
+ widget.cpp widget.h
+)
+target_link_libraries(contextinfo PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::Widgets
+)
+
+install(TARGETS contextinfo
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/contextinfo/contextinfo.pro b/examples/opengl/contextinfo/contextinfo.pro
index 3d948dd282..ae8f4067b6 100644
--- a/examples/opengl/contextinfo/contextinfo.pro
+++ b/examples/opengl/contextinfo/contextinfo.pro
@@ -1,5 +1,5 @@
TEMPLATE = app
-QT += widgets
+QT += widgets opengl
requires(qtConfig(filedialog))
SOURCES += main.cpp \
diff --git a/examples/opengl/contextinfo/renderwindow.cpp b/examples/opengl/contextinfo/renderwindow.cpp
index ea9a7a24cb..b778fd1d89 100644
--- a/examples/opengl/contextinfo/renderwindow.cpp
+++ b/examples/opengl/contextinfo/renderwindow.cpp
@@ -52,7 +52,7 @@
#include <QTimer>
#include <QMatrix4x4>
#include <QOpenGLContext>
-#include <QOpenGLShaderProgram>
+#include <QtOpenGL/QOpenGLShaderProgram>
#include <QOpenGLFunctions>
RenderWindow::RenderWindow(const QSurfaceFormat &format)
diff --git a/examples/opengl/cube/CMakeLists.txt b/examples/opengl/cube/CMakeLists.txt
new file mode 100644
index 0000000000..2d0d0f7887
--- /dev/null
+++ b/examples/opengl/cube/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Generated from cube.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(cube LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/cube")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(cube
+ geometryengine.cpp geometryengine.h
+ main.cpp
+ mainwidget.cpp mainwidget.h
+)
+target_link_libraries(cube PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+
+# Resources:
+set(shaders_resource_files
+ "fshader.glsl"
+ "vshader.glsl"
+)
+
+qt6_add_resources(cube "shaders"
+ PREFIX
+ "/"
+ FILES
+ ${shaders_resource_files}
+)
+set(textures_resource_files
+ "cube.png"
+)
+
+qt6_add_resources(cube "textures"
+ PREFIX
+ "/"
+ FILES
+ ${textures_resource_files}
+)
+
+install(TARGETS cube
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/cube/cube.pro b/examples/opengl/cube/cube.pro
index b9416f1a9d..95a411322a 100644
--- a/examples/opengl/cube/cube.pro
+++ b/examples/opengl/cube/cube.pro
@@ -1,4 +1,4 @@
-QT += core gui widgets
+QT += core gui widgets opengl openglwidgets
TARGET = cube
TEMPLATE = app
diff --git a/examples/opengl/doc/src/2dpainting.qdoc b/examples/opengl/doc/src/2dpainting.qdoc
index e6b33e2a14..32b332fa8a 100644
--- a/examples/opengl/doc/src/2dpainting.qdoc
+++ b/examples/opengl/doc/src/2dpainting.qdoc
@@ -30,8 +30,8 @@
\title 2D Painting Example
\ingroup examples-widgets-opengl
- \brief The 2D Painting example shows how QPainter and QGLWidget can be used
- together to display accelerated 2D graphics on supported hardware.
+ \brief The 2D Painting example shows how QPainter and QOpenGLWidget can be
+ used together to display accelerated 2D graphics on supported hardware.
\image 2dpainting-example.png
@@ -39,23 +39,23 @@
paint devices provided by QPaintDevice subclasses, such as QWidget
and QImage.
- Since QGLWidget is a subclass of QWidget, it is possible
+ Since QOpenGLWidget is a subclass of QWidget, it is possible
to reimplement its \l{QWidget::paintEvent()}{paintEvent()} and use
QPainter to draw on the device, just as you would with a QWidget.
The only difference is that the painting operations will be accelerated
in hardware if it is supported by your system's OpenGL drivers.
In this example, we perform the same painting operations on a
- QWidget and a QGLWidget. The QWidget is shown with anti-aliasing
- enabled, and the QGLWidget will also use anti-aliasing if the
+ QWidget and a QOpenGLWidget. The QWidget is shown with anti-aliasing
+ enabled, and the QOpenGLWidget will also use anti-aliasing if the
required extensions are supported by your system's OpenGL driver.
\section1 Overview
- To be able to compare the results of painting onto a QGLWidget subclass
+ To be able to compare the results of painting onto a QOpenGLWidget subclass
with native drawing in a QWidget subclass, we want to show both kinds
of widget side by side. To do this, we derive subclasses of QWidget and
- QGLWidget, using a separate \c Helper class to perform the same painting
+ QOpenGLWidget, using a separate \c Helper class to perform the same painting
operations for each, and lay them out in a top-level widget, itself
provided a the \c Window class.
@@ -63,7 +63,7 @@
In this example, the painting operations are performed by a helper class.
We do this because we want the same painting operations to be performed
- for both our QWidget subclass and the QGLWidget subclass.
+ for both our QWidget subclass and the QOpenGLWidget subclass.
The \c Helper class is minimal:
@@ -81,7 +81,7 @@
The actual painting is performed in the \c paint() function. This takes
a QPainter that has already been set up to paint onto a paint device
- (either a QWidget or a QGLWidget), a QPaintEvent that provides information
+ (either a QWidget or a QOpenGLWidget), a QPaintEvent that provides information
about the region to be painted, and a measure of the elapsed time (in
milliseconds) since the paint device was last updated.
@@ -148,7 +148,7 @@
\section1 GLWidget Class Definition
The \c GLWidget class definition is basically the same as the \c Widget
- class except that it is derived from QGLWidget.
+ class except that it is derived from QOpenGLWidget.
\snippet 2dpainting/glwidget.h 0
@@ -161,11 +161,8 @@
\snippet 2dpainting/glwidget.cpp 0
- As well as initializing the \c elapsed member variable and storing the
- \c Helper object used to paint the widget, the base class's constructor
- is called with the format that specifies the \l QGL::SampleBuffers flag.
- This enables anti-aliasing if it is supported by your system's OpenGL
- driver.
+ The \c elapsed member variable is initialized and the \c Helper object used
+ to paint the widget is stored.
The \c animate() slot is exactly the same as that provided by the \c Widget
class:
diff --git a/examples/opengl/doc/src/cube.qdoc b/examples/opengl/doc/src/cube.qdoc
index 1fdfe0c6ec..4f5b6bda90 100644
--- a/examples/opengl/doc/src/cube.qdoc
+++ b/examples/opengl/doc/src/cube.qdoc
@@ -47,7 +47,7 @@
The example consist of two classes:
\list
- \li \c MainWidget extends QGLWidget and contains OpenGL ES 2.0
+ \li \c MainWidget extends QOpenGLWidget and contains OpenGL ES 2.0
initialization and drawing and mouse and timer event handling
\li \c GeometryEngine handles polygon geometries. Transfers polygon geometry
to vertex buffer objects and draws geometries from vertex buffer objects.
@@ -81,7 +81,7 @@
\snippet cube/fshader.glsl 0
- Using \c QGLShaderProgram we can compile, link and bind shader code to
+ Using QOpenGLShaderProgram we can compile, link and bind shader code to
graphics pipeline. This code uses Qt Resource files to access shader source code.
\snippet cube/mainwidget.cpp 3
@@ -92,9 +92,9 @@
\section1 Loading Textures from Qt Resource Files
- \c QGLWidget interface implements methods for loading textures from QImage to GL
- texture memory. We still need to use OpenGL provided functions for specifying
- the GL texture unit and configuring texture filtering options.
+ The \c QOpenGLWidget interface implements methods for loading textures from QImage
+ to OpenGL texture memory. We still need to use OpenGL provided functions for
+ specifying the OpenGL texture unit and configuring texture filtering options.
\snippet cube/mainwidget.cpp 4
diff --git a/examples/opengl/hellogl2/CMakeLists.txt b/examples/opengl/hellogl2/CMakeLists.txt
new file mode 100644
index 0000000000..798a83594e
--- /dev/null
+++ b/examples/opengl/hellogl2/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Generated from hellogl2.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(hellogl2 LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/hellogl2")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(hellogl2
+ glwidget.cpp glwidget.h
+ logo.cpp logo.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ window.cpp window.h
+)
+target_link_libraries(hellogl2 PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+install(TARGETS hellogl2
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/hellogl2/hellogl2.pro b/examples/opengl/hellogl2/hellogl2.pro
index 3a52e04d74..d7cd38de53 100644
--- a/examples/opengl/hellogl2/hellogl2.pro
+++ b/examples/opengl/hellogl2/hellogl2.pro
@@ -8,7 +8,7 @@ SOURCES = glwidget.cpp \
mainwindow.cpp \
logo.cpp
-QT += widgets
+QT += widgets opengl openglwidgets
# install
target.path = $$[QT_INSTALL_EXAMPLES]/opengl/hellogl2
diff --git a/examples/opengl/hellogles3/CMakeLists.txt b/examples/opengl/hellogles3/CMakeLists.txt
new file mode 100644
index 0000000000..7e8a5e57a7
--- /dev/null
+++ b/examples/opengl/hellogles3/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Generated from hellogles3.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(hellogles3 LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/hellogles3")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(hellogles3
+ ../hellogl2/logo.cpp ../hellogl2/logo.h
+ glwindow.cpp glwindow.h
+ main.cpp
+)
+target_link_libraries(hellogles3 PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+
+# Resources:
+set(hellogles3_resource_files
+ "qtlogo.png"
+)
+
+qt6_add_resources(hellogles3 "hellogles3"
+ PREFIX
+ "/"
+ FILES
+ ${hellogles3_resource_files}
+)
+
+install(TARGETS hellogles3
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/hellogles3/hellogles3.pro b/examples/opengl/hellogles3/hellogles3.pro
index e0d4c25ca6..8d9fbe25ca 100644
--- a/examples/opengl/hellogles3/hellogles3.pro
+++ b/examples/opengl/hellogles3/hellogles3.pro
@@ -1,3 +1,5 @@
+QT += opengl
+
HEADERS = $$PWD/glwindow.h \
$$PWD/../hellogl2/logo.h
diff --git a/examples/opengl/hellowindow/CMakeLists.txt b/examples/opengl/hellowindow/CMakeLists.txt
new file mode 100644
index 0000000000..876c282fbe
--- /dev/null
+++ b/examples/opengl/hellowindow/CMakeLists.txt
@@ -0,0 +1,34 @@
+# Generated from hellowindow.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(hellowindow LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/hellowindow")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(hellowindow
+ hellowindow.cpp hellowindow.h
+ main.cpp
+)
+target_link_libraries(hellowindow PUBLIC
+ Qt::Core
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::OpenGL
+)
+
+install(TARGETS hellowindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/hellowindow/hellowindow.h b/examples/opengl/hellowindow/hellowindow.h
index e6d7970cfc..938c6409a4 100644
--- a/examples/opengl/hellowindow/hellowindow.h
+++ b/examples/opengl/hellowindow/hellowindow.h
@@ -52,7 +52,7 @@
#include <QColor>
#include <QMutex>
-#include <QOpenGLShaderProgram>
+#include <QtOpenGL/QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QSharedPointer>
#include <QTimer>
diff --git a/examples/opengl/hellowindow/hellowindow.pro b/examples/opengl/hellowindow/hellowindow.pro
index cc220fd344..27c274a378 100644
--- a/examples/opengl/hellowindow/hellowindow.pro
+++ b/examples/opengl/hellowindow/hellowindow.pro
@@ -1,4 +1,4 @@
-QT += gui-private core-private
+QT += gui-private core-private opengl
HEADERS += hellowindow.h
SOURCES += hellowindow.cpp main.cpp
diff --git a/examples/opengl/legacy/README b/examples/opengl/legacy/README
deleted file mode 100644
index 8d6cbdef2a..0000000000
--- a/examples/opengl/legacy/README
+++ /dev/null
@@ -1,4 +0,0 @@
-This directory contains legacy examples that use the fixed pipeline
-and thus are not compatible with OpenGL ES 2.0+ and the core profile of
-OpenGL 3.0+. They also rely on the Qt OpenGL module (e.g. QGLWidget) which
-is not advisable in new application.
diff --git a/examples/opengl/legacy/framebufferobject2/cubelogo.png b/examples/opengl/legacy/framebufferobject2/cubelogo.png
deleted file mode 100644
index 2ccbede774..0000000000
--- a/examples/opengl/legacy/framebufferobject2/cubelogo.png
+++ /dev/null
Binary files differ
diff --git a/examples/opengl/legacy/framebufferobject2/framebufferobject2.pro b/examples/opengl/legacy/framebufferobject2/framebufferobject2.pro
deleted file mode 100644
index 3f2578bc1f..0000000000
--- a/examples/opengl/legacy/framebufferobject2/framebufferobject2.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-HEADERS += glwidget.h
-SOURCES += glwidget.cpp main.cpp
-RESOURCES += framebufferobject2.qrc
-
-QT += opengl widgets
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/framebufferobject2
-INSTALLS += target
-
-qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/framebufferobject2/framebufferobject2.qrc b/examples/opengl/legacy/framebufferobject2/framebufferobject2.qrc
deleted file mode 100644
index 9fc1a56a1a..0000000000
--- a/examples/opengl/legacy/framebufferobject2/framebufferobject2.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/res">
- <file>cubelogo.png</file>
-</qresource>
-</RCC>
diff --git a/examples/opengl/legacy/framebufferobject2/glwidget.cpp b/examples/opengl/legacy/framebufferobject2/glwidget.cpp
deleted file mode 100644
index f14d31aff6..0000000000
--- a/examples/opengl/legacy/framebufferobject2/glwidget.cpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-#include <QtGui/QImage>
-#include <qmath.h>
-
-static GLint cubeArray[][3] = {
- {0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0},
- {0, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 1, 1},
- {0, 0, 0}, {1, 0, 0}, {1, 0, 1}, {0, 0, 1},
- {0, 1, 0}, {0, 1, 1}, {1, 1, 1}, {1, 1, 0},
- {0, 1, 0}, {0, 0, 0}, {0, 0, 1}, {0, 1, 1},
- {1, 0, 0}, {1, 1, 0}, {1, 1, 1}, {1, 0, 1}
-};
-
-static GLint cubeTextureArray[][2] = {
- {0, 0}, {1, 0}, {1, 1}, {0, 1},
- {0, 0}, {0, 1}, {1, 1}, {1, 0},
- {0, 0}, {1, 0}, {1, 1}, {0, 1},
- {1, 0}, {0, 0}, {0, 1}, {1, 1},
- {0, 0}, {1, 0}, {1, 1}, {0, 1},
- {1, 0}, {0, 0}, {0, 1}, {1, 1}
-};
-
-static GLint faceArray[][2] = {
- {1, -1}, {1, 1}, {-1, 1}, {-1, -1}
-};
-
-static GLubyte colorArray[][4] = {
- {102, 176, 54, 255},
- {81, 141, 41, 255},
- {62, 108, 32, 255},
- {45, 79, 23, 255}
-};
-
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
-{
- // create the framebuffer object - make sure to have a current
- // context before creating it
- makeCurrent();
- fbo = new QGLFramebufferObject(512, 512);
- timerId = startTimer(20);
- setWindowTitle(tr("OpenGL framebuffer objects 2"));
-}
-
-GLWidget::~GLWidget()
-{
- glDeleteLists(pbufferList, 1);
- delete fbo;
-}
-
-void GLWidget::initializeGL()
-{
- glMatrixMode(GL_MODELVIEW);
-
- glEnable(GL_CULL_FACE);
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glVertexPointer(3, GL_INT, 0, cubeArray);
- glTexCoordPointer(2, GL_INT, 0, cubeTextureArray);
- glColorPointer(4, GL_UNSIGNED_BYTE, 0, colorArray);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_DEPTH_TEST);
-
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
- pbufferList = glGenLists(1);
- glNewList(pbufferList, GL_COMPILE);
- {
- glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
-
- // draw cube background
- glPushMatrix();
- glLoadIdentity();
- glTranslatef(0.5f, 0.5f, -2.0f);
- glDisable(GL_TEXTURE_2D);
- glEnableClientState(GL_COLOR_ARRAY);
- glVertexPointer(2, GL_INT, 0, faceArray);
- glDrawArrays(GL_QUADS, 0, 4);
- glVertexPointer(3, GL_INT, 0, cubeArray);
- glDisableClientState(GL_COLOR_ARRAY);
- glEnable(GL_TEXTURE_2D);
- glPopMatrix();
-
- // draw cube
- glTranslatef(0.5f, 0.5f, 0.5f);
- glRotatef(3.0f, 1.0f, 1.0f, 1.0f);
- glTranslatef(-0.5f, -0.5f, -0.5f);
- glColor4f(0.9f, 0.9f, 0.9f, 1.0f);
- glDrawArrays(GL_QUADS, 0, 24);
-
- glPushMatrix(); // this state is popped back in the paintGL() function
- }
- glEndList();
-
- for (int i = 0; i < 3; ++i) {
- yOffs[i] = 0.0f;
- xInc[i] = 0.005f;
- rot[i] = 0.0f;
- }
- xOffs[0]= 0.0f;
- xOffs[1]= 0.5f;
- xOffs[2]= 1.0f;
-
- cubeTexture = bindTexture(QImage(":res/cubelogo.png"));
-
- glPushMatrix(); // push to avoid stack underflow in the first paintGL() call
-}
-
-void GLWidget::resizeGL(int w, int h)
-{
- glViewport(0, 0, w, h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- float aspect = w/(float)(h ? h : 1);
- glFrustum(-aspect, aspect, -1, 1, 10, 100);
- glTranslatef(-0.5f, -0.5f, -0.5f);
- glTranslatef(0.0f, 0.0f, -15.0f);
-}
-
-void GLWidget::paintGL()
-{
- glPopMatrix(); // pop the matrix pushed in the pbuffer list
-
- // push the projection matrix and the entire GL state before
- // doing any rendering into our framebuffer object
- glPushAttrib(GL_ALL_ATTRIB_BITS);
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
-
- glViewport(0, 0, fbo->size().width(), fbo->size().height());
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-1, 1, -1, 1, -99, 99);
- glTranslatef(-0.5f, -0.5f, 0.0f);
- glMatrixMode(GL_MODELVIEW);
-
- // render to the framebuffer object
- fbo->bind();
- glBindTexture(GL_TEXTURE_2D, cubeTexture);
- glCallList(pbufferList);
- fbo->release();
-
- // pop the projection matrix and GL state back for rendering
- // to the actual widget
- glPopAttrib();
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
-
- glBindTexture(GL_TEXTURE_2D, fbo->texture());
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- // draw the background
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glLoadIdentity();
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glLoadIdentity();
-
- glVertexPointer(2, GL_INT, 0, faceArray);
- glTranslatef(-1.2f, -0.8f, 0.0f);
- glScalef(0.2f, 0.2f, 0.2f);
- for (int y = 0; y < 5; ++y) {
- for (int x = 0; x < 5; ++x) {
- glTranslatef(2.0f, 0, 0);
- glColor4f(0.8f, 0.8f, 0.8f, 1.0f);
- glDrawArrays(GL_QUADS, 0, 4);
- }
- glTranslatef(-10.0f, 2.0f, 0);
- }
- glVertexPointer(3, GL_INT, 0, cubeArray);
-
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
-
- // draw the bouncing cubes
- drawCube(0, 0.0f, 1.5f, 2.5f, 1.5f);
- drawCube(1, 1.0f, 2.0f, 2.5f, 2.0f);
- drawCube(2, 2.0f, 3.5f, 2.5f, 2.5f);
- glPopMatrix();
-}
-
-void GLWidget::drawCube(int i, GLfloat z, GLfloat rotation, GLfloat jmp, GLfloat amp)
-{
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(xOffs[i], yOffs[i], z);
- glTranslatef(0.5f, 0.5f, 0.5f);
- GLfloat scale = 0.75 + i*(0.25f/2);
- glScalef(scale, scale, scale);
- glRotatef(rot[i], 1.0f, 1.0f, 1.0f);
- glTranslatef(-0.5f, -0.5f, -0.5f);
-
- glColor4f(1.0f, 1.0f, 1.0f, 0.8f);
- glDrawArrays(GL_QUADS, 0, 24);
-
- if (xOffs[i] > 1.0f || xOffs[i] < -1.0f) {
- xInc[i] = -xInc[i];
- xOffs[i] = xOffs[i] > 1.0f ? 1.0f : -1.0f;
- }
- xOffs[i] += xInc[i];
- yOffs[i] = qAbs(cos((-GLfloat(M_PI) * jmp) * xOffs[i]) * amp) - 1;
- rot[i] += rotation;
-}
diff --git a/examples/opengl/legacy/framebufferobject2/glwidget.h b/examples/opengl/legacy/framebufferobject2/glwidget.h
deleted file mode 100644
index d3e4aa5af5..0000000000
--- a/examples/opengl/legacy/framebufferobject2/glwidget.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtOpenGL>
-
-class GLWidget : public QGLWidget
-{
-public:
- GLWidget(QWidget *parent);
- ~GLWidget();
- void initializeGL() override;
- void resizeGL(int w, int h) override;
- void paintGL() override;
- void timerEvent(QTimerEvent *) override { update(); }
- void mousePressEvent(QMouseEvent *) override { killTimer(timerId); }
- void mouseReleaseEvent(QMouseEvent *) override { timerId = startTimer(20); }
-
- void drawCube(int i, GLfloat z, GLfloat ri, GLfloat jmp, GLfloat amp);
-
-private:
- GLfloat rot[3], xOffs[3], yOffs[3], xInc[3];
- GLuint pbufferList;
- GLuint cubeTexture;
- int timerId;
-
- QGLFramebufferObject *fbo;
-};
-
diff --git a/examples/opengl/legacy/framebufferobject2/main.cpp b/examples/opengl/legacy/framebufferobject2/main.cpp
deleted file mode 100644
index ae7447c2a5..0000000000
--- a/examples/opengl/legacy/framebufferobject2/main.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#include "glwidget.h"
-
-int main(int argc, char **argv)
-{
- Q_INIT_RESOURCE(framebufferobject2);
-
- QApplication a(argc, argv);
- if (!QGLFormat::hasOpenGL() || !QGLFramebufferObject::hasOpenGLFramebufferObjects()) {
- QMessageBox::information(0, "OpenGL framebuffer objects 2",
- "This system does not support OpenGL/framebuffer objects.");
- return -1;
- }
-
- GLWidget widget(0);
- widget.resize(640, 480);
- widget.show();
- return a.exec();
-}
-
diff --git a/examples/opengl/legacy/grabber/glwidget.cpp b/examples/opengl/legacy/grabber/glwidget.cpp
deleted file mode 100644
index 6be4d30597..0000000000
--- a/examples/opengl/legacy/grabber/glwidget.cpp
+++ /dev/null
@@ -1,286 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-
-#include <QMouseEvent>
-#include <QTimer>
-#include <qmath.h>
-
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(parent)
-{
- gear1 = 0;
- gear2 = 0;
- gear3 = 0;
- xRot = 0;
- yRot = 0;
- zRot = 0;
- gear1Rot = 0;
-
- QTimer *timer = new QTimer(this);
- connect(timer, SIGNAL(timeout()), this, SLOT(advanceGears()));
- timer->start(20);
-}
-
-GLWidget::~GLWidget()
-{
- makeCurrent();
- glDeleteLists(gear1, 1);
- glDeleteLists(gear2, 1);
- glDeleteLists(gear3, 1);
-}
-
-void GLWidget::setXRotation(int angle)
-{
- normalizeAngle(&angle);
- if (angle != xRot) {
- xRot = angle;
- emit xRotationChanged(angle);
- updateGL();
- }
-}
-
-void GLWidget::setYRotation(int angle)
-{
- normalizeAngle(&angle);
- if (angle != yRot) {
- yRot = angle;
- emit yRotationChanged(angle);
- updateGL();
- }
-}
-
-void GLWidget::setZRotation(int angle)
-{
- normalizeAngle(&angle);
- if (angle != zRot) {
- zRot = angle;
- emit zRotationChanged(angle);
- updateGL();
- }
-}
-
-void GLWidget::initializeGL()
-{
- static const GLfloat lightPos[4] = { 5.0f, 5.0f, 10.0f, 1.0f };
- static const GLfloat reflectance1[4] = { 0.8f, 0.1f, 0.0f, 1.0f };
- static const GLfloat reflectance2[4] = { 0.0f, 0.8f, 0.2f, 1.0f };
- static const GLfloat reflectance3[4] = { 0.2f, 0.2f, 1.0f, 1.0f };
-
- glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_DEPTH_TEST);
-
- gear1 = makeGear(reflectance1, 1.0, 4.0, 1.0, 0.7, 20);
- gear2 = makeGear(reflectance2, 0.5, 2.0, 2.0, 0.7, 10);
- gear3 = makeGear(reflectance3, 1.3, 2.0, 0.5, 0.7, 10);
-
- glEnable(GL_NORMALIZE);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
-}
-
-void GLWidget::paintGL()
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glPushMatrix();
- glRotated(xRot / 16.0, 1.0, 0.0, 0.0);
- glRotated(yRot / 16.0, 0.0, 1.0, 0.0);
- glRotated(zRot / 16.0, 0.0, 0.0, 1.0);
-
- drawGear(gear1, -3.0, -2.0, 0.0, gear1Rot / 16.0);
- drawGear(gear2, +3.1, -2.0, 0.0, -2.0 * (gear1Rot / 16.0) - 9.0);
-
- glRotated(+90.0, 1.0, 0.0, 0.0);
- drawGear(gear3, -3.1, -1.8, -2.2, +2.0 * (gear1Rot / 16.0) - 2.0);
-
- glPopMatrix();
-}
-
-void GLWidget::resizeGL(int width, int height)
-{
- int side = qMin(width, height);
- glViewport((width - side) / 2, (height - side) / 2, side, side);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1.0, +1.0, -1.0, 1.0, 5.0, 60.0);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslated(0.0, 0.0, -40.0);
-}
-
-void GLWidget::mousePressEvent(QMouseEvent *event)
-{
- lastPos = event->pos();
-}
-
-void GLWidget::mouseMoveEvent(QMouseEvent *event)
-{
- int dx = event->x() - lastPos.x();
- int dy = event->y() - lastPos.y();
-
- if (event->buttons() & Qt::LeftButton) {
- setXRotation(xRot + 8 * dy);
- setYRotation(yRot + 8 * dx);
- } else if (event->buttons() & Qt::RightButton) {
- setXRotation(xRot + 8 * dy);
- setZRotation(zRot + 8 * dx);
- }
- lastPos = event->pos();
-}
-
-void GLWidget::advanceGears()
-{
- gear1Rot += 2 * 16;
- updateGL();
-}
-
-GLuint GLWidget::makeGear(const GLfloat *reflectance, GLdouble innerRadius,
- GLdouble outerRadius, GLdouble thickness,
- GLdouble toothSize, GLint toothCount)
-{
- GLuint list = glGenLists(1);
- glNewList(list, GL_COMPILE);
- glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, reflectance);
-
- GLdouble r0 = innerRadius;
- GLdouble r1 = outerRadius - toothSize / 2.0;
- GLdouble r2 = outerRadius + toothSize / 2.0;
- GLdouble toothAngle = 2 * M_PI / toothCount;
- GLdouble delta = toothAngle / 4.0;
- GLdouble z = thickness / 2.0;
-
- glShadeModel(GL_FLAT);
-
- for (int i = 0; i < 2; ++i) {
- GLdouble sign = (i == 0) ? +1.0 : -1.0;
-
- glNormal3d(0.0, 0.0, sign);
-
- glBegin(GL_QUAD_STRIP);
- for (int j = 0; j <= toothCount; ++j) {
- GLdouble angle = j * toothAngle;
- glVertex3d(r0 * cos(angle), r0 * sin(angle), sign * z);
- glVertex3d(r1 * cos(angle), r1 * sin(angle), sign * z);
- glVertex3d(r0 * cos(angle), r0 * sin(angle), sign * z);
- glVertex3d(r1 * cos(angle + 3 * delta), r1 * sin(angle + 3 * delta), sign * z);
- }
- glEnd();
-
- glBegin(GL_QUADS);
- for (int j = 0; j < toothCount; ++j) {
- GLdouble angle = j * toothAngle;
- glVertex3d(r1 * cos(angle), r1 * sin(angle), sign * z);
- glVertex3d(r2 * cos(angle + delta), r2 * sin(angle + delta), sign * z);
- glVertex3d(r2 * cos(angle + 2 * delta), r2 * sin(angle + 2 * delta), sign * z);
- glVertex3d(r1 * cos(angle + 3 * delta), r1 * sin(angle + 3 * delta), sign * z);
- }
- glEnd();
- }
-
- glBegin(GL_QUAD_STRIP);
- for (int i = 0; i < toothCount; ++i) {
- for (int j = 0; j < 2; ++j) {
- GLdouble angle = (i + j / 2.0) * toothAngle;
- GLdouble s1 = r1;
- GLdouble s2 = r2;
- if (j == 1)
- qSwap(s1, s2);
-
- glNormal3d(cos(angle), sin(angle), 0.0);
- glVertex3d(s1 * cos(angle), s1 * sin(angle), +z);
- glVertex3d(s1 * cos(angle), s1 * sin(angle), -z);
-
- glNormal3d(s2 * sin(angle + delta) - s1 * sin(angle),
- s1 * cos(angle) - s2 * cos(angle + delta), 0.0);
- glVertex3d(s2 * cos(angle + delta), s2 * sin(angle + delta), +z);
- glVertex3d(s2 * cos(angle + delta), s2 * sin(angle + delta), -z);
- }
- }
- glVertex3d(r1, 0.0, +z);
- glVertex3d(r1, 0.0, -z);
- glEnd();
-
- glShadeModel(GL_SMOOTH);
-
- glBegin(GL_QUAD_STRIP);
- for (int i = 0; i <= toothCount; ++i) {
- GLdouble angle = i * toothAngle;
- glNormal3d(-cos(angle), -sin(angle), 0.0);
- glVertex3d(r0 * cos(angle), r0 * sin(angle), +z);
- glVertex3d(r0 * cos(angle), r0 * sin(angle), -z);
- }
- glEnd();
-
- glEndList();
-
- return list;
-}
-
-void GLWidget::drawGear(GLuint gear, GLdouble dx, GLdouble dy, GLdouble dz,
- GLdouble angle)
-{
- glPushMatrix();
- glTranslated(dx, dy, dz);
- glRotated(angle, 0.0, 0.0, 1.0);
- glCallList(gear);
- glPopMatrix();
-}
-
-void GLWidget::normalizeAngle(int *angle)
-{
- while (*angle < 0)
- *angle += 360 * 16;
- while (*angle > 360 * 16)
- *angle -= 360 * 16;
-}
diff --git a/examples/opengl/legacy/grabber/glwidget.h b/examples/opengl/legacy/grabber/glwidget.h
deleted file mode 100644
index 67020b0ada..0000000000
--- a/examples/opengl/legacy/grabber/glwidget.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GLWIDGET_H
-#define GLWIDGET_H
-
-#include <QGLWidget>
-
-class GLWidget : public QGLWidget
-{
- Q_OBJECT
-
-public:
- GLWidget(QWidget *parent = 0);
- ~GLWidget();
-
- int xRotation() const { return xRot; }
- int yRotation() const { return yRot; }
- int zRotation() const { return zRot; }
-
-public slots:
- void setXRotation(int angle);
- void setYRotation(int angle);
- void setZRotation(int angle);
-
-signals:
- void xRotationChanged(int angle);
- void yRotationChanged(int angle);
- void zRotationChanged(int angle);
-
-protected:
- void initializeGL() override;
- void paintGL() override;
- void resizeGL(int width, int height) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
-
-private slots:
- void advanceGears();
-
-private:
- GLuint makeGear(const GLfloat *reflectance, GLdouble innerRadius,
- GLdouble outerRadius, GLdouble thickness,
- GLdouble toothSize, GLint toothCount);
- void drawGear(GLuint gear, GLdouble dx, GLdouble dy, GLdouble dz,
- GLdouble angle);
- void normalizeAngle(int *angle);
-
- GLuint gear1;
- GLuint gear2;
- GLuint gear3;
- int xRot;
- int yRot;
- int zRot;
- int gear1Rot;
-
- QPoint lastPos;
-};
-
-#endif // GLWIDGET_H
diff --git a/examples/opengl/legacy/grabber/grabber.pro b/examples/opengl/legacy/grabber/grabber.pro
deleted file mode 100644
index 88c03f1c5e..0000000000
--- a/examples/opengl/legacy/grabber/grabber.pro
+++ /dev/null
@@ -1,12 +0,0 @@
-HEADERS = glwidget.h \
- mainwindow.h
-SOURCES = glwidget.cpp \
- main.cpp \
- mainwindow.cpp
-QT += opengl widgets
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/grabber
-INSTALLS += target
-
-qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/grabber/main.cpp b/examples/opengl/legacy/grabber/main.cpp
deleted file mode 100644
index e02118b078..0000000000
--- a/examples/opengl/legacy/grabber/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "mainwindow.h"
-
-#include <QApplication>
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- MainWindow window;
- window.show();
- return app.exec();
-}
diff --git a/examples/opengl/legacy/grabber/mainwindow.cpp b/examples/opengl/legacy/grabber/mainwindow.cpp
deleted file mode 100644
index 6ea6a28051..0000000000
--- a/examples/opengl/legacy/grabber/mainwindow.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-#include "mainwindow.h"
-
-#include <QtWidgets>
-
-MainWindow::MainWindow()
-{
- centralWidget = new QWidget;
- setCentralWidget(centralWidget);
-
- glWidget = new GLWidget;
- pixmapLabel = new QLabel;
-
- glWidgetArea = new QScrollArea;
- glWidgetArea->setWidget(glWidget);
- glWidgetArea->setWidgetResizable(true);
- glWidgetArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- glWidgetArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- glWidgetArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
- glWidgetArea->setMinimumSize(50, 50);
-
- pixmapLabelArea = new QScrollArea;
- pixmapLabelArea->setWidget(pixmapLabel);
- pixmapLabelArea->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
- pixmapLabelArea->setMinimumSize(50, 50);
-
- xSlider = createSlider(SIGNAL(xRotationChanged(int)),
- SLOT(setXRotation(int)));
- ySlider = createSlider(SIGNAL(yRotationChanged(int)),
- SLOT(setYRotation(int)));
- zSlider = createSlider(SIGNAL(zRotationChanged(int)),
- SLOT(setZRotation(int)));
-
- createActions();
- createMenus();
-
- QGridLayout *centralLayout = new QGridLayout;
- centralLayout->addWidget(glWidgetArea, 0, 0);
- centralLayout->addWidget(pixmapLabelArea, 0, 1);
- centralLayout->addWidget(xSlider, 1, 0, 1, 2);
- centralLayout->addWidget(ySlider, 2, 0, 1, 2);
- centralLayout->addWidget(zSlider, 3, 0, 1, 2);
- centralWidget->setLayout(centralLayout);
-
- xSlider->setValue(15 * 16);
- ySlider->setValue(345 * 16);
- zSlider->setValue(0 * 16);
-
- setWindowTitle(tr("Grabber"));
- resize(400, 300);
-}
-
-void MainWindow::renderIntoPixmap()
-{
- QSize size = getSize();
- if (size.isValid()) {
- QPixmap pixmap = glWidget->renderPixmap(size.width(), size.height());
- setPixmap(pixmap);
- }
-}
-
-void MainWindow::grabFrameBuffer()
-{
- QImage image = glWidget->grabFrameBuffer();
- setPixmap(QPixmap::fromImage(image));
-}
-
-void MainWindow::clearPixmap()
-{
- setPixmap(QPixmap());
-}
-
-void MainWindow::about()
-{
- QMessageBox::about(this, tr("About Grabber"),
- tr("The <b>Grabber</b> example demonstrates two approaches for "
- "rendering OpenGL into a Qt pixmap."));
-}
-
-void MainWindow::createActions()
-{
- renderIntoPixmapAct = new QAction(tr("&Render into Pixmap..."), this);
- renderIntoPixmapAct->setShortcut(tr("Ctrl+R"));
- connect(renderIntoPixmapAct, SIGNAL(triggered()),
- this, SLOT(renderIntoPixmap()));
-
- grabFrameBufferAct = new QAction(tr("&Grab Frame Buffer"), this);
- grabFrameBufferAct->setShortcut(tr("Ctrl+G"));
- connect(grabFrameBufferAct, SIGNAL(triggered()),
- this, SLOT(grabFrameBuffer()));
-
- clearPixmapAct = new QAction(tr("&Clear Pixmap"), this);
- clearPixmapAct->setShortcut(tr("Ctrl+L"));
- connect(clearPixmapAct, SIGNAL(triggered()), this, SLOT(clearPixmap()));
-
- exitAct = new QAction(tr("E&xit"), this);
- exitAct->setShortcuts(QKeySequence::Quit);
- connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
-
- aboutAct = new QAction(tr("&About"), this);
- connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
-
- aboutQtAct = new QAction(tr("About &Qt"), this);
- connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
-}
-
-void MainWindow::createMenus()
-{
- fileMenu = menuBar()->addMenu(tr("&File"));
- fileMenu->addAction(renderIntoPixmapAct);
- fileMenu->addAction(grabFrameBufferAct);
- fileMenu->addAction(clearPixmapAct);
- fileMenu->addSeparator();
- fileMenu->addAction(exitAct);
-
- helpMenu = menuBar()->addMenu(tr("&Help"));
- helpMenu->addAction(aboutAct);
- helpMenu->addAction(aboutQtAct);
-}
-
-QSlider *MainWindow::createSlider(const char *changedSignal,
- const char *setterSlot)
-{
- QSlider *slider = new QSlider(Qt::Horizontal);
- slider->setRange(0, 360 * 16);
- slider->setSingleStep(16);
- slider->setPageStep(15 * 16);
- slider->setTickInterval(15 * 16);
- slider->setTickPosition(QSlider::TicksRight);
- connect(slider, SIGNAL(valueChanged(int)), glWidget, setterSlot);
- connect(glWidget, changedSignal, slider, SLOT(setValue(int)));
- return slider;
-}
-
-void MainWindow::setPixmap(const QPixmap &pixmap)
-{
- pixmapLabel->setPixmap(pixmap);
- QSize size = pixmap.size() / pixmap.devicePixelRatio();
- if (size - QSize(1, 0) == pixmapLabelArea->maximumViewportSize())
- size -= QSize(1, 0);
- pixmapLabel->resize(size);
-}
-
-QSize MainWindow::getSize()
-{
- bool ok;
- QString text = QInputDialog::getText(this, tr("Grabber"),
- tr("Enter pixmap size:"),
- QLineEdit::Normal,
- tr("%1 x %2").arg(glWidget->width())
- .arg(glWidget->height()),
- &ok);
- if (!ok)
- return QSize();
-
- QRegularExpression regExp(tr("^([0-9]+) *x *([0-9]+)$"));
- QRegularExpressionMatch match = regExp.match(text);
- if (match.hasMatch()) {
- int width = match.captured(1).toInt();
- int height = match.captured(2).toInt();
- if (width > 0 && width < 2048 && height > 0 && height < 2048)
- return QSize(width, height);
- }
-
- return glWidget->size();
-}
diff --git a/examples/opengl/legacy/grabber/mainwindow.h b/examples/opengl/legacy/grabber/mainwindow.h
deleted file mode 100644
index 2d699784dd..0000000000
--- a/examples/opengl/legacy/grabber/mainwindow.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef MAINWINDOW_H
-#define MAINWINDOW_H
-
-#include <QMainWindow>
-
-QT_BEGIN_NAMESPACE
-class QLabel;
-class QMenu;
-class QScrollArea;
-class QSlider;
-QT_END_NAMESPACE
-
-class GLWidget;
-
-class MainWindow : public QMainWindow
-{
- Q_OBJECT
-
-public:
- MainWindow();
-
-private slots:
- void renderIntoPixmap();
- void grabFrameBuffer();
- void clearPixmap();
- void about();
-
-private:
- void createActions();
- void createMenus();
- QSlider *createSlider(const char *changedSignal, const char *setterSlot);
- void setPixmap(const QPixmap &pixmap);
- QSize getSize();
-
- QWidget *centralWidget;
- QScrollArea *glWidgetArea;
- QScrollArea *pixmapLabelArea;
- GLWidget *glWidget;
- QLabel *pixmapLabel;
- QSlider *xSlider;
- QSlider *ySlider;
- QSlider *zSlider;
-
- QMenu *fileMenu;
- QMenu *helpMenu;
- QAction *grabFrameBufferAct;
- QAction *renderIntoPixmapAct;
- QAction *clearPixmapAct;
- QAction *exitAct;
- QAction *aboutAct;
- QAction *aboutQtAct;
-};
-
-#endif // MAINWINDOW_H
diff --git a/examples/opengl/legacy/hellogl/glwidget.cpp b/examples/opengl/legacy/hellogl/glwidget.cpp
deleted file mode 100644
index 059a9bb96d..0000000000
--- a/examples/opengl/legacy/hellogl/glwidget.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets>
-#include <QtOpenGL>
-
-#include <math.h>
-
-#include "glwidget.h"
-#include "qtlogo.h"
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-//! [0]
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
-{
- logo = 0;
- xRot = 0;
- yRot = 0;
- zRot = 0;
-
- qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
- qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);
-}
-//! [0]
-
-//! [1]
-GLWidget::~GLWidget()
-{
-}
-//! [1]
-
-//! [2]
-QSize GLWidget::minimumSizeHint() const
-{
- return QSize(50, 50);
-}
-//! [2]
-
-//! [3]
-QSize GLWidget::sizeHint() const
-//! [3] //! [4]
-{
- return QSize(400, 400);
-}
-//! [4]
-
-static void qNormalizeAngle(int &angle)
-{
- while (angle < 0)
- angle += 360 * 16;
- while (angle > 360 * 16)
- angle -= 360 * 16;
-}
-
-//! [5]
-void GLWidget::setXRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != xRot) {
- xRot = angle;
- emit xRotationChanged(angle);
- update();
- }
-}
-//! [5]
-
-void GLWidget::setYRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != yRot) {
- yRot = angle;
- emit yRotationChanged(angle);
- update();
- }
-}
-
-void GLWidget::setZRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != zRot) {
- zRot = angle;
- emit zRotationChanged(angle);
- update();
- }
-}
-
-//! [6]
-void GLWidget::initializeGL()
-{
- initializeOpenGLFunctions();
-
- qglClearColor(qtPurple.darker());
-
- logo = new QtLogo(this, 64);
- logo->setColor(qtGreen.darker());
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glShadeModel(GL_SMOOTH);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_MULTISAMPLE);
- static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
-}
-//! [6]
-
-//! [7]
-void GLWidget::paintGL()
-{
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -10.0);
- glRotatef(xRot / 16.0, 1.0, 0.0, 0.0);
- glRotatef(yRot / 16.0, 0.0, 1.0, 0.0);
- glRotatef(zRot / 16.0, 0.0, 0.0, 1.0);
- logo->draw(static_cast<QOpenGLFunctions_1_1 *>(this));
-}
-//! [7]
-
-//! [8]
-void GLWidget::resizeGL(int width, int height)
-{
- int side = qMin(width, height);
- glViewport((width - side) / 2, (height - side) / 2, side, side);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-0.5, +0.5, -0.5, +0.5, 4.0, 15.0);
- glMatrixMode(GL_MODELVIEW);
-}
-//! [8]
-
-//! [9]
-void GLWidget::mousePressEvent(QMouseEvent *event)
-{
- lastPos = event->pos();
-}
-//! [9]
-
-//! [10]
-void GLWidget::mouseMoveEvent(QMouseEvent *event)
-{
- int dx = event->x() - lastPos.x();
- int dy = event->y() - lastPos.y();
-
- if (event->buttons() & Qt::LeftButton) {
- setXRotation(xRot + 8 * dy);
- setYRotation(yRot + 8 * dx);
- } else if (event->buttons() & Qt::RightButton) {
- setXRotation(xRot + 8 * dy);
- setZRotation(zRot + 8 * dx);
- }
- lastPos = event->pos();
-}
-//! [10]
diff --git a/examples/opengl/legacy/hellogl/hellogl.pro b/examples/opengl/legacy/hellogl/hellogl.pro
deleted file mode 100644
index c6e926c245..0000000000
--- a/examples/opengl/legacy/hellogl/hellogl.pro
+++ /dev/null
@@ -1,17 +0,0 @@
-VPATH += ../shared
-INCLUDEPATH += ../shared
-
-HEADERS = glwidget.h \
- window.h \
- qtlogo.h
-SOURCES = glwidget.cpp \
- main.cpp \
- window.cpp \
- qtlogo.cpp
-QT += opengl widgets
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/hellogl
-INSTALLS += target
-
-qtConfig(opengles.|angle): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/hellogl/main.cpp b/examples/opengl/legacy/hellogl/main.cpp
deleted file mode 100644
index 13581c8fb2..0000000000
--- a/examples/opengl/legacy/hellogl/main.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QDesktopWidget>
-
-#include "window.h"
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- Window window;
- window.resize(window.sizeHint());
- int desktopArea = QApplication::desktop()->width() *
- QApplication::desktop()->height();
- int widgetArea = window.width() * window.height();
- if (((float)widgetArea / (float)desktopArea) < 0.75f)
- window.show();
- else
- window.showMaximized();
- return app.exec();
-}
diff --git a/examples/opengl/legacy/hellogl/window.cpp b/examples/opengl/legacy/hellogl/window.cpp
deleted file mode 100644
index 58863909e0..0000000000
--- a/examples/opengl/legacy/hellogl/window.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets>
-
-#include "glwidget.h"
-#include "window.h"
-
-//! [0]
-Window::Window()
-{
- glWidget = new GLWidget;
-
- xSlider = createSlider();
- ySlider = createSlider();
- zSlider = createSlider();
-
- connect(xSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setXRotation(int)));
- connect(glWidget, SIGNAL(xRotationChanged(int)), xSlider, SLOT(setValue(int)));
- connect(ySlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setYRotation(int)));
- connect(glWidget, SIGNAL(yRotationChanged(int)), ySlider, SLOT(setValue(int)));
- connect(zSlider, SIGNAL(valueChanged(int)), glWidget, SLOT(setZRotation(int)));
- connect(glWidget, SIGNAL(zRotationChanged(int)), zSlider, SLOT(setValue(int)));
-//! [0]
-
-//! [1]
- QHBoxLayout *mainLayout = new QHBoxLayout;
- mainLayout->addWidget(glWidget);
- mainLayout->addWidget(xSlider);
- mainLayout->addWidget(ySlider);
- mainLayout->addWidget(zSlider);
- setLayout(mainLayout);
-
- xSlider->setValue(15 * 16);
- ySlider->setValue(345 * 16);
- zSlider->setValue(0 * 16);
- setWindowTitle(tr("Hello GL"));
-}
-//! [1]
-
-//! [2]
-QSlider *Window::createSlider()
-{
- QSlider *slider = new QSlider(Qt::Vertical);
- slider->setRange(0, 360 * 16);
- slider->setSingleStep(16);
- slider->setPageStep(15 * 16);
- slider->setTickInterval(15 * 16);
- slider->setTickPosition(QSlider::TicksRight);
- return slider;
-}
-//! [2]
-
-void Window::keyPressEvent(QKeyEvent *e)
-{
- if (e->key() == Qt::Key_Escape)
- close();
- else
- QWidget::keyPressEvent(e);
-}
diff --git a/examples/opengl/legacy/legacy.pro b/examples/opengl/legacy/legacy.pro
deleted file mode 100644
index 1398332c11..0000000000
--- a/examples/opengl/legacy/legacy.pro
+++ /dev/null
@@ -1,16 +0,0 @@
-requires(qtHaveModule(opengl))
-
-TEMPLATE = subdirs
-
-!qtConfig(dynamicgl):!qtConfig(opengles2) {
- # legacy desktop-only examples, no dynamic GL support
- SUBDIRS = \
- grabber \
- hellogl \
- overpainting \
- pbuffers \
- framebufferobject2 \
- samplebuffers
-}
-
-EXAMPLE_FILES = shared
diff --git a/examples/opengl/legacy/overpainting/bubble.cpp b/examples/opengl/legacy/overpainting/bubble.cpp
deleted file mode 100644
index 352e359cf9..0000000000
--- a/examples/opengl/legacy/overpainting/bubble.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "bubble.h"
-
-#include <QRandomGenerator>
-
-Bubble::Bubble(const QPointF &position, qreal radius, const QPointF &velocity)
- : position(position), vel(velocity), radius(radius)
-{
- innerColor = randomColor();
- outerColor = randomColor();
- updateBrush();
-}
-
-void Bubble::updateBrush()
-{
- QRadialGradient gradient(QPointF(radius, radius), radius,
- QPointF(radius*0.5, radius*0.5));
-
- gradient.setColorAt(0, QColor(255, 255, 255, 255));
- gradient.setColorAt(0.25, innerColor);
- gradient.setColorAt(1, outerColor);
- brush = QBrush(gradient);
-}
-
-void Bubble::drawBubble(QPainter *painter)
-{
- painter->save();
- painter->translate(position.x() - radius, position.y() - radius);
- painter->setBrush(brush);
- painter->drawEllipse(0, 0, int(2*radius), int(2*radius));
- painter->restore();
-}
-
-QColor Bubble::randomColor()
-{
- int red = int(205 + QRandomGenerator::global()->bounded(50));
- int green = int(205 + QRandomGenerator::global()->bounded(50));
- int blue = int(205 + QRandomGenerator::global()->bounded(50));
- int alpha = int(91 + QRandomGenerator::global()->bounded(100));
-
- return QColor(red, green, blue, alpha);
-}
-
-void Bubble::move(const QRect &bbox)
-{
- position += vel;
- qreal leftOverflow = position.x() - radius - bbox.left();
- qreal rightOverflow = position.x() + radius - bbox.right();
- qreal topOverflow = position.y() - radius - bbox.top();
- qreal bottomOverflow = position.y() + radius - bbox.bottom();
-
- if (leftOverflow < 0.0) {
- position.setX(position.x() - 2 * leftOverflow);
- vel.setX(-vel.x());
- } else if (rightOverflow > 0.0) {
- position.setX(position.x() - 2 * rightOverflow);
- vel.setX(-vel.x());
- }
-
- if (topOverflow < 0.0) {
- position.setY(position.y() - 2 * topOverflow);
- vel.setY(-vel.y());
- } else if (bottomOverflow > 0.0) {
- position.setY(position.y() - 2 * bottomOverflow);
- vel.setY(-vel.y());
- }
-}
-
-QRectF Bubble::rect()
-{
- return QRectF(position.x() - radius, position.y() - radius,
- 2 * radius, 2 * radius);
-}
diff --git a/examples/opengl/legacy/overpainting/bubble.h b/examples/opengl/legacy/overpainting/bubble.h
deleted file mode 100644
index bd63e0437f..0000000000
--- a/examples/opengl/legacy/overpainting/bubble.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef BUBBLE_H
-#define BUBBLE_H
-
-#include <QPainter>
-
-class Bubble
-{
-public:
- Bubble(const QPointF &position, qreal radius, const QPointF &velocity);
-
- void drawBubble(QPainter *painter);
- void updateBrush();
- void move(const QRect &bbox);
- QRectF rect();
-
-private:
- QColor randomColor();
-
- QBrush brush;
- QPointF position;
- QPointF vel;
- qreal radius;
- QColor innerColor;
- QColor outerColor;
-};
-
-#endif // BUBBLE_H
diff --git a/examples/opengl/legacy/overpainting/glwidget.cpp b/examples/opengl/legacy/overpainting/glwidget.cpp
deleted file mode 100644
index c4558ce785..0000000000
--- a/examples/opengl/legacy/overpainting/glwidget.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "bubble.h"
-#include "qtlogo.h"
-#include "glwidget.h"
-
-#include <QMouseEvent>
-#include <QRandomGenerator>
-#include <QTime>
-
-#include <math.h>
-#include <stdlib.h>
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-//! [0]
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
-{
- QTime midnight(0, 0, 0);
-
- logo = 0;
- xRot = 0;
- yRot = 0;
- zRot = 0;
-
- qtGreen = QColor::fromCmykF(0.40, 0.0, 1.0, 0.0);
- qtPurple = QColor::fromCmykF(0.39, 0.39, 0.0, 0.0);
-
- animationTimer.setSingleShot(false);
- connect(&animationTimer, SIGNAL(timeout()), this, SLOT(animate()));
- animationTimer.start(25);
-
- setAutoFillBackground(false);
- setMinimumSize(200, 200);
- setWindowTitle(tr("Overpainting a Scene"));
-}
-//! [0]
-
-//! [1]
-GLWidget::~GLWidget()
-{
-}
-//! [1]
-
-static void qNormalizeAngle(int &angle)
-{
- while (angle < 0)
- angle += 360 * 16;
- while (angle > 360 * 16)
- angle -= 360 * 16;
-}
-
-void GLWidget::setXRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != xRot)
- xRot = angle;
-}
-
-void GLWidget::setYRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != yRot)
- yRot = angle;
-}
-
-void GLWidget::setZRotation(int angle)
-{
- qNormalizeAngle(angle);
- if (angle != zRot)
- zRot = angle;
-}
-
-//! [2]
-void GLWidget::initializeGL()
-{
- initializeOpenGLFunctions();
-
- glEnable(GL_MULTISAMPLE);
-
- logo = new QtLogo(this);
- logo->setColor(qtGreen.darker());
-}
-//! [2]
-
-void GLWidget::mousePressEvent(QMouseEvent *event)
-{
- lastPos = event->pos();
-}
-
-void GLWidget::mouseMoveEvent(QMouseEvent *event)
-{
- int dx = event->x() - lastPos.x();
- int dy = event->y() - lastPos.y();
-
- if (event->buttons() & Qt::LeftButton) {
- setXRotation(xRot + 8 * dy);
- setYRotation(yRot + 8 * dx);
- } else if (event->buttons() & Qt::RightButton) {
- setXRotation(xRot + 8 * dy);
- setZRotation(zRot + 8 * dx);
- }
- lastPos = event->pos();
-}
-
-void GLWidget::paintEvent(QPaintEvent *event)
-{
- makeCurrent();
-//! [4]
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
-//! [4]
-
-//! [6]
- qglClearColor(qtPurple.darker());
- glShadeModel(GL_SMOOTH);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_MULTISAMPLE);
- static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
-
- qreal pixelRatio = devicePixelRatio();
- setupViewport(width() * pixelRatio, height() * pixelRatio);
-//! [6]
-
-//! [7]
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glTranslatef(0.0, 0.0, -10.0);
- glRotatef(xRot / 16.0, 1.0, 0.0, 0.0);
- glRotatef(yRot / 16.0, 0.0, 1.0, 0.0);
- glRotatef(zRot / 16.0, 0.0, 0.0, 1.0);
-
- logo->draw(static_cast<QOpenGLFunctions_1_1 *>(this));
-//! [7]
-
-//! [8]
- glShadeModel(GL_FLAT);
- glDisable(GL_CULL_FACE);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_LIGHTING);
-
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
-//! [8]
-
-//! [10]
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- for (Bubble *bubble : qAsConst(bubbles)) {
- if (bubble->rect().intersects(event->rect()))
- bubble->drawBubble(&painter);
- }
- drawInstructions(&painter);
- painter.end();
-}
-//! [10]
-
-//! [11]
-void GLWidget::resizeGL(int width, int height)
-{
- qreal pixelRatio = devicePixelRatio();
- setupViewport(width*pixelRatio, height*pixelRatio);
-}
-//! [11]
-
-//! [12]
-void GLWidget::showEvent(QShowEvent *event)
-{
- Q_UNUSED(event);
- createBubbles(20 - bubbles.count());
-}
-//! [12]
-
-QSize GLWidget::sizeHint() const
-{
- return QSize(400, 400);
-}
-
-void GLWidget::createBubbles(int number)
-{
- for (int i = 0; i < number; ++i) {
- QPointF position(width()*(0.1 + QRandomGenerator::global()->bounded(0.8)),
- height()*(0.1 + QRandomGenerator::global()->bounded(0.8)));
- qreal radius = qMin(width(), height())*(0.0125 + QRandomGenerator::global()->bounded(0.0875));
- QPointF velocity(width()*0.0125*(-0.5 + QRandomGenerator::global()->bounded(1.0)),
- height()*0.0125*(-0.5 + QRandomGenerator::global()->bounded(1.0)));
-
- bubbles.append(new Bubble(position, radius, velocity));
- }
-}
-
-//! [13]
-void GLWidget::animate()
-{
- for (Bubble *bubble : qAsConst(bubbles))
- bubble->move(rect());
- update();
-}
-//! [13]
-
-//! [14]
-void GLWidget::setupViewport(int width, int height)
-{
- int side = qMin(width, height);
- glViewport((width - side) / 2, (height - side) / 2, side, side);
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-#ifdef QT_OPENGL_ES
- glOrthof(-0.5, +0.5, -0.5, 0.5, 4.0, 15.0);
-#else
- glOrtho(-0.5, +0.5, -0.5, 0.5, 4.0, 15.0);
-#endif
- glMatrixMode(GL_MODELVIEW);
-}
-//! [14]
-
-//! [15]
-void GLWidget::drawInstructions(QPainter *painter)
-{
- QString text = tr("Click and drag with the left mouse button "
- "to rotate the Qt logo.");
- QFontMetrics metrics = QFontMetrics(font());
- int border = qMax(4, metrics.leading());
-
- QRect rect = metrics.boundingRect(0, 0, width() - 2*border, int(height()*0.125),
- Qt::AlignCenter | Qt::TextWordWrap, text);
- painter->setRenderHint(QPainter::TextAntialiasing);
- painter->fillRect(QRect(0, 0, width(), rect.height() + 2*border),
- QColor(0, 0, 0, 127));
- painter->setPen(Qt::white);
- painter->fillRect(QRect(0, 0, width(), rect.height() + 2*border),
- QColor(0, 0, 0, 127));
- painter->drawText((width() - rect.width())/2, border,
- rect.width(), rect.height(),
- Qt::AlignCenter | Qt::TextWordWrap, text);
-}
-//! [15]
diff --git a/examples/opengl/legacy/overpainting/glwidget.h b/examples/opengl/legacy/overpainting/glwidget.h
deleted file mode 100644
index e5ea539f6d..0000000000
--- a/examples/opengl/legacy/overpainting/glwidget.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GLWIDGET_H
-#define GLWIDGET_H
-
-#include <QGLWidget>
-#include <QOpenGLFunctions_1_1>
-#include <QTimer>
-
-class Bubble;
-class QtLogo;
-
-//! [0]
-class GLWidget : public QGLWidget, public QOpenGLFunctions_1_1
-{
- Q_OBJECT
-
-public:
- GLWidget(QWidget *parent = 0);
- ~GLWidget();
-//! [0]
-
- QSize sizeHint() const override;
- int xRotation() const { return xRot; }
- int yRotation() const { return yRot; }
- int zRotation() const { return zRot; }
-
-public slots:
- void setXRotation(int angle);
- void setYRotation(int angle);
- void setZRotation(int angle);
-
-//! [1]
-protected:
- void initializeGL() override;
- void paintEvent(QPaintEvent *event) override;
- void resizeGL(int width, int height) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
- void showEvent(QShowEvent *event) override;
-
-private slots:
- void animate();
-
-private:
- void createBubbles(int number);
- void drawInstructions(QPainter *painter);
-//! [1]
- void setupViewport(int width, int height);
-
- QColor qtGreen;
- QColor qtPurple;
-
- GLuint object;
- int xRot;
- int yRot;
- int zRot;
- QPoint lastPos;
-//! [4]
- QtLogo *logo;
- QList<Bubble*> bubbles;
- QTimer animationTimer;
-//! [4]
-};
-
-#endif // GLWIDGET_H
diff --git a/examples/opengl/legacy/overpainting/main.cpp b/examples/opengl/legacy/overpainting/main.cpp
deleted file mode 100644
index c5f0f2e3f7..0000000000
--- a/examples/opengl/legacy/overpainting/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-
-#include <QApplication>
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
- GLWidget window;
- window.show();
- return app.exec();
-}
diff --git a/examples/opengl/legacy/overpainting/overpainting.pro b/examples/opengl/legacy/overpainting/overpainting.pro
deleted file mode 100644
index 17213a6079..0000000000
--- a/examples/opengl/legacy/overpainting/overpainting.pro
+++ /dev/null
@@ -1,19 +0,0 @@
-QT += opengl widgets
-
-VPATH += ../shared
-INCLUDEPATH += ../shared
-
-HEADERS = bubble.h \
- glwidget.h \
- qtlogo.h
-
-SOURCES = bubble.cpp \
- glwidget.cpp \
- main.cpp \
- qtlogo.cpp
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/overpainting
-INSTALLS += target
-
-qtConfig(opengles.|angle): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/pbuffers/cube.cpp b/examples/opengl/legacy/pbuffers/cube.cpp
deleted file mode 100644
index f598741ec3..0000000000
--- a/examples/opengl/legacy/pbuffers/cube.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "cube.h"
-#include "glwidget.h"
-
-#include <QtGui/QImage>
-#include <QtCore/QPropertyAnimation>
-
-static const qreal speeds[] = { 3.8f, 4.4f, 5.6f };
-static const qreal amplitudes[] = { 2.0f, 2.5f, 3.0f };
-
-static inline void qSetColor(float colorVec[], QColor c)
-{
- colorVec[0] = c.redF();
- colorVec[1] = c.greenF();
- colorVec[2] = c.blueF();
- colorVec[3] = c.alphaF();
-}
-
-int Geometry::append(const QVector3D &a, const QVector3D &n, const QVector2D &t)
-{
- int v = vertices.count();
- vertices.append(a);
- normals.append(n);
- texCoords.append(t);
- faces.append(v);
- colors.append(QVector4D(0.6f, 0.6f, 0.6f, 1.0f));
- return v;
-}
-
-void Geometry::addQuad(const QVector3D &a, const QVector3D &b,
- const QVector3D &c, const QVector3D &d,
- const QVector<QVector2D> &tex)
-{
- QVector3D norm = QVector3D::normal(a, b, c);
- // append first triangle
- int aref = append(a, norm, tex[0]);
- append(b, norm, tex[1]);
- int cref = append(c, norm, tex[2]);
- // append second triangle
- faces.append(aref);
- faces.append(cref);
- append(d, norm, tex[3]);
-}
-
-void Geometry::loadArrays() const
-{
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
- glVertexPointer(3, GL_FLOAT, 0, vertices.constData());
- glNormalPointer(GL_FLOAT, 0, normals.constData());
- glTexCoordPointer(2, GL_FLOAT, 0, texCoords.constData());
- glColorPointer(4, GL_FLOAT, 0, colors.constData());
-}
-
-void Geometry::setColors(int start, GLfloat colorArray[4][4])
-{
- int off = faces[start];
- for (int i = 0; i < 4; ++i)
- colors[i + off] = QVector4D(colorArray[i][0],
- colorArray[i][1],
- colorArray[i][2],
- colorArray[i][3]);
-}
-
-Tile::Tile(const QVector3D &loc)
- : location(loc)
- , start(0)
- , count(0)
- , useFlatColor(false)
- , geom(0)
-{
- qSetColor(faceColor, QColor(Qt::darkGray));
-}
-
-void Tile::setColors(GLfloat colorArray[4][4])
-{
- useFlatColor = true;
- geom->setColors(start, colorArray);
-}
-
-void Tile::draw() const
-{
- QMatrix4x4 mat;
- mat.translate(location);
- mat.rotate(orientation);
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glMultMatrixf(mat.constData());
- glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, faceColor);
- glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, geom->indices() + start);
- glPopMatrix();
-}
-
-TileBuilder::TileBuilder(Geometry *g, qreal depth, qreal size)
- : verts(4)
- , tex(4)
- , start(g->count())
- , count(0)
- , geom(g)
-{
- // front face - make a square with bottom-left at origin
- verts[br].setX(size);
- verts[tr].setX(size);
- verts[tr].setY(size);
- verts[tl].setY(size);
-
- // these vert numbers are good for the tex-coords
- for (int i = 0; i < 4; ++i)
- tex[i] = verts[i].toVector2D();
-
- // now move verts half cube width across so cube is centered on origin
- for (int i = 0; i < 4; ++i)
- verts[i] -= QVector3D(size / 2.0f, size / 2.0f, -depth);
-
- // add the front face
- g->addQuad(verts[bl], verts[br], verts[tr], verts[tl], tex);
-
- count = g->count() - start;
-}
-
-void TileBuilder::initialize(Tile *tile) const
-{
- tile->start = start;
- tile->count = count;
- tile->geom = geom;
- qSetColor(tile->faceColor, color);
-}
-
-Tile *TileBuilder::newTile(const QVector3D &loc) const
-{
- Tile *tile = new Tile(loc);
- initialize(tile);
- return tile;
-}
-
-Cube::Cube(const QVector3D &loc)
- : Tile(loc)
- , rot(0.0f)
- , r(0)
- , animGroup(0)
-{
-}
-
-Cube::~Cube()
-{
-}
-
-void Cube::setAltitude(qreal a)
-{
- if (location.y() != a)
- {
- location.setY(a);
- emit changed();
- }
-}
-
-void Cube::setRange(qreal r)
-{
- if (location.x() != r)
- {
- location.setX(r);
- emit changed();
- }
-}
-
-void Cube::setRotation(qreal r)
-{
- if (r != rot)
- {
- orientation = QQuaternion::fromAxisAndAngle(QVector3D(1.0f, 1.0f, 1.0f), r);
- emit changed();
- }
-}
-
-void Cube::removeBounce()
-{
- delete animGroup;
- animGroup = 0;
- delete r;
- r = 0;
-}
-
-void Cube::startAnimation()
-{
- if (r)
- {
- r->start();
- r->setCurrentTime(startx);
- }
- if (animGroup)
- animGroup->start();
- if (rtn)
- rtn->start();
-}
-
-void Cube::setAnimationPaused(bool paused)
-{
- if (paused)
- {
- if (r)
- r->pause();
- if (animGroup)
- animGroup->pause();
- if (rtn)
- rtn->pause();
- }
- else
- {
- if (r)
- r->resume();
- if (animGroup)
- animGroup->resume();
- if (rtn)
- rtn->resume();
- }
-}
-
-CubeBuilder::CubeBuilder(Geometry *g, qreal depth, qreal size)
- : TileBuilder(g, depth)
- , ix(0)
-{
- for (int i = 0; i < 4; ++i)
- verts[i].setZ(size / 2.0f);
- // back face - "extrude" verts down
- QVector<QVector3D> back(verts);
- for (int i = 0; i < 4; ++i)
- back[i].setZ(-size / 2.0f);
-
- // add the back face
- g->addQuad(back[br], back[bl], back[tl], back[tr], tex);
-
- // add the sides
- g->addQuad(back[bl], back[br], verts[br], verts[bl], tex);
- g->addQuad(back[br], back[tr], verts[tr], verts[br], tex);
- g->addQuad(back[tr], back[tl], verts[tl], verts[tr], tex);
- g->addQuad(back[tl], back[bl], verts[bl], verts[tl], tex);
-
- count = g->count() - start;
-}
-
-Cube *CubeBuilder::newCube(const QVector3D &loc) const
-{
- Cube *c = new Cube(loc);
- initialize(c);
- qreal d = 4000.0f;
- qreal d3 = d / 3.0f;
- // Animate movement from left to right
- c->r = new QPropertyAnimation(c, "range");
- c->r->setStartValue(-1.3f);
- c->r->setEndValue(1.3f);
- c->startx = ix * d3 * 3.0f;
- c->r->setDuration(d * 4.0f);
- c->r->setLoopCount(-1);
- c->r->setEasingCurve(QEasingCurve(QEasingCurve::CosineCurve));
-
- c->animGroup = new QSequentialAnimationGroup(c);
-
- // Animate movement from bottom to top
- QPropertyAnimation *a_up = new QPropertyAnimation(c, "altitude", c->animGroup);
- a_up->setEndValue(loc.y());
- a_up->setStartValue(loc.y() + amplitudes[ix]);
- a_up->setDuration(d / speeds[ix]);
- a_up->setLoopCount(1);
- a_up->setEasingCurve(QEasingCurve(QEasingCurve::InQuad));
-
- // Animate movement from top to bottom
- QPropertyAnimation *a_down = new QPropertyAnimation(c, "altitude", c->animGroup);
- a_down->setEndValue(loc.y() + amplitudes[ix]);
- a_down->setStartValue(loc.y());
- a_down->setDuration(d / speeds[ix]);
- a_down->setLoopCount(1);
- a_down->setEasingCurve(QEasingCurve(QEasingCurve::OutQuad));
-
- c->animGroup->addAnimation(a_up);
- c->animGroup->addAnimation(a_down);
- c->animGroup->setLoopCount(-1);
-
- // Animate rotation
- c->rtn = new QPropertyAnimation(c, "rotation");
- c->rtn->setStartValue(c->rot);
- c->rtn->setEndValue(359.0f);
- c->rtn->setDuration(d * 2.0f);
- c->rtn->setLoopCount(-1);
- c->rtn->setDuration(d / 2);
- ix = (ix + 1) % 3;
- return c;
-}
diff --git a/examples/opengl/legacy/pbuffers/cube.h b/examples/opengl/legacy/pbuffers/cube.h
deleted file mode 100644
index 17cac2decd..0000000000
--- a/examples/opengl/legacy/pbuffers/cube.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef CUBE_H
-#define CUBE_H
-
-#include <QtOpenGL/qgl.h>
-#include <QtCore/qvector.h>
-#include <QtCore/qsequentialanimationgroup.h>
-#include <QtGui/qmatrix4x4.h>
-#include <QtGui/qvector3d.h>
-#include <QtGui/qvector2d.h>
-
-QT_BEGIN_NAMESPACE
-class QPropertyAnimation;
-QT_END_NAMESPACE
-
-class Geometry
-{
-public:
- void loadArrays() const;
- void addQuad(const QVector3D &a, const QVector3D &b,
- const QVector3D &c, const QVector3D &d,
- const QVector<QVector2D> &tex);
- void setColors(int start, GLfloat colors[4][4]);
- const GLushort *indices() const { return faces.constData(); }
- int count() const { return faces.count(); }
-private:
- QVector<GLushort> faces;
- QVector<QVector3D> vertices;
- QVector<QVector3D> normals;
- QVector<QVector2D> texCoords;
- QVector<QVector4D> colors;
- int append(const QVector3D &a, const QVector3D &n, const QVector2D &t);
- void addTri(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &n);
- friend class Tile;
-};
-
-class Tile
-{
-public:
- void draw() const;
- void setColors(GLfloat[4][4]);
-protected:
- Tile(const QVector3D &loc = QVector3D());
- QVector3D location;
- QQuaternion orientation;
-private:
- int start;
- int count;
- bool useFlatColor;
- GLfloat faceColor[4];
- Geometry *geom;
- friend class TileBuilder;
-};
-
-class TileBuilder
-{
-public:
- enum { bl, br, tr, tl };
- explicit TileBuilder(Geometry *, qreal depth = 0.0f, qreal size = 1.0f);
- Tile *newTile(const QVector3D &loc = QVector3D()) const;
- void setColor(QColor c) { color = c; }
-protected:
- void initialize(Tile *) const;
- QVector<QVector3D> verts;
- QVector<QVector2D> tex;
- int start;
- int count;
- Geometry *geom;
- QColor color;
-};
-
-class Cube : public QObject, public Tile
-{
- Q_OBJECT
- Q_PROPERTY(qreal range READ range WRITE setRange)
- Q_PROPERTY(qreal altitude READ altitude WRITE setAltitude)
- Q_PROPERTY(qreal rotation READ rotation WRITE setRotation)
-public:
- Cube(const QVector3D &loc = QVector3D());
- ~Cube();
- qreal range() { return location.x(); }
- void setRange(qreal r);
- qreal altitude() { return location.y(); }
- void setAltitude(qreal a);
- qreal rotation() { return rot; }
- void setRotation(qreal r);
- void removeBounce();
- void startAnimation();
- void setAnimationPaused(bool paused);
-signals:
- void changed();
-private:
- qreal rot;
- QPropertyAnimation *r;
- QPropertyAnimation *rtn;
- QSequentialAnimationGroup *animGroup;
- qreal startx;
- friend class CubeBuilder;
-};
-
-class CubeBuilder : public TileBuilder
-{
-public:
- explicit CubeBuilder(Geometry *, qreal depth = 0.0f, qreal size = 1.0f);
- Cube *newCube(const QVector3D &loc = QVector3D()) const;
-private:
- mutable int ix;
-};
-
-#endif // CUBE_H
diff --git a/examples/opengl/legacy/pbuffers/cubelogo.png b/examples/opengl/legacy/pbuffers/cubelogo.png
deleted file mode 100644
index 2ccbede774..0000000000
--- a/examples/opengl/legacy/pbuffers/cubelogo.png
+++ /dev/null
Binary files differ
diff --git a/examples/opengl/legacy/pbuffers/glwidget.cpp b/examples/opengl/legacy/pbuffers/glwidget.cpp
deleted file mode 100644
index 5763436d5e..0000000000
--- a/examples/opengl/legacy/pbuffers/glwidget.cpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-#include <math.h>
-
-#include "cube.h"
-
-#include <QGLPixelBuffer>
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-static GLfloat colorArray[][4] = {
- {0.243f, 0.423f, 0.125f, 1.0f},
- {0.176f, 0.31f, 0.09f, 1.0f},
- {0.4f, 0.69f, 0.212f, 1.0f},
- {0.317f, 0.553f, 0.161f, 1.0f}
-};
-
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
- , geom(0)
- , cube(0)
-{
- // create the pbuffer
- QGLFormat pbufferFormat = format();
- pbufferFormat.setSampleBuffers(false);
- pbuffer = new QGLPixelBuffer(QSize(512, 512), pbufferFormat, this);
- setWindowTitle(tr("OpenGL pbuffers"));
- initializeGeometry();
-}
-
-GLWidget::~GLWidget()
-{
- pbuffer->releaseFromDynamicTexture();
- glDeleteTextures(1, &dynamicTexture);
- delete pbuffer;
-
- qDeleteAll(cubes);
- qDeleteAll(tiles);
- delete cube;
-}
-
-void GLWidget::initializeGL()
-{
- initCommon();
- glShadeModel(GL_SMOOTH);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
- glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
- initPbuffer();
- cube->startAnimation();
- connect(cube, SIGNAL(changed()), this, SLOT(update()));
- for (int i = 0; i < 3; ++i)
- {
- cubes[i]->startAnimation();
- connect(cubes[i], SIGNAL(changed()), this, SLOT(update()));
- }
-}
-
-void GLWidget::paintGL()
-{
- pbuffer->makeCurrent();
- drawPbuffer();
- // On direct render platforms, drawing onto the pbuffer context above
- // automatically updates the dynamic texture. For cases where rendering
- // directly to a texture is not supported, explicitly copy.
- if (!hasDynamicTextureUpdate)
- pbuffer->updateDynamicTexture(dynamicTexture);
- makeCurrent();
-
- // Use the pbuffer as a texture to render the scene
- glBindTexture(GL_TEXTURE_2D, dynamicTexture);
-
- // set up to render the scene
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glTranslatef(0.0f, 0.0f, -10.0f);
-
- // draw the background
- glPushMatrix();
- glScalef(aspect, 1.0f, 1.0f);
- for (int i = 0; i < tiles.count(); ++i)
- tiles[i]->draw();
- glPopMatrix();
-
- // draw the bouncing cubes
- for (int i = 0; i < cubes.count(); ++i)
- cubes[i]->draw();
-}
-
-void GLWidget::initializeGeometry()
-{
- geom = new Geometry();
- CubeBuilder cBuilder(geom, 0.5);
- cBuilder.setColor(QColor(255, 255, 255, 212));
- // build the 3 bouncing, spinning cubes
- for (int i = 3; i > 0; --i)
- cubes.append(cBuilder.newCube(QVector3D((float)(i-1), -1.5f, 5 - i)));
-
- // build the spinning cube which goes in the dynamic texture
- cube = cBuilder.newCube();
- cube->removeBounce();
-
- // build the background tiles
- TileBuilder tBuilder(geom);
- tBuilder.setColor(QColor(Qt::white));
- for (int c = -2; c <= +2; ++c)
- for (int r = -2; r <= +2; ++r)
- tiles.append(tBuilder.newTile(QVector3D(c, r, 0)));
-
- // graded backdrop for the pbuffer scene
- TileBuilder bBuilder(geom, 0.0f, 2.0f);
- bBuilder.setColor(QColor(102, 176, 54, 210));
- backdrop = bBuilder.newTile(QVector3D(0.0f, 0.0f, -1.5f));
- backdrop->setColors(colorArray);
-}
-
-void GLWidget::initCommon()
-{
- qglClearColor(QColor(Qt::darkGray));
-
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glEnable(GL_MULTISAMPLE);
-
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
-
- glEnable(GL_TEXTURE_2D);
-
- geom->loadArrays();
-}
-
-void GLWidget::perspectiveProjection()
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-#ifdef QT_OPENGL_ES
- glFrustumf(-aspect, +aspect, -1.0, +1.0, 4.0, 15.0);
-#else
- glFrustum(-aspect, +aspect, -1.0, +1.0, 4.0, 15.0);
-#endif
- glMatrixMode(GL_MODELVIEW);
-}
-
-void GLWidget::orthographicProjection()
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
-#ifdef QT_OPENGL_ES
- glOrthof(-1.0, +1.0, -1.0, +1.0, -90.0, +90.0);
-#else
- glOrtho(-1.0, +1.0, -1.0, +1.0, -90.0, +90.0);
-#endif
- glMatrixMode(GL_MODELVIEW);
-}
-
-void GLWidget::resizeGL(int width, int height)
-{
- glViewport(0, 0, width * devicePixelRatio(), height * devicePixelRatio());
- aspect = (qreal)width / (qreal)(height ? height : 1);
- perspectiveProjection();
-}
-
-void GLWidget::drawPbuffer()
-{
- orthographicProjection();
-
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glDisable(GL_TEXTURE_2D);
- backdrop->draw();
- glEnable(GL_TEXTURE_2D);
-
- glBindTexture(GL_TEXTURE_2D, cubeTexture);
- glDisable(GL_CULL_FACE);
- cube->draw();
- glEnable(GL_CULL_FACE);
-
- glFlush();
-}
-
-void GLWidget::initPbuffer()
-{
- pbuffer->makeCurrent();
-
- cubeTexture = bindTexture(QImage(":res/cubelogo.png"));
-
- initCommon();
-
- // generate a texture that has the same size/format as the pbuffer
- dynamicTexture = pbuffer->generateDynamicTexture();
-
- // bind the dynamic texture to the pbuffer - this is a no-op under X11
- hasDynamicTextureUpdate = pbuffer->bindToDynamicTexture(dynamicTexture);
- makeCurrent();
-}
-
-void GLWidget::setAnimationPaused(bool enable)
-{
- cube->setAnimationPaused(enable);
- for (int i = 0; i < 3; ++i)
- cubes[i]->setAnimationPaused(enable);
-}
diff --git a/examples/opengl/legacy/pbuffers/glwidget.h b/examples/opengl/legacy/pbuffers/glwidget.h
deleted file mode 100644
index 397329c428..0000000000
--- a/examples/opengl/legacy/pbuffers/glwidget.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef GLWIDGET_H
-#define GLWIDGET_H
-
-#include <QGLWidget>
-
-class Geometry;
-class Cube;
-class Tile;
-QT_BEGIN_NAMESPACE
-class QGLPixelBuffer;
-QT_END_NAMESPACE
-
-class GLWidget : public QGLWidget
-{
-public:
- GLWidget(QWidget *parent = 0);
- ~GLWidget();
-
-protected:
- void initializeGL() override;
- void paintGL() override;
- void resizeGL(int width, int height) override;
- void mousePressEvent(QMouseEvent *) override { setAnimationPaused(true); }
- void mouseReleaseEvent(QMouseEvent *) override { setAnimationPaused(false); }
-
-private:
- void initializeGeometry();
- void initPbuffer();
- void initCommon();
- void perspectiveProjection();
- void orthographicProjection();
- void drawPbuffer();
- void setAnimationPaused(bool enable);
-
- qreal aspect;
- GLuint dynamicTexture;
- GLuint cubeTexture;
- bool hasDynamicTextureUpdate;
- QGLPixelBuffer *pbuffer;
- Geometry *geom;
- Cube *cube;
- Tile *backdrop;
- QList<Cube *> cubes;
- QList<Tile *> tiles;
-
-};
-//! [3]
-
-#endif
diff --git a/examples/opengl/legacy/pbuffers/main.cpp b/examples/opengl/legacy/pbuffers/main.cpp
deleted file mode 100644
index 157f450b75..0000000000
--- a/examples/opengl/legacy/pbuffers/main.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#include <QtOpenGL/QGLPixelBuffer>
-
-#include "glwidget.h"
-
-int main(int argc, char **argv)
-{
- Q_INIT_RESOURCE(pbuffers);
-
- QApplication a(argc, argv);
- GLWidget widget(0);
- widget.resize(640, 480);
- widget.makeCurrent();
-
- if (!QGLFormat::hasOpenGL() || !QGLPixelBuffer::hasOpenGLPbuffers()) {
- QMessageBox::information(0, "OpenGL pbuffers",
- "This system does not support OpenGL/pbuffers.");
- return -1;
- }
-
- widget.show();
- return a.exec();
-}
-
diff --git a/examples/opengl/legacy/pbuffers/pbuffers.pro b/examples/opengl/legacy/pbuffers/pbuffers.pro
deleted file mode 100644
index 7572ba3583..0000000000
--- a/examples/opengl/legacy/pbuffers/pbuffers.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-HEADERS += glwidget.h \
- cube.h
-SOURCES += glwidget.cpp \
- main.cpp \
- cube.cpp
-RESOURCES += pbuffers.qrc
-QT += opengl widgets
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/pbuffers
-INSTALLS += target
-
-qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/pbuffers/pbuffers.qrc b/examples/opengl/legacy/pbuffers/pbuffers.qrc
deleted file mode 100644
index 9fc1a56a1a..0000000000
--- a/examples/opengl/legacy/pbuffers/pbuffers.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/res">
- <file>cubelogo.png</file>
-</qresource>
-</RCC>
diff --git a/examples/opengl/legacy/pbuffers2/bubbles.svg b/examples/opengl/legacy/pbuffers2/bubbles.svg
deleted file mode 100644
index 51730124a2..0000000000
--- a/examples/opengl/legacy/pbuffers2/bubbles.svg
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
-<svg width="20cm" height="15cm" viewBox="0 0 800 600"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink/"
- baseProfile="tiny" version="1.2">
- <title>Spheres</title>
- <desc>Semi-transparent bubbles on a colored background.</desc>
- <defs>
- <!-- Create radial gradients for each bubble. -->
- <radialGradient id="blueBubble" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" stop-opacity="1" />
- <stop offset="25%" stop-color="#cdcdff" stop-opacity=".65" />
- <stop offset="100%" stop-color="#cdaacd" stop-opacity=".75" />
- </radialGradient>
- <radialGradient id="redBubble" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" stop-opacity="1" />
- <stop offset="25%" stop-color="#ffcdcd" stop-opacity=".65" />
- <stop offset="100%" stop-color="#bbbb99" stop-opacity=".75" />
- </radialGradient>
- <radialGradient id="greenBubble" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" stop-opacity="1" />
- <stop offset="25%" stop-color="#cdffcd" stop-opacity=".65" />
- <stop offset="100%" stop-color="#99aaaa" stop-opacity=".75" />
- </radialGradient>
- <radialGradient id="yellowBubble" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" stop-opacity="1" />
- <stop offset="25%" stop-color="#ffffcd" stop-opacity=".65" />
- <stop offset="100%" stop-color="#bbbbaa" stop-opacity=".75" />
- </radialGradient>
- <radialGradient id="background" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="400" fx="250" fy="250">
- <stop offset="0%" stop-color="#ffffee" />
- <stop offset="100%" stop-color="#ccccaa" />
- </radialGradient>
- <linearGradient id="surface" gradientUnits="userSpaceOnUse"
- x1="-100" y1="200" x2="400" y2="200">
- <stop offset="0%" stop-color="#ffffcc" />
- <stop offset="100%" stop-color="#bbbb88" />
- </linearGradient>
-
- <!-- Create radial gradients for each circle to make them look like
- spheres. -->
- <radialGradient id="blueSphere" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" />
- <stop offset="75%" stop-color="blue" />
- <stop offset="100%" stop-color="#222244" />
- </radialGradient>
- <radialGradient id="redSphere" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" />
- <stop offset="75%" stop-color="red" />
- <stop offset="100%" stop-color="#442222" />
- </radialGradient>
- <radialGradient id="greenSphere" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" />
- <stop offset="75%" stop-color="green" />
- <stop offset="100%" stop-color="#113311" />
- </radialGradient>
- <radialGradient id="yellowSphere" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="-50">
- <stop offset="0%" stop-color="white" />
- <stop offset="75%" stop-color="yellow" />
- <stop offset="100%" stop-color="#444422" />
- </radialGradient>
- <radialGradient id="shadowGrad" gradientUnits="userSpaceOnUse"
- cx="0" cy="0" r="100" fx="-50" fy="50">
- <stop offset="0%" stop-color="black" stop-opacity="1.0" />
- <stop offset="100%" stop-color="black" stop-opacity="0.0" />
- </radialGradient>
-
- <!-- Define a shadow for each sphere. -->
- <circle id="shadow" fill="url(#shadowGrad)" cx="0" cy="0" r="100" />
- <g id="bubble">
- <circle fill="black" cx="0" cy="0" r="50" />
- <circle fill="#a6ce39" cx="0" cy="0" r="33" />
- <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
- L -11,22 L -1,12 Z" />
- <circle cx="0" cy="0" r="100" />
- </g>
- </defs>
- <g>
- <rect fill="url(#background)" x="0" y="0" width="800" height="600" />
- </g>
-
- <g transform="translate(200,700)">
- <use xlink:href="#bubble" fill="url(#blueBubble)" />
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="1s" dur="10s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(315,700)">
- <g transform="scale(0.5,0.5)">
- <use xlink:href="#bubble" fill="url(#redBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="3s" dur="7s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(80,700)">
- <g transform="scale(0.65,0.65)">
- <use xlink:href="#bubble" fill="url(#greenBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="5s" dur="9s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(255,700)">
- <g transform="scale(0.3,0.3)">
- <use xlink:href="#bubble" fill="url(#yellowBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="2s" dur="6s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(565,700)">
- <g transform="scale(0.4,0.4)">
- <use xlink:href="#bubble" fill="url(#blueBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="4s" dur="8s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(715,700)">
- <g transform="scale(0.6,0.6)">
- <use xlink:href="#bubble" fill="url(#redBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="1s" dur="4s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(645,700)">
- <g transform="scale(0.375,0.375)">
- <use xlink:href="#bubble" fill="url(#greenBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="0s" dur="11s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(555,700)">
- <g transform="scale(0.9,0.9)">
- <use xlink:href="#bubble" fill="url(#yellowBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="3s" dur="7.5s" fill="freeze" repeatCount="indefinite" />
- </g>
-
- <g transform="translate(360,700)">
- <g transform="scale(0.5,0.5)">
- <use xlink:href="#bubble" fill="url(#blueBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="3s" dur="6s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(215,700)">
- <g transform="scale(0.45,0.45)">
- <use xlink:href="#bubble" fill="url(#redBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="5.5s" dur="7s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(420,700)">
- <g transform="scale(0.75,0.75)">
- <use xlink:href="#bubble" fill="url(#greenBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="1s" dur="9s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(815,700)">
- <g transform="scale(0.6,0.6)">
- <use xlink:href="#bubble" fill="url(#yellowBubble)" />
- </g>
- <animateTransform attributeName="transform" type="translate" additive="sum"
- values="0,0; 0,-800" begin="2s" dur="9.5s" fill="freeze" repeatCount="indefinite" />
- </g>
-
- <g transform="translate(225,375)" >
- <g transform="scale(1.0,0.5)" >
- <path d="M 0 0 L 350 0 L 450 450 L -100 450 z"
- fill="url(#surface)" stroke="none" />
- </g>
- </g>
- <g transform="translate(200,0)" >
- <g transform="translate(200,490) scale(2.0,1.0) rotate(45)" >
- <rect fill="#a6ce39" x="-69" y="-69" width="138" height="138" />
- <circle fill="black" cx="0" cy="0" r="50" />
- <circle fill="#a6ce39" cx="0" cy="0" r="33" />
- <path fill="black" d="M 37,50 L 50,37 L 12,-1 L 22,-11 L 10,-24 L -24,10
- L -11,22 L -1,12 Z" />
- <animateTransform attributeName="transform" type="rotate" additive="sum" values="0; 360"
- begin="0s" dur="10s" fill="freeze" repeatCount="indefinite" />
- </g>
- <g transform="translate(200,375)">
- <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
- <circle fill="url(#blueSphere)" cx="0" cy="0" r="100" />
- </g>
- <g transform="translate(315,440)">
- <g transform="scale(0.5,0.5)">
- <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
- <circle fill="url(#redSphere)" cx="0" cy="0" r="100" />
- </g>
- </g>
- <g transform="translate(80,475)">
- <g transform="scale(0.65,0.65)">
- <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
- <circle fill="url(#greenSphere)" cx="0" cy="0" r="100" />
- </g>
- </g>
- <g transform="translate(255,525)">
- <g transform="scale(0.3,0.3)">
- <use xlink:href="#shadow" transform="translate(25,55) scale(1.0,0.5)" />
- <circle fill="url(#yellowSphere)" cx="0" cy="0" r="100" />
- </g>
- </g>
- </g>
-</svg>
diff --git a/examples/opengl/legacy/pbuffers2/designer.png b/examples/opengl/legacy/pbuffers2/designer.png
deleted file mode 100644
index 4f32d57496..0000000000
--- a/examples/opengl/legacy/pbuffers2/designer.png
+++ /dev/null
Binary files differ
diff --git a/examples/opengl/legacy/pbuffers2/glwidget.cpp b/examples/opengl/legacy/pbuffers2/glwidget.cpp
deleted file mode 100644
index c710d03cab..0000000000
--- a/examples/opengl/legacy/pbuffers2/glwidget.cpp
+++ /dev/null
@@ -1,328 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtGui/QImage>
-#include <qmath.h>
-#include "glwidget.h"
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
-{
- setWindowTitle(tr("OpenGL pbuffers 2"));
-
- pbuffer = new QGLPixelBuffer(1024, 1024, format(), this);
-
- rot_x = rot_y = rot_z = 0.0f;
- scale = 0.1f;
- anim = new QTimeLine(750, this);
- anim->setUpdateInterval(20);
- connect(anim, SIGNAL(valueChanged(qreal)), SLOT(animate(qreal)));
- connect(anim, SIGNAL(finished()), SLOT(animFinished()));
-
- svg_renderer = new QSvgRenderer(QLatin1String(":/res/bubbles.svg"), this);
- connect(svg_renderer, SIGNAL(repaintNeeded()), this, SLOT(draw()));
-
- logo = QImage(":/res/designer.png");
- logo = logo.convertToFormat(QImage::Format_ARGB32);
-
- makeCurrent(); // need a current context to create the display list
- tile_list = glGenLists(1);
- glNewList(tile_list, GL_COMPILE);
- glBegin(GL_QUADS);
- {
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
-
- glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
-
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
-
- glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
-
- glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
-
- glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
- glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
- glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
- glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
-}
- glEnd();
- glEndList();
-
- wave = new GLfloat[logo.width()*logo.height()];
- memset(wave, 0, logo.width()*logo.height());
- startTimer(30); // wave timer
-
- pbuffer->makeCurrent();
- dynamicTexture = pbuffer->generateDynamicTexture();
-
- // bind the dynamic texture to the pbuffer - this is a no-op under X11
- hasDynamicTextureUpdate = pbuffer->bindToDynamicTexture(dynamicTexture);
-}
-
-GLWidget::~GLWidget()
-{
- delete[] wave;
- glDeleteLists(tile_list, 1);
- pbuffer->releaseFromDynamicTexture();
- glDeleteTextures(1, &dynamicTexture);
- delete pbuffer;
-}
-
-void GLWidget::paintEvent(QPaintEvent *)
-{
- draw();
-}
-
-void GLWidget::draw()
-{
- QPainter p(this); // used for text overlay
-
- // save the GL state set for QPainter
- p.beginNativePainting();
- saveGLState();
-
- // render the 'bubbles.svg' file into our pbuffer
- QPainter pbuffer_painter(pbuffer);
- svg_renderer->render(&pbuffer_painter);
- pbuffer_painter.end();
- glFlush();
-
- if (!hasDynamicTextureUpdate)
- pbuffer->updateDynamicTexture(dynamicTexture);
-
- makeCurrent();
- // draw into the GL widget
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-1, 1, -1, 1, 10, 100);
- glTranslatef(0.0f, 0.0f, -15.0f);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glViewport(0, 0, width() * devicePixelRatio(), height() * devicePixelRatio());
-
- glBindTexture(GL_TEXTURE_2D, dynamicTexture);
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_MULTISAMPLE);
- glEnable(GL_CULL_FACE);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- // draw background
- glPushMatrix();
- glScalef(1.7f, 1.7f, 1.7f);
- glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
- glCallList(tile_list);
- glPopMatrix();
-
- const int w = logo.width();
- const int h = logo.height();
-
- glRotatef(rot_x, 1.0f, 0.0f, 0.0f);
- glRotatef(rot_y, 0.0f, 1.0f, 0.0f);
- glRotatef(rot_z, 0.0f, 0.0f, 1.0f);
- glScalef(scale/w, scale/w, scale/w);
-
- glDepthFunc(GL_LESS);
- glEnable(GL_DEPTH_TEST);
-
- // draw the Qt icon
- glTranslatef(-w+1, -h+1, 0.0f);
- for (int y=h-1; y>=0; --y) {
- uint *p = (uint*) logo.scanLine(y);
- uint *end = p + w;
- int x = 0;
- while (p < end) {
- glColor4ub(qRed(*p), qGreen(*p), qBlue(*p), uchar(qAlpha(*p)*.9));
- glTranslatef(0.0f, 0.0f, wave[y*w+x]);
- if (qAlpha(*p) > 128)
- glCallList(tile_list);
- glTranslatef(0.0f, 0.0f, -wave[y*w+x]);
- glTranslatef(2.0f, 0.0f, 0.0f);
- ++x;
- ++p;
- }
- glTranslatef(-w*2.0f, 2.0f, 0.0f);
- }
-
- // restore the GL state that QPainter expects
- restoreGLState();
- p.endNativePainting();
-
- // draw the overlayed text using QPainter
- p.setPen(QColor(197, 197, 197, 157));
- p.setBrush(QColor(197, 197, 197, 127));
- p.drawRect(QRect(0, 0, width(), 50));
- p.setPen(Qt::black);
- p.setBrush(Qt::NoBrush);
- const QString str1(tr("A simple OpenGL pbuffer example."));
- const QString str2(tr("Use the mouse wheel to zoom, press buttons and move mouse to rotate, double-click to flip."));
- QFontMetrics fm(p.font());
- p.drawText(width()/2 - fm.width(str1)/2, 20, str1);
- p.drawText(width()/2 - fm.width(str2)/2, 20 + fm.lineSpacing(), str2);
-}
-
-void GLWidget::mousePressEvent(QMouseEvent *e)
-{
- anchor = e->pos();
-}
-
-void GLWidget::mouseMoveEvent(QMouseEvent *e)
-{
- QPoint diff = e->pos() - anchor;
- if (e->buttons() & Qt::LeftButton) {
- rot_x += diff.y()/5.0f;
- rot_y += diff.x()/5.0f;
- } else if (e->buttons() & Qt::RightButton) {
- rot_z += diff.x()/5.0f;
- }
-
- anchor = e->pos();
- draw();
-}
-
-void GLWidget::wheelEvent(QWheelEvent *e)
-{
- e->delta() > 0 ? scale += scale*0.1f : scale -= scale*0.1f;
- draw();
-}
-
-void GLWidget::mouseDoubleClickEvent(QMouseEvent *)
-{
- anim->start();
-}
-
-void GLWidget::animate(qreal val)
-{
- rot_y = val * 180;
- draw();
-}
-
-void GLWidget::animFinished()
-{
- if (anim->direction() == QTimeLine::Forward)
- anim->setDirection(QTimeLine::Backward);
- else
- anim->setDirection(QTimeLine::Forward);
-}
-
-void GLWidget::saveGLState()
-{
- glPushAttrib(GL_ALL_ATTRIB_BITS);
- glMatrixMode(GL_PROJECTION);
- glPushMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
-}
-
-void GLWidget::restoreGLState()
-{
- glMatrixMode(GL_PROJECTION);
- glPopMatrix();
- glMatrixMode(GL_MODELVIEW);
- glPopMatrix();
- glPopAttrib();
-}
-
-void GLWidget::timerEvent(QTimerEvent *)
-{
- if (QApplication::mouseButtons() != 0)
- return;
-
- static bool scale_in = true;
-
- if (scale_in && scale > 35.0f)
- scale_in = false;
- else if (!scale_in && scale < .5f)
- scale_in = true;
-
- scale *= scale_in ? 1.01f : 0.99f;
- rot_z += 0.3f;
- rot_x += 0.1f;
-
- static float wt = 0.0;
- wt += 0.1f;
-
- const int width = logo.width();
- const int dx = width >> 1, dy = dx; // disturbance point
- const float v = -4; // wave speed
- const float W = .3f;
- const int AMP = 5;
-
- for (int i = 0; i < width; ++i) {
- for (int j = 0; j < width; ++j) {
- const float s = hypot(j - dx, i - dy);
- const double raw = AMP * sin(2 * M_PI * W * (wt + s / v));
- if (s != 0)
- wave[i * width + j] = raw / (0.2 * (s + 2));
- else
- wave[i * width + j] = raw;
- }
- }
-}
diff --git a/examples/opengl/legacy/pbuffers2/glwidget.h b/examples/opengl/legacy/pbuffers2/glwidget.h
deleted file mode 100644
index 2889754ce4..0000000000
--- a/examples/opengl/legacy/pbuffers2/glwidget.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtOpenGL>
-#include <QImage>
-#include <QTimeLine>
-#include <QSvgRenderer>
-
-class GLWidget : public QGLWidget
-{
- Q_OBJECT
-
-public:
- GLWidget(QWidget *parent);
- ~GLWidget();
-
- void saveGLState();
- void restoreGLState();
-
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseDoubleClickEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
- void timerEvent(QTimerEvent *);
- void wheelEvent(QWheelEvent *);
-
-public slots:
- void animate(qreal);
- void animFinished();
- void draw();
-
-private:
- QPoint anchor;
- float scale;
- float rot_x, rot_y, rot_z;
- GLuint tile_list;
- GLfloat *wave;
- bool hasDynamicTextureUpdate;
-
- QImage logo;
- QTimeLine *anim;
- QSvgRenderer *svg_renderer;
-
- GLuint dynamicTexture;
- QGLPixelBuffer *pbuffer;
-};
-
diff --git a/examples/opengl/legacy/pbuffers2/main.cpp b/examples/opengl/legacy/pbuffers2/main.cpp
deleted file mode 100644
index 03da7ab545..0000000000
--- a/examples/opengl/legacy/pbuffers2/main.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#include "glwidget.h"
-
-int main(int argc, char **argv)
-{
- Q_INIT_RESOURCE(pbuffers2);
-
- QApplication a(argc, argv);
- GLWidget widget(0);
- widget.resize(640, 480);
- widget.makeCurrent();
- if (!QGLFormat::hasOpenGL() || !QGLPixelBuffer::hasOpenGLPbuffers()) {
- QMessageBox::information(0, "OpenGL pbuffers 2",
- "This system does not support OpenGL/pbuffers.");
- return -1;
- }
- widget.show();
- return a.exec();
-}
-
diff --git a/examples/opengl/legacy/pbuffers2/pbuffers2.pro b/examples/opengl/legacy/pbuffers2/pbuffers2.pro
deleted file mode 100644
index f1baae3931..0000000000
--- a/examples/opengl/legacy/pbuffers2/pbuffers2.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-QT += opengl svg widgets
-
-HEADERS += glwidget.h
-SOURCES += glwidget.cpp main.cpp
-RESOURCES += pbuffers2.qrc
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/pbuffers2
-INSTALLS += target
-
-qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/pbuffers2/pbuffers2.qrc b/examples/opengl/legacy/pbuffers2/pbuffers2.qrc
deleted file mode 100644
index 986f1ca385..0000000000
--- a/examples/opengl/legacy/pbuffers2/pbuffers2.qrc
+++ /dev/null
@@ -1,6 +0,0 @@
-<!DOCTYPE RCC><RCC version="1.0">
-<qresource prefix="/res">
- <file>bubbles.svg</file>
- <file>designer.png</file>
-</qresource>
-</RCC>
diff --git a/examples/opengl/legacy/samplebuffers/glwidget.cpp b/examples/opengl/legacy/samplebuffers/glwidget.cpp
deleted file mode 100644
index da30de4d55..0000000000
--- a/examples/opengl/legacy/samplebuffers/glwidget.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "glwidget.h"
-#include <qmath.h>
-
-#ifndef GL_MULTISAMPLE
-#define GL_MULTISAMPLE 0x809D
-#endif
-
-GLWidget::GLWidget(QWidget *parent)
- : QGLWidget(QGLFormat(QGL::SampleBuffers), parent)
-{
- startTimer(40);
- setWindowTitle(tr("Sample Buffers"));
-}
-
-void GLWidget::initializeGL()
-{
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(-.5, .5, .5, -.5, -1000, 1000);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
-
- makeObject();
-}
-
-void GLWidget::resizeGL(int w, int h)
-{
- glViewport(0, 0, w, h);
-}
-
-void GLWidget::paintGL()
-{
- static float rot = 0.0;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- glMatrixMode(GL_MODELVIEW);
- glPushMatrix();
- glEnable(GL_MULTISAMPLE);
- glTranslatef(-0.25f, -0.10f, 0.0f);
- glScalef(0.75f, 1.15f, 0.0f);
- glRotatef(rot, 0.0f, 0.f, 1.0f);
- glCallList(list);
- glPopMatrix();
-
- glPushMatrix();
- glDisable(GL_MULTISAMPLE);
- glTranslatef(0.25f, -0.10f, 0.0f);
- glScalef(0.75f, 1.15f, 0.0f);
- glRotatef(rot, 0.0f, 0.0f, 1.0f);
- glCallList(list);
- glPopMatrix();
-
- rot += 0.2f;
-
- qglColor(Qt::black);
- renderText(-0.35, 0.4, 0.0, "Multisampling enabled");
- renderText(0.15, 0.4, 0.0, "Multisampling disabled");
-}
-
-void GLWidget::timerEvent(QTimerEvent *)
-{
- update();
-}
-
-void GLWidget::makeObject()
-{
- QColor qtGreen(QColor::fromCmykF(0.40, 0.0, 1.0, 0.0));
- const int NumSectors = 15;
- GLdouble x1 = +0.06;
- GLdouble y1 = -0.14;
- GLdouble x2 = +0.14;
- GLdouble y2 = -0.06;
- GLdouble x3 = +0.08;
- GLdouble y3 = +0.00;
- GLdouble x4 = +0.30;
- GLdouble y4 = +0.22;
-
- list = glGenLists(1);
- glNewList(list, GL_COMPILE);
- {
- const double sectorAngle = 2 * M_PI / NumSectors;
- for (int i = 0; i < NumSectors; ++i) {
- double angle = i * sectorAngle;
- GLdouble x5 = 0.30 * sin(angle);
- GLdouble y5 = 0.30 * cos(angle);
- GLdouble x6 = 0.20 * sin(angle);
- GLdouble y6 = 0.20 * cos(angle);
-
- angle += sectorAngle;
- GLdouble x7 = 0.20 * sin(angle);
- GLdouble y7 = 0.20 * cos(angle);
- GLdouble x8 = 0.30 * sin(angle);
- GLdouble y8 = 0.30 * cos(angle);
-
- qglColor(qtGreen);
- quad(GL_QUADS, x5, y5, x6, y6, x7, y7, x8, y8);
- qglColor(Qt::black);
- quad(GL_LINE_LOOP, x5, y5, x6, y6, x7, y7, x8, y8);
- }
-
- qglColor(qtGreen);
- quad(GL_QUADS, x1, y1, x2, y2, y2, x2, y1, x1);
- quad(GL_QUADS, x3, y3, x4, y4, y4, x4, y3, x3);
-
- qglColor(Qt::black);
- quad(GL_LINE_LOOP, x1, y1, x2, y2, y2, x2, y1, x1);
- quad(GL_LINE_LOOP, x3, y3, x4, y4, y4, x4, y3, x3);
- }
- glEndList();
-}
-
-void GLWidget::quad(GLenum primitive, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
- GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4)
-{
- glBegin(primitive);
- {
- glVertex2d(x1, y1);
- glVertex2d(x2, y2);
- glVertex2d(x3, y3);
- glVertex2d(x4, y4);
- }
- glEnd();
-}
diff --git a/examples/opengl/legacy/samplebuffers/glwidget.h b/examples/opengl/legacy/samplebuffers/glwidget.h
deleted file mode 100644
index f02f0835ef..0000000000
--- a/examples/opengl/legacy/samplebuffers/glwidget.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtOpenGL>
-
-class GLWidget : public QGLWidget
-{
-public:
- GLWidget(QWidget *parent);
-
-protected:
- void initializeGL() override;
- void resizeGL(int w, int h) override;
- void paintGL() override;
- void timerEvent(QTimerEvent *) override;
-
- void makeObject();
- void quad(GLenum primitive, GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2,
- GLdouble x3, GLdouble y3, GLdouble x4, GLdouble y4);
-
-private:
- GLuint list;
-};
-
diff --git a/examples/opengl/legacy/samplebuffers/main.cpp b/examples/opengl/legacy/samplebuffers/main.cpp
deleted file mode 100644
index 216dff1fda..0000000000
--- a/examples/opengl/legacy/samplebuffers/main.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#include "glwidget.h"
-
-int main(int argc, char **argv)
-{
- QApplication a(argc, argv);
-
- QGLFormat f = QGLFormat::defaultFormat();
- f.setSampleBuffers(true);
- QGLFormat::setDefaultFormat(f);
- if (!QGLFormat::hasOpenGL()) {
- QMessageBox::information(0, "OpenGL samplebuffers",
- "This system does not support OpenGL.");
- return 0;
- }
-
- GLWidget widget(0);
-
- if (!widget.format().sampleBuffers()) {
- QMessageBox::information(0, "OpenGL samplebuffers",
- "This system does not have sample buffer support.");
- return 0;
- }
-
- widget.resize(640, 480);
- widget.show();
-
- return a.exec();
-}
-
diff --git a/examples/opengl/legacy/samplebuffers/samplebuffers.pro b/examples/opengl/legacy/samplebuffers/samplebuffers.pro
deleted file mode 100644
index aca56f8df8..0000000000
--- a/examples/opengl/legacy/samplebuffers/samplebuffers.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-HEADERS += glwidget.h
-SOURCES += glwidget.cpp main.cpp
-
-QT += opengl widgets
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/opengl/legacy/samplebuffers
-INSTALLS += target
-
-qtConfig(opengles.|angle|dynamicgl): error("This example requires Qt to be configured with -opengl desktop")
diff --git a/examples/opengl/legacy/shared/qtlogo.cpp b/examples/opengl/legacy/shared/qtlogo.cpp
deleted file mode 100644
index 9ad274ce09..0000000000
--- a/examples/opengl/legacy/shared/qtlogo.cpp
+++ /dev/null
@@ -1,398 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qtlogo.h"
-
-#include <QGLWidget>
-#include <QMatrix4x4>
-#include <QVector3D>
-#include <QOpenGLFunctions_1_1>
-
-#include <qmath.h>
-
-static const qreal tee_height = 0.311126;
-static const qreal cross_width = 0.25;
-static const qreal bar_thickness = 0.113137;
-static const qreal logo_depth = 0.10;
-
-//! [0]
-struct Geometry
-{
- QVector<GLushort> faces;
- QVector<QVector3D> vertices;
- QVector<QVector3D> normals;
- void appendSmooth(const QVector3D &a, const QVector3D &n, int from);
- void appendFaceted(const QVector3D &a, const QVector3D &n);
- void finalize();
- void loadArrays(QOpenGLFunctions_1_1 *functions) const;
-};
-//! [0]
-
-//! [1]
-class Patch
-{
-public:
- enum Smoothing { Faceted, Smooth };
- Patch(Geometry *);
- void setSmoothing(Smoothing s) { sm = s; }
- void translate(const QVector3D &t);
- void rotate(qreal deg, QVector3D axis);
- void draw(QOpenGLFunctions_1_1 *functions) const;
- void addTri(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &n);
- void addQuad(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &d);
-
- GLushort start;
- GLushort count;
- GLushort initv;
-
- GLfloat faceColor[4];
- QMatrix4x4 mat;
- Smoothing sm;
- Geometry *geom;
-};
-//! [1]
-
-static inline void qSetColor(float colorVec[], QColor c)
-{
- colorVec[0] = c.redF();
- colorVec[1] = c.greenF();
- colorVec[2] = c.blueF();
- colorVec[3] = c.alphaF();
-}
-
-void Geometry::loadArrays(QOpenGLFunctions_1_1 *functions) const
-{
- functions->glVertexPointer(3, GL_FLOAT, 0, vertices.constData());
- functions->glNormalPointer(GL_FLOAT, 0, normals.constData());
-}
-
-void Geometry::finalize()
-{
- // TODO: add vertex buffer uploading here
-
- // Finish smoothing normals by ensuring accumulated normals are returned
- // to length 1.0.
- for (int i = 0; i < normals.count(); ++i)
- normals[i].normalize();
-}
-
-void Geometry::appendSmooth(const QVector3D &a, const QVector3D &n, int from)
-{
- // Smooth normals are achieved by averaging the normals for faces meeting
- // at a point. First find the point in geometry already generated
- // (working backwards, since most often the points shared are between faces
- // recently added).
- int v = vertices.count() - 1;
- for ( ; v >= from; --v)
- if (qFuzzyCompare(vertices[v], a))
- break;
-
- if (v < from) {
- // The vertex was not found so add it as a new one, and initialize
- // its corresponding normal
- v = vertices.count();
- vertices.append(a);
- normals.append(n);
- } else {
- // Vert found, accumulate normals into corresponding normal slot.
- // Must call finalize once finished accumulating normals
- normals[v] += n;
- }
-
- // In both cases (found or not) reference the vertex via its index
- faces.append(v);
-}
-
-void Geometry::appendFaceted(const QVector3D &a, const QVector3D &n)
-{
- // Faceted normals are achieved by duplicating the vertex for every
- // normal, so that faces meeting at a vertex get a sharp edge.
- int v = vertices.count();
- vertices.append(a);
- normals.append(n);
- faces.append(v);
-}
-
-Patch::Patch(Geometry *g)
- : start(g->faces.count())
- , count(0)
- , initv(g->vertices.count())
- , sm(Patch::Smooth)
- , geom(g)
-{
- qSetColor(faceColor, QColor(Qt::darkGray));
-}
-
-void Patch::rotate(qreal deg, QVector3D axis)
-{
- mat.rotate(deg, axis);
-}
-
-void Patch::translate(const QVector3D &t)
-{
- mat.translate(t);
-}
-
-//! [2]
-void Patch::draw(QOpenGLFunctions_1_1 *functions) const
-{
- functions->glPushMatrix();
- functions->glMultMatrixf(mat.constData());
- functions->glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, faceColor);
-
- const GLushort *indices = geom->faces.constData();
- functions->glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, indices + start);
- functions->glPopMatrix();
-}
-//! [2]
-
-void Patch::addTri(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &n)
-{
- QVector3D norm = n.isNull() ? QVector3D::normal(a, b, c) : n;
-
- if (sm == Smooth) {
- geom->appendSmooth(a, norm, initv);
- geom->appendSmooth(b, norm, initv);
- geom->appendSmooth(c, norm, initv);
- } else {
- geom->appendFaceted(a, norm);
- geom->appendFaceted(b, norm);
- geom->appendFaceted(c, norm);
- }
-
- count += 3;
-}
-
-void Patch::addQuad(const QVector3D &a, const QVector3D &b, const QVector3D &c, const QVector3D &d)
-{
- QVector3D norm = QVector3D::normal(a, b, c);
-
- if (sm == Smooth) {
- addTri(a, b, c, norm);
- addTri(a, c, d, norm);
- } else {
- // If faceted share the two common vertices
- addTri(a, b, c, norm);
- int k = geom->vertices.count();
- geom->appendSmooth(a, norm, k);
- geom->appendSmooth(c, norm, k);
- geom->appendFaceted(d, norm);
- count += 3;
- }
-}
-
-static inline QVector<QVector3D> extrude(const QVector<QVector3D> &vertices, qreal depth)
-{
- QVector<QVector3D> extr = vertices;
- for (int v = 0; v < extr.count(); ++v)
- extr[v].setZ(extr[v].z() - depth);
- return extr;
-}
-
-class Rectoid
-{
-public:
- void translate(const QVector3D &t)
- {
- for (int i = 0; i < parts.count(); ++i)
- parts[i]->translate(t);
- }
-
- void rotate(qreal deg, QVector3D axis)
- {
- for (int i = 0; i < parts.count(); ++i)
- parts[i]->rotate(deg, axis);
- }
-
- // No special Rectoid destructor - the parts are fetched out of this member
- // variable, and destroyed by the new owner
- QList<Patch *> parts;
-};
-
-class RectPrism : public Rectoid
-{
-public:
- RectPrism(Geometry *g, qreal width, qreal height, qreal depth);
-};
-
-RectPrism::RectPrism(Geometry *g, qreal width, qreal height, qreal depth)
-{
- enum { bl, br, tr, tl };
- Patch *fb = new Patch(g);
- fb->setSmoothing(Patch::Faceted);
-
- // front face
- QVector<QVector3D> r(4);
- r[br].setX(width);
- r[tr].setX(width);
- r[tr].setY(height);
- r[tl].setY(height);
- QVector3D adjToCenter(-width / 2.0, -height / 2.0, depth / 2.0);
- for (int i = 0; i < 4; ++i)
- r[i] += adjToCenter;
- fb->addQuad(r[bl], r[br], r[tr], r[tl]);
-
- // back face
- QVector<QVector3D> s = extrude(r, depth);
- fb->addQuad(s[tl], s[tr], s[br], s[bl]);
-
- // side faces
- Patch *sides = new Patch(g);
- sides->setSmoothing(Patch::Faceted);
- sides->addQuad(s[bl], s[br], r[br], r[bl]);
- sides->addQuad(s[br], s[tr], r[tr], r[br]);
- sides->addQuad(s[tr], s[tl], r[tl], r[tr]);
- sides->addQuad(s[tl], s[bl], r[bl], r[tl]);
-
- parts << fb << sides;
-}
-
-class RectTorus : public Rectoid
-{
-public:
- RectTorus(Geometry *g, qreal iRad, qreal oRad, qreal depth, int numSectors);
-};
-
-RectTorus::RectTorus(Geometry *g, qreal iRad, qreal oRad, qreal depth, int k)
-{
- QVector<QVector3D> inside;
- QVector<QVector3D> outside;
- for (int i = 0; i < k; ++i) {
- qreal angle = (i * 2 * M_PI) / k;
- inside << QVector3D(iRad * qSin(angle), iRad * qCos(angle), depth / 2.0);
- outside << QVector3D(oRad * qSin(angle), oRad * qCos(angle), depth / 2.0);
- }
- inside << QVector3D(0.0, iRad, 0.0);
- outside << QVector3D(0.0, oRad, 0.0);
- QVector<QVector3D> in_back = extrude(inside, depth);
- QVector<QVector3D> out_back = extrude(outside, depth);
-
- // Create front, back and sides as separate patches so that smooth normals
- // are generated for the curving sides, but a faceted edge is created between
- // sides and front/back
- Patch *front = new Patch(g);
- for (int i = 0; i < k; ++i)
- front->addQuad(outside[i], inside[i],
- inside[(i + 1) % k], outside[(i + 1) % k]);
- Patch *back = new Patch(g);
- for (int i = 0; i < k; ++i)
- back->addQuad(in_back[i], out_back[i],
- out_back[(i + 1) % k], in_back[(i + 1) % k]);
- Patch *is = new Patch(g);
- for (int i = 0; i < k; ++i)
- is->addQuad(in_back[i], in_back[(i + 1) % k],
- inside[(i + 1) % k], inside[i]);
- Patch *os = new Patch(g);
- for (int i = 0; i < k; ++i)
- os->addQuad(out_back[(i + 1) % k], out_back[i],
- outside[i], outside[(i + 1) % k]);
- parts << front << back << is << os;
-}
-
-QtLogo::QtLogo(QObject *parent, int divisions, qreal scale)
- : QObject(parent)
- , geom(new Geometry())
-{
- buildGeometry(divisions, scale);
-}
-
-QtLogo::~QtLogo()
-{
- qDeleteAll(parts);
- delete geom;
-}
-
-void QtLogo::setColor(QColor c)
-{
- for (int i = 0; i < parts.count(); ++i)
- qSetColor(parts[i]->faceColor, c);
-}
-
-//! [3]
-void QtLogo::buildGeometry(int divisions, qreal scale)
-{
- qreal cw = cross_width * scale;
- qreal bt = bar_thickness * scale;
- qreal ld = logo_depth * scale;
- qreal th = tee_height *scale;
-
- RectPrism cross(geom, cw, bt, ld);
- RectPrism stem(geom, bt, th, ld);
-
- QVector3D z(0.0, 0.0, 1.0);
- cross.rotate(45.0, z);
- stem.rotate(45.0, z);
-
- qreal stem_downshift = (th + bt) / 2.0;
- stem.translate(QVector3D(0.0, -stem_downshift, 0.0));
-
- RectTorus body(geom, 0.20, 0.30, 0.1, divisions);
-
- parts << stem.parts << cross.parts << body.parts;
-
- geom->finalize();
-}
-//! [3]
-
-//! [4]
-void QtLogo::draw(QOpenGLFunctions_1_1 *functions) const
-{
- geom->loadArrays(functions);
-
- functions->glEnableClientState(GL_VERTEX_ARRAY);
- functions->glEnableClientState(GL_NORMAL_ARRAY);
-
- for (int i = 0; i < parts.count(); ++i)
- parts[i]->draw(functions);
-
- functions->glDisableClientState(GL_VERTEX_ARRAY);
- functions->glDisableClientState(GL_NORMAL_ARRAY);
-}
-//! [4]
diff --git a/examples/opengl/legacy/shared/qtlogo.h b/examples/opengl/legacy/shared/qtlogo.h
deleted file mode 100644
index ed2d7d750d..0000000000
--- a/examples/opengl/legacy/shared/qtlogo.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** BSD License Usage
-** Alternatively, you may use this file under the terms of the BSD license
-** as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of The Qt Company Ltd nor the names of its
-** contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTLOGO_H
-#define QTLOGO_H
-
-#include <QObject>
-#include <QColor>
-
-QT_FORWARD_DECLARE_CLASS(QOpenGLFunctions_1_1)
-
-class Patch;
-struct Geometry;
-
-//! [0]
-class QtLogo : public QObject
-{
-public:
- explicit QtLogo(QObject *parent, int d = 64, qreal s = 1.0);
- ~QtLogo();
- void setColor(QColor c);
- void draw(QOpenGLFunctions_1_1 *functions) const;
-private:
- void buildGeometry(int d, qreal s);
-
- QList<Patch *> parts;
- Geometry *geom;
-};
-//! [0]
-
-#endif // QTLOGO_H
diff --git a/examples/opengl/opengl.pro b/examples/opengl/opengl.pro
index 89b3e1d86e..907930d7ac 100644
--- a/examples/opengl/opengl.pro
+++ b/examples/opengl/opengl.pro
@@ -2,6 +2,7 @@ TEMPLATE = subdirs
SUBDIRS = hellowindow \
paintedwindow \
+ openglwindow \
qopenglwindow
qtHaveModule(widgets) {
@@ -15,6 +16,3 @@ qtHaveModule(widgets) {
hellogles3 \
computegles31
}
-
-EXAMPLE_FILES += \
- legacy
diff --git a/examples/opengl/openglwindow/.prev_CMakeLists.txt b/examples/opengl/openglwindow/.prev_CMakeLists.txt
new file mode 100644
index 0000000000..9780e18c7f
--- /dev/null
+++ b/examples/opengl/openglwindow/.prev_CMakeLists.txt
@@ -0,0 +1,36 @@
+# Generated from openglwindow.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(openglwindow LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/openglwindow")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(openglwindow
+ main.cpp
+ openglwindow.cpp openglwindow.h
+)
+target_include_directories(openglwindow PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_link_libraries(openglwindow PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+install(TARGETS openglwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/openglwindow/CMakeLists.txt b/examples/opengl/openglwindow/CMakeLists.txt
new file mode 100644
index 0000000000..9780e18c7f
--- /dev/null
+++ b/examples/opengl/openglwindow/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Generated from openglwindow.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(openglwindow LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/openglwindow")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(openglwindow
+ main.cpp
+ openglwindow.cpp openglwindow.h
+)
+target_include_directories(openglwindow PUBLIC
+ ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+target_link_libraries(openglwindow PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+install(TARGETS openglwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/openglwindow/main.cpp b/examples/opengl/openglwindow/main.cpp
new file mode 100644
index 0000000000..03a6ece06f
--- /dev/null
+++ b/examples/opengl/openglwindow/main.cpp
@@ -0,0 +1,177 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** BSD License Usage
+** Alternatively, you may use this file under the terms of the BSD license
+** as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of The Qt Company Ltd nor the names of its
+** contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "openglwindow.h"
+
+#include <QGuiApplication>
+#include <QMatrix4x4>
+#include <QOpenGLShaderProgram>
+#include <QScreen>
+#include <QtMath>
+
+
+//! [1]
+class TriangleWindow : public OpenGLWindow
+{
+public:
+ using OpenGLWindow::OpenGLWindow;
+
+ void initialize() override;
+ void render() override;
+
+private:
+ GLint m_posAttr = 0;
+ GLint m_colAttr = 0;
+ GLint m_matrixUniform = 0;
+
+ QOpenGLShaderProgram *m_program = nullptr;
+ int m_frame = 0;
+};
+//! [1]
+
+//! [2]
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ QSurfaceFormat format;
+ format.setSamples(16);
+
+ TriangleWindow window;
+ window.setFormat(format);
+ window.resize(640, 480);
+ window.show();
+
+ window.setAnimating(true);
+
+ return app.exec();
+}
+//! [2]
+
+
+//! [3]
+static const char *vertexShaderSource =
+ "attribute highp vec4 posAttr;\n"
+ "attribute lowp vec4 colAttr;\n"
+ "varying lowp vec4 col;\n"
+ "uniform highp mat4 matrix;\n"
+ "void main() {\n"
+ " col = colAttr;\n"
+ " gl_Position = matrix * posAttr;\n"
+ "}\n";
+
+static const char *fragmentShaderSource =
+ "varying lowp vec4 col;\n"
+ "void main() {\n"
+ " gl_FragColor = col;\n"
+ "}\n";
+//! [3]
+
+//! [4]
+void TriangleWindow::initialize()
+{
+ m_program = new QOpenGLShaderProgram(this);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
+ m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
+ m_program->link();
+ m_posAttr = m_program->attributeLocation("posAttr");
+ Q_ASSERT(m_posAttr != -1);
+ m_colAttr = m_program->attributeLocation("colAttr");
+ Q_ASSERT(m_colAttr != -1);
+ m_matrixUniform = m_program->uniformLocation("matrix");
+ Q_ASSERT(m_matrixUniform != -1);
+}
+//! [4]
+
+//! [5]
+void TriangleWindow::render()
+{
+ const qreal retinaScale = devicePixelRatio();
+ glViewport(0, 0, width() * retinaScale, height() * retinaScale);
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ m_program->bind();
+
+ QMatrix4x4 matrix;
+ matrix.perspective(60.0f, 4.0f / 3.0f, 0.1f, 100.0f);
+ matrix.translate(0, 0, -2);
+ matrix.rotate(100.0f * m_frame / screen()->refreshRate(), 0, 1, 0);
+
+ m_program->setUniformValue(m_matrixUniform, matrix);
+
+ static const GLfloat vertices[] = {
+ 0.0f, 0.707f,
+ -0.5f, -0.5f,
+ 0.5f, -0.5f
+ };
+
+ static const GLfloat colors[] = {
+ 1.0f, 0.0f, 0.0f,
+ 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f
+ };
+
+ glVertexAttribPointer(m_posAttr, 2, GL_FLOAT, GL_FALSE, 0, vertices);
+ glVertexAttribPointer(m_colAttr, 3, GL_FLOAT, GL_FALSE, 0, colors);
+
+ glEnableVertexAttribArray(m_posAttr);
+ glEnableVertexAttribArray(m_colAttr);
+
+ glDrawArrays(GL_TRIANGLES, 0, 3);
+
+ glDisableVertexAttribArray(m_colAttr);
+ glDisableVertexAttribArray(m_posAttr);
+
+ m_program->release();
+
+ ++m_frame;
+}
+//! [5]
diff --git a/examples/opengl/legacy/hellogl/glwidget.h b/examples/opengl/openglwindow/openglwindow.cpp
index 8154d7405c..bac887dca0 100644
--- a/examples/opengl/legacy/hellogl/glwidget.h
+++ b/examples/opengl/openglwindow/openglwindow.cpp
@@ -3,7 +3,7 @@
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
@@ -48,58 +48,114 @@
**
****************************************************************************/
-#ifndef GLWIDGET_H
-#define GLWIDGET_H
+#include "openglwindow.h"
-#include <QGLWidget>
-#include <QOpenGLFunctions_1_1>
+#include <QOpenGLContext>
+#include <QOpenGLPaintDevice>
+#include <QPainter>
-class QtLogo;
+//! [1]
+OpenGLWindow::OpenGLWindow(QWindow *parent)
+ : QWindow(parent)
+{
+ setSurfaceType(QWindow::OpenGLSurface);
+}
+//! [1]
-//! [0]
-class GLWidget : public QGLWidget, public QOpenGLFunctions_1_1
+OpenGLWindow::~OpenGLWindow()
+{
+ delete m_device;
+}
+//! [2]
+void OpenGLWindow::render(QPainter *painter)
{
- Q_OBJECT
+ Q_UNUSED(painter);
+}
-public:
- GLWidget(QWidget *parent = 0);
- ~GLWidget();
+void OpenGLWindow::initialize()
+{
+}
- QSize minimumSizeHint() const override;
- QSize sizeHint() const override;
-//! [0]
+void OpenGLWindow::render()
+{
+ if (!m_device)
+ m_device = new QOpenGLPaintDevice;
-//! [1]
-public slots:
- void setXRotation(int angle);
- void setYRotation(int angle);
- void setZRotation(int angle);
-
-signals:
- void xRotationChanged(int angle);
- void yRotationChanged(int angle);
- void zRotationChanged(int angle);
-//! [1]
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
-//! [2]
-protected:
- void initializeGL() override;
- void paintGL() override;
- void resizeGL(int width, int height) override;
- void mousePressEvent(QMouseEvent *event) override;
- void mouseMoveEvent(QMouseEvent *event) override;
+ m_device->setSize(size() * devicePixelRatio());
+ m_device->setDevicePixelRatio(devicePixelRatio());
+
+ QPainter painter(m_device);
+ render(&painter);
+}
//! [2]
//! [3]
-private:
- QtLogo *logo;
- int xRot;
- int yRot;
- int zRot;
- QPoint lastPos;
- QColor qtGreen;
- QColor qtPurple;
-};
+void OpenGLWindow::renderLater()
+{
+ requestUpdate();
+}
+
+bool OpenGLWindow::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::UpdateRequest:
+ renderNow();
+ return true;
+ default:
+ return QWindow::event(event);
+ }
+}
+
+void OpenGLWindow::exposeEvent(QExposeEvent *event)
+{
+ Q_UNUSED(event);
+
+ if (isExposed())
+ renderNow();
+}
//! [3]
-#endif
+//! [4]
+void OpenGLWindow::renderNow()
+{
+ if (!isExposed())
+ return;
+
+ bool needsInitialize = false;
+
+ if (!m_context) {
+ m_context = new QOpenGLContext(this);
+ m_context->setFormat(requestedFormat());
+ m_context->create();
+
+ needsInitialize = true;
+ }
+
+ m_context->makeCurrent(this);
+
+ if (needsInitialize) {
+ initializeOpenGLFunctions();
+ initialize();
+ }
+
+ render();
+
+ m_context->swapBuffers(this);
+
+ if (m_animating)
+ renderLater();
+}
+//! [4]
+
+//! [5]
+void OpenGLWindow::setAnimating(bool animating)
+{
+ m_animating = animating;
+
+ if (animating)
+ renderLater();
+}
+//! [5]
+
diff --git a/examples/opengl/legacy/hellogl/window.h b/examples/opengl/openglwindow/openglwindow.h
index 04e83694a4..8db943ddde 100644
--- a/examples/opengl/legacy/hellogl/window.h
+++ b/examples/opengl/openglwindow/openglwindow.h
@@ -3,7 +3,7 @@
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
@@ -48,35 +48,44 @@
**
****************************************************************************/
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QWidget>
+#include <QWindow>
+#include <QOpenGLFunctions>
QT_BEGIN_NAMESPACE
-class QSlider;
+class QPainter;
+class QOpenGLContext;
+class QOpenGLPaintDevice;
QT_END_NAMESPACE
-//! [0]
-class GLWidget;
-class Window : public QWidget
+//! [1]
+class OpenGLWindow : public QWindow, protected QOpenGLFunctions
{
Q_OBJECT
-
public:
- Window();
+ explicit OpenGLWindow(QWindow *parent = nullptr);
+ ~OpenGLWindow();
+
+ virtual void render(QPainter *painter);
+ virtual void render();
+
+ virtual void initialize();
+
+ void setAnimating(bool animating);
+
+public slots:
+ void renderLater();
+ void renderNow();
protected:
- void keyPressEvent(QKeyEvent *event) override;
+ bool event(QEvent *event) override;
+
+ void exposeEvent(QExposeEvent *event) override;
private:
- QSlider *createSlider();
+ bool m_animating = false;
- GLWidget *glWidget;
- QSlider *xSlider;
- QSlider *ySlider;
- QSlider *zSlider;
+ QOpenGLContext *m_context = nullptr;
+ QOpenGLPaintDevice *m_device = nullptr;
};
-//! [0]
+//! [1]
-#endif
diff --git a/examples/opengl/openglwindow/openglwindow.pri b/examples/opengl/openglwindow/openglwindow.pri
new file mode 100644
index 0000000000..30320df3b7
--- /dev/null
+++ b/examples/opengl/openglwindow/openglwindow.pri
@@ -0,0 +1,4 @@
+QT += opengl
+INCLUDEPATH += $$PWD
+SOURCES += $$PWD/openglwindow.cpp
+HEADERS += $$PWD/openglwindow.h
diff --git a/examples/opengl/openglwindow/openglwindow.pro b/examples/opengl/openglwindow/openglwindow.pro
new file mode 100644
index 0000000000..8b1ae71c14
--- /dev/null
+++ b/examples/opengl/openglwindow/openglwindow.pro
@@ -0,0 +1,7 @@
+include(openglwindow.pri)
+
+SOURCES += \
+ main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/openglwindow
+INSTALLS += target
diff --git a/examples/opengl/paintedwindow/CMakeLists.txt b/examples/opengl/paintedwindow/CMakeLists.txt
new file mode 100644
index 0000000000..2711bdc45b
--- /dev/null
+++ b/examples/opengl/paintedwindow/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Generated from paintedwindow.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(paintedwindow LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/paintedwindow")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(paintedwindow
+ main.cpp
+ paintedwindow.cpp paintedwindow.h
+)
+target_link_libraries(paintedwindow PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+install(TARGETS paintedwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/paintedwindow/paintedwindow.h b/examples/opengl/paintedwindow/paintedwindow.h
index 7281451924..972d8d10bd 100644
--- a/examples/opengl/paintedwindow/paintedwindow.h
+++ b/examples/opengl/paintedwindow/paintedwindow.h
@@ -51,8 +51,8 @@
#include <QWindow>
#include <QtGui/qopengl.h>
-#include <QtGui/qopenglshaderprogram.h>
-#include <QtGui/qopenglframebufferobject.h>
+#include <QtOpenGL/qopenglshaderprogram.h>
+#include <QtOpenGL/qopenglframebufferobject.h>
#include <QPropertyAnimation>
diff --git a/examples/opengl/paintedwindow/paintedwindow.pro b/examples/opengl/paintedwindow/paintedwindow.pro
index 1846aa4049..569eebe674 100644
--- a/examples/opengl/paintedwindow/paintedwindow.pro
+++ b/examples/opengl/paintedwindow/paintedwindow.pro
@@ -1,3 +1,5 @@
+QT += opengl
+
HEADERS += paintedwindow.h
SOURCES += paintedwindow.cpp main.cpp
diff --git a/examples/opengl/qopenglwidget/CMakeLists.txt b/examples/opengl/qopenglwidget/CMakeLists.txt
new file mode 100644
index 0000000000..10b30f9461
--- /dev/null
+++ b/examples/opengl/qopenglwidget/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Generated from qopenglwidget.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(qopenglwidget LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/qopenglwidget")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(qopenglwidget
+ bubble.cpp bubble.h
+ glwidget.cpp glwidget.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+target_link_libraries(qopenglwidget PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+
+# Resources:
+set(texture_resource_files
+ "qt.png"
+)
+
+qt6_add_resources(qopenglwidget "texture"
+ PREFIX
+ "/"
+ FILES
+ ${texture_resource_files}
+)
+
+install(TARGETS qopenglwidget
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/qopenglwidget/mainwindow.cpp b/examples/opengl/qopenglwidget/mainwindow.cpp
index 6fab3df79e..eb34f87cb7 100644
--- a/examples/opengl/qopenglwidget/mainwindow.cpp
+++ b/examples/opengl/qopenglwidget/mainwindow.cpp
@@ -134,7 +134,7 @@ MainWindow::MainWindow()
connect(slider, &QAbstractSlider::valueChanged, glwidget, &GLWidget::setScaling);
connect(transparent, &QCheckBox::toggled, glwidget, &GLWidget::setTransparent);
- connect(updateInterval, QOverload<int>::of(&QSpinBox::valueChanged),
+ connect(updateInterval, &QSpinBox::valueChanged,
this, &MainWindow::updateIntervalChanged);
connect(timerBased, &QCheckBox::toggled, this, &MainWindow::timerUsageChanged);
connect(timerBased, &QCheckBox::toggled, updateInterval, &QWidget::setEnabled);
diff --git a/examples/opengl/qopenglwidget/qopenglwidget.pro b/examples/opengl/qopenglwidget/qopenglwidget.pro
index 0165285c02..7ac546d7ce 100644
--- a/examples/opengl/qopenglwidget/qopenglwidget.pro
+++ b/examples/opengl/qopenglwidget/qopenglwidget.pro
@@ -1,4 +1,4 @@
-QT += widgets
+QT += widgets opengl openglwidgets
SOURCES += main.cpp \
glwidget.cpp \
diff --git a/examples/opengl/qopenglwindow/CMakeLists.txt b/examples/opengl/qopenglwindow/CMakeLists.txt
new file mode 100644
index 0000000000..9d354d376b
--- /dev/null
+++ b/examples/opengl/qopenglwindow/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Generated from qopenglwindow.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(qopenglwindow LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/qopenglwindow")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS OpenGL)
+
+add_qt_gui_executable(qopenglwindow
+ background_renderer.cpp background_renderer.h
+ main.cpp
+)
+target_include_directories(qopenglwindow PUBLIC
+ .
+)
+
+target_link_libraries(qopenglwindow PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+)
+
+
+# Resources:
+set(shaders_resource_files
+ "background.frag"
+)
+
+qt6_add_resources(qopenglwindow "shaders"
+ PREFIX
+ "/"
+ FILES
+ ${shaders_resource_files}
+)
+
+install(TARGETS qopenglwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/qopenglwindow/qopenglwindow.pro b/examples/opengl/qopenglwindow/qopenglwindow.pro
index dad4b58158..e7073a324b 100644
--- a/examples/opengl/qopenglwindow/qopenglwindow.pro
+++ b/examples/opengl/qopenglwindow/qopenglwindow.pro
@@ -1,6 +1,7 @@
TEMPLATE = app
TARGET = qopenglwindow
INCLUDEPATH += .
+QT += opengl
RESOURCES += shaders.qrc
diff --git a/examples/opengl/textures/CMakeLists.txt b/examples/opengl/textures/CMakeLists.txt
new file mode 100644
index 0000000000..1bb4ae6240
--- /dev/null
+++ b/examples/opengl/textures/CMakeLists.txt
@@ -0,0 +1,55 @@
+# Generated from textures.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(textures LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/textures")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(textures
+ glwidget.cpp glwidget.h
+ main.cpp
+ window.cpp window.h
+)
+target_link_libraries(textures PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+
+# Resources:
+set(textures_resource_files
+ "images/side1.png"
+ "images/side2.png"
+ "images/side3.png"
+ "images/side4.png"
+ "images/side5.png"
+ "images/side6.png"
+)
+
+qt6_add_resources(textures "textures"
+ PREFIX
+ "/"
+ FILES
+ ${textures_resource_files}
+)
+
+install(TARGETS textures
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/textures/textures.pro b/examples/opengl/textures/textures.pro
index 7a7d19bee6..d2a6506cb8 100644
--- a/examples/opengl/textures/textures.pro
+++ b/examples/opengl/textures/textures.pro
@@ -6,7 +6,7 @@ SOURCES = glwidget.cpp \
RESOURCES = textures.qrc
-QT += widgets
+QT += widgets opengl openglwidgets
# install
target.path = $$[QT_INSTALL_EXAMPLES]/opengl/textures
diff --git a/examples/opengl/threadedqopenglwidget/CMakeLists.txt b/examples/opengl/threadedqopenglwidget/CMakeLists.txt
new file mode 100644
index 0000000000..f5368f89ef
--- /dev/null
+++ b/examples/opengl/threadedqopenglwidget/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Generated from threadedqopenglwidget.pro.
+
+cmake_minimum_required(VERSION 3.14)
+project(threadedqopenglwidget LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOUIC ON)
+
+set(INSTALL_EXAMPLEDIR "examples/opengl/threadedqopenglwidget")
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS Gui)
+find_package(Qt6 COMPONENTS Widgets)
+find_package(Qt6 COMPONENTS OpenGL)
+find_package(Qt6 COMPONENTS OpenGLWidgets)
+
+add_qt_gui_executable(threadedqopenglwidget
+ glwidget.cpp glwidget.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+target_link_libraries(threadedqopenglwidget PUBLIC
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+)
+
+install(TARGETS threadedqopenglwidget
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/examples/opengl/threadedqopenglwidget/threadedqopenglwidget.pro b/examples/opengl/threadedqopenglwidget/threadedqopenglwidget.pro
index 4e941b28c4..a62fbeb9c2 100644
--- a/examples/opengl/threadedqopenglwidget/threadedqopenglwidget.pro
+++ b/examples/opengl/threadedqopenglwidget/threadedqopenglwidget.pro
@@ -1,4 +1,4 @@
-QT += widgets
+QT += widgets opengl openglwidgets
SOURCES += main.cpp \
glwidget.cpp \