aboutsummaryrefslogtreecommitdiffstats
path: root/src/declarative/scenegraph/util/qsgengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/scenegraph/util/qsgengine.cpp')
-rw-r--r--src/declarative/scenegraph/util/qsgengine.cpp244
1 files changed, 244 insertions, 0 deletions
diff --git a/src/declarative/scenegraph/util/qsgengine.cpp b/src/declarative/scenegraph/util/qsgengine.cpp
new file mode 100644
index 0000000000..1b7f05809b
--- /dev/null
+++ b/src/declarative/scenegraph/util/qsgengine.cpp
@@ -0,0 +1,244 @@
+/****************************************************************************
+**
+** 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 "qsgengine.h"
+
+#include <private/qsgtexture_p.h>
+#include <private/qsgrenderer_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QSGEnginePrivate : public QObjectPrivate
+{
+public:
+ QSGEnginePrivate()
+ : context(0)
+ , clearBeforeRender(true)
+ {
+ }
+
+ QSGContext *context;
+
+ bool clearBeforeRender;
+};
+
+
+/*!
+ \class QSGEngine
+ \brief The QSGEngine class serves as a generic entry point into scene graph specific APIs.
+
+ The QSGEngine class provides factory functions for creating textures. Though the user
+ can implement any type of texture using the abstract QSGTexture class, the QSGEngine
+ class provides some convenience for the default usecases. This also allows the scene
+ graph to apply hardware specific optimzations.
+
+ */
+
+
+
+/*!
+ Constructs a new QSGengine
+ */
+QSGEngine::QSGEngine(QObject *parent) :
+ QObject(*(new QSGEnginePrivate), parent)
+{
+}
+
+
+QSGEngine::~QSGEngine()
+{
+}
+
+/*!
+ \enum TextureOption
+
+ The TextureOption enums are used to customize a texture is wrapped.
+
+ \value TextureHasAlphaChannel The texture has an alpha channel and should
+ be drawn using blending.
+
+ \value TextureHasMipmaps The texture has mipmaps and can be drawn with
+ mipmapping enabled.
+
+ \value TextureOwnsGLTexture The texture object owns the texture id and
+ will delete the GL texture when the texture object is deleted.
+
+ */
+
+/*!
+ \fn void QSGEngine::beforeRendering()
+
+ This signal is emitted before the scene starts rendering.
+
+ Combined with the modes for clearing the background, this option
+ can be used to paint using raw GL under QML content.
+
+ The GL context used for rendering the scene graph will be bound
+ at this point.
+*/
+
+/*!
+ \fn void QSGEngine::afterRendering()
+
+ This signal is emitted after the scene has completed rendering, before swapbuffers is called.
+
+ This signal can be used to paint using raw GL on top of QML content,
+ or to do screen scraping of the current frame buffer.
+
+ The GL context used for rendering the scene graph will be bound at this point.
+ */
+
+
+
+/*!
+ Sets weither the scene graph rendering of QML should clear the color buffer
+ before it starts rendering to \a enbled.
+
+ By disabling clearing of the color buffer, it is possible to do GL painting
+ under the scene graph.
+
+ The color buffer is cleared by default.
+ */
+
+void QSGEngine::setClearBeforeRendering(bool enabled)
+{
+ Q_D(QSGEngine);
+ d->clearBeforeRender = enabled;
+ if (d->clearBeforeRender) {
+ d->context->renderer()->setClearMode(QSGRenderer::ClearDepthBuffer
+ | QSGRenderer::ClearColorBuffer);
+ } else {
+ d->context->renderer()->setClearMode(QSGRenderer::ClearDepthBuffer);
+ }
+}
+
+
+
+/*!
+ Returns weither clearing of the color buffer is done before rendering or not.
+ */
+
+bool QSGEngine::clearBeforeRendering() const
+{
+ Q_D(const QSGEngine);
+ return d->clearBeforeRender;
+}
+
+
+
+/*!
+ Creates a new QSGTexture from the supplied \a image. If the image has an
+ alpha channel, the corresponding texture will have an alpha channel.
+
+ The caller of the function is responsible for deleting the returned texture.
+
+ The actual GL texture will be deleted when the texture object is deleted.
+ */
+
+QSGTexture *QSGEngine::createTextureFromImage(const QImage &image) const
+{
+ Q_D(const QSGEngine);
+ return d->context->createTexture(image);
+}
+
+
+
+/*!
+ Creates a new QSGTexture object from an existing GL texture \a id.
+
+ The caller of the function is responsible for deleting the returned texture.
+
+ Use \a options to customize the texture attributes.
+ */
+QSGTexture *QSGEngine::createTextureFromId(uint id, const QSize &size, TextureOptions options) const
+{
+ QSGPlainTexture *texture = new QSGPlainTexture();
+ texture->setTextureId(id);
+ texture->setHasAlphaChannel(options & TextureHasAlphaChannel);
+ texture->setHasMipmaps(options & TextureHasMipmaps);
+ texture->setOwnsTexture(options & TextureOwnsGLTexture);
+ texture->setTextureSize(size);
+ return texture;
+}
+
+
+
+/*!
+ \internal
+
+ Sets the scene graph context of this engine to context.
+
+ The context will be set by the QSGcontext::initialize() function,
+ as part of constructing the engine object.
+ */
+
+void QSGEngine::setContext(QSGContext *context)
+{
+ Q_D(QSGEngine);
+ d->context = context;
+}
+
+
+
+/*!
+ Sets the background color of the scene graph to \a color.
+
+ Changing the clear color has no effect when clearing before rendering is
+ disabled.
+ */
+
+void QSGEngine::setClearColor(const QColor &color)
+{
+ d_func()->context->renderer()->setClearColor(color);
+}
+
+
+
+/*!
+ Returns the background color of the scene graph
+ */
+
+QColor QSGEngine::clearColor() const
+{
+ return d_func()->context->renderer()->clearColor();
+}
+
+QT_END_NAMESPACE