[cairo-commit] papers/opengl_freenix04 opengl_freenix04.tex, 1.48,
1.49
David Reveman
commit at pdx.freedesktop.org
Thu Apr 8 05:32:53 PDT 2004
Committed by: davidr
Update of /cvs/cairo/papers/opengl_freenix04
In directory pdx:/tmp/cvs-serv32711
Modified Files:
opengl_freenix04.tex
Log Message:
done
Index: opengl_freenix04.tex
===================================================================
RCS file: /cvs/cairo/papers/opengl_freenix04/opengl_freenix04.tex,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** a/opengl_freenix04.tex 8 Apr 2004 08:06:46 -0000 1.48
--- b/opengl_freenix04.tex 8 Apr 2004 12:32:51 -0000 1.49
***************
*** 16,21 ****
\title{\Libname{}: Hardware Accelerated Image Compositing using OpenGL}
- \docstatus{ready?}
-
\author{
\authname{Peter Nilsson}
--- 16,19 ----
***************
*** 32,36 ****
\maketitle
! \abstract
In recent years 2D graphics applications and window systems tend to
--- 30,34 ----
\maketitle
! \abstract{}
In recent years 2D graphics applications and window systems tend to
***************
*** 165,169 ****
The output of \libname{} is accelerated in hardware by using
! OpenGL for all rendering operations. Figure~\ref{layers}
illustrates these ideas by showing the layers involved when an
application uses cairo to draw hardware accelerated graphics through
--- 163,167 ----
The output of \libname{} is accelerated in hardware by using
! OpenGL for all rendering operations. Figure~\ref{fig:layers}
illustrates these ideas by showing the layers involved when an
application uses cairo to draw hardware accelerated graphics through
***************
*** 177,181 ****
uses cairo to render graphics to an OpenGL
surface.}
! \label{layers}
\end{centering}
\end{figure}
--- 175,179 ----
uses cairo to render graphics to an OpenGL
surface.}
! \label{fig:layers}
\end{centering}
\end{figure}
***************
*** 220,224 ****
\small\itshape
\caption{\small\itshape The OpenGL Rendering Pipeline}
! \label{pipe}
\end{centering}
\end{figure}
--- 218,222 ----
\small\itshape
\caption{\small\itshape The OpenGL Rendering Pipeline}
! \label{fig:pipe}
\end{centering}
\end{figure}
***************
*** 226,230 ****
The latest generations of graphics hardware allow the application to
replace the conventional vertex operations and fragment operations
! processing stages shown in figure~\ref{pipe}, with application defined
computations. These computations are defined with assembler-like
languages that an OpenGL implementation compiles into vertex and
--- 224,228 ----
The latest generations of graphics hardware allow the application to
replace the conventional vertex operations and fragment operations
! processing stages shown in figure~\ref{fig:pipe}, with application defined
computations. These computations are defined with assembler-like
languages that an OpenGL implementation compiles into vertex and
***************
*** 347,351 ****
model. It takes two source surfaces and one destination surface, where the
second of the two source surfaces is the optional mask surface. Figure
! ~\ref{porter_duff} illustrates this operation.
\begin{figure}[htbp]
--- 345,349 ----
model. It takes two source surfaces and one destination surface, where the
second of the two source surfaces is the optional mask surface. Figure
! ~\ref{fig:porter_duff} illustrates this operation.
\begin{figure}[htbp]
***************
*** 354,358 ****
\small\itshape
\caption{\small\itshape src IN mask OP dst}
! \label{porter_duff}
\end{centering}
\end{figure}
--- 352,356 ----
\small\itshape
\caption{\small\itshape src IN mask OP dst}
! \label{fig:porter_duff}
\end{centering}
\end{figure}
***************
*** 465,470 ****
textures. The most obvious one, and the one that most applies
to 2D graphics, is the jagged profile artifact.
! Figure~\ref{jaggies} illustrates an aliased graphical image suffering
! from a jagged edge.
\begin{figure}[htbp]
--- 463,468 ----
textures. The most obvious one, and the one that most applies
to 2D graphics, is the jagged profile artifact.
! Figure~\ref{fig:jaggies} illustrates an aliased graphical image
! suffering from a jagged edge.
\begin{figure}[htbp]
***************
*** 475,479 ****
edge (2) The aliased signal point sampled
to screen pixels (3) Anti-aliased signal}
! \label{jaggies}
\end{centering}
\end{figure}
--- 473,477 ----
edge (2) The aliased signal point sampled
to screen pixels (3) Anti-aliased signal}
! \label{fig:jaggies}
\end{centering}
\end{figure}
***************
*** 580,584 ****
used. With external glyph management, \libname{} renders text at
approximately 50000 glyphs per second on the test setup described in
! section \ref{section: Results}.
Built in text handling is planned for future versions of the library and
--- 578,582 ----
used. With external glyph management, \libname{} renders text at
approximately 50000 glyphs per second on the test setup described in
! section \ref{section:Results}.
Built in text handling is planned for future versions of the library and
***************
*** 595,599 ****
With \libname{}, clipping only restricts writing to a surface.
\Libname{}'s clipping interface cannot restrict reading of a surface.
!
\subsection{Convolution Filters}
--- 593,643 ----
With \libname{}, clipping only restricts writing to a surface.
\Libname{}'s clipping interface cannot restrict reading of a surface.
!
! \subsection{Programmatic Surfaces}
!
! \Libname{} allows you to create programmatic surfaces. A
! programmatic surface does not contain any actual image data, only
! a minimal set of attributes. These attributes describe how to calculate
! the color for each fragment of the surface.
!
! Not containing any actual image data makes initialization time for
! programmatic surfaces very low. Having a low initialization time
! makes them ideal for representing solid colors.
!
! \Libname{} also support programmatic surfaces that represent linear or
! radial transition vector patterns. A linear pattern defines two points,
! which form a transition vector. A radial gradient defines a center point
! and a radius, which together form a dynamic transition vector around the
! center point. The color of each fragment in these programmatic surfaces
! is fetched from a color range, using the fragments offset along the
! transition vector.
!
! A color range is a one dimensional surface. The color range data is
! generated by the application and then transfered to graphics hardware
! where it can be used with linear and radial patterns. This allows
! applications to use linear and radial patterns for a wide range of
! shading effects. For example, linear color gradients and Gaussian shading.
! By setting the \emph{extend} attribute of a color range to
! \emph{pad, repeat} or \emph{reflect}, the application can also control
! what should happen when patterns try to fetch color values outside
! of the color range.
!
! Most programmatic surfaces are implemented using fragment programs and
! they will only be available on hardware supporting the fragment program
! extension.
!
! Figure ~\ref{fig:linear-gradients} shows the results from using
! programmatic surfaces for linear color gradients.
!
! \begin{figure}[htbp]
! \begin{centering}
! \epsfig{file=linear-gradients.eps}
! \small\itshape
! \caption{\small\itshape Programmatic surfaces used for linear
! color gradients}
! \label{fig:linear-gradients}
! \end{centering}
! \end{figure}
!
\subsection{Convolution Filters}
***************
*** 622,630 ****
\subsubsection{Useful Convolution Kernels}
! Table~\ref{conv} presents three useful convolution kernels and
! figure ~\ref{original} and ~\ref{filtered} show the results of filtering
! an image using a Gaussian convolution kernel.
! \begin{table}[h!tbp]
\begin{tabular}{l l}
Gaussian Blur Filter: &
--- 666,674 ----
\subsubsection{Useful Convolution Kernels}
! Table~\ref{table:conv} presents three useful convolution kernels and
! figure ~\ref{fig:conv_original} and ~\ref{fig:conv_gaussian} show the
! results of filtering an image using a Gaussian convolution kernel.
! \begin{table}[htbp]
\begin{tabular}{l l}
Gaussian Blur Filter: &
***************
*** 656,660 ****
\end{tabular}
\caption{\small\itshape Useful convolution kernels}
! \label{conv}
\end{table}
--- 700,704 ----
\end{tabular}
\caption{\small\itshape Useful convolution kernels}
! \label{table:conv}
\end{table}
***************
*** 664,668 ****
\small\itshape
\caption{\small\itshape Original image}
! \label{original}
\end{centering}
\end{figure}
--- 708,712 ----
\small\itshape
\caption{\small\itshape Original image}
! \label{fig:conv_original}
\end{centering}
\end{figure}
***************
*** 672,720 ****
\epsfig{file=conv-gaussian.eps}
\small\itshape
! \caption{\small\itshape After Gaussian convolution filtering}
! \label{filtered}
! \end{centering}
! \end{figure}
!
! \subsection{Programmatic Surfaces}
!
! \Libname{} allows you to create programmatic surfaces. A
! programmatic surface does not contain any actual image data, only
! a minimal set of attributes. These attributes describe how to calculate
! the color for each fragment of the surface.
!
! Not containing any actual image data makes initialization time for
! programmatic surfaces very low. Having a low initialization time
! makes them ideal for representing solid colors.
!
! \Libname{} also support programmatic surfaces that represent linear or
! radial transition vector patterns. A linear pattern defines two points,
! which form a transition vector. A radial gradient defines a center point
! and a radius, which together form a dynamic transition vector around the
! center point. The color of each fragment in these programmatic surfaces
! is fetched from a color range, using the fragments offset along the
! transition vector.
!
! A color range is a one dimensional surface. The color range data is
! generated by the application and then transfered to graphics hardware
! where it can be used with linear and radial patterns. This allows
! applications to use linear and radial patterns for wide range of
! shading effects. For example, linear color gradients and Gaussian shading.
! By setting the \emph{extend} attribute of a color range to
! \emph{pad, repeat} or \emph{reflect}, the application can also control
! what should happen when patterns try to fetch color values outside
! of the color range.
!
! Most programmatic surfaces are implemented using fragment programs and
! they will only be available on hardware supporting the fragment program
! extension.
!
! \begin{figure}[htbp]
! \begin{centering}
! \epsfig{file=linear-gradients.eps}
! \small\itshape
! \caption{\small\itshape Programmatic surfaces used for linear
! color gradients}
! \label{filtered}
\end{centering}
\end{figure}
--- 716,721 ----
\epsfig{file=conv-gaussian.eps}
\small\itshape
! \caption{\small\itshape Image after Gaussian convolution filtering}
! \label{fig:conv_gaussian}
\end{centering}
\end{figure}
***************
*** 755,759 ****
can use this texture name with ordinary OpenGL calls.
! \begin{figure}[h!tbp]
\begin{scriptsize}
\begin{verbatim}
--- 756,760 ----
can use this texture name with ordinary OpenGL calls.
! \begin{figure}[htbp]
\begin{scriptsize}
\begin{verbatim}
***************
*** 802,809 ****
\end{scriptsize}
\caption{Rendering 3D graphics with a \libname{} surface as texture}
! \label{opengl_3d_example}
\end{figure}
! Figure~\ref{opengl_3d_example} shows an example that render 2D graphics
to an off-screen surface and then use it as a texture when drawing in 3D.
--- 803,810 ----
\end{scriptsize}
\caption{Rendering 3D graphics with a \libname{} surface as texture}
! \label{fig:opengl_3d_example}
\end{figure}
! Figure~\ref{fig:opengl_3d_example} shows an example that render 2D graphics
to an off-screen surface and then use it as a texture when drawing in 3D.
***************
*** 813,817 ****
\section{Results}
! \label{section: Results}
Right now the library has not been tested that much in real
--- 814,818 ----
\section{Results}
! \label{section:Results}
Right now the library has not been tested that much in real
***************
*** 827,851 ****
noticeable differences compared to Xrender using \libname{}. However, in
some complex objects a slight variation can be seen between \libname's
! output and Xrender's output. Figure~\ref{Infinity Sign 1}
! and~\ref{Infinity Sign 2} illustrates the output inconsistencies for
aliased rendering. The infinite sign is tessellated into 370 trapezoids
by the cairo library, which are then rendered using \libname{} and
Xrender. Both figures are magnified to better show the output differences.
! \begin{figure}[h!tbp]
\begin{centering}
\epsfig{file=inf-gl-a.eps}
\small\itshape
\caption{\small\itshape Aliased OpenGL output}
! \label{Infinity Sign 1}
\end{centering}
\end{figure}
! \begin{figure}[h!tbp]
\begin{centering}
\epsfig{file=inf-xr-a.eps}
\small\itshape
\caption{\small\itshape Aliased xrender output}
! \label{Infinity Sign 2}
\end{centering}
\end{figure}
--- 828,852 ----
noticeable differences compared to Xrender using \libname{}. However, in
some complex objects a slight variation can be seen between \libname's
! output and Xrender's output. Figure~\ref{fig:infinity1}
! and~\ref{fig:infinity2} illustrates the output inconsistencies for
aliased rendering. The infinite sign is tessellated into 370 trapezoids
by the cairo library, which are then rendered using \libname{} and
Xrender. Both figures are magnified to better show the output differences.
! \begin{figure}[htbp]
\begin{centering}
\epsfig{file=inf-gl-a.eps}
\small\itshape
\caption{\small\itshape Aliased OpenGL output}
! \label{fig:infinity1}
\end{centering}
\end{figure}
! \begin{figure}[htbp]
\begin{centering}
\epsfig{file=inf-xr-a.eps}
\small\itshape
\caption{\small\itshape Aliased xrender output}
! \label{fig:infinity2}
\end{centering}
\end{figure}
***************
*** 858,862 ****
fairly modern graphics hardware, very similar results are achieved with
anti-aliased output.
! Figure~\ref{Infinity Sign 3} and~\ref{Infinity Sign 4} show the same
infinite sign and illustrates the output inconsistencies for
anti-aliased rendering.
--- 859,863 ----
fairly modern graphics hardware, very similar results are achieved with
anti-aliased output.
! Figure~\ref{fig:infinity3} and~\ref{fig:infinity4} show the same
infinite sign and illustrates the output inconsistencies for
anti-aliased rendering.
***************
*** 868,872 ****
\caption{\small\itshape Anti-Aliased OpenGL output
(using 4 samples multi-sampling)}
! \label{Infinity Sign 3}
\end{centering}
\end{figure}
--- 869,873 ----
\caption{\small\itshape Anti-Aliased OpenGL output
(using 4 samples multi-sampling)}
! \label{fig:infinity3}
\end{centering}
\end{figure}
***************
*** 877,881 ****
\small\itshape
\caption{\small\itshape Anti-Aliased Xrender output}
! \label{Infinity Sign 4}
\end{centering}
\end{figure}
--- 878,882 ----
\small\itshape
\caption{\small\itshape Anti-Aliased Xrender output}
! \label{fig:infinity4}
\end{centering}
\end{figure}
***************
*** 898,903 ****
no on-screen rendering results are available for Imlib2.
! Table~\ref{output_formats} lists the tested output formats and
! table~\ref{rendermark_setup} shows the test setup.
\begin{table}[h!tbp]
--- 899,904 ----
no on-screen rendering results are available for Imlib2.
! Table~\ref{table:output_formats} lists the tested output formats and
! table~\ref{table:rendermark_setup} shows the test setup.
\begin{table}[h!tbp]
***************
*** 916,920 ****
\end{footnotesize}
\caption{\small\itshape Rendermark Output Formats}
! \label{output_formats}
\end{table}
--- 917,921 ----
\end{footnotesize}
\caption{\small\itshape Rendermark Output Formats}
! \label{table:output_formats}
\end{table}
***************
*** 932,936 ****
\end{footnotesize}
\caption{\small\itshape Test Setup}
! \label{rendermark_setup}
\end{table}
--- 933,937 ----
\end{footnotesize}
\caption{\small\itshape Test Setup}
! \label{table:rendermark_setup}
\end{table}
***************
*** 961,965 ****
\end{itemize}
! Table~\ref{rendermark1} shows the image compositing results.
\begin{table}[h!tbp]
--- 962,966 ----
\end{itemize}
! Table~\ref{table:rendermark1} shows the image compositing results.
\begin{table}[h!tbp]
***************
*** 979,983 ****
\caption{\small\itshape Seconds to complete composite test
(lower is better)}
! \label{rendermark1}
\end{table}
--- 980,984 ----
\caption{\small\itshape Seconds to complete composite test
(lower is better)}
! \label{table:rendermark1}
\end{table}
***************
*** 986,990 ****
This test evaluates color blend performance by drawing rectangles.
! Table~\ref{rendermark2} shows the color blend results.
\begin{table}[h!tbp]
--- 987,991 ----
This test evaluates color blend performance by drawing rectangles.
! Table~\ref{table:rendermark2} shows the color blend results.
\begin{table}[h!tbp]
***************
*** 998,1002 ****
\caption{\small\itshape Seconds to complete color blend test
(lower is better)}
! \label{rendermark2}
\end{table}
--- 999,1003 ----
\caption{\small\itshape Seconds to complete color blend test
(lower is better)}
! \label{table:rendermark2}
\end{table}
***************
*** 1018,1022 ****
\end{itemize}
! Table~\ref{rendermark3} shows polygon drawing results.
\begin{table}[h!tbp]
--- 1019,1023 ----
\end{itemize}
! Table~\ref{table:rendermark3} shows polygon drawing results.
\begin{table}[h!tbp]
***************
*** 1032,1036 ****
\caption{\small\itshape Seconds to complete triangle drawing test
(lower is better)}
! \label{rendermark3}
\end{table}
--- 1033,1037 ----
\caption{\small\itshape Seconds to complete triangle drawing test
(lower is better)}
! \label{table:rendermark3}
\end{table}
***************
*** 1040,1044 ****
it lacks support for it.
! Table~\ref{rendermark4} shows gradient drawing results.
\begin{table}[h!tbp]
--- 1041,1045 ----
it lacks support for it.
! Table~\ref{table:rendermark4} shows gradient drawing results.
\begin{table}[h!tbp]
***************
*** 1052,1056 ****
\caption{\small\itshape Seconds to complete gradient drawing test
(lower is better)}
! \label{rendermark4}
\end{table}
--- 1053,1057 ----
\caption{\small\itshape Seconds to complete gradient drawing test
(lower is better)}
! \label{table:rendermark4}
\end{table}
***************
*** 1062,1066 ****
extremely good with this feature turned on.
! \begin{table}[h!tbp]
\begin{footnotesize}
\begin{tabular}{l || c | c | c | c}
--- 1063,1067 ----
extremely good with this feature turned on.
! \begin{table}[htbp]
\begin{footnotesize}
\begin{tabular}{l || c | c | c | c}
***************
*** 1088,1095 ****
\end{footnotesize}
\caption{\small\itshape Seconds to complete test (lower is better)}
! \label{rendermark5}
\end{table}
! Table~\ref{rendermark5} shows that nvidia's driver performs well
compared to \libname{} in the cases where no transformations are used.
In cases where transformations are used, \libname{} is much faster than
--- 1089,1096 ----
\end{footnotesize}
\caption{\small\itshape Seconds to complete test (lower is better)}
! \label{table:rendermark5}
\end{table}
! Table~\ref{table:rendermark5} shows that nvidia's driver performs well
compared to \libname{} in the cases where no transformations are used.
In cases where transformations are used, \libname{} is much faster than
***************
*** 1162,1168 ****
The source can be retrieved via anonymous pserver access from the cairo CVS
! (\url{anoncvs at cvs.cairographics.org:/cvs/cairo}). Just check out the module
! called \libname{}. The current status of \libname{} and some additional
! information is available at \url{http://cairographics.org/}.
\bibliography{opengl_freenix04}
--- 1163,1169 ----
The source can be retrieved via anonymous pserver access from the cairo CVS
! (\url{anoncvs at cvs.cairographics.org:/cvs/cairo}). The current status
! of \libname{} and some additional information is available at
! \url{http://www.freedesktop.org/software/glitz}.
\bibliography{opengl_freenix04}
More information about the cairo-commit
mailing list