diff options
author | Kristoffer Skau <kristoffer.skau@qt.io> | 2022-10-27 15:38:53 +0200 |
---|---|---|
committer | Kristoffer Skau <kristoffer.skau@qt.io> | 2022-11-28 19:12:27 +0100 |
commit | ee2dbcada81f5220a05414d7bf9d5eeebdda8972 (patch) | |
tree | 2bca1fc0c3569a98f26a0717d9e555a9b88f2364 /examples/opengl/doc | |
parent | 8155bd54261688f333b2d68e2d76f0fc076a0fb4 (diff) |
Add support for stereoscopic content in QOpenGLWidget
Need to add the plumbing necessary to support two textures in
QOpenGLWidget and use these in the backing store. The changes
required on the RHI level is already done in an earlier patch.
Then paintGL() needs to be called twice, once for each buffer.
Also add overloads for the other functions of QOopenGLWidget
where it makes sense to query for left or right buffer.
Then finally create an example.
[ChangeLog][Widgets][QOpenGLWidget] Added support for
stereoscopic rendering.
Fixes: QTBUG-64587
Change-Id: I5a5c53506dcf8a56442097290dceb7eb730d50ce
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
Diffstat (limited to 'examples/opengl/doc')
-rw-r--r-- | examples/opengl/doc/images/stereoexample-leftbuffer.png | bin | 0 -> 9987 bytes | |||
-rw-r--r-- | examples/opengl/doc/images/stereoexample-rightbuffer.png | bin | 0 -> 10002 bytes | |||
-rw-r--r-- | examples/opengl/doc/src/stereoqopenglwidget.qdoc | 41 |
3 files changed, 41 insertions, 0 deletions
diff --git a/examples/opengl/doc/images/stereoexample-leftbuffer.png b/examples/opengl/doc/images/stereoexample-leftbuffer.png Binary files differnew file mode 100644 index 0000000000..6ae7d5118b --- /dev/null +++ b/examples/opengl/doc/images/stereoexample-leftbuffer.png diff --git a/examples/opengl/doc/images/stereoexample-rightbuffer.png b/examples/opengl/doc/images/stereoexample-rightbuffer.png Binary files differnew file mode 100644 index 0000000000..3e2dc3c671 --- /dev/null +++ b/examples/opengl/doc/images/stereoexample-rightbuffer.png diff --git a/examples/opengl/doc/src/stereoqopenglwidget.qdoc b/examples/opengl/doc/src/stereoqopenglwidget.qdoc new file mode 100644 index 0000000000..c4e51f9cee --- /dev/null +++ b/examples/opengl/doc/src/stereoqopenglwidget.qdoc @@ -0,0 +1,41 @@ +// Copyright (C) 2022 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only + +/*! + \example stereoqopenglwidget + \title QOpenGLWidget Stereoscopic Rendering Example + + \brief This example shows how to create a minimal QOpenGLWidget based application + with stereoscopic rendering support. + + \image stereoexample-leftbuffer.png + + The above image is what will be rendered to the left buffer. + + \image stereoexample-rightbuffer.png + + The above image is what will be rendered to the right buffer. + + \note Support for stereoscopic rendering has certain hardware requirements, like + your graphics card needs stereo support. + + \section1 Setting the correct surface flag + To enable stereoscopic rendering you need to set the flag + QSurfaceFormat::StereoBuffers globally. Just doing it on the widget is not enough + because of how the flag is handled internally. The safest is to do it on + QSurfaceFormat::SetDefaultFormat prior to starting the application. + + \snippet stereoqopenglwidget/main.cpp 1 + + \section1 Rendering twice + After QSurfaceFormat::StereoBuffers is set, then paintGL() will be called twice, + once for each buffer. In paintGL() you can call currentTargetBuffer() to query + which TargetBuffer is currently active. + + In the following snippet we slightly translate the matrix to not render the + vertices on top of each other. This is a simple example just too see that if the + necessary support is there, at runtime you should see two objects, one on the left + and one on the right. + + \snippet stereoqopenglwidget/glwidget.cpp 1 +*/ |