Doco and dist file updates.

Add fltk-config man page.


git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1911 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Michael R Sweet 2002-01-06 13:40:32 +00:00
parent de9f676353
commit 2d6a98560e
13 changed files with 500 additions and 249 deletions

View File

@ -1,5 +1,5 @@
#
# "$Id: Makefile.in,v 1.1.2.3 2002/01/01 15:11:28 easysw Exp $"
# "$Id: Makefile.in,v 1.1.2.4 2002/01/06 13:40:31 easysw Exp $"
#
# Header makefile for the Fast Light Tool Kit (FLTK).
#
@ -32,7 +32,9 @@ install:
-mkdir -p $(includedir)
rm -rf $(includedir)/FL
mkdir $(includedir)/FL
chmod 755 $(includedir)/FL
cp ../FL/*.[hHr] $(includedir)/FL
chmod 644 $(includedir)/FL/*.[hHr]
@HLINKS@ cd $(includedir)/FL;\
@HLINKS@ for file in *.H; do\
@HLINKS@ rm -f "`basename $$file H`h";\
@ -52,5 +54,5 @@ uninstall:
#
# End of "$Id: Makefile.in,v 1.1.2.3 2002/01/01 15:11:28 easysw Exp $".
# End of "$Id: Makefile.in,v 1.1.2.4 2002/01/06 13:40:31 easysw Exp $".
#

View File

@ -1,5 +1,5 @@
#
# "$Id: Makefile,v 1.12.2.6.2.9 2002/01/01 15:11:27 easysw Exp $"
# "$Id: Makefile,v 1.12.2.6.2.10 2002/01/06 13:40:27 easysw Exp $"
#
# Top-level makefile for the Fast Light Tool Kit (FLTK).
#
@ -26,7 +26,7 @@
include makeinclude
SHELL = /bin/sh
DIRS = src fluid test
DIRS = src fluid test documentation
all: makeinclude
@for dir in $(DIRS); do\
@ -35,17 +35,17 @@ all: makeinclude
done
install: makeinclude
@for dir in FL $(DIRS) documentation; do\
@for dir in FL $(DIRS); do\
echo "=== installing $$dir ===";\
(cd $$dir; $(MAKE) $(MFLAGS) install) || break;\
done
-mkdir -p $(bindir)
rm -f $(bindir)/fltk-config
-cp fltk-config $(bindir)
-chmod +x $(bindir)/fltk-config
-chmod 755 $(bindir)/fltk-config
uninstall: makeinclude
@for dir in FL $(DIRS) documentation; do\
@for dir in FL $(DIRS); do\
echo "=== uninstalling $$dir ===";\
(cd $$dir; $(MAKE) $(MFLAGS) uninstall) || break;\
done
@ -74,10 +74,18 @@ makeinclude: configure configh.in makeinclude.in
else \
./configure; \
fi
touch config.h
configure: configure.in
autoconf
portable-dist:
epm -v fltk
native-dist:
epm -v -f native fltk
#
# End of "$Id: Makefile,v 1.12.2.6.2.9 2002/01/01 15:11:27 easysw Exp $".
# End of "$Id: Makefile,v 1.12.2.6.2.10 2002/01/06 13:40:27 easysw Exp $".
#

View File

@ -1,7 +1,7 @@
dnl -*- sh -*-
dnl the "configure" script is made from this by running GNU "autoconf"
dnl
dnl "$Id: configure.in,v 1.33.2.31.2.45 2002/01/01 15:11:27 easysw Exp $"
dnl "$Id: configure.in,v 1.33.2.31.2.46 2002/01/06 13:40:27 easysw Exp $"
dnl
dnl Configuration script for the Fast Light Tool Kit (FLTK).
dnl
@ -368,6 +368,7 @@ case $uname in
GLLIB=
if test x$enable_gl != xno; then
AC_SEARCH_LIBS(dlopen, dl)
AC_CHECK_HEADER(GL/gl.h,
AC_CHECK_LIB(GL, glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB="-lGL", \
AC_CHECK_LIB(MesaGL,glXMakeCurrent, AC_DEFINE(HAVE_GL) GLLIB=" -lMesaGL",,\
@ -633,5 +634,5 @@ AC_OUTPUT(makeinclude fltk.list fltk-config FL/Makefile)
chmod +x fltk-config
dnl
dnl End of "$Id: configure.in,v 1.33.2.31.2.45 2002/01/01 15:11:27 easysw Exp $".
dnl End of "$Id: configure.in,v 1.33.2.31.2.46 2002/01/06 13:40:27 easysw Exp $".
dnl

View File

@ -1,5 +1,5 @@
#
# "$Id: Makefile,v 1.9.2.10.2.7 2002/01/01 15:11:28 easysw Exp $"
# "$Id: Makefile,v 1.9.2.10.2.8 2002/01/06 13:40:32 easysw Exp $"
#
# Documentation makefile for the Fast Light Tool Kit (FLTK).
#
@ -139,7 +139,7 @@ HTMLFILES = \
subclassing.html \
widgets.html
MANPAGES = fltk.$(CAT3EXT) fluid.$(CAT1EXT)
MANPAGES = fltk.$(CAT3EXT) fltk-config.$(CAT1EXT) fluid.$(CAT1EXT)
all: fltk.ps fltk.pdf $(MANPAGES)
@ -165,12 +165,16 @@ install: $(MANPAGES)
-mkdir -p $(mandir)/cat1
cp fluid.$(CAT1EXT) $(mandir)/cat1
chmod 644 $(mandir)/cat1/fluid.$(CAT1EXT)
cp fltk-config.$(CAT1EXT) $(mandir)/cat1
chmod 644 $(mandir)/cat1/fltk-config.$(CAT1EXT)
-mkdir -p $(mandir)/cat3
cp fltk.$(CAT3EXT) $(mandir)/cat3
chmod 644 $(mandir)/cat3/fltk.$(CAT3EXT)
-mkdir -p $(mandir)/man1
cp fluid.man $(mandir)/man1/fluid.1
chmod 644 $(mandir)/man1/fluid.1
cp fltk-config.man $(mandir)/man1/fltk-config.1
chmod 644 $(mandir)/man1/fltk-config.1
-mkdir -p $(mandir)/man3
cp fltk.man $(mandir)/man3/fltk.3
chmod 644 $(mandir)/man3/fltk.3
@ -203,5 +207,5 @@ fltk.pdf: $(HTMLFILES)
$(HTMLDOC) --verbose --batch fltk.book -f fltk.pdf
#
# End of "$Id: Makefile,v 1.9.2.10.2.7 2002/01/01 15:11:28 easysw Exp $".
# End of "$Id: Makefile,v 1.9.2.10.2.8 2002/01/06 13:40:32 easysw Exp $".
#

View File

@ -0,0 +1,83 @@
.TH fltk-config 1 "Fast Light Tool Kit" "6 January 2002"
.SH NAME
fltk-config \- script to get information about the installed version of fltk.
.sp
.SH SYNOPSIS
fltk-config [ --prefix
.I [=DIR]
] [ --exec-prefix
.I [=DIR]
] [ --version ] [ --api-version ] [ --use-gl ] [ --use-images ] [ --use-glut ]
[ --cflags ] [ --cxxflags ] [ --ldflags ] [ --ldstaticflags ] [ --libs ]
[ --compile
.I program.cxx
] [ --post
.I program
]
.SH DESCRIPTION
\fIfltk-config\fR is a utility script that can be used to get information
about the current version of FLTK that is installed on the system, what
compiler and linker options to use when building FLTK-based applications,
and to build simple FLTK applications.
.LP
The following options are supported:
.TP 5
--api-version
.br
Displays the current FLTK API version number, e.g. "1.1".
.TP 5
--cflags
.TP 5
--cxxflags
.br
Displays the C/C++ compiler options to use when compiling source
files that use FLTK.
.TP 5
--compile \fIprogram.cxx\fR
.br
Compiles the source file \fIprogram.cxx\fR into \fIprogram\fR.
This option implies "--post \fIprogram\fR".
.TP 5
--ldflags
.br
Displays the linker options to use when linking a FLTK
application.
.TP 5
--ldstaticflags
.br
Displays the linker options to use when linking a FLTK
application to the static FLTK libraries.
.TP 5
--libs
.br
Displays the full path to the FLTK library files, to be used for
dependency checking.
.TP 5
--post \fIprogram\fR
.br
Binds the default FLTK resource fork to a program under MacOS.
Does nothing on other operating systems.
.TP 5
--use-gl
.br
Enables OpenGL support.
.TP 5
--use-glut
.br
Enables GLUT support.
.TP 5
--use-images
.br
Enables image file support.
.TP 5
--version
.br
Displays the current FLTK version number, e.g. "1.1.0".
.SH SEE ALSO
fluid(1), fltk(3)
.br
FLTK Programming Manual
.br
FLTK Web Site, http://www.fltk.org/
.SH AUTHORS
Bill Spitzak and others.

View File

@ -8,8 +8,8 @@ editor.html
drawing.html
events.html
subclassing.html
fluid.html
opengl.html
fluid.html
widgets.html
Fl.html
Fl_Adjuster.html

View File

@ -1,22 +1,55 @@
.TH fltk 1 "Fast Light Tool Kit" "27 January 2001"
.TH fltk 3 "Fast Light Tool Kit" "6 January 2002"
.SH NAME
fltk \- the fast light Tool Kit
fltk \- the fast light tool kit
.sp
.SH SYNOPSIS
The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a LGPL'd
C++ graphical user interface toolkit for X (UNIX(R)), OpenGL(R), and
Microsoft(R) Windows(R) NT 4.0, 95, or 98. It was originally developed
by Mr. Bill Spitzak and is currently maintained by a small group of
developers across the world with a central repository in the US.
The Fast Light Tool Kit ("FLTK", pronounced "fulltick") is a
C++ graphical user interface toolkit for the X Window
System, MacOS(r), and Microsoft Windows(r) that supports OpenGL(r).
It was originally developed by Mr. Bill Spitzak and is currently
maintained by a small group of developers across the world with
a central repository in the US.
.LP
FLTK is provides under the terms of the GNU Library General Public License,
with the following exceptions:
.IP
1. Modifications to the FLTK configure script, config header
file, and makefiles by themselves to support a specific platform
do not constitute a modified or derivative work.
.IP
The authors do request that such modifications be
contributed to the FLTK project - send all
contributions to "fltk-bugs@fltk.org".
.IP
2. Widgets that are subclassed from FLTK widgets do not
constitute a derivative work.
.IP
3. Static linking of applications and widgets to the FLTK
library does not constitute a derivative work and does not
require the author to provide source code for the application or
widget, use the shared FLTK libraries, or link their
applications or widgets against a user-supplied version of FLTK.
.IP
If you link the application or widget to a modified version of
FLTK, then the changes to FLTK must be provided under the terms
of the LGPL in sections 1, 2, and 4.
.IP
4. You do not have to provide a copy of the FLTK license with
programs that are linked to the FLTK library, nor do you have to
identify the FLTK license in your program or documentation as
required by section 6 of the LGPL.
.IP
However, programs must still identify their use of FLTK. The
following example statement can be included in user
documentation to satisfy this requirement:
.IP
[program/widget] is based in part on the work of the FLTK
project (http://www.fltk.org).
.SH SEE ALSO
.nf
fltk-config(1), fluid(1)
.br
FLTK Programming Manual
file:/usr/local/share/doc/fltk/index.html
.PP
http://www.fltk.org
.PP
.BR fluid (1)
.SH AUTHOR
.br
FLTK Web Site, http://www.fltk.org/
.SH AUTHORS
Bill Spitzak and others.

View File

@ -1,5 +1,5 @@
<HTML><BODY>
<H1 ALIGN=RIGHT><A NAME=FLUID>8 - Programming with FLUID</A></H1>
<H1 ALIGN=RIGHT><A NAME=FLUID>9 - Programming with FLUID</A></H1>
This chapter shows how to use the Fast Light User-Interface Designer
(&quot;FLUID&quot;) to create your GUIs.

View File

@ -1,27 +1,32 @@
.TH fluid 1 "Fast Light Tool Kit" "27 January 2001"
.TH fluid 1 "Fast Light Tool Kit" "6 January 2002"
.SH NAME
fluid \- the fast light user-interface designer
.sp
.SH SYNOPSIS
.nf
fluid \fI[-c [-o code-filename -h header-filename]] [filename.fl]\fR
fluid [ -c [ -o
.I code-filename
-h
.I header-filename
] ] [
.I filename.fl
]
.fi
.SH DESCRIPTION
\fIfluid\fR is an interactive GUI designer for FLTK. When run with no arguments
or with a filename, \fIfluid\fR will display the GUI hierarchy and any windows
defined in the file. Functions, classes, windows, and GUI components can be
\fIfluid\fR is an interactive GUI designer for FLTK. When run
with no arguments or with a filename, \fIfluid\fR will display
the GUI hierarchy and any windows defined in the file.
Functions, classes, windows, and GUI components can be
manipulated as needed.
.LP
When used with the \fI-c\fR option, \fIfluid\fR will create the necessary C++
header and code files in the current directory. You can override the default
extensions, filenames, and directories using the \fI-o\fR and \fI-h\fR options.
When used with the \fI-c\fR option, \fIfluid\fR will create the
necessary C++ header and code files in the current directory.
You can override the default extensions, filenames, and
directories using the \fI-o\fR and \fI-h\fR options.
.SH SEE ALSO
.nf
FLTK Programming Manual, chapter 8.
file:/usr/local/share/doc/fltk/fluid.html
.PP
http://www.fltk.org
.PP
.BR fltk (3)
.SH AUTHOR
fltk-config(1), fltk(3)
.br
FLTK Programming Manual, Chapter 9
.br
FLTK Web Site, http://www.fltk.org/
.SH AUTHORS
Bill Spitzak and others.

View File

@ -1,35 +1,53 @@
<HTML><BODY>
<H1 ALIGN=RIGHT><A NAME=opengl>9 - Using OpenGL</A></H1>
This chapter discusses using FLTK for your OpenGL applications.
<HTML>
<BODY>
<H1 ALIGN=RIGHT><A NAME=opengl>8 - Using OpenGL</A></H1>
<P>This chapter discusses using FLTK for your OpenGL applications.
<H2>Using OpenGL in FLTK</H2>
The easiest way to make an OpenGL display is to subclass <A href=Fl_Gl_Window.html#Fl_Gl_Window>
<TT>Fl_Gl_Window</TT></A>. Your subclass must implement a <TT>draw()</TT>
method which uses OpenGL calls to draw the display. Your main program
should call <TT>redraw()</TT> when the display needs to change, and
<P>The easiest way to make an OpenGL display is to subclass <A
href="Fl_Gl_Window.html#Fl_Gl_Window"><TT>Fl_Gl_Window</TT></A>.
Your subclass must implement a <TT>draw()</TT> method which uses
OpenGL calls to draw the display. Your main program should call
<TT>redraw()</TT> when the display needs to change, and
(somewhat later) FLTK will call <TT>draw()</TT>.
<P>With a bit of care you can also use OpenGL to draw into normal FLTK
windows. This allows you to use Gouraud shading for
drawing your widgets. To do this you use the <A href=#gl_start><TT>
gl_start()</TT></A> and <A href=#gl_finish><TT>gl_finish()</TT></A>
functions around your OpenGL code. </P>
<P>You must include FLTK's <TT>&lt;FL/gl.h&gt;</TT> header file. It will
include the file <TT>&lt;GL/gl.h&gt;</TT>, define some extra drawing
functions provided by FLTK, and include the <TT>&lt;windows.h&gt;</TT> header
file needed by WIN32 applications. </P>
<P>With a bit of care you can also use OpenGL to draw into
normal FLTK windows. This allows you to use Gouraud shading for
drawing your widgets. To do this you use the <A
href="#gl_start"><TT>gl_start()</TT></A> and <A
href=#gl_finish><TT>gl_finish()</TT></A> functions around your
OpenGL code.</P>
<P>You must include FLTK's <TT>&lt;FL/gl.h&gt;</TT> header
file. It will include the file <TT>&lt;GL/gl.h&gt;</TT>, define
some extra drawing functions provided by FLTK, and include the
<TT>&lt;windows.h&gt;</TT> header file needed by WIN32
applications.</P>
<H2>Making a Subclass of Fl_Gl_Window</H2>
To make a subclass of Fl_Gl_Window, you must provide:
<P>To make a subclass of Fl_Gl_Window, you must provide:
<UL>
<LI>A class definition. </LI>
<LI>A <TT>draw()</TT> method. </LI>
<LI>A <TT>handle()</TT> method (if you need to receive input from the
user). </LI>
<LI>A class definition.</LI>
<LI>A <TT>draw()</TT> method.</LI>
<LI>A <TT>handle()</TT> method if you need to receive
input from the user.</LI>
</UL>
If your subclass provides static controls in the window, they must be
redrawn whenever the <tt>FL_DAMAGE_ALL</tt> bit is set in the value
returned by <tt>damage()</tt>. For double-buffered windows you will
need to surround the drawing code with the following code to make sure
that both buffers are redrawn:
<ul><pre>
<P>If your subclass provides static controls in the window, they
must be redrawn whenever the <tt>FL_DAMAGE_ALL</tt> bit is set
in the value returned by <tt>damage()</tt>. For double-buffered
windows you will need to surround the drawing code with the
following code to make sure that both buffers are redrawn:
<UL><PRE>
#ifndef MESA
glDrawBuffer(GL_FRONT_AND_BACK);
#endif // !MESA
@ -37,15 +55,29 @@ glDrawBuffer(GL_FRONT_AND_BACK);
#ifndef MESA
glDrawBuffer(GL_BACK);
#endif // !MESA
</pre></ul>
<B>Note:</B> If you are using the Mesa graphics library, the call to
<tt>glDrawBuffer()</tt> is not required and will slow down drawing
considerably. The preprocessor instructions shown above will optimize
your code based upon the graphics library used.
</PRE></UL>
<CENTER><TABLE WIDTH="80%" BORDER="1" CELLPADDING="5" CELLSPACING="0" BGCOLOR="#cccccc">
<TR>
<TD><B>Note:</B>
<P>If you are using the Mesa graphics library, the call
to <tt>glDrawBuffer()</tt> is not required and will slow
down drawing considerably. The preprocessor instructions
shown above will optimize your code based upon the
graphics library used.
</TD>
</TR>
</TABLE></CENTER>
<H3>Defining the Subclass</H3>
To define the subclass you just subclass the <TT>Fl_Gl_Window</TT> class:
<UL>
<PRE>
<P>To define the subclass you just subclass the
<TT>Fl_Gl_Window</TT> class:
<UL><PRE>
class MyWindow : public Fl_Gl_Window {
void draw();
int handle(int);
@ -54,16 +86,19 @@ public:
MyWindow(int X, int Y, int W, int H, const char *L)
: Fl_Gl_Window(X, Y, W, H, L) {}
};
</PRE>
</UL>
The <TT>draw()</TT> and <TT>handle()</TT> methods are described below.
Like any widget, you can include additional private and public data in
your class (such as scene graph information, etc.)
</PRE></UL>
<P>The <TT>draw()</TT> and <TT>handle()</TT> methods are
described below. Like any widget, you can include additional
private and public data in your class (such as scene graph
information, etc.)
<H3>The draw() Method</H3>
The <TT>draw()</TT> method is where you actually do your OpenGL
drawing:
<UL>
<PRE>
<P>The <TT>draw()</TT> method is where you actually do your
OpenGL drawing:
<UL><PRE>
void MyWindow::draw() {
if (!valid()) {
... set up projection, viewport, etc ...
@ -72,13 +107,14 @@ void MyWindow::draw() {
}
... draw ...
}
</PRE>
</UL>
</PRE></UL>
<H3>The handle() Method</H3>
The <TT>handle()</TT> method handles mouse and keyboard events for the
window:
<UL>
<PRE>
<P>The <TT>handle()</TT> method handles mouse and keyboard
events for the window:
<UL><PRE>
int MyWindow::handle(int event) {
switch(event) {
case FL_PUSH:
@ -108,16 +144,17 @@ int MyWindow::handle(int event) {
return Fl_Gl_Window::handle(event);
}
}
</PRE>
</UL>
When <TT>handle()</TT> is called, the OpenGL context is not set up!
If your display changes, you should call <TT>redraw()</TT> and let <TT>
draw()</TT> do the work. Don't call any OpenGL drawing functions from
inside <TT>handle()</TT>!
</PRE></UL>
<P>When <TT>handle()</TT> is called, the OpenGL context is not
set up! If your display changes, you should call
<TT>redraw()</TT> and let <TT>draw()</TT> do the work. Don't
call any OpenGL drawing functions from inside <TT>handle()</TT>!
<P>You can call <I>some</I> OpenGL stuff like hit detection and texture
loading functions by doing: </P>
<UL>
<PRE>
<UL><PRE>
case FL_PUSH:
make_current(); // make OpenGL context current
if (!valid()) {
@ -126,155 +163,205 @@ loading functions by doing: </P>
}
... ok to call NON-DRAWING OpenGL code here, such as hit
detection, loading textures, etc...
</PRE>
</UL>
Your main program can now create one of your windows by doing <TT>new
MyWindow(...)</TT>. You can also use <A href=FLUID.html#FLUID>FLUID</A>
by:
</PRE></UL>
<P>Your main program can now create one of your windows by doing
<TT>new MyWindow(...)</TT>. You can also use <A
href="FLUID.html#FLUID">FLUID</A> by:
<OL>
<LI>Putting your class definition in a <tt>MyWindow.H</tt> file. </LI>
<LI>Creating a <tt>Fl_Box</tt> widget in FLUID.</LI>
<LI>In the widget panel fill in the &quot;class&quot; field with <tt>MyWindow</tt>.
This will make FLUID produce constructors for your new class. </LI>
<LI>In the &quot;Extra Code&quot; field put <TT>#include &quot;MyWindow.H&quot;</TT>, so that
the FLUID output file will compile. </LI>
<LI>Putting your class definition in a
<tt>MyWindow.H</tt> file.</LI>
<LI>Creating a <tt>Fl_Box</tt> widget in FLUID.</LI>
<LI>In the widget panel fill in the &quot;class&quot;
field with <tt>MyWindow</tt>. This will make FLUID
produce constructors for your new class.</LI>
<LI>In the &quot;Extra Code&quot; field put <TT>#include
&quot;MyWindow.H&quot;</TT>, so that the FLUID output
file will compile.</LI>
</OL>
You must put <TT>glwindow-&gt;show()</TT> in your main code after calling <TT>
show()</TT> on the window containing the OpenGL window.
<P>You must put <TT>glwindow-&gt;show()</TT> in your main code
after calling <TT>show()</TT> on the window containing the
OpenGL window.
<H2>Using OpenGL in Normal FLTK Windows</H2>
You can put OpenGL code into an <A href="subclassing.html#draw"><TT>Fl_Widget::draw()</TT>
</A> method or into the code for a <A href=common.html#boxtypes>boxtype</A>
or other places with some care.
<P>Most importantly, before you show <I>any</I> windows (including those
that don't have OpenGL drawing) you <B>must</B> initialize FLTK so that it
knows it is going to use OpenGL. You may use any of the symbols
described for <A href=Fl_Gl_Window.html#Fl_Gl_Window.mode><TT>
Fl_Gl_Window::mode()</TT></A> to describe how you intend to use OpenGL: </P>
<UL>
<PRE>
<P>You can put OpenGL code into an <A
href="subclassing.html#draw"><TT>Fl_Widget::draw()</TT></A>
method or into the code for a <A
href="common.html#boxtypes">boxtype</A> or other places with some
care.
<P>Most importantly, before you show <I>any</I> windows,
including those that don't have OpenGL drawing, you <B>must</B>
initialize FLTK so that it knows it is going to use OpenGL. You
may use any of the symbols described for <A
href="Fl_Gl_Window.html#Fl_Gl_Window.mode"><TT>Fl_Gl_Window::mode()</TT></A>
to describe how you intend to use OpenGL:</P>
<UL><PRE>
Fl::gl_visual(FL_RGB);
</PRE>
</UL>
You can then put OpenGL drawing code anywhere you can draw normally by
surrounding it with:
<UL>
<PRE>
</PRE></UL>
<P>You can then put OpenGL drawing code anywhere you can draw
normally by surrounding it with:
<UL><PRE>
gl_start();
... put your OpenGL code here ...
gl_finish();
</PRE>
</UL>
<A name=gl_start><TT>gl_start()</TT></A> and <A name=gl_finish><TT>
gl_finish()</TT></A> set up an OpenGL context with an orthographic
projection so that 0,0 is the lower-left corner of the window and each
pixel is one unit. The current clipping is reproduced with OpenGL <TT>
glScissor()</TT> commands. These also synchronize the OpenGL graphics
stream with the drawing done by other X, WIN32, or FLTK functions.
<P>The same context is reused each time. If your code changes the
projection transformation or anything else you should use <TT>
glPushMatrix()</TT> and <TT>glPopMatrix()</TT> functions to put the
state back before calling <TT>gl_finish()</TT>. </P>
<P>You may want to use <TT>Fl_Window::current()-&gt;h()</TT> to get the
drawable height so that you can flip the Y coordinates. </P>
<P>Unfortunately, there are a bunch of limitations you must adhere to
for maximum portability: </P>
</PRE></UL>
<P><A name="gl_start"><TT>gl_start()</TT></A> and <A
name="gl_finish"><TT>gl_finish()</TT></A> set up an OpenGL
context with an orthographic projection so that 0,0 is the
lower-left corner of the window and each pixel is one unit. The
current clipping is reproduced with OpenGL <TT>glScissor()</TT>
commands. These functions also synchronize the OpenGL graphics stream
with the drawing done by other X, WIN32, or FLTK functions.
<P>The same context is reused each time. If your code changes
the projection transformation or anything else you should use
<TT>glPushMatrix()</TT> and <TT>glPopMatrix()</TT> functions to
put the state back before calling <TT>gl_finish()</TT>.</P>
<P>You may want to use <TT>Fl_Window::current()-&gt;h()</TT> to
get the drawable height so that you can flip the Y
coordinates.</P>
<P>Unfortunately, there are a bunch of limitations you must
adhere to for maximum portability: </P>
<UL>
<LI>You must choose a default visual with <A href=functions.html#gl_visual>
<TT>Fl::gl_visual()</TT></A>. </LI>
<LI>You cannot pass <TT>FL_DOUBLE</TT> to <TT>Fl::gl_visual()</TT>.</LI>
<LI>You cannot use <TT>Fl_Double_Window</TT> or <TT>Fl_Overlay_Window</TT>.</LI>
<LI>You must choose a default visual with <A
href="functions.html#gl_visual"><TT>Fl::gl_visual()</TT></A>.</LI>
<LI>You cannot pass <TT>FL_DOUBLE</TT> to
<TT>Fl::gl_visual()</TT>.</LI>
<LI>You cannot use <TT>Fl_Double_Window</TT> or
<TT>Fl_Overlay_Window</TT>.</LI>
</UL>
Do <I>not</I> call <TT>gl_start()</TT> or <TT>gl_finish()</TT> when
drawing into an <TT>Fl_Gl_Window</TT>!
<P>Do <I>not</I> call <TT>gl_start()</TT> or
<TT>gl_finish()</TT> when drawing into an <TT>Fl_Gl_Window</TT>!
<H2>OpenGL Drawing Functions</H2>
FLTK provides some useful OpenGL drawing functions. They can be
freely mixed with any OpenGL calls, and are defined by including <TT>
&lt;FL/gl.H&gt;</TT> (which you should include instead of the OpenGL header <TT>
&lt;GL/gl.h&gt;</TT>).
<P>FLTK provides some useful OpenGL drawing functions. They can
be freely mixed with any OpenGL calls, and are defined by
including <TT>&lt;FL/gl.H&gt;</TT> which you should include
instead of the OpenGL header <TT>&lt;GL/gl.h&gt;</TT>.
<H4>void gl_color(Fl_Color)</H4>
Set the current color to a FLTK color. <I>For color-index modes
it will use <TT>fl_xpixel(c)</TT>, which is only right if this window
uses the default colormap!</I>
<P>Sets the current OpenGL color to a FLTK color. <I>For
color-index modes it will use <TT>fl_xpixel(c)</TT>, which is
only right if this window uses the default colormap!</I>
<H4>void gl_rect(int x, int y, int w, int h)
<BR> void gl_rectf(int x, int y, int w, int h)</H4>
Outline or fill a rectangle with the current color. If
<A HREF="Fl_Gl_Window.html#Fl_Gl_Window.ortho"><TT>Fl_Gl_Window::ortho()</TT></A>
<BR>void gl_rectf(int x, int y, int w, int h)</H4>
<P>Outlines or fills a rectangle with the current color. If <A
HREF="Fl_Gl_Window.html#Fl_Gl_Window.ortho"><TT>Fl_Gl_Window::ortho()</TT></A>
has been called, then the rectangle will exactly fill the pixel
rectangle passed.
<H4>void gl_font(Fl_Font fontid, int size)</H4>
Set the current OpenGL font to the same font you get by calling <A href=drawing.html#fl_font>
<TT>fl_font()</TT></A>.
<H4>int gl_height()
<BR> int gl_descent()
<BR> float gl_width(const char *)
<BR> float gl_width(const char *, int n)
<BR> float gl_width(uchar)</H4>
Return information about the current OpenGL font.
<H4>void gl_draw(const char *)
<BR> void gl_draw(const char *, int n)</H4>
Draw a nul-terminated string or an array of <TT>n</TT> characters in
the current OpenGL font at the current raster position.
<H4>void gl_draw(const char *, int x, int y)
<BR> void gl_draw(const char *, int n, int x, int y)
<BR> void gl_draw(const char *, float x, float y)
<BR> void gl_draw(const char *, int n, float x, float y)</H4>
Draw a nul-terminated string or an array of <TT>n</TT> characters in
the current OpenGL font at the given position.
<H4>void gl_draw(const char *, int x, int y, int w, int h, Fl_Align)</H4>
Draw a string formatted into a box, with newlines and tabs expanded,
other control characters changed to ^X, and aligned with the edges or
center. Exactly the same output as <A href="drawing.html#text"><TT>fl_draw()</TT></A>
.
<H4>void gl_font(Fl_Font fontid, int size)</H4>
<P>Sets the current OpenGL font to the same font you get by
calling <A href="drawing.html#fl_font"><TT>fl_font()</TT></A>.
<H4>int gl_height()
<BR>int gl_descent()
<BR>float gl_width(const char *)
<BR>float gl_width(const char *, int n)
<BR>float gl_width(uchar)</H4>
<P>Returns information about the current OpenGL font.
<H4>void gl_draw(const char *)
<BR>void gl_draw(const char *, int n)</H4>
<P>Draws a nul-terminated string or an array of <TT>n</TT>
characters in the current OpenGL font at the current raster
position.
<H4>void gl_draw(const char *, int x, int y)
<BR>void gl_draw(const char *, int n, int x, int y)
<BR>void gl_draw(const char *, float x, float y)
<BR>void gl_draw(const char *, int n, float x, float y)</H4>
<P>Draws a nul-terminated string or an array of <TT>n</TT>
characters in the current OpenGL font at the given position.
<H4>void gl_draw(const char *, int x, int y, int w, int h, Fl_Align)</H4>
<P>Draws a string formatted into a box, with newlines and tabs
expanded, other control characters changed to ^X, and aligned
with the edges or center. Exactly the same output as <A
href="drawing.html#text"><TT>fl_draw()</TT></A>.
<h2>Speeding up OpenGL</h2>
Performance of Fl_Gl_Window may be improved on some types of OpenGL
implementations (in particular MESA or other software emulators) by
setting the <tt>GL_SWAP_TYPE</tt> environment variable. This variable
declares what is in the back buffer after you do a swapbuffers.
<P>Performance of Fl_Gl_Window may be improved on some types of
OpenGL implementations, in particular MESA and other software
emulators, by setting the <tt>GL_SWAP_TYPE</tt> environment
variable. This variable declares what is in the backbuffer after
you do a swapbuffers.
<ul>
<li><tt>setenv GL_SWAP_TYPE COPY</tt>
<li><tt>setenv GL_SWAP_TYPE COPY</tt>
<p>This indicates that the back buffer is copied to the front buffer,
and still contains it's old data. This is true of many hardware
implementations. Setting this will speed up emulation of
overlays, and widgets that can do partial update can take
advantage of this as damage() will not be cleared to -1.
<p>
<p>This indicates that the back buffer is copied to the
front buffer, and still contains it's old data. This is
true of many hardware implementations. Setting this
will speed up emulation of overlays, and widgets that
can do partial update can take advantage of this as
damage() will not be cleared to -1. <p>
<li><tt>setenv GL_SWAP_TYPE NODAMAGE</tt>
<li><tt>setenv GL_SWAP_TYPE NODAMAGE</tt>
<p>This indicates that nothing changes the back buffer except drawing
into it. This is true of MESA and Win32 software emulation and
perhaps some hardware emulation on systems with lots of memory.
<p>
<p>This indicates that nothing changes the back buffer
except drawing into it. This is true of MESA and Win32
software emulation and perhaps some hardware emulation
on systems with lots of memory. <p>
<li>All other values for <tt>GL_SWAP_TYPE</tt>, and not setting the variable,
cause fltk to assumme that the back buffer must be completely
redrawn after a swap.
<li>All other values for <tt>GL_SWAP_TYPE</tt>, and not
setting the variable, cause FLTK to assumme that the
back buffer must be completely redrawn after a swap.
</ul>
<p>This is easily tested by running the gl_overlay demo program and
seeing if the display is correct when you drag another window over
it or if you drag the window off the screen and back on. You have to
exit and run the program again for it to see any changes to the
environment variable.
<p>This is easily tested by running the <TT>gl_overlay</TT> demo
program and seeing if the display is correct when you drag
another window over it or if you drag the window off the screen
and back on. You have to exit and run the program again for it
to see any changes to the environment variable.
<H2>Using OpenGL Optimizer with FLTK</H2>
<A href=http://www.sgi.com/software/optimizer>OpenGL Optimizer</A> is a
scene graph toolkit for OpenGL available from Silicon Graphics for IRIX
and Microsoft Windows. Versions are in the works for Solaris and
HP-UX. It allows you to view large scenes without writing a lot of
OpenGL code.
<P><A href="http://www.sgi.com/software/optimizer">OpenGL
Optimizer</A> is a scene graph toolkit for OpenGL available from
Silicon Graphics for IRIX and Microsoft Windows. It allows you
to view large scenes without writing a lot of OpenGL code.
<H4>OptimizerWindow Class Definition</H4>
To use OpenGL Optimizer with FLTK you'll need to create a subclass of <TT>
Fl_Gl_Widget</TT> that includes several state variables:
<UL>
<PRE>
<P>To use OpenGL Optimizer with FLTK you'll need to create a
subclass of <TT>Fl_Gl_Widget</TT> that includes several state
variables:
<UL><PRE>
class OptimizerWindow : public Fl_Gl_Window {
csContext *context_; // Initialized to 0 and set by draw()...
csDrawAction *draw_action_; // Draw action...
@ -303,18 +390,20 @@ public:
}
}
};
</PRE>
</UL>
</PRE></UL>
<H4>The camera() Method</H4>
The <TT>camera()</TT> method sets the camera (projection and
<P>The <TT>camera()</TT> method sets the camera (projection and
viewpoint) to use when drawing the scene. The scene is redrawn after
this call.
<H4>The draw() Method</H4>
The <TT>draw()</TT> method performs the needed initialization and does
<P>The <TT>draw()</TT> method performs the needed initialization and does
the actual drawing:
<UL>
<PRE>
<UL><PRE>
void OptimizerWindow::draw() {
if (!context_) {
// This is the first time we've been asked to draw; create the
@ -353,7 +442,6 @@ void OptimizerWindow::draw() {
}
// Clear the window...
context_-&gt;clear(csContext::COLOR_CLEAR | csContext::DEPTH_CLEAR,
0.0f, // Red
0.0f, // Green
@ -361,13 +449,16 @@ void OptimizerWindow::draw() {
1.0f); // Alpha
// Then draw the scene (if any)...
if (scene_)
draw_action_-&gt;apply(scene_);
}
</PRE>
</UL>
</PRE></UL>
<H4>The scene() Method</H4>
The <TT>scene()</TT> method sets the scene to be drawn. The scene is
<P>The <TT>scene()</TT> method sets the scene to be drawn. The scene is
a collection of 3D objects in a <TT>csGroup</TT>. The scene is redrawn
after this call. </BODY></HTML>
after this call.
</BODY>
</HTML>

View File

@ -1,5 +1,5 @@
#
# "$Id: fltk.list.in,v 1.1.2.2 2002/01/01 15:11:27 easysw Exp $"
# "$Id: fltk.list.in,v 1.1.2.3 2002/01/06 13:40:28 easysw Exp $"
#
# EPM product list file for the Fast Light Tool Kit (FLTK).
#
@ -44,39 +44,57 @@ $mandir=@mandir@
$CAT1EXT=@CAT1EXT@
$CAT3EXT=@CAT3EXT@
$DSONAME=@DSONAME@
$GLDSONAME=@GLDSONAME@
$GLLIBNAME=@GLLIBNAME@
# FLUID
f 0555 root sys $bindir/fluid fluid/fluid
f 0555 root sys $bindir/fltk-config fltk-config
# Man pages
f 0444 root sys $mandir/cat1/fluid.$CAT1EXT documentation/fluid.$CAT3EXT
f 0444 root sys $mandir/cat1/fluid.$CAT1EXT documentation/fluid.$CAT1EXT
f 0444 root sys $mandir/cat1/fltk-config.$CAT1EXT documentation/fltk-config.$CAT1EXT
f 0444 root sys $mandir/cat3/fltk.$CAT3EXT documentation/fltk.$CAT3EXT
f 0444 root sys $mandir/man1/fluid.1 documentation/fluid.man
f 0444 root sys $mandir/man1/fltk-config.1 documentation/fltk-config.man
f 0444 root sys $mandir/man3/fltk.3 documentation/fltk.man
# Library files
f 0444 root sys $libdir/libfltk.a lib/libfltk.a
%if GLLIBNAME
f 0444 root sys $libdir/libfltk_gl.a lib/libfltk_gl.a
%endif
%if DSONAME
%system aix
f 0555 root sys $libdir/libfltk_s.a src/libfltk_s.a
f 0555 root sys $libdir/libfltk_gl_s.a src/libfltk_gl_s.a
%system hpux
f 0555 root sys $libdir/libfltk.sl.@FL_API_VERSION@ src/libfltk.sl.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk.sl libfltk.sl.@FL_API_VERSION@
f 0555 root sys $libdir/libfltk_gl.sl.@FL_API_VERSION@ src/libfltk_gl.sl.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk_gl.sl libfltk_gl.sl.@FL_API_VERSION@
%system darwin freebsd openbsd netbsd
f 0555 root sys $libdir/libfltk.dylib.@FL_API_VERSION@ src/libfltk.dylib.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk.dylib libfltk.dylib.@FL_API_VERSION@
f 0555 root sys $libdir/libfltk_gl.dylib.@FL_API_VERSION@ src/libfltk_gl.dylib.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk_gl.dylib libfltk_gl.dylib.@FL_API_VERSION@
%system !aix !darwin !freebsd !openbsd !netbsd !hpux
f 0555 root sys $libdir/libfltk.so.@FL_API_VERSION@ src/libfltk.so.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk.so libfltk.so.@FL_API_VERSION@
%system all
%endif
%if GLDSONAME
%system aix
f 0555 root sys $libdir/libfltk_gl_s.a src/libfltk_gl_s.a
%system hpux
f 0555 root sys $libdir/libfltk_gl.sl.@FL_API_VERSION@ src/libfltk_gl.sl.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk_gl.sl libfltk_gl.sl.@FL_API_VERSION@
%system darwin freebsd openbsd netbsd
f 0555 root sys $libdir/libfltk_gl.dylib.@FL_API_VERSION@ src/libfltk_gl.dylib.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk_gl.dylib libfltk_gl.dylib.@FL_API_VERSION@
%system !aix !darwin !freebsd !openbsd !netbsd !hpux
f 0555 root sys $libdir/libfltk_gl.so.@FL_API_VERSION@ src/libfltk_gl.so.@FL_API_VERSION@
l 0000 root sys $libdir/libfltk_gl.so libfltk_gl.so.@FL_API_VERSION@
%system all
%endif
# Header files
f 0444 root sys $includedir/FL/ FL/*.[hH]
@ -198,5 +216,5 @@ f 0444 root sys $datadir/doc/fltk/COPYING COPYING
f 0444 root sys $datadir/doc/fltk/CHANGES CHANGES
#
# End of "$Id: fltk.list.in,v 1.1.2.2 2002/01/01 15:11:27 easysw Exp $".
# End of "$Id: fltk.list.in,v 1.1.2.3 2002/01/06 13:40:28 easysw Exp $".
#

View File

@ -1,5 +1,5 @@
#
# "$Id: Makefile,v 1.10.2.6.2.9 2002/01/01 15:11:29 easysw Exp $"
# "$Id: Makefile,v 1.10.2.6.2.10 2002/01/06 13:40:32 easysw Exp $"
#
# FLUID makefile for the Fast Light Tool Kit (FLTK).
#
@ -69,7 +69,7 @@ install: $(PROGRAM)
echo "Installing FLUID..."
strip $(PROGRAM)
-mkdir -p $(bindir)
cp $(PROGRAM) $(bindir)/$(PROGRAM)
cp $(PROGRAM) $(bindir)
chmod 755 $(bindir)/$(PROGRAM)
uninstall:
@ -87,5 +87,5 @@ rebuild:
./fluid -c widget_panel.fl
#
# End of "$Id: Makefile,v 1.10.2.6.2.9 2002/01/01 15:11:29 easysw Exp $".
# End of "$Id: Makefile,v 1.10.2.6.2.10 2002/01/06 13:40:32 easysw Exp $".
#

View File

@ -1,5 +1,5 @@
#
# "$Id: Makefile,v 1.18.2.14.2.28 2002/01/01 15:11:31 easysw Exp $"
# "$Id: Makefile,v 1.18.2.14.2.29 2002/01/06 13:40:32 easysw Exp $"
#
# Library makefile for the Fast Light Tool Kit (FLTK).
#
@ -290,30 +290,36 @@ install: $(LIBNAME) $(DSONAME) $(GLLIBNAME) $(GLDSONAME)
if test x$(DSONAME) = xlibfltk.so.1.1; then\
rm -f $(libdir)/libfltk.so*;\
cp libfltk.so.1.1 $(libdir); \
chmod 755 $(libdir)/libfltk.so.1.1; \
ln -s libfltk.so.1.1 $(libdir)/libfltk.so;\
fi
if test x$(DSONAME) = xlibfltk.sl.1.1; then\
rm -f $(libdir)/libfltk.sl*;\
cp libfltk.sl.1.1 $(libdir); \
chmod 755 $(libdir)/libfltk.sl.1.1; \
ln -s libfltk.sl.1.1 $(libdir)/libfltk.sl;\
fi
if test x$(DSONAME) = xlibfltk_s.a; then\
rm -f $(libdir)/libfltk_s.a;\
cp libfltk_s.a $(libdir); \
chmod 755 $(libdir)/libfltk_s.a; \
fi
if test x$(GLDSONAME) = xlibfltk_gl.so.1.1; then\
rm -f $(libdir)/libfltk_gl.so*;\
cp libfltk_gl.so.1.1 $(libdir); \
chmod 755 $(libdir)/libfltk_gl.so.1.1; \
ln -s libfltk_gl.so.1.1 $(libdir)/libfltk_gl.so;\
fi
if test x$(GLDSONAME) = xlibfltk_gl.sl.1.1; then\
rm -f $(libdir)/libfltk_gl.sl*;\
cp libfltk_gl.sl.1.1 $(libdir); \
chmod 755 $(libdir)/libfltk_gl.sl.1.1; \
ln -s libfltk_gl.sl.1.1 $(libdir)/libfltk_gl.sl;\
fi
if test x$(GLDSONAME) = xlibfltk_gl_s.a; then\
rm -f $(libdir)/libfltk_gl_s.a;\
cp libfltk_gl_s.a $(libdir); \
chmod 755 $(libdir)/libfltk_gl.a; \
fi
@ -344,5 +350,5 @@ uninstall:
#
# End of "$Id: Makefile,v 1.18.2.14.2.28 2002/01/01 15:11:31 easysw Exp $".
# End of "$Id: Makefile,v 1.18.2.14.2.29 2002/01/06 13:40:32 easysw Exp $".
#