From ea7aa0a4973b2cedec49a888db27a2a56f0b6255 Mon Sep 17 00:00:00 2001 From: Kim Motoyoshi Kalland Date: Tue, 31 May 2011 13:48:53 +0200 Subject: Removed matrix stacks from QSGRenderer. --- src/declarative/items/qsgcanvas.cpp | 2 +- src/declarative/items/qsgshadereffectsource.cpp | 2 +- .../scenegraph/coreapi/qsgdefaultrenderer.cpp | 26 +- src/declarative/scenegraph/coreapi/qsgmaterial.cpp | 6 +- .../scenegraph/coreapi/qsgmatrix4x4stack.cpp | 380 --------------------- .../scenegraph/coreapi/qsgmatrix4x4stack.h | 104 ------ .../scenegraph/coreapi/qsgmatrix4x4stack_p.h | 73 ---- .../scenegraph/coreapi/qsgnodeupdater_p.h | 1 - src/declarative/scenegraph/coreapi/qsgrenderer.cpp | 18 +- src/declarative/scenegraph/coreapi/qsgrenderer_p.h | 26 +- src/declarative/scenegraph/scenegraph.pri | 3 - 11 files changed, 36 insertions(+), 605 deletions(-) delete mode 100644 src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.cpp delete mode 100644 src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.h delete mode 100644 src/declarative/scenegraph/coreapi/qsgmatrix4x4stack_p.h diff --git a/src/declarative/items/qsgcanvas.cpp b/src/declarative/items/qsgcanvas.cpp index f38e0b5ebc..28a65d0b40 100644 --- a/src/declarative/items/qsgcanvas.cpp +++ b/src/declarative/items/qsgcanvas.cpp @@ -343,7 +343,7 @@ void QSGCanvasPrivate::renderSceneGraph(const QSize &size) { context->renderer()->setDeviceRect(QRect(QPoint(0, 0), size)); context->renderer()->setViewportRect(QRect(QPoint(0, 0), size)); - context->renderer()->setProjectMatrixToDeviceRect(); + context->renderer()->setProjectionMatrixToDeviceRect(); context->renderNextFrame(); diff --git a/src/declarative/items/qsgshadereffectsource.cpp b/src/declarative/items/qsgshadereffectsource.cpp index ba11660fde..24e2be37f4 100644 --- a/src/declarative/items/qsgshadereffectsource.cpp +++ b/src/declarative/items/qsgshadereffectsource.cpp @@ -310,7 +310,7 @@ void QSGShaderEffectTexture::grab() m_renderer->setDeviceRect(m_size); m_renderer->setViewportRect(m_size); QRectF mirrored(m_rect.left(), m_rect.bottom(), m_rect.width(), -m_rect.height()); - m_renderer->setProjectMatrixToRect(mirrored); + m_renderer->setProjectionMatrixToRect(mirrored); m_renderer->setClearColor(Qt::transparent); if (m_multisampling) { diff --git a/src/declarative/scenegraph/coreapi/qsgdefaultrenderer.cpp b/src/declarative/scenegraph/coreapi/qsgdefaultrenderer.cpp index 676ecaae78..8e8f811ae1 100644 --- a/src/declarative/scenegraph/coreapi/qsgdefaultrenderer.cpp +++ b/src/declarative/scenegraph/coreapi/qsgdefaultrenderer.cpp @@ -237,9 +237,8 @@ void QMLRenderer::render() QRect r = viewportRect(); glViewport(r.x(), deviceRect().bottom() - r.bottom(), r.width(), r.height()); - m_projectionMatrix = projectMatrix(); - m_projectionMatrix.push(); - m_modelViewMatrix.setToIdentity(); + m_current_projection_matrix = projectionMatrix(); + m_current_model_view_matrix.setToIdentity(); m_currentClip = 0; glDisable(GL_STENCIL_TEST); @@ -318,8 +317,6 @@ void QMLRenderer::render() if (m_currentProgram) m_currentProgram->deactivate(); - m_projectionMatrix.pop(); - #ifdef RENDERER_DEBUG if (debugTimer.elapsed() > DEBUG_THRESHOLD) { printf(" --- Renderer breakdown:\n" @@ -427,6 +424,7 @@ void QMLRenderer::renderNodes(const QDataBuffer &list) const float scale = 1.0f / m_currentRenderOrder; int count = list.size(); int currentRenderOrder = 0x80000000; + m_current_projection_matrix.setColumn(2, scale * projectionMatrix().column(2)); //int clipChangeCount = 0; //int programChangeCount = 0; @@ -448,19 +446,18 @@ void QMLRenderer::renderNodes(const QDataBuffer &list) if (changeMatrix) { m_currentMatrix = geomNode->matrix(); if (m_currentMatrix) - m_modelViewMatrix = *m_currentMatrix; + m_current_model_view_matrix = *m_currentMatrix; else - m_modelViewMatrix.setToIdentity(); + m_current_model_view_matrix.setToIdentity(); updates |= QSGMaterialShader::RenderState::DirtyMatrix; } - bool changeOpacity = m_render_opacity != geomNode->inheritedOpacity(); + bool changeOpacity = m_current_opacity != geomNode->inheritedOpacity(); if (changeOpacity) { updates |= QSGMaterialShader::RenderState::DirtyOpacity; - m_render_opacity = geomNode->inheritedOpacity(); + m_current_opacity = geomNode->inheritedOpacity(); } - Q_ASSERT(geomNode->activeMaterial()); QSGMaterial *material = geomNode->activeMaterial(); @@ -475,7 +472,7 @@ void QMLRenderer::renderNodes(const QDataBuffer &list) #ifdef FORCE_NO_REORDER glDepthMask(false); #else - glDepthMask((material->flags() & QSGMaterial::Blending) == 0 && m_render_opacity == 1); + glDepthMask((material->flags() & QSGMaterial::Blending) == 0 && m_current_opacity == 1); #endif //++clipChangeCount; } @@ -497,10 +494,9 @@ void QMLRenderer::renderNodes(const QDataBuffer &list) bool changeRenderOrder = currentRenderOrder != geomNode->renderOrder(); if (changeRenderOrder) { currentRenderOrder = geomNode->renderOrder(); - m_renderOrderMatrix(2, 3) = currentRenderOrder * scale; - m_projectionMatrix.pop(); - m_projectionMatrix.push(); - m_projectionMatrix *= m_renderOrderMatrix; + m_current_projection_matrix.setColumn(3, projectionMatrix().column(3) + + currentRenderOrder + * m_current_projection_matrix.column(2)); updates |= QSGMaterialShader::RenderState::DirtyMatrix; } diff --git a/src/declarative/scenegraph/coreapi/qsgmaterial.cpp b/src/declarative/scenegraph/coreapi/qsgmaterial.cpp index afec4a59f3..687f949dbf 100644 --- a/src/declarative/scenegraph/coreapi/qsgmaterial.cpp +++ b/src/declarative/scenegraph/coreapi/qsgmaterial.cpp @@ -331,7 +331,7 @@ void QSGMaterialShader::compile() float QSGMaterialShader::RenderState::opacity() const { Q_ASSERT(m_data); - return static_cast(m_data)->renderOpacity(); + return static_cast(m_data)->currentOpacity(); } @@ -343,7 +343,7 @@ float QSGMaterialShader::RenderState::opacity() const QMatrix4x4 QSGMaterialShader::RenderState::combinedMatrix() const { Q_ASSERT(m_data); - return static_cast(m_data)->combinedMatrix(); + return static_cast(m_data)->currentCombinedMatrix(); } @@ -355,7 +355,7 @@ QMatrix4x4 QSGMaterialShader::RenderState::combinedMatrix() const QMatrix4x4 QSGMaterialShader::RenderState::modelViewMatrix() const { Q_ASSERT(m_data); - return const_cast(static_cast(m_data))->modelViewMatrix().top(); + return static_cast(m_data)->currentModelViewMatrix(); } diff --git a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.cpp b/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.cpp deleted file mode 100644 index 07ba21d17c..0000000000 --- a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.cpp +++ /dev/null @@ -1,380 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsgmatrix4x4stack.h" -#include "qsgmatrix4x4stack_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \class QSGMatrix4x4Stack - \brief The QSGMatrix4x4Stack class manages stacks of transformation matrices in GL applications. - \since 4.8 - \ingroup qt3d - \ingroup qt3d::enablers - - Transformation matrices are one of the basic building blocks of - 3D applications, allowing object models to be positioned, scaled, - rotated, and projected onto the screen. - - GL systems support several standard kinds of matrices, particularly - modelview and projection matrices. These matrices are typically - organized into stacks, which allow the current matrix state to be - saved with push() and restored later with pop(). - - QSGMatrix4x4Stack assists QGLPainter with the management of matrix - stacks, providing operations to set and modify transformation - matrices in each of the standard matrix stacks. - - In the following example, a standard orthographic projection matrix for a - view is set via the QGLPainter::projectionMatrix() stack, and - then a modelview matrix is set via the QGLPainter::modelViewMatrix() - stack to scale and translate an object prior to drawing: - - \code - QGLPainter painter(this); - - QMatrix4x4 projm; - projm.ortho(window->rect()); - painter.projectionMatrix() = projm; - - painter.modelViewMatrix().setToIdentity(); - painter.modelViewMatrix().translate(-1.0f, 2.0f, 0.0f); - painter.modelViewMatrix().scale(0.5f); - \endcode - - Later, the application can save the current modelview matrix state - and draw a different object with a different modelview matrix: - - \code - painter.modelViewMatrix().push(); - painter.modelViewMatrix().setToIdentity(); - painter.modelViewMatrix().scale(2.0f); - \endcode - - For efficiency, the matrix values are kept client-side until they - are needed by a QGLPainter::draw() operation. Until then, changes - to the matrix will not be reflected in the GL server. The application - can force the GL server to update the server with a call to - QGLPainter::update(). - - QSGMatrix4x4Stack is supported on all GL platforms, including OpenGL/ES 2.0 - which doesn't support matrix stacks natively. On that platform, the - matrix stack is simulated in client memory. When the application - selects a shader program to draw under OpenGL/ES 2.0, it calls - top() to obtain the actual value to be set on the shader program. - - \sa QGLPainter -*/ - -/*! - Creates a matrix stack. -*/ -QSGMatrix4x4Stack::QSGMatrix4x4Stack() - : d_ptr(new QSGMatrix4x4StackPrivate) -{ -} - -/*! - Destroy this matrix stack. -*/ -QSGMatrix4x4Stack::~QSGMatrix4x4Stack() -{ -} - -/*! - Pushes the current matrix onto the matrix stack. The matrix can - be restored with pop(). The new top of stack will have the - same value as the previous top of stack. - - The depths of the traditional \c{GL_MODELVIEW} and \c{GL_PROJECTION} - matrix stacks in the GL server are system-dependent and easy to - overflow in nested rendering code using \c{glPushMatrix()}. - By contrast, the push() function provides an arbitrary-sized stack - in client memory. - - \sa pop(), top() -*/ -void QSGMatrix4x4Stack::push() -{ - Q_D(QSGMatrix4x4Stack); - d->stack.push(d->matrix); -} - -/*! - Pops the top-most matrix from this matrix stack and sets the - current matrix to the next value down. Does nothing if the - matrix stack contains a single entry. - - \sa push() -*/ -void QSGMatrix4x4Stack::pop() -{ - Q_D(QSGMatrix4x4Stack); - if (!d->stack.isEmpty()) - d->matrix = d->stack.pop(); - d->isDirty = true; -} - -/*! - Set the matrix at the top of this matrix stack to the identity matrix. - - \sa operator=() -*/ -void QSGMatrix4x4Stack::setToIdentity() -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.setToIdentity(); - d->isDirty = true; -} - -/*! - Returns a const reference to the current matrix at the top of this - matrix stack. This is typically used to fetch the matrix so it can - be set on user-defined shader programs. - - \sa operator=() -*/ -const QMatrix4x4 &QSGMatrix4x4Stack::top() const -{ - Q_D(const QSGMatrix4x4Stack); - return d->matrix; -} - -/*! - \fn QSGMatrix4x4Stack::operator const QMatrix4x4 &() const - - Returns a const reference to the current matrix at the top of - this matrix stack. - - \sa top() -*/ - -/*! - Assigns \a matrix to the matrix at the top of this matrix stack. - - \sa top() -*/ -QSGMatrix4x4Stack& QSGMatrix4x4Stack::operator=(const QMatrix4x4& matrix) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix = matrix; - d->isDirty = true; - return *this; -} - -/*! - Multiplies the matrix at the top of this matrix stack by \a matrix. - - \sa top() -*/ -QSGMatrix4x4Stack& QSGMatrix4x4Stack::operator*=(const QMatrix4x4& matrix) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix *= matrix; - d->isDirty = true; - return *this; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that translates coordinates by (\a x, \a y, \a z). The following example - translates the modelview matrix by (1, -3, 0): - - \code - QGLPainter painter(this); - painter.modelViewMatrix().translate(1.0f, -3.0f, 0.0f); - \endcode - - \sa scale(), rotate() -*/ -void QSGMatrix4x4Stack::translate(qreal x, qreal y, qreal z) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.translate(x, y, z); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix statck by another - that translates coordinates by the components of \a vector. - - \sa scale(), rotate() -*/ -void QSGMatrix4x4Stack::translate(const QVector3D& vector) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.translate(vector); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that scales coordinates by the components \a x, \a y, and \a z. - The following example scales the modelview matrix by (1, 2, 1): - - \code - QGLPainter painter(this); - painter.modelViewMatrix().scale(1.0f, 2.0f, 1.0f); - \endcode - - \sa translate(), rotate() -*/ -void QSGMatrix4x4Stack::scale(qreal x, qreal y, qreal z) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.scale(x, y, z); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that scales coordinates by the given \a factor. The following example - scales the modelview matrix by a factor of 2: - - \code - QGLPainter painter(this); - painter.modelViewMatrix().scale(2.0f); - \endcode - - \sa translate(), rotate() -*/ -void QSGMatrix4x4Stack::scale(qreal factor) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.scale(factor); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that scales coordinates by the components of \a vector. - - \sa translate(), rotate() -*/ -void QSGMatrix4x4Stack::scale(const QVector3D& vector) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.scale(vector); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that rotates coordinates through \a angle degrees about the vector - (\a x, \a y, \a z). The following example rotates the modelview - matrix by 45 degress about the vector (1, -3, 0): - - \code - QGLPainter painter(this); - painter.modelViewMatrix().rotate(45.0f, 1.0f, -3.0f, 0.0f); - \endcode - - \sa scale(), translate() -*/ -void QSGMatrix4x4Stack::rotate(qreal angle, qreal x, qreal y, qreal z) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.rotate(angle, x, y, z); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by another - that rotates coordinates through \a angle degrees about \a vector. - - \sa scale(), translate() -*/ -void QSGMatrix4x4Stack::rotate(qreal angle, const QVector3D& vector) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.rotate(angle, vector); - d->isDirty = true; -} - -/*! - Multiplies the current matrix at the top of this matrix stack by the - \a quaternion. Thus \c {painter->modelViewMatrix().rotate(quaternion)} - is equivalent to the following code: - \code - QMatrix4x4 mat; - mat.rotate(quaternion); - painter->modelViewMatrix() *= mat; - \endcode - which rotates coordinates according to the given \a quaternion. - - \sa scale(), translate() -*/ -void QSGMatrix4x4Stack::rotate(const QQuaternion &quaternion) -{ - Q_D(QSGMatrix4x4Stack); - d->matrix.rotate(quaternion); - d->isDirty = true; -} - -/*! - Returns true if the top of this matrix stack has been modified; - false otherwise. - - \sa setDirty() -*/ -bool QSGMatrix4x4Stack::isDirty() const -{ - Q_D(const QSGMatrix4x4Stack); - return d->isDirty; -} - -/*! - Sets the \a dirty flag on this matrix stack, which indicates - if it has been modified. - - A matrix stack may also be set to dirty by translate(), - scale(), operator*(), etc. - - \sa isDirty() -*/ -void QSGMatrix4x4Stack::setDirty(bool dirty) -{ - Q_D(QSGMatrix4x4Stack); - d->isDirty = dirty; -} - -QT_END_NAMESPACE diff --git a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.h b/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.h deleted file mode 100644 index 2336598fdc..0000000000 --- a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack.h +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSGMATRIX4X4STACK_H -#define QSGMATRIX4X4STACK_H - -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Declarative) - -class QSGMatrix4x4StackPrivate; - -class Q_DECLARATIVE_EXPORT QSGMatrix4x4Stack -{ -public: - QSGMatrix4x4Stack(); - ~QSGMatrix4x4Stack(); - - const QMatrix4x4 &top() const; - - void push(); - void pop(); - - void setToIdentity(); - - void translate(qreal x, qreal y, qreal z); - void translate(const QVector3D& vector); - void scale(qreal x, qreal y, qreal z); - void scale(qreal factor); - void scale(const QVector3D& vector); - void rotate(qreal angle, qreal x, qreal y, qreal z); - void rotate(qreal angle, const QVector3D& vector); - void rotate(const QQuaternion &quaternion); - - QSGMatrix4x4Stack& operator=(const QMatrix4x4& matrix); - QSGMatrix4x4Stack& operator*=(const QMatrix4x4& matrix); - - operator const QMatrix4x4 &() const; - - bool isDirty() const; - void setDirty(bool dirty); - -private: - Q_DISABLE_COPY(QSGMatrix4x4Stack) - Q_DECLARE_PRIVATE(QSGMatrix4x4Stack) - - QScopedPointer d_ptr; - - friend class QGLPainter; -}; - -inline QSGMatrix4x4Stack::operator const QMatrix4x4 &() const -{ - return top(); -} - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif diff --git a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack_p.h b/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack_p.h deleted file mode 100644 index 6e5c08ca03..0000000000 --- a/src/declarative/scenegraph/coreapi/qsgmatrix4x4stack_p.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtDeclarative module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSGMATRIX4X4STACK_P_H -#define QSGMATRIX4X4STACK_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QSGMatrix4x4StackPrivate -{ -public: - QSGMatrix4x4StackPrivate() : isDirty(true) {} - - QMatrix4x4 matrix; - QStack stack; - bool isDirty; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/declarative/scenegraph/coreapi/qsgnodeupdater_p.h b/src/declarative/scenegraph/coreapi/qsgnodeupdater_p.h index 798a906f60..a1ecc65220 100644 --- a/src/declarative/scenegraph/coreapi/qsgnodeupdater_p.h +++ b/src/declarative/scenegraph/coreapi/qsgnodeupdater_p.h @@ -43,7 +43,6 @@ #define NODEUPDATER_P_H #include "qsgnode.h" -#include "qsgmatrix4x4stack.h" #include QT_BEGIN_NAMESPACE diff --git a/src/declarative/scenegraph/coreapi/qsgrenderer.cpp b/src/declarative/scenegraph/coreapi/qsgrenderer.cpp index dbf704b64a..7ceea36b3a 100644 --- a/src/declarative/scenegraph/coreapi/qsgrenderer.cpp +++ b/src/declarative/scenegraph/coreapi/qsgrenderer.cpp @@ -122,7 +122,7 @@ QSGRenderer::QSGRenderer(QSGContext *context) : QObject() , m_clear_color(Qt::transparent) , m_clear_mode(ClearColorBuffer | ClearDepthBuffer) - , m_render_opacity(1) + , m_current_opacity(1) , m_context(context) , m_root_node(0) , m_node_updater(0) @@ -249,12 +249,12 @@ void QSGRenderer::renderScene(const Bindable &bindable) #endif } -void QSGRenderer::setProjectMatrixToDeviceRect() +void QSGRenderer::setProjectionMatrixToDeviceRect() { - setProjectMatrixToRect(m_device_rect); + setProjectionMatrixToRect(m_device_rect); } -void QSGRenderer::setProjectMatrixToRect(const QRectF &rect) +void QSGRenderer::setProjectionMatrixToRect(const QRectF &rect) { QMatrix4x4 matrix; matrix.ortho(rect.x(), @@ -263,10 +263,10 @@ void QSGRenderer::setProjectMatrixToRect(const QRectF &rect) rect.y(), qreal(0.01), -1); - setProjectMatrix(matrix); + setProjectionMatrix(matrix); } -void QSGRenderer::setProjectMatrix(const QMatrix4x4 &matrix) +void QSGRenderer::setProjectionMatrix(const QMatrix4x4 &matrix) { m_projection_matrix = matrix; // Mirrored relative to the usual Qt coordinate system with origin in the top left corner. @@ -369,11 +369,9 @@ QSGRenderer::ClipType QSGRenderer::updateStencilClip(const QSGClipNode *clip) int clipDepth = 0; QRect clipRect; while (clip) { - QMatrix4x4 matrix = m_projectionMatrix.top(); + QMatrix4x4 m = m_current_projection_matrix; if (clip->matrix()) - matrix *= *clip->matrix(); - - const QMatrix4x4 &m = matrix; + m *= *clip->matrix(); // TODO: Check for multisampling and pixel grid alignment. bool canUseScissor = clip->isRectangular() diff --git a/src/declarative/scenegraph/coreapi/qsgrenderer_p.h b/src/declarative/scenegraph/coreapi/qsgrenderer_p.h index 272df8082c..0218caed15 100644 --- a/src/declarative/scenegraph/coreapi/qsgrenderer_p.h +++ b/src/declarative/scenegraph/coreapi/qsgrenderer_p.h @@ -45,8 +45,6 @@ #include #include -#include "qsgmatrix4x4stack.h" - #include #include @@ -103,18 +101,18 @@ public: inline void setViewportRect(const QSize &size) { setViewportRect(QRect(QPoint(), size)); } QRect viewportRect() const { return m_viewport_rect; } - QSGMatrix4x4Stack &projectionMatrix() { return m_projectionMatrix; } - QSGMatrix4x4Stack &modelViewMatrix() { return m_modelViewMatrix; } - QMatrix4x4 combinedMatrix() const { return m_projectionMatrix.top() * m_modelViewMatrix.top(); } + // Accessed by QSGMaterialShader::RenderState. + QMatrix4x4 currentProjectionMatrix() const { return m_current_projection_matrix; } + QMatrix4x4 currentModelViewMatrix() const { return m_current_model_view_matrix; } + QMatrix4x4 currentCombinedMatrix() const { return m_current_projection_matrix * m_current_model_view_matrix; } + qreal currentOpacity() const { return m_current_opacity; } - void setProjectMatrixToDeviceRect(); - void setProjectMatrixToRect(const QRectF &rect); - void setProjectMatrix(const QMatrix4x4 &matrix); - QMatrix4x4 projectMatrix() const { return m_projection_matrix; } + void setProjectionMatrixToDeviceRect(); + void setProjectionMatrixToRect(const QRectF &rect); + void setProjectionMatrix(const QMatrix4x4 &matrix); + QMatrix4x4 projectionMatrix() const { return m_projection_matrix; } bool isMirrored() const { return m_mirrored; } - qreal renderOpacity() const { return m_render_opacity; } - void setClearColor(const QColor &color); QColor clearColor() const { return m_clear_color; } @@ -155,9 +153,9 @@ protected: QColor m_clear_color; ClearMode m_clear_mode; - QSGMatrix4x4Stack m_projectionMatrix; - QSGMatrix4x4Stack m_modelViewMatrix; - qreal m_render_opacity; + QMatrix4x4 m_current_projection_matrix; + QMatrix4x4 m_current_model_view_matrix; + qreal m_current_opacity; QSGContext *m_context; diff --git a/src/declarative/scenegraph/scenegraph.pri b/src/declarative/scenegraph/scenegraph.pri index 17370804a3..3a2a7fafee 100644 --- a/src/declarative/scenegraph/scenegraph.pri +++ b/src/declarative/scenegraph/scenegraph.pri @@ -9,8 +9,6 @@ HEADERS += \ $$PWD/coreapi/qsgdefaultrenderer_p.h \ $$PWD/coreapi/qsggeometry.h \ $$PWD/coreapi/qsgmaterial.h \ - $$PWD/coreapi/qsgmatrix4x4stack.h \ - $$PWD/coreapi/qsgmatrix4x4stack_p.h \ $$PWD/coreapi/qsgnode.h \ $$PWD/coreapi/qsgnodeupdater_p.h \ $$PWD/coreapi/qsgrenderer_p.h @@ -18,7 +16,6 @@ SOURCES += \ $$PWD/coreapi/qsgdefaultrenderer.cpp \ $$PWD/coreapi/qsggeometry.cpp \ $$PWD/coreapi/qsgmaterial.cpp \ - $$PWD/coreapi/qsgmatrix4x4stack.cpp \ $$PWD/coreapi/qsgnode.cpp \ $$PWD/coreapi/qsgnodeupdater.cpp \ $$PWD/coreapi/qsgrenderer.cpp -- cgit v1.2.3