summaryrefslogtreecommitdiffstats
path: root/doc/src/qtopenvg.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/qtopenvg.qdoc')
-rw-r--r--doc/src/qtopenvg.qdoc324
1 files changed, 0 insertions, 324 deletions
diff --git a/doc/src/qtopenvg.qdoc b/doc/src/qtopenvg.qdoc
deleted file mode 100644
index 9f0df5815..000000000
--- a/doc/src/qtopenvg.qdoc
+++ /dev/null
@@ -1,324 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the documentation 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 either Technology Preview License Agreement or the
-** Beta Release License Agreement.
-**
-** 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.0, included in the file LGPL_EXCEPTION.txt in this
-** package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-** If you are unsure which license is appropriate for your use, please
-** contact the sales department at http://qt.nokia.com/contact.
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \module QtOpenVG
- \title QtOpenVG Module
- \since 4.6
- \contentspage Qt's Modules
- \previouspage QtOpenGL
- \nextpage QtScript
- \ingroup modules
-
- \brief The QtOpenVG module provides support classes for OpenVG painting.
-
- \tableofcontents
-
- OpenVG is a standard API from the
- \l{http://www.khronos.org/openvg}{Khronos Group} for accelerated
- 2D vector graphics that is appearing in an increasing number of
- embedded devices.
-
- OpenVG is optimized for 2D vector operations, and closely matches
- the functionality in QPainter. It can therefore be an excellent
- substitute for the default raster-based QPaintEngine on hardware
- that supports OpenVG.
-
- \section1 Building Qt with OpenVG support
-
- OpenVG support can be enabled by passing the \c{-openvg} option
- to configure. It is assumed that the following qmake variables
- are set to appropriate values in the qmake.conf file for your
- platform:
-
- \list
- \o QMAKE_INCDIR_OPENVG
- \o QMAKE_LIBDIR_OPENVG
- \o QMAKE_LIBS_OPENVG
- \endlist
-
- Most OpenVG implementations are based on EGL, so the following
- variables may also need to be set:
-
- \list
- \o QMAKE_INCDIR_EGL
- \o QMAKE_LIBDIR_EGL
- \o QMAKE_LIBS_EGL
- \endlist
-
- See \l{qmake Variable Reference} for more information on these variables.
-
- Two kinds of OpenVG engines are currently supported: EGL based,
- and engines built on top of OpenGL such as
- \l{http://sourceforge.net/projects/shivavg}{ShivaVG}.
- EGL based engines are preferred.
-
- It is assumed that the EGL implementation has some way to turn a
- QWidget::winId() into an EGL rendering surface with
- \c{eglCreateWindowSurface()}. If this is not the case, then
- modifications may be needed to the code under \c{src/gui/egl} and
- \c{src/plugins/graphicssystems/openvg} to accomodate the EGL
- implementation.
-
- The ShivaVG graphics system under \c{src/plugins/graphicssystems/shivavg}
- is an example of how to integrate a non-EGL implementation of
- OpenVG into Qt. It is currently only supported with Qt/X11
- and being an example only, the resulting screen output may not
- be as good as with other OpenVG engines.
-
- \section1 Using the OpenVG graphics system
-
- Once the graphics system plugin has been built and installed,
- applications can be run as follows to use the plugin:
-
- \code
- app -graphicssystem OpenVG
- \endcode
-
- If ShivaVG is being used, then substitute \c ShivaVG instead of
- \c OpenVG in the line above.
-
- If the plugin fails to load, try setting the \c QT_DEBUG_PLUGINS
- environment variable to 1 and try again. Usually the plugin
- cannot be loaded because Qt cannot locate it in the directory
- \c{plugins/graphicssystems} within the Qt installation, or the
- dynamic library path does not include the directory containing
- the system's \c libOpenVG.so library.
-
- \section1 Supported features
-
- \section2 Context modes
-
- The default configuration is "single-context" mode, where a single
- EGLContext object is used for all drawing, regardless of the surface.
- Multiple EGLSurfaces are created, one for each window surface or pixmap.
- eglMakeCurrent() is called with the same EGLContext every time, but a
- different EGLSurface.
-
- Single-context mode is necessary for QPixmapData to be implemented in
- terms of a VGImage. If single-context mode is not enabled, then QPixmapData
- will use the fallback QRasterPixmapData implementation, which is less
- efficient performance-wise.
-
- Single-context mode can be disabled with the QVG_NO_SINGLE_CONTEXT define
- if the OpenVG engine does not support one context with multiple surfaces.
-
- \section2 Transformation matrices
-
- All affine and projective transformation matrices are supported.
-
- QVGPaintEngine will use the engine to accelerate affine transformation
- matrices only. When a projective transformation matrix is used,
- QVGPaintEngine will transform the coordinates before passing them
- to the engine. This will probably incur a performance penalty.
-
- Pixmaps and images are always transformed by the engine, because
- OpenVG specifies that projective transformations must work for images.
-
- It is recommended that client applications should avoid using projective
- transformations for non-image elements in performance critical code.
-
- \section2 Composition modes
-
- The following composition modes are supported:
-
- \list
- \o QPainter::CompositionMode_SourceOver
- \o QPainter::CompositionMode_DestinationOver
- \o QPainter::CompositionMode_Source
- \o QPainter::CompositionMode_SourceIn
- \o QPainter::CompositionMode_DestinationIn
- \o QPainter::CompositionMode_Plus
- \o QPainter::CompositionMode_Multiply
- \o QPainter::CompositionMode_Screen
- \o QPainter::CompositionMode_Darken
- \o QPainter::CompositionMode_Lighten
- \endlist
-
- The other members of QPainter::CompositionMode are not supported
- because OpenVG 1.1 does not have an equivalent in its \c VGBlendMode
- enumeration. Any attempt to set an unsupported mode will result in
- the actual mode being set to QPainter::CompositionMode_SourceOver.
- Client applications should avoid using unsupported modes.
-
- \section2 Pens and brushes
-
- All pen styles are supported, including cosmetic pens.
-
- All brush styles are supported except for conical gradients, which are
- not supported by OpenVG 1.1. Conical gradients will be converted into a
- solid color brush corresponding to the first color in the gradient's
- color ramp.
-
- Affine matrices are supported for brush transforms, but not projective
- matrices.
-
- \section2 Rectangles, lines, and points
-
- Rectangles and lines use cached VGPath objects to try to accelerate
- drawing operations. vgModifyPathCoords() is used to modify the
- co-ordinates in the cached VGPath object each time fillRect(),
- drawRects(), or drawLines() is called.
-
- If the engine does not implement vgModifyPathCoords() properly, then the
- QVG_NO_MODIFY_PATH define can be set to disable path caching. This will
- incur a performance penalty.
-
- Points are implemented as lines from the point to itself. The cached
- line drawing VGPath object is used when drawing points.
-
- \section2 Polygons and Ellipses
-
- Polygon and ellipse drawing creates a new VGPath object every time
- drawPolygon() or drawEllipse() is called. If the client application is
- making heavy use of these functions, the constant creation and destruction
- of VGPath objects could have an impact on performance.
-
- If a projective transformation is active, ellipses are converted into
- cubic curves prior to transformation, which may further impact performance.
-
- Client applications should avoid polygon and ellipse drawing in performance
- critical code if possible.
-
- \section2 Other Objects
-
- Most other objects (arcs, pies, etc) use drawPath(), which takes a
- QPainterPath argument. The default implementation in QPainterEngineEx
- converts the QPainterPath into a QVectorPath and then calls draw(),
- which in turn converts the QVectorPath into a VGPath for drawing.
-
- To reduce the overhead, we have overridden drawPath() in QVGPaintEngine
- to convert QPainterPath's directly into VGPath's. This should help improve
- performance compared to the default implementation.
-
- Client applications should try to avoid these types of objects in
- performance critical code because of the QPainterPath to VGPath
- conversion cost.
-
- \section2 Clipping
-
- Clipping with QRect, QRectF, and QRegion objects is supported on all
- OpenVG engines with vgMask() if the transformation matrix is the identity
- or a simple origin translation.
-
- Clipping with an arbitrary QPainterPath, or setting the clip region when
- the transformation matrix is simple, is supported only if the OpenVG engine
- has the vgRenderToMask() function (OpenVG 1.1 and higher).
-
- The QVG_NO_RENDER_TO_MASK define will disable the use of vgRenderToMask().
-
- The QVG_SCISSOR_CLIP define will disable clipping with vgMask() or
- vgRenderToMask() and instead use the scissor rectangle list to perform
- clipping. Clipping with an arbitrary QPainterPath will not be supported.
- The QVG_SCISSOR_CLIP define should only be used if the OpenVG engine
- does not support vgMask() or vgRenderToMask().
-
- \section2 Opacity
-
- Opacity is supported for all drawing operations. Solid color pens,
- solid color brushes, gradient brushes, and image drawing with drawPixmap()
- and drawImage() will probably have the best performance compared to
- other kinds of pens and brushes.
-
- \section2 Text Drawing
-
- If OpenVG 1.1 is used, the paint engine will use VG fonts to cache glyphs
- while drawing. If the engine does not support VG fonts correctly,
- QVG_NO_DRAW_GLYPHS can be defined to disable this mode. Text drawing
- performance will suffer if VG fonts are not used.
-
- By default, image-based glyphs are used. If QVG_NO_IMAGE_GLYPHS is defined,
- then path-based glyphs will be used instead. QVG_NO_IMAGE_GLYPHS is ignored
- if QVG_NO_DRAW_GLYPHS is defined.
-
- If path-based glyphs are used, then the OpenVG engine will need to
- support hinting to render text with good results. Image-based glyphs
- avoids the need for hinting and will usually give better results than
- path-based glyphs.
-
- \section2 Pixmaps
-
- In single-context mode, pixmaps will be implemented using VGImage
- unless QVG_NO_PIXMAP_DATA is defined.
-
- QVGPixmapData will convert QImage's into VGImage's when the application
- calls drawPixmap(), and the pixmap will be kept in VGImage form for the
- lifetime of the QVGPixmapData object. When the application tries to paint
- into a QPixmap with QPainter, the data will be converted back into a
- QImage and the raster paint engine will be used to render into the QImage.
-
- This arrangement optimizes for the case of drawing the same static pixmap
- over and over (e.g. for icons), but does not optimize the case of drawing
- into pixmaps.
-
- Bitmaps must use QRasterPixmapData. They are not accelerated with
- VGImage at present.
-
- \section2 Pixmap filters
-
- Convolution, colorize, and drop shadow filters are accelerated using
- OpenVG operations.
-
- \section1 Known issues
-
- Performance of copying the contents of an OpenVG-rendered window to the
- screen needs platform-specific work in the QVGWindowSurface class.
-
- Clipping with arbitrary non-rectangular paths only works on engines
- that support vgRenderToMask(). Simple rectangular paths are supported
- on all engines that correctly implement vgMask().
-
- The paint engine is not yet thread-safe, so it is not recommended for
- use in threaded Qt applications that draw from multiple threads.
- Drawing should be limited to the main GUI thread.
-
- Performance of projective matrices for non-image drawing is not as good
- as for affine matrices.
-
- QPixmap's are implemented as VGImage objects so that they can be quickly
- rendered with drawPixmap(). Rendering into a QPixmap using QPainter
- will use the default Qt raster paint engine on a QImage copy of the
- QPixmap, and will not be accelerated. This issue may be addressed in
- a future version of the engine.
-
- ShivaVG support is highly experimental and limited to Qt/X11. It is
- provided as an example of how to integrate a non-EGL engine.
- */