[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