[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
> > 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.
> >
> > 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}
> > > \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}
> >
> > 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>
More information about the cairo
mailing list