Added multi-screen support to hellowindow example.
Change-Id: I025de342952bffeffa0705eb4cfcf869f32241cc Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
This commit is contained in:
parent
e838cf644f
commit
e68642fe10
@ -46,11 +46,13 @@
|
|||||||
|
|
||||||
#include <qmath.h>
|
#include <qmath.h>
|
||||||
|
|
||||||
Renderer::Renderer(const QSurfaceFormat &format, Renderer *share)
|
Renderer::Renderer(const QSurfaceFormat &format, Renderer *share, QScreen *screen)
|
||||||
: m_initialized(false)
|
: m_initialized(false)
|
||||||
, m_format(format)
|
, m_format(format)
|
||||||
{
|
{
|
||||||
m_context = new QOpenGLContext(this);
|
m_context = new QOpenGLContext(this);
|
||||||
|
if (screen)
|
||||||
|
m_context->setScreen(screen);
|
||||||
m_context->setFormat(format);
|
m_context->setFormat(format);
|
||||||
if (share)
|
if (share)
|
||||||
m_context->setShareContext(share->m_context);
|
m_context->setShareContext(share->m_context);
|
||||||
|
@ -54,7 +54,7 @@ class Renderer : public QObject
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
Renderer(const QSurfaceFormat &format, Renderer *share = 0);
|
Renderer(const QSurfaceFormat &format, Renderer *share = 0, QScreen *screen = 0);
|
||||||
|
|
||||||
QSurfaceFormat format() const { return m_format; }
|
QSurfaceFormat format() const { return m_format; }
|
||||||
|
|
||||||
|
@ -72,15 +72,13 @@ int main(int argc, char **argv)
|
|||||||
windowA->setWindowTitle(QLatin1String("Thread A - Context A"));
|
windowA->setWindowTitle(QLatin1String("Thread A - Context A"));
|
||||||
windowA->setVisible(true);
|
windowA->setVisible(true);
|
||||||
|
|
||||||
QThread *renderThread = 0;
|
QList<QThread *> renderThreads;
|
||||||
if (multipleWindows) {
|
if (multipleWindows) {
|
||||||
Renderer *rendererB = new Renderer(format, rendererA);
|
Renderer *rendererB = new Renderer(format, rendererA);
|
||||||
|
|
||||||
renderThread = new QThread;
|
QThread *renderThread = new QThread;
|
||||||
rendererB->moveToThread(renderThread);
|
rendererB->moveToThread(renderThread);
|
||||||
renderThread->start();
|
renderThreads << renderThread;
|
||||||
|
|
||||||
QObject::connect(qGuiApp, SIGNAL(lastWindowClosed()), renderThread, SLOT(quit()));
|
|
||||||
|
|
||||||
HelloWindow *windowB = new HelloWindow(rendererA);
|
HelloWindow *windowB = new HelloWindow(rendererA);
|
||||||
windowB->setGeometry(QRect(center, windowSize).translated(delta / 2, 0));
|
windowB->setGeometry(QRect(center, windowSize).translated(delta / 2, 0));
|
||||||
@ -91,10 +89,37 @@ int main(int argc, char **argv)
|
|||||||
windowC->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, windowSize.height() + delta));
|
windowC->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, windowSize.height() + delta));
|
||||||
windowC->setWindowTitle(QLatin1String("Thread B - Context B"));
|
windowC->setWindowTitle(QLatin1String("Thread B - Context B"));
|
||||||
windowC->setVisible(true);
|
windowC->setVisible(true);
|
||||||
|
|
||||||
|
for (int i = 1; i < QGuiApplication::screens().size(); ++i) {
|
||||||
|
QScreen *screen = QGuiApplication::screens().at(i);
|
||||||
|
Renderer *renderer = new Renderer(format, rendererA, screen);
|
||||||
|
|
||||||
|
renderThread = new QThread;
|
||||||
|
renderer->moveToThread(renderThread);
|
||||||
|
renderThreads << renderThread;
|
||||||
|
|
||||||
|
QRect screenGeometry = screen->availableGeometry();
|
||||||
|
QPoint center = screenGeometry.center();
|
||||||
|
|
||||||
|
QSize windowSize = screenGeometry.size() * 0.8;
|
||||||
|
|
||||||
|
HelloWindow *window = new HelloWindow(renderer);
|
||||||
|
window->setScreen(screen);
|
||||||
|
window->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, -windowSize.height() / 2));
|
||||||
|
|
||||||
|
QChar id = QChar('B' + i);
|
||||||
|
window->setWindowTitle(QLatin1String("Thread ") + id + QLatin1String(" - Context ") + id);
|
||||||
|
window->setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < renderThreads.size(); ++i) {
|
||||||
|
QObject::connect(qGuiApp, SIGNAL(lastWindowClosed()), renderThreads.at(i), SLOT(quit()));
|
||||||
|
renderThreads.at(i)->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
app.exec();
|
app.exec();
|
||||||
|
|
||||||
if (multipleWindows)
|
for (int i = 0; i < renderThreads.size(); ++i)
|
||||||
renderThread->wait();
|
renderThreads.at(i)->wait();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user