qt5base-lts/tests/manual/stereographicsview/mygraphicsview.h
Kristoffer Skau c450f6d21c Support stereoscopic rendering with QGraphicsView
This patch adds a manual test and the required work in graphicsview and
qwidget private apis to support stereoscopic rendeing. Basically it
works by doing the drawing in QGraphicsView::paintEvent twice, once for
each buffer. This way the scene items are rendered to both buffers.
There's also an update to resolvement in QOpenGLWidgetPrivate
so that multisampling works correctly.

[ChangeLog][Widgets][QGraphicsView] Added support for
stereoscopic rendering.

Task-number: QTBUG-64587
Change-Id: I20650682daa805b64fe7f0d2ba086917d3f12229
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
2022-12-01 13:42:07 +01:00

48 lines
1.1 KiB
C++

// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#ifndef MYGRAPHICSVIEW_H
#define MYGRAPHICSVIEW_H
#include <QOpenGLFunctions>
#include <QGraphicsView>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QMatrix4x4>
#include <QOpenGLWidget>
class MyGraphicsView : public QGraphicsView, protected QOpenGLFunctions
{
public:
MyGraphicsView(QWidget *parent = nullptr);
MyGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr);
void saveImage(QOpenGLWidget::TargetBuffer targetBuffer);
protected:
void drawBackground(QPainter *painter, const QRectF &rect) override;
void resizeEvent(QResizeEvent *event) override;
private:
void init();
void initShaders();
void initCube();
void draw(QOpenGLWidget::TargetBuffer targetBuffer);
void resize(int w, int h);
bool m_initialized = false;
QOpenGLShaderProgram m_program;
QMatrix4x4 m_projection;
QOpenGLBuffer m_arrayBuf;
QOpenGLBuffer m_indexBuf;
qreal m_yaw = 0;
};
#endif // MYGRAPHICSVIEW_H