# [cairo] Fwd: Re: [Mesa3d-dev] more glitz points

David Reveman c99drn at cs.umu.se
Wed Apr 21 08:33:38 PDT 2004

On Wed, 2004-04-21 at 09:33 -0700, Jon Smirl wrote:

> --- Brian Paul <brian.paul at tungstengraphics.com> wrote:
> > Date: Wed, 21 Apr 2004 10:35:47 -0600
> > From: Brian Paul <brian.paul at tungstengraphics.com>
> > To: Jon Smirl <jonsmirl at yahoo.com>
> > CC: mesa3d-dev <mesa3d-dev at lists.sourceforge.net>
> > Subject: Re: [Mesa3d-dev] more glitz points
> >
> >
> > A few comments below.
> >
> > -Brian
> >
> >
> > Jon Smirl wrote:
> > > Here's the whole text...
> > >
> > >     \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
> > >     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.
> >
> > You certainly don't need fragment programs to do color gradients like
> > those.  At worst, you have to just compute per-vertex texcoords to do
> > radial gradients.  You can use texgen for texcoords for linear
> > gradients.  I've done both in past projects (long before fragment
> > programs existed).

You're probably right, and I'd love if someone would contribute with
some code that could do this. Although I think it might be hard make it
work with glitz's rendering model (the xrender model). It might also be
hard to make it support the different spread types; pad, repeat and
reflect.

> >
> >
> > >     Figure ~\ref{fig:linear-gradients} shows the results from using
> > >     programmatic surfaces for linear color gradients.
> > >
> >
> > >
> > >     \begin{figure}[htbp]
> > >       \begin{centering}
> > >         \small\itshape
> > >         \caption{\small\itshape Programmatic surfaces used for linear
> > >       \end{centering}
> > >     \end{figure}
> > >
> >
> > >
> > >     \subsection{Convolution Filters}
> >
> > It's not clear if the position of the gradients is window-relative or
> > object-relative, BTW.

window-relative.

> >
> >
> > >     Convolutions can be used to perform many common image processing
> > operations
> > >     including sharpening, blurring, noise reduction, embossing and
> > >     edge enhancement.
> > >
> >
> > >
> > >     A convolution is a mathematical function that replaces each pixel by a
> > >     weighted sum of its neighbors. The matrix defining the neighborhood of
> > >     the pixel also specifies the weight assigned to each neighbor. This
> > >     matrix is called the convolution kernel.
> > >
> >
> > >
> > >     \Libname{} supports user defined convolution kernels. If a
> > >     convolution kernel has been set for a surface, the convolution filter
> > >     will be applied when the surface is used as a source in a compositing
> > >     operation. The original source surface remains unmodified.
> > >
> >
> > >
> > >     In \libname{}, convolution filtering is implemented using fragment
> > >     programs and is only available on hardware with fragment program
> > support.
> > >     The alternative would be to use OpenGL's imaging extension, which would
> > >     require a transfer of all pixels through OpenGL's pixel pipeline to an
> > >     intermediate texture. Even though the alternative method would be
> > >     supported by older hardware, \libname{} uses fragment programs in favor
> > >     of performance.
> >
> > Fragment programs would be fine for convolution, but I hope a lack of
> > fragment programs wouldn't totally preclude the feature.

Glitz is design for the latest graphics hardware and fragment programs
seems to be the way to go lately. So I don't see this as a problem.
Cairo can use image buffers as fall back, if glitz report that graphics
hardware lack support for fragment programs. Slow of course, but it
would work.

> >
> >
> >
> > >     \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.
> > >
> > > Examples of Guassian, High Pass, Emboss
> > >
> > >
> >
> > >
> > >
> > >
> > >
> > >
> > > --- Brian Paul <brian.paul at tungstengraphics.com> wrote:
> > >
> > >>Jon Smirl wrote:
> > >>
> > >>>Both of these require fragment programs to implement....
> > >>>
> > >>>3.11 Programmatic Surfaces
> > >>>
> > >>>Glitz 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.
> > >>
> > >>If I understand this correctly a programmatic surface might be
> > >>something really simple like:
> > >>
> > >>* solid color fill
> > >>* linear gradient fill
> > >>* repeated pattern (texture) fill
> > >>
> > >>You don't need a fragment program for those.

solid color fill and repeated patterns don't need fragment program
support. I'm sure that we never say that in the paper.

> > >>
> > >>I guess I'd like to see a concrete example of a programmatic surface
> > >>that would require a fragment program.
> > >>
> > >>
> > >>
> > >>>3.12 Convolution Filters
> > >>>
> > >>>Glitz allows you to create programmatic surfaces. Convolutions can be used
> > >>
> > >>to
> > >>
> > >>>perform many common image processing operations including sharpening,
> > >>
> > >>blurring,
> > >>
> > >>>noise reduction, embossing and edge enhancement.
> > >>
> > >>Convolution can be done without fragment programs.  Unfortunately, few
> > >>consumer-level cards (any?) hardware-accelerate the convolution
> > >>operations defined by OpenGL.  They're typically done in software.
> > >>
> > >>-Brian
> > >>
> > >
> > >
> > >
> > > =====
> > > Jon Smirl
> > > jonsmirl at yahoo.com
> > >
> > >
> > >
> > >
> > > __________________________________
> > > Do you Yahoo!?
> > > Yahoo! Photos: High-quality 4x6 digital prints for 25
> > > http://photos.yahoo.com/ph/print_splash
> > >
> >
> >
>
>
> =====
> Jon Smirl
> jonsmirl at yahoo.com
>
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Photos: High-quality 4x6 digital prints for 25
> http://photos.yahoo.com/ph/print_splash
>
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://cairographics.org/cgi-bin/mailman/listinfo/cairo

- David

--
David Reveman <c99drn at cs.umu.se>