c450f6d21c
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>
48 lines
1.1 KiB
C++
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
|