Compare commits

..

890 Commits

Author SHA1 Message Date
Jouk Jansen
5e7591f94c Modified Files:
Mesa/src/descrip.mms

 Removed obsolete .obj files.

----------------------------------------------------------------------
2001-06-21 12:19:43 +00:00
Brian Paul
9e5e5e35a0 bumped version numbers 2001-06-20 19:52:11 +00:00
Brian Paul
4d99e5b2e7 also print GL_MAX_TEXTURE_SIZE 2001-06-20 19:12:30 +00:00
Brian Paul
f6df34ecbe updates for the 3.5 release 2001-06-20 19:02:48 +00:00
Brian Paul
d491f7bc14 removed beta from version string 2001-06-20 18:54:43 +00:00
Brian Paul
1fb583c50d added a few missing si-glu files 2001-06-19 21:49:06 +00:00
Brian Paul
6738d2ac78 add m4/ directory to tar file list 2001-06-19 19:51:23 +00:00
Brian Paul
293b786cee more updates to tar file lists for 3.5 2001-06-19 18:06:41 +00:00
Brian Paul
af197f5f8f fix glDraw/CopyPixels w/ fog bug. minor fog code clean-ups. 2001-06-18 23:55:18 +00:00
Brian Paul
aba535e765 tar file list updates for 3.5 2001-06-18 23:39:38 +00:00
Brian Paul
76f8274daf replaced -g with -O3 under linux-x86 2001-06-18 22:45:16 +00:00
Brian Paul
1b25898946 Consolidated source files. Since the re-org a number of source files
only had one or two functions left in them.
2001-06-18 17:26:08 +00:00
Brian Paul
24ae7c4c1f Added fi_type union typedef to glheader.h.
Replace various float/int casts with the fi_type union cast.
Fixes -fstrict-aliasing problems.
2001-06-15 15:22:07 +00:00
Brian Paul
e4276667da Enable GL_ARB_texture_compression for XMesa/GLX driver. Texture
compression isn't really implmented.  Just updated glTexImageXD()
to accept compressed internal format tokens.
2001-06-15 14:18:46 +00:00
Brian Paul
65c6ca9179 replace 255 with CHAN_MAX 2001-06-15 13:41:12 +00:00
Brian Paul
03d6c4c2db define both GL_ALL_CLIENT_ATTRIB_BITS and GL_CLIENT_ALL_ATTRIB_BITS (spec and SI don't agree) 2001-06-14 21:37:43 +00:00
Brian Paul
2db44ffe9d fixed a comment 2001-06-14 18:30:14 +00:00
Brian Paul
e9ba8e9214 disabled an assertion that doesn't seem to be needed 2001-06-13 14:57:55 +00:00
Brian Paul
cd1cefae91 Allow different max texture sizes for 1/2D, 3D and cube maps. 2001-06-13 14:56:14 +00:00
Brian Paul
cc22179cd8 fixed an assertion 2001-06-13 14:55:25 +00:00
Brian Paul
1178ed817f fixed a +/- typo in the Y coord setup 2001-06-13 14:53:52 +00:00
Brian Paul
688601911c moved glTexEnvi calls to better logical locations 2001-06-13 14:33:16 +00:00
Brian Paul
ae47121fa3 removed old, redundant CurrentTransformUnit state var 2001-06-12 22:08:41 +00:00
Brian Paul
1676268eab always feedback unit 0 texcoords 2001-06-12 22:06:53 +00:00
Brian Paul
baace9ffca don't compile glClientActiveTextureARB() into display lists, per the spec 2001-06-12 22:06:10 +00:00
Brian Paul
5ed63e0895 disable pixel transfer ops for glGetTexImage(), per the spec 2001-06-12 22:05:34 +00:00
Brian Paul
d3778fc129 added latest line and triangle bug fixes 2001-06-12 14:32:15 +00:00
Brian Paul
a2162e4228 Snap triangle x,y vertices to 1/16 subpixel positions.
Disabled tiny triangle threshold test.
2001-06-12 14:18:58 +00:00
Brian Paul
57b46ee6ea check for PB overflow in general_flat_rgba_line() 2001-06-11 19:44:01 +00:00
Brian Paul
e67d632d99 fixed minor display list bugs (#431517) 2001-06-11 19:17:11 +00:00
Jouk Jansen
5891a5dd55 Committing in .
Modified Files:
 	Mesa/src/macros.h

 Added
  #define COPY_4UBV()
 for non i386 machines
----------------------------------------------------------------------
2001-06-11 07:52:51 +00:00
Brian Paul
0ce9f39d23 add check for NULL malloc (from Stanford metacompilation analysis) 2001-06-08 20:10:55 +00:00
Brian Paul
5fd13173a1 added COPY_4UBV bug fix 2001-06-08 15:47:48 +00:00
Brian Paul
fabc30cfdd only copy GLubyte[4] as a GLuint on x86 2001-06-08 15:46:30 +00:00
Brian Paul
36822c50ad use unoptimized COPY_4UBV code on SPARC to avoid memory alignment problems (bug 430689) 2001-06-08 12:49:38 +00:00
davem69
4a497e649b Remove dependency on MESA sources from gl* files
in SPARC glapi optimizations by moving the icache
flush into the glapi_sparc.S file.

Brian, how is this?
2001-06-06 22:55:28 +00:00
Brian Paul
a5455bb374 test for X86_FXSR_MAGIC to be sure we have the _fpstate.magic field, needed for SSE signal handler 2001-06-06 18:12:35 +00:00
davem69
6f365c21d7 SPARC normal tnl optimizations. 2001-06-06 11:46:04 +00:00
davem69
775355a88a Sparc optimized GLAPI dispatch table. 2001-06-05 23:54:00 +00:00
davem69
0fab0702b0 Generate this now that I know which
gl.spec file to use.
2001-06-05 22:25:07 +00:00
Brian Paul
470a7b4874 minor clean-ups 2001-06-05 21:41:05 +00:00
Brian Paul
a1164746e7 filled in a bunch of the function template strings 2001-06-05 19:29:41 +00:00
davem69
ae14499101 Python script for making glapi_sparc.S
Unused until Brian shows me what gl.spec file he is
actually using for glapi_x86.S as all the ones I can
find seem out of sync.
2001-06-05 04:30:03 +00:00
davem69
e4f84b4936 Add USE_SPARC_ASM diagnostics to print_info. 2001-06-05 03:58:20 +00:00
Brian Paul
b20cea3902 removed some code in XMesaDestroyContext() which could lead to a segfault 2001-06-04 22:33:02 +00:00
Keith Whitwell
51b36396ae Adaptor code that lets tnl convert compiled (display list) cassettes back
to glVertex() type calls.  Allows driver-supplied tnl modules to avoid
fallback on glCallList inside begin/end pairs.

Still a little buggy...
2001-06-04 16:09:28 +00:00
Keith Whitwell
abd5134965 fixed some GL_POINTS probs 2001-06-04 15:34:31 +00:00
Keith Whitwell
bd58a63fe8 New files to provide glEvalPoint, glEvalCoord implementations for
driver tnl modules.
2001-06-04 13:57:35 +00:00
Keith Whitwell
2c2a956a3a Add api_arrayelt.c 2001-06-01 22:22:41 +00:00
Keith Whitwell
4b7d6f216b Working implementation of glArrayElt that decomposes to regular
glVertex/glNormal/etc calls.
2001-06-01 22:22:10 +00:00
Brian Paul
a7de8b6776 added minor comments 2001-06-01 16:29:18 +00:00
Brian Paul
8a039ffe0a applied Klaus Niederkrueger's CHAN_BITS==32 patch 2001-06-01 13:23:27 +00:00
Keith Whitwell
741c2e6434 apply David Miller's quad/backcolor patch 2001-06-01 12:07:15 +00:00
Brian Paul
4097590bc6 replaced #ifdef 0 with #if 0 2001-05-31 23:06:01 +00:00
Brian Paul
21f80baa35 swapped in/out arguments to interp_func. Improved comments 2001-05-31 23:03:05 +00:00
Brian Paul
e715c4a62d fixed s/w alpha channel bug 2001-05-31 19:25:25 +00:00
Brian Paul
987caacbeb GLubyte -> GLchan fix 2001-05-30 17:44:14 +00:00
Brian Paul
b5d3f2c521 added current raster fog coord and related code 2001-05-30 15:22:04 +00:00
Brian Paul
529e48bb0f added test for EXT_fog_coord 2001-05-30 14:43:17 +00:00
Brian Paul
47a3c67fa6 forgot to check-in yesterday 2001-05-30 14:39:47 +00:00
Keith Whitwell
71f2c401c5 rerun vertex stage on _MESA_NEW_NEED_EYE_COORDS 2001-05-30 10:01:41 +00:00
Brian Paul
84cac8441f more DRI libGL-related changes 2001-05-29 23:15:07 +00:00
Brian Paul
e4a01fd7e1 added math/m_debug_clip.c 2001-05-29 22:06:13 +00:00
Brian Paul
655ba5d992 removed some old DRI-isms 2001-05-29 19:48:46 +00:00
Brian Paul
ffa10b1c3b added new functions to GLX_functions[] 2001-05-29 16:23:26 +00:00
Brian Paul
645c1cef13 s/void */GLvoid */ 2001-05-29 15:44:06 +00:00
Brian Paul
736fcbec47 infrastructure for GL_ARB_multisample 2001-05-29 15:23:48 +00:00
Brian Paul
5ff1c613ea removed unused var 2001-05-29 15:23:15 +00:00
Brian Paul
b0bb4f6226 more work on XMesa / libGL integration 2001-05-25 21:51:02 +00:00
Brian Paul
b95884c53d added void to __GLXextFuncPtr 2001-05-25 15:44:06 +00:00
Brian Paul
2a3cc7d907 added missing GLX_SGIS_multisample tokens 2001-05-25 15:41:29 +00:00
Brian Paul
c98da4d99a changed #if OLD_VMS to #ifdef OLD_VMS 2001-05-25 15:40:29 +00:00
Brian Paul
12c1bee87f added some casts so that older glx.h can be used 2001-05-24 20:05:32 +00:00
Brian Paul
e203c9cdd8 change GLXContext and GLXFBConfig typedefs 2001-05-24 19:07:14 +00:00
Brian Paul
7cf50e137d Initial changes to allow Mesa and its fake GLX to be built into XFree86 libGL. 2001-05-24 19:06:21 +00:00
Brian Paul
bcebfe647f added GL_SGIS_generate_mipmap 2001-05-24 14:49:14 +00:00
Brian Paul
9228e17bb5 Finished GL_SGIS_generate_mipmap. Should be trivial to enable in DRI drivers. 2001-05-24 14:47:56 +00:00
Brian Paul
55ed11bac5 prototyping some new stuff 2001-05-24 00:00:57 +00:00
Brian Paul
874ae72495 added color table clamp bugfix 2001-05-23 23:55:52 +00:00
Brian Paul
f6e0e92beb fix bug 426657: need to clamp RGBA before color table lookups 2001-05-23 23:55:01 +00:00
Brian Paul
6f0ab1d868 import from 3.4 branch 2001-05-23 14:45:01 +00:00
Brian Paul
e34d63f087 added 3.4.2 changes, SPARC assembly 2001-05-23 14:44:12 +00:00
Brian Paul
04a6c35819 updated copyright 2001-05-23 14:42:47 +00:00
Brian Paul
7943b349d6 SPARC assembly optimizations from David Miller. 2001-05-23 14:27:03 +00:00
Brian Paul
8bd0693101 a little more work on GL_SGIS_generate_mipmap 2001-05-22 21:49:03 +00:00
Brian Paul
6b1e4ea5a5 fixed a number of multi-texture line bugs 2001-05-21 18:13:43 +00:00
Brian Paul
300e1056f5 added multitexture support 2001-05-21 17:45:25 +00:00
Brian Paul
3893e638e6 initial support for GL_SGIS_generate_mipmap extension 2001-05-21 16:41:03 +00:00
Gareth Hughes
e7e38a47a8 Initial commit of cliptest work. More to come shortly.
- Add debug, benchmark code.
 - Change linux/x86 FAST_MATH code to GCC/x86, and clear FP exceptions
   before exiting the fast math block.
 - Remove divide-by-zero test in x86 cliptest, and set clipped vertices
   to [0,0,0,1] instead of leaving them uninitialized.
2001-05-21 16:33:41 +00:00
Brian Paul
e9482d004f s/Height/height/ (Jeff Potter) 2001-05-21 14:46:33 +00:00
Brian Paul
d577248b89 added missing #undefs at end of file 2001-05-18 23:58:26 +00:00
Brian Paul
ca78774fc7 fixed a bad error string in ClientActiveTexture() 2001-05-18 22:10:49 +00:00
Brian Paul
569b5f32b9 fixed two GL error calls 2001-05-17 21:33:14 +00:00
Brian Paul
758a21f104 fixed Width/Height typo (Jeff Hartmann) 2001-05-17 20:18:45 +00:00
Brian Paul
1341f40dfe removed (void) index; statement 2001-05-17 14:49:38 +00:00
Keith Whitwell
5439ab0683 Comment out __FUNCTION__ usage. 2001-05-17 11:33:33 +00:00
Keith Whitwell
89dae684aa Fix order of decomposition of quad.
Remove 'swrast->_MultiTexEnabled' derived value.
2001-05-17 09:32:17 +00:00
Brian Paul
47cf442c11 use DEFARRAY, etc macros to work around 32k data limit on Macs (Tom Goon) 2001-05-16 20:27:12 +00:00
Brian Paul
441a4af435 generate INVALID_OPERATION if active texture != 0 in glMap[12][fd] 2001-05-16 17:06:28 +00:00
Keith Whitwell
dbd0dad580 fix for Jouk's glplanet bug 2001-05-16 09:28:32 +00:00
Brian Paul
c47a5327d3 added latest 3.5 changes 2001-05-15 21:31:36 +00:00
Brian Paul
5071b0812f Apply antialiasing coverage factor to alpha after texture application,
not before.
2001-05-15 21:30:26 +00:00
Brian Paul
a51f07d5a1 _mesa_pack_index_span() was broken for non-GLubyte datatypes 2001-05-15 21:21:08 +00:00
Brian Paul
9e48553ccc increase FOG_MAX to 10.0 to fix CI conformace failure 2001-05-15 20:52:51 +00:00
Brian Paul
80532da3bf minor clean-ups and more comments 2001-05-15 16:18:13 +00:00
Brian Paul
d57bcbed46 moved some misplaced compiler flags from CC assigment to CFLAGS 2001-05-15 15:27:43 +00:00
Brian Paul
0ab16e0134 New IFLOOR, ICEIL macros from Josh Vanderhoof. Fixes problems with
IFLOOR(1.99999)==2, for example.  Moved some macros from config.h to glheader.h
2001-05-14 23:11:12 +00:00
Keith Whitwell
649971518c typo 2001-05-14 16:34:24 +00:00
Brian Paul
f89035b8c4 changed MAX_HEIGHT to 2048 2001-05-14 16:25:18 +00:00
Brian Paul
9bf68ad963 New triangle rasterization code. Store per-span initial/step values in the
new triangle_span struct.  Much cleaner code and possibilities for future
optimizations.
2001-05-14 16:23:04 +00:00
Keith Whitwell
9cf779e7ac Fix for glean texgen test. 2001-05-14 09:00:51 +00:00
Keith Whitwell
b8d091d350 increase blocksize, remove dead opcodes 2001-05-14 08:57:36 +00:00
Gareth Hughes
53e4ebd4e3 Fix long-standing FP exception bug in _mesa_x86_cliptest_points4(). 2001-05-13 18:55:15 +00:00
Brian Paul
d29e9dfe93 fixed scissor clear problem (Michael Saunders) 2001-05-11 18:58:32 +00:00
Keith Whitwell
c6083e1dc4 Clean up _tnl_Begin/begin/hard_begin.
Fix some problems with draw_arrays, draw_elements.
2001-05-11 15:53:06 +00:00
Keith Whitwell
b8f9980999 fix a couple of small bugs 2001-05-11 15:47:02 +00:00
Keith Whitwell
5759f53934 made render path selection more flexible 2001-05-11 12:08:15 +00:00
Keith Whitwell
6d1055c967 Clean up translation of array elements, copying of elts in pure-elt
cassettes.  Fixes problem with isosurf/compiled-array-elt/strips.
2001-05-11 08:11:31 +00:00
Brian Paul
1a3e034b12 redo previous change in a more defensive way 2001-05-10 18:01:19 +00:00
Brian Paul
a5cc6155d4 added check for zero-length spans, avoids potential problems later 2001-05-10 17:55:54 +00:00
Brian Paul
dbed202744 fixed some divide by zero problems found w/ conform 2001-05-10 17:41:41 +00:00
Brian Paul
bd3d9b9d04 RGBA mode GL_NAND was wrong, fixed 16-bit GLchan support 2001-05-10 16:54:12 +00:00
Keith Whitwell
8b6a91a93f Set 'prefer_float_colors' true, now that tnl uses them natively.
Apply Jeff Epler's optimization to ci spans as well, remove old code.
2001-05-10 15:42:42 +00:00
Brian Paul
e296d7f0e4 applied Jeff & Keith's optimization to write_span_mono_pixmap() 2001-05-10 14:21:17 +00:00
Brian Paul
ad51be1ad4 fixed bad texture border test (sometimes caused a segfault) 2001-05-10 12:57:12 +00:00
Brian Paul
72deb502d7 minor clean-up 2001-05-10 12:33:28 +00:00
Keith Whitwell
bc69de5f21 Driver interface changes 2001-05-10 12:22:32 +00:00
Keith Whitwell
7954a0cafd Replace PipelineStart, PipelineFinish with RunPipeline. Clean up
_tnl_run_pipeline() a little.
2001-05-10 12:18:38 +00:00
Brian Paul
f2bcadec7c removed linux-386-opt-V2-glide config since FX_V2 symbol has no significance anymore 2001-05-10 03:00:58 +00:00
Brian Paul
f50bbbf855 check hardware type and use SETUP_SNAP if needed 2001-05-10 02:59:04 +00:00
Brian Paul
8acb7e9ea2 fixed loop bug in _mesa_ConvolutionFilter2D() 2001-05-09 22:24:22 +00:00
Brian Paul
20dc7e6945 minor clean-ups 2001-05-09 21:58:19 +00:00
Brian Paul
b9f2494bfc fixed FP underflow problem in kfact computation 2001-05-09 21:36:52 +00:00
Brian Paul
91979127ec fixed font/bitmap x-offset bug (Frank Warmerdam) 2001-05-09 20:45:00 +00:00
Brian Paul
7884aa151f fixed Y flip problem in read_rgba_pixels() (Frank Warmerdam) 2001-05-09 20:42:37 +00:00
Brian Paul
a41edc31ce check for tiny values in dir[] vector in calcposobjs(), prevents FP underflows later 2001-05-09 20:02:28 +00:00
Brian Paul
61cb081a35 missed a GLfixed->GLfloat fog change 2001-05-09 17:31:46 +00:00
Brian Paul
78023e9808 don't call _mesa_win_fog_coords_from_z() if fog is disabled, fixes FP exception 2001-05-09 17:21:51 +00:00
Brian Paul
7b9ff48d02 make sure rotation plugged into sin/cos lookup tables is always positive, fixes FP exception 2001-05-09 17:14:19 +00:00
Brian Paul
f2bfc66c5d fixed minor logic error in _mesa_StencilOp() 2001-05-09 16:34:09 +00:00
Keith Whitwell
cd487af90b remove debug code 2001-05-09 15:34:08 +00:00
Keith Whitwell
5f2230c7bf add missing translate functions 2001-05-09 14:12:34 +00:00
Keith Whitwell
bcf749e83a fix possible segfault on destroy context 2001-05-09 13:53:36 +00:00
Keith Whitwell
335634b807 Add FLUSH_CURRENT() calls to fix ordering problems (incl. hierarchical
dlist calls).
2001-05-09 12:48:21 +00:00
Keith Whitwell
e809379caf Use correct PV when clipping. 2001-05-09 12:25:40 +00:00
Keith Whitwell
0a716cdff8 Don't scale basealpha by 255 now it's a float. 2001-05-09 12:24:51 +00:00
Keith Whitwell
0ff31445f2 fix eval/colormaterial interaction 2001-05-09 11:06:30 +00:00
Brian Paul
bc920f08f5 set MRD to 1.0, fixes new Glean polygon offset failure 2001-05-07 16:32:51 +00:00
Brian Paul
dae62174c5 sample plane equations at fragment centers, not lower-left corner 2001-05-07 16:01:59 +00:00
Gareth Hughes
c5e907e501 Add new tests. 2001-05-07 14:16:19 +00:00
Gareth Hughes
95d0fe9c11 More cleanups. 2001-05-07 14:06:15 +00:00
Gareth Hughes
c329f0824c Initial new Win32 build support. More to come. 2001-05-07 13:58:00 +00:00
Brian Paul
43caa5c09a added info about driver status in 3.5 2001-05-04 17:42:53 +00:00
Brian Paul
a2519c8aed do FLUSH_VERTICES() in glGet*() functions to make occlusion testing work, perhaps needed for other cases, like GL_CURRENT_COLOR 2001-05-03 23:55:38 +00:00
Brian Paul
1b3528fe63 interpolate fog valus as floats, not fixed - fixed the swrast fog problem 2001-05-03 22:13:32 +00:00
Keith Whitwell
652a14a215 fix for moebius infinite loop 2001-05-03 16:49:27 +00:00
Brian Paul
a03463303d added assertion to catch infinite loop in _tnl_fixup_compiled_cassette() - might help Keith 2001-05-03 16:11:16 +00:00
Brian Paul
9e351d52ae minor clean-ups and warning fixes 2001-05-03 14:11:18 +00:00
Keith Whitwell
5028216c81 add disabled test to turn on vertex snapping. 2001-05-03 09:11:03 +00:00
Brian Paul
531ac77263 fixed vertex color problems 2001-05-02 23:08:35 +00:00
Brian Paul
fe5cb830b1 teximage updates. seems to work fine. 2001-05-02 21:04:08 +00:00
Brian Paul
104c9fde4e changed parameters to _mesa_rescale_teximage2d() 2001-05-02 21:02:38 +00:00
Brian Paul
70bb907286 minor XFree86 change 2001-05-01 22:01:11 +00:00
Keith Whitwell
adcc2ce92b float color changes 2001-05-01 19:17:15 +00:00
Brian Paul
7448e33768 applied Diego Santa Cruz's patch to triangulateRectCenter() 2001-05-01 14:56:00 +00:00
Keith Whitwell
5b976943ee removed debug 2001-05-01 13:15:28 +00:00
Keith Whitwell
f4a003c3ca fix from Jouk 2001-05-01 07:25:41 +00:00
Keith Whitwell
0e14d6d68e Lots more eval fixes 2001-04-30 21:08:51 +00:00
Keith Whitwell
16837e4219 Restore optimization for cva glArrayElement operation. 2001-04-30 09:04:00 +00:00
Brian Paul
ac4a41d198 sync with XFree86/DRI glcore.h, now identical 2001-04-29 19:31:45 +00:00
Keith Whitwell
3d49061bfc typo 2001-04-29 08:48:43 +00:00
Keith Whitwell
d92f615fe5 More HW_DIVIDE checks. 2001-04-29 08:44:30 +00:00
Keith Whitwell
1018a16f39 Allow drivers to provide a dynamic CHECK_HW_DIVIDE, to turn the divide off
according to a runtime test.
2001-04-29 08:41:09 +00:00
Keith Whitwell
f358988f2e fix color copying in twosided quads 2001-04-28 15:47:48 +00:00
Keith Whitwell
04a374bd05 add specialized interp for backcolor, edgeflags 2001-04-28 15:26:43 +00:00
Keith Whitwell
51c0c71811 Support for floating point color representation in tnl module. 2001-04-28 08:39:17 +00:00
Brian Paul
27b0758a94 added -display option 2001-04-27 21:19:13 +00:00
Brian Paul
1832f1cc86 changed xmesa_visual and xmesa_buffer structs to directly include GLvisual and GLframebuffer structs instead of pointers 2001-04-27 21:18:25 +00:00
Brian Paul
75978bd85e added _mesa_free_framebuffer_data() 2001-04-27 21:17:20 +00:00
Brian Paul
4dbd625eaf added 16-bit/channel rendering info 2001-04-26 22:33:34 +00:00
Brian Paul
785c3469f4 Added Makefile support for building libOSMesa16.so which is Mesa compiled
for 16-bit color channels, using the OSMesa driver.
2001-04-26 22:27:09 +00:00
Brian Paul
f20ea88f88 fixed mem leak in XFreeFontInfo() call 2001-04-26 19:28:02 +00:00
Brian Paul
11785d441d flush pipeline in WMesaSwapBuffers (Frank Warmerdam) 2001-04-26 19:14:35 +00:00
Keith Whitwell
908be619fd first pass at eval fixes 2001-04-26 14:53:48 +00:00
Keith Whitwell
8bce6a217a no-copy drawarrays for remaining non-fan primitives 2001-04-26 14:51:06 +00:00
Brian Paul
5a2f32b102 fixed a potential tex obj reference count problem involving multi-texture 2001-04-25 18:21:05 +00:00
Brian Paul
830bf65275 added -Wundef to linux-debug compiler flags 2001-04-25 15:52:15 +00:00
Brian Paul
73ccfa0e9a added ShowAlphaBuffer feature - 'a' key 2001-04-25 15:51:32 +00:00
Brian Paul
3bfd0e6f9f minor simplification in glGetTexLevelParameter 2001-04-25 15:41:22 +00:00
Brian Paul
31acab88f2 fixed typo in GL_ARB_transpose_matrix 2001-04-24 21:52:36 +00:00
Brian Paul
08b3ff10d3 added -i and -h options 2001-04-24 20:57:36 +00:00
Brian Paul
df4fd765d5 reordered a few blend enums 2001-04-24 16:12:48 +00:00
Brian Paul
8753bd8900 fixed problems with texel component size queries in glGetTexLevelParameter() 2001-04-24 16:11:35 +00:00
Brian Paul
691f58930b texture image code updates (not finished) 2001-04-24 03:02:23 +00:00
Brian Paul
29acfe5bd4 assign texImage->FetchTexel only if NULL 2001-04-24 03:00:17 +00:00
Brian Paul
ad608fe44d fixed two mistakes in texture combine code 2001-04-23 18:06:09 +00:00
Brian Paul
cb6ae7b16b compilation fixes - texturing isn't working at this time 2001-04-20 22:51:55 +00:00
Brian Paul
b570a180da Minor fixes for Win32 (Karl Schultz). 2001-04-20 19:21:41 +00:00
Brian Paul
0a31a67269 improved a glBindTexture error message 2001-04-20 17:16:52 +00:00
Brian Paul
1c85aa3332 Fixed a texture conversion problem: sometimes need to produce an intermediate
texture image in the base internal format between user->Mesa format
conversion.  See comments in texstore.c
2001-04-20 16:46:04 +00:00
Brian Paul
3518a7950f check-in of old updates 2001-04-20 02:34:12 +00:00
Brian Paul
e3a7cc1f9e removed glext.h hacks 2001-04-19 22:40:45 +00:00
Brian Paul
5ff4075a69 bug fixes, added missing state query cases 2001-04-19 22:39:50 +00:00
Brian Paul
4c00e30ef0 added GL_ARB_texture_env_combine GL_ARB_texture_env_dot3 GL_ARB_texture_border_clamp (temporary until SGI updates this file) 2001-04-19 22:34:05 +00:00
Brian Paul
54207dfde6 added SecondaryColor functions 2001-04-19 22:33:03 +00:00
Keith Whitwell
18acf6e6f1 Add more options, including '-10','-100' and '-1000' to limit nr of vertices. 2001-04-19 13:12:40 +00:00
Keith Whitwell
3004bf8fd7 Remove values from VB->importable_data as those arrays are removed
from the VB.
2001-04-19 12:23:07 +00:00
Keith Whitwell
2b7c042525 Fix striding of color material inputs. (Fixes glean colorLitPerf) 2001-04-19 12:22:09 +00:00
Brian Paul
72fc93302c minor optimization to dot3 computation 2001-04-17 22:08:28 +00:00
Brian Paul
bcfe3936a8 Fixed a number of minor GL_ARB_texture_env_combine/dot3 issues. 2001-04-17 21:25:53 +00:00
Brian Paul
15eddf38fb another fix in import_texcoord() 2001-04-17 21:08:32 +00:00
Brian Paul
a6c6fce7e8 replaced ac->count with ac->count - ac->start in import_texcoord(), as in the other import functions 2001-04-17 20:37:44 +00:00
Brian Paul
0d47d26a68 fixed mis-ordered args to _math_trans_4f() in _tnl_fill_immediate_drawarrays() 2001-04-17 17:01:33 +00:00
Brian Paul
62c24f315b return hex string for unknown tokens in _mesa_lookup_enum_by_nr() 2001-04-16 21:07:33 +00:00
Brian Paul
a2ade36eb1 added missing 'break' in _mesa_TexEnvfv(), better error messages 2001-04-16 21:06:54 +00:00
Brian Paul
bf478280eb added a work-around in _swrast_copy_texsubimage[123]d() to fix alpha channel problem in some DRI drivers (see comments) 2001-04-13 00:13:51 +00:00
Brian Paul
77ff5e038a b-key toggles between textures w/ and w/out border 2001-04-12 20:50:26 +00:00
Brian Paul
608889d18f Moved FRAC macro out of mmath.h into s_texture.c since it's only used there
and doesn't do what one might expect for negative values.
Reimplemented FRAC in terms of floor() to fix glitches seen in tests/texwrap.c.
Minor fix for problem with GL_CLAMP_TO_BORDER_ARB with GL_NEAREST sampling.
2001-04-12 15:18:07 +00:00
Brian Paul
93de8d3d86 Reimplemented glPopAttrib code for GL_TEXTURE_BIT. It now calls the
various texture API functions to restore state.  Before, the device
drivers weren't getting notified of important texture state changes.
2001-04-11 23:22:20 +00:00
Brian Paul
6ac852d45b fixed some divide by zero conformance problems 2001-04-10 15:46:51 +00:00
Brian Paul
33143303fe Added IROUND_POS() macro to mmath.h and use where appropriate. (Klaus Niederkrueger) 2001-04-10 15:25:45 +00:00
Alan Hourihane
148bd34079 remove a HAVE_ELTS that I'd stuck before. 2001-04-09 15:41:11 +00:00
Keith Whitwell
8a09c3a34b Perform fixup on material values 2001-04-09 14:47:34 +00:00
Alan Hourihane
c818d6cce5 fix use of projected vertices with notex vertices when DO_PTEX isn't set. 2001-04-09 10:16:01 +00:00
Alan Hourihane
30c75badd1 Add quad and quad_strip 2001-04-07 16:16:58 +00:00
Alan Hourihane
d3abe14a3a add FINISH function at end of each render_* function
fix typo.
2001-04-06 16:26:41 +00:00
Brian Paul
2aacac9a5d replaced IntFormat GL_BGRA with GL_RGBA, fixes problems calling _mesa_base_texture_format() 2001-04-04 23:56:33 +00:00
Brian Paul
01429fa46a GL_INTENSITY case was incorrect in extract_float_rgba() 2001-04-04 23:22:38 +00:00
Brian Paul
36f3712e85 fixed tmpTexelSize computation bug 2001-04-04 22:41:23 +00:00
Brian Paul
7d58f44f73 More texture image changes.
1. Added ctx->Driver.ChooseTextureFormat() function.  Examines user's
   internalFormat, format, type params and returns a gl_texture_format.
2. _mesa_store_teximage[123]d() calls ctx->Driver.ChooseTextureFormat(),
   allocates storage and transfers the image into the desired format.
3. _mesa_transfer_teximage() now takes a gl_texture_format to describe
   the destination format.  Any combination of input format/type and
   output gl_texture_format is accepted.  Uses optimized _mesa_convert_-
   texsubimage[123]d() functions when possible.
3. DRI driver's TexImage[123]D functions should be a lot simpler now.
2001-04-04 21:54:20 +00:00
Brian Paul
bb0830da9e Updated bug report info in _mesa_problem() 2001-04-04 13:38:51 +00:00
Jouk Jansen
bb95cf8934 Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Removed glapinoop

----------------------------------------------------------------------
2001-04-04 12:02:12 +00:00
Brian Paul
bc80faa7d9 another fix to clear_32bit_ximage() 2001-04-03 17:35:54 +00:00
Brian Paul
a9e2abdcfb include fxdrv.h before other headers (Ivan Kalvatchev) 2001-04-03 16:32:29 +00:00
Brian Paul
2e1ed6447a fixed wglUseFontBitmapsA() bugs (Frank Warmerdam) 2001-04-03 16:25:54 +00:00
Brian Paul
9d205e3542 clear pixel value wasn't byteswapped for scissored clears in clear_32bit_ximage() 2001-04-03 16:19:54 +00:00
Brian Paul
373aea11c8 applied David's patch for parsing display's server:screen string 2001-04-02 22:45:07 +00:00
Brian Paul
67f7554232 querying proxy texture image info was segfaulting because of NULL TexFormat pointer 2001-03-30 21:14:30 +00:00
Brian Paul
347b3f0daf add texture border width to x/y/zoffset in gl[Copy]TexSubImage*D() functions to accomodate negative offsets correctly 2001-03-30 21:12:15 +00:00
Brian Paul
e116d3b3e5 texImage->FetchTexel wasn't getting initialized in _mesa_CopyTexImage1/2D() 2001-03-30 15:31:44 +00:00
Brian Paul
7b0b2ec73a fixed compilation problems related to ctx->_Enabled removal 2001-03-30 15:16:12 +00:00
Gareth Hughes
5e23af22f7 Remove all traces of CULL_MASK_ACTIVE. 2001-03-30 14:44:43 +00:00
Keith Whitwell
afc5699b08 Fix calculation of fog coordinate in translate_vertex(). 2001-03-30 00:39:02 +00:00
Keith Whitwell
ed39a43b8c Remove ENABLE_* flags, ctx->_Enabled.
Replace with ctx->Texture._TexMatEnabled, ctx->Texture._TexGenEnabled.
2001-03-29 21:16:25 +00:00
Brian Paul
2780ed4b97 silence a compiler warning 2001-03-29 17:15:21 +00:00
Keith Whitwell
3d5815f463 Removed DD_STENCIL, DD_FEEDBACK, DD_SELECT.
Added some switchable debug to s_context.c
2001-03-29 17:08:26 +00:00
Brian Paul
ee403ff0ba Removed DD_Z_NEVER.
Replaced SEPERATE with SEPARATE.
Renumbered _NEW_ flags.
Removed _NEW_COLORTABLE.
2001-03-29 16:50:31 +00:00
Gareth Hughes
1b2fef5c28 Consolidation of asm code in 3.5 2001-03-29 06:46:15 +00:00
Gareth Hughes
8e48a232fe Make generation of matypes.h more transparent. 2001-03-29 03:41:39 +00:00
Gareth Hughes
c41edfb7c4 Add missing GEN_SOURCES definitions. 2001-03-29 03:14:48 +00:00
Brian Paul
3d9168025c compilation updates 2001-03-28 21:39:49 +00:00
Brian Paul
f1f288182e adjustment to coverage sample positions 2001-03-28 21:37:24 +00:00
Gareth Hughes
16a8e986ce - Restore texImage->IntFormat.
- Fix FX driver texture image conversions.
2001-03-28 21:36:31 +00:00
Brian Paul
d082417dae check for startX off the right edge of the window 2001-03-28 21:36:31 +00:00
Brian Paul
5bfaa2f12e use Image[i]->TexFormat to check for mipmap consistency 2001-03-28 21:31:54 +00:00
Brian Paul
38e3675d7d simplify test for specific texture formats 2001-03-28 21:31:24 +00:00
Gareth Hughes
0a59ca6cae New type system for assembly code. Asm files should now include
matypes.h, which includes assyntax.h and is generated from the core Mesa
header files.
2001-03-28 20:44:43 +00:00
Gareth Hughes
38f28665bf More texture format updates. Drivers now need only plug an appropriate
format into texImage->TexFormat, the rest is handled by core Mesa.
2001-03-28 20:40:51 +00:00
Gareth Hughes
53933fe9db More informative display of texture parameters. 2001-03-28 20:25:14 +00:00
Gareth Hughes
29cded2654 Delete libGLU.so* from ../lib before installing it. 2001-03-28 20:17:55 +00:00
Brian Paul
c7aeb8bf1f removed a debug message 2001-03-28 17:39:12 +00:00
Brian Paul
46560b94ae remove TEST_L and JZ instructions; always jump through the _glapi_Dispatch pointer 2001-03-28 17:22:11 +00:00
Brian Paul
3c257e187b New mechanism for thread-safe GL API dispatch. C-based dispatch is faster.
Folded glapinoop.c code into glapi.c.
Added code to glapitemp.h to fill in dispatch tables.
Updated Makefiles.
2001-03-28 17:19:58 +00:00
Brian Paul
fb8af6fc97 pass dst and src to CONVERT_TEXEL() macros to fix non-ANSI problems 2001-03-27 20:32:24 +00:00
Brian Paul
81e3955acf fixed RGBA/RGB typo 2001-03-27 20:26:37 +00:00
Brian Paul
197c526d63 texFormat was a random value in _mesa_store_teximage3d(), fix by undoing last changes 2001-03-27 20:26:10 +00:00
Gareth Hughes
19d1e43261 Updates required for DRI drivers on mesa-3-5-branch. 2001-03-27 19:18:02 +00:00
Brian Paul
a767bff929 added rules for readtex.c and readtex.h 2001-03-27 17:44:35 +00:00
Brian Paul
5479e93031 double buffer by default. if drawSmooth, use 50% alpha at top of polygon 2001-03-27 17:38:28 +00:00
Brian Paul
8afa9e593b set initial window pos 2001-03-27 17:35:26 +00:00
Brian Paul
0a355dc010 clean-up of tunnel demos 2001-03-27 17:30:51 +00:00
Brian Paul
25a5dc2ea7 moved shadow code into teapot.c 2001-03-27 17:08:20 +00:00
Brian Paul
06ed3f0a0a silence compiler warnings 2001-03-27 16:42:37 +00:00
Brian Paul
6dbb39025c removed DO_GEOMETRY 2001-03-26 23:36:51 +00:00
Brian Paul
5535aca5df change glTexImage3D() internalFormat to GLenum to match other OpenGLs 2001-03-26 20:02:38 +00:00
Brian Paul
0bc933a460 test texture wrap modes 2001-03-26 19:45:57 +00:00
Brian Paul
2bb04cad14 added GL_ARB_texture_border_clamp 2001-03-26 19:42:40 +00:00
Gareth Hughes
425fea1c34 - Minor cleanups of ctx->Driver.Current*Primitive usage.
- Remove unused gl_reduce_prim array.
2001-03-24 06:01:27 +00:00
Gareth Hughes
577f318e0e Fix ASSERT_OUTSIDE_SAVE_BEGIN_END() macro as well. 2001-03-24 05:23:46 +00:00
Brian Paul
63fae71713 added glxgears 2001-03-23 22:48:35 +00:00
Brian Paul
355da23785 gears using GLX instead of GLUT 2001-03-23 22:46:26 +00:00
Brian Paul
39557c3921 added silly mesa_hack() function and -b option 2001-03-23 21:41:44 +00:00
Brian Paul
6d62d7f321 minor tweak to visual setup for accum buffers 2001-03-23 21:37:05 +00:00
Brian Paul
4672b2d88c fixed Min/Max lod clamp bug 2001-03-23 18:53:26 +00:00
Gareth Hughes
b3678f1080 Some more minor cleanups of macros. 2001-03-23 06:07:31 +00:00
Gareth Hughes
8b7dfa8526 Remove compiler warnings about ASSERT_OUTSIDE_BEGIN_END() macro. 2001-03-23 06:01:03 +00:00
Gareth Hughes
7387394e59 Initial demo of GL_EXT_texture_filter_anisotropic extension. 2001-03-22 15:24:15 +00:00
Brian Paul
19bf744556 enable GL_ARB_texture_env_combine and GL_ARB_texture_env_dot3 in _mesa_enable_sw_extensions() 2001-03-22 14:42:24 +00:00
Jouk Jansen
3427e3547e Modified Files:
Mesa/si-glu/libnurbs/nurbtess/monoTriangulation.cc
 	Mesa/si-glu/libnurbs/nurbtess/sampleCompRight.cc

 gluos.h included in order to bypass compiler warnings on unreachable code on
 VMS systems.
----------------------------------------------------------------------
2001-03-22 11:41:40 +00:00
Jouk Jansen
df1e73af7a Modified Files:
Mesa/descrip.mms Mesa/mms-config Mesa/demos/descrip.mms
 	Mesa/si-glu/include/gluos.h
 	Mesa/si-glu/libnurbs/internals/bufpool.h
 	Mesa/si-glu/libnurbs/internals/mysetjmp.h
 	Mesa/src-glut/descrip.mms
 Added Files:
 	Mesa/si-glu/descrip.mms Mesa/si-glu/mesaglu.opt

 changes needed to compile SI-GLU on VMS.

----------------------------------------------------------------------
2001-03-22 11:38:36 +00:00
Gareth Hughes
ea1bfcc80a Remove formats that no longer exist. 2001-03-22 06:26:18 +00:00
Gareth Hughes
2f177e2906 Minor updates. 2001-03-22 06:25:23 +00:00
Gareth Hughes
7acad72a1a Fix texture format enum values (Brian Paul). 2001-03-22 06:23:56 +00:00
Brian Paul
8806915c3a added GL_ARB_texture_env_dot3 enums 2001-03-22 04:57:09 +00:00
Brian Paul
a13df148df minor comment update 2001-03-22 04:56:50 +00:00
Brian Paul
1a59875367 added GL_ARB_texture_env_combine, GL_ARB_texture_env_dot3 2001-03-22 04:54:58 +00:00
Brian Paul
e9313a64c1 clean-up in _swrast_choose_triangle() 2001-03-22 04:54:08 +00:00
Gareth Hughes
d2733fa196 Add PolygonOffset driver callback. 2001-03-22 00:36:27 +00:00
Brian Paul
8ac1f97e9e added teximage rescaling code. untested at this point 2001-03-21 18:23:39 +00:00
pesco
6f3178a3be * src/swrast_setup/ss_tritmp.h (quad): Changed name of this function to
quadfunc.
* common_rules.make: Use tabs for command indentation.
2001-03-21 17:11:32 +00:00
Brian Paul
1639518b64 minor updates for 3.5 2001-03-21 16:47:33 +00:00
Brian Paul
935d5e5daa use new texture conversion code, still have to do image rescaling 2001-03-21 16:47:19 +00:00
Brian Paul
0299ad7532 renamed some vars, added a bunch of comments 2001-03-21 16:44:08 +00:00
Brian Paul
c8cfbf7c19 minor re-org in sample_depth_texture() 2001-03-21 16:04:49 +00:00
Brian Paul
2743def830 sync'd with the latest changes in XFree86 (cygwin stuff) 2001-03-21 16:00:17 +00:00
Gareth Hughes
fa6be6e77a Fix compilation with GLU 1.1 2001-03-21 02:47:32 +00:00
Gareth Hughes
f5328c534d Make ESC quit. 2001-03-21 02:44:36 +00:00
Gareth Hughes
16cdc6ab12 Revert back to new tessellator, check version string to be sure we're
running with a valid GLU library.
2001-03-21 02:43:14 +00:00
Brian Paul
56671022f9 depth images were broken by latest teximage changes, this fixes the problem 2001-03-21 01:08:37 +00:00
Gareth Hughes
b5f0de18b9 Make COPY_FLOAT available to a wider audience. 2001-03-20 18:35:23 +00:00
Gareth Hughes
23f48064b8 More updates. Radeon tnl module still disabled by default. 2001-03-20 18:33:41 +00:00
Brian Paul
815ad714b4 fixes to make old GLU code compile with new GLU 1.3 header 2001-03-20 17:56:10 +00:00
Jouk Jansen
f3e3178751 Committing in .
Modified Files:
 	Mesa/src/descrip.mms Mesa/src/texutil_tmp.h

 -Updated VMS makefile
 -__FUNCTION__ is not a defined on VMS (and maybe other systems) For VMS
  __FUNCTION__ is defined to  in texutil_tmp.h



----------------------------------------------------------------------
2001-03-20 10:18:13 +00:00
pesco
68af9a0773 * common_rules.make: Created to hold the conditional build rule
override. All Makefile.am's updated.
2001-03-20 00:33:18 +00:00
Brian Paul
4e856077b7 fix for gl_ztrick bug (Ove Kaaven) 2001-03-19 22:45:52 +00:00
pesco
6507d9249d * si-glu/libnurbs/: Undid move of glimports.h, mystdio.h, mystdlib.h. 2001-03-19 17:52:02 +00:00
Alan Hourihane
e18599a6c3 fix glxinfo to query current display. 2001-03-19 13:58:45 +00:00
Alan Hourihane
92eac1c765 fix cast 2001-03-19 13:27:15 +00:00
Keith Whitwell
b048d8e084 New files 2001-03-19 02:28:59 +00:00
Keith Whitwell
7098924599 Split driver struct into swrast/tnl/core components. 2001-03-19 02:25:35 +00:00
pesco
d9bf6ccce9 * gen_srclists.sh: Use getopt to parse the command line. Added command
line option -n (dry run) and -h. Directory list can be specified on the
command line.
Added command line options -p and -l. Some other tweaks.

* si-glu/libnurbs/glimports.h, si-glu/libnurbs/mystdio.h,
si-glu/libnurbs/mystdlib.h: Pulled these out of
si-glu/libnurbs/interface and si-glu/libnurbs/internals. All include
paths updated.
2001-03-18 15:40:45 +00:00
Gareth Hughes
371ef9c058 Add missing header file include. 2001-03-18 14:06:25 +00:00
Gareth Hughes
ad7ce73609 Remove #endif. 2001-03-18 14:05:32 +00:00
Gareth Hughes
264c6fd177 Make assertions take new GLchan formats into account. 2001-03-18 13:40:58 +00:00
Gareth Hughes
3fa4bd008c Fix error message. 2001-03-18 13:37:18 +00:00
Gareth Hughes
7ea33579e7 Fix header info. 2001-03-18 13:34:24 +00:00
Gareth Hughes
6b406bf09d Remove old code, fix a few comments. 2001-03-18 13:31:52 +00:00
pesco
2f9757f344 Forgot to add newly created files. 2001-03-18 13:06:19 +00:00
Gareth Hughes
2c3d34c905 - Port 3.4 texture utils, texture format work to 3.5 (including new
FetchTexel routines).
- Initial hooks for GL_EXT_texture_filter_anisotropic.
2001-03-18 08:53:49 +00:00
Keith Whitwell
6e550baa0a Fix lineloops. 2001-03-18 00:46:04 +00:00
Keith Whitwell
bcc513ebf5 Fix cut&paste bug exposed by clipbug.c demo. 2001-03-17 18:04:54 +00:00
Keith Whitwell
47489c0721 Remove dead #define.
Add case for triangles culled front and back -- not handled by the
culling code inside swrast triangle routines.
2001-03-17 17:43:04 +00:00
Keith Whitwell
c6e2d29cde Revert earlier changes protecting against null VB->TexCoordPtr[x]. Do
this a better way via check_tex_sizes().
2001-03-17 17:31:42 +00:00
Brian Paul
eb11fa73ec added SI GLU info 2001-03-17 00:47:19 +00:00
Brian Paul
47cbbcc1b6 updated for SGI SI GLU 2001-03-17 00:45:01 +00:00
Brian Paul
1bb327ebdb SGI SI GLU 1.3 header 2001-03-17 00:29:47 +00:00
Brian Paul
84c8964116 added CCFLAGS and CPLUSPLUS definitions 2001-03-17 00:27:04 +00:00
Brian Paul
77cc447b96 SGI SI GLU library 2001-03-17 00:25:40 +00:00
Brian Paul
24fab8e250 removed ARB_texture_env_add bool flag, use EXT_texture_env_add flag 2001-03-15 18:21:01 +00:00
Brian Paul
b082abc28f use IROUND() instead of (int) cast (Klaus Niederkrueger) 2001-03-15 16:45:30 +00:00
Gareth Hughes
c6742cedee Fix typo. 2001-03-14 08:51:09 +00:00
Gareth Hughes
3709db0e17 Initial templates for immediate mode fastpaths, or custom tnl modules.
Completely untested and incomplete.  More to follow.
2001-03-13 17:39:56 +00:00
Gareth Hughes
3df1e04b10 Nope, -ansi spoils that... 2001-03-12 02:24:53 +00:00
Gareth Hughes
2a938d3ab7 Undo -D_POSIX_SOURCE change, fix the way the katmai support test is
done.
2001-03-12 02:13:39 +00:00
Gareth Hughes
79b2d13ae2 - Add -D_POSIX_SOURCE -D_POSIX_C_SOURCE=199309L to linux builds, we've
been using it with the DRI for long enough without any issues and we
  need it to include the katmai functions.
- Make katmai assembly work with the debug tests.
- A few general cleanups.
2001-03-12 02:02:36 +00:00
Gareth Hughes
d4eb665c60 Add missing header file. 2001-03-12 01:32:20 +00:00
Gareth Hughes
467037de22 Add missing header file include. 2001-03-12 01:06:44 +00:00
Gareth Hughes
22144ab755 Consistent copyright info (version number, date) across all files. 2001-03-12 00:48:37 +00:00
Gareth Hughes
57ffddba98 Minor cleanups. 2001-03-11 23:55:19 +00:00
Gareth Hughes
de6a2e0d19 Clean up install, restore for exec vtxfmts. 2001-03-11 23:49:20 +00:00
Gareth Hughes
d8aa0269cd Support for swappable tnl modules.
Core Mesa provides a neutral tnl module that verifies the currently
module before installing the tnl function pointers in a lazy fashion.
It also records which tnl functions have been swapped out, and only
restores these when tnl modules themselves are swapped.

Fallback strategies:

Drivers set a bitmask of dangerous stage changes.  When such a state
change occurs, the driver should restore the neutral tnl module via
_mesa_restore_exec_vtxfmt().  The neutral tnl module will call
_mesa_update_state(), followed by ctx->Driver.ValidateTnlModule() if the
validation bitmask matches the new state bitmask.  The driver should
call _tnl_wakeup_exec() if it can no longer handle the current state,
which will revert to the default tnl module.  In this case, previous
vertices should be replayed as required (depending on the current
primitive) after the new tnl module is installed.

If the driver uses chooser functions for any part of the tnl module,
these should generally be reinstalled as part of the fallback to the
neutral tnl module.  For example, if the lighting state changes, a
driver might fall back to the neutral tnl module, verify that the
current lighting state can be handled, and use the chooser function to
pick the most efficient implementation of the current lighting state.

It is up to the drivers to detect and handle fallback cases caused by
tnl function calls themselves (such as glTexCoord4f* if the current tnl
module can't handle projected textures, for example).
2001-03-11 18:49:11 +00:00
Gareth Hughes
b1b4036656 Add a couple of missing functions. 2001-03-10 02:50:42 +00:00
Gareth Hughes
53e4bf9afd More generic vtxfmt template, useful for creating neutral tnl module as
well as fallback functions for driver tnl modules.
2001-03-09 16:08:13 +00:00
Brian Paul
ca8c6a0337 fixed RBGA ifdef typo 2001-03-08 22:27:41 +00:00
Brian Paul
95e02a210e do fog interpolation if INTERP_FOG is defined, not when INTERP_Z is defined 2001-03-08 17:33:33 +00:00
Brian Paul
896e8bd2d7 processed by indent to improve readability 2001-03-08 17:17:28 +00:00
Brian Paul
417ed16a88 changed bincoeff var to GLfloat, fixes bug introduced in previous check-in 2001-03-08 17:15:01 +00:00
Brian Paul
a28fa45ab7 test 16-bit/channel rendering 2001-03-08 15:24:18 +00:00
Brian Paul
01915e90e6 More g++ warning fixes. Fixes for CHAN_BITS==16, it seems to work. 2001-03-08 15:23:46 +00:00
Brian Paul
eac57f009e added an assertion in the init code, just to be safe 2001-03-07 23:22:08 +00:00
Jon Taylor
9cb9401e87 Misc build fixes 2001-03-07 20:42:14 +00:00
Gareth Hughes
4da75f6d91 Add missing copy in _mesa_noop_Color4fv(). 2001-03-07 18:16:40 +00:00
Brian Paul
b51b0a847d fixed a bunch of g++ warnings/errors. Compiling with g++ can help find lots of potential problems 2001-03-07 05:06:11 +00:00
Brian Paul
249aebdd35 _MinMagThresh[] should be GLfloat 2001-03-07 04:50:49 +00:00
Brian Paul
90ea526114 added some casts in the 16-bit GLchan macros, just to be safe 2001-03-07 03:20:38 +00:00
Brian Paul
be3d539dac added Driver.BlendColor() function, for completeness 2001-03-07 00:21:32 +00:00
Brian Paul
ac859a4cbd fixed segfaults when tex unit 1 enabled, but not unit 0 (conform) 2001-03-05 22:40:10 +00:00
Brian Paul
75280a2c74 added missing ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH() macros 2001-03-05 22:18:23 +00:00
Keith Whitwell
89700a4abd DO_POINT renamed DO_POINTS 2001-03-05 19:54:03 +00:00
Keith Whitwell
0ceb82b838 Changes for ffb 2001-03-05 18:52:18 +00:00
Keith Whitwell
3db5374e66 Fix typo 2001-03-05 18:04:38 +00:00
Brian Paul
d395251b35 GL_EXT_secondary_color test 2001-03-05 17:50:35 +00:00
Brian Paul
d49081302a GL_EXT_fog_coord test 2001-03-05 17:31:57 +00:00
Keith Whitwell
3c646597cf Add missing cases for viewport transform. Remove INVALIDATE_STORED_VERTICS
macro
2001-03-05 16:41:47 +00:00
Brian Paul
a11c0bcf97 replaced gl_test_os_katmai*() with _mesa_test_os_katmai*() 2001-03-05 15:57:59 +00:00
Brian Paul
865322f931 more clean-ups 2001-03-03 21:11:32 +00:00
Brian Paul
d62269757b used indent to clean-up the code 2001-03-03 20:59:06 +00:00
Brian Paul
188f2949ea more namespace clean-ups 2001-03-03 20:56:59 +00:00
Brian Paul
0883634178 lots of gl_*() to _mesa_*() namespace clean-up 2001-03-03 20:33:27 +00:00
Brian Paul
19bbfc6263 optimized lambda calculation (Klaus Niederkrueger) 2001-03-03 00:37:27 +00:00
Brian Paul
85312e6db1 changed AlphaFunc() ref from GLclampf to GLchan 2001-03-03 00:12:47 +00:00
Brian Paul
eb2b63877a fixed _mesa_getenv() weirdness 2001-03-02 16:01:22 +00:00
Brian Paul
6a2d72ecff fixed mistake in alpha buffer clear test 2001-03-01 18:30:47 +00:00
Keith Whitwell
6da33b1249 Uncomment some defaults. 2001-03-01 18:18:05 +00:00
Keith Whitwell
0fe593a71e Bugfixes for vertex format, templates 2001-03-01 17:40:14 +00:00
Brian Paul
d89c87ac40 added s/w alpha buffer clearing 2001-03-01 00:05:05 +00:00
Brian Paul
b4203c1c49 removed some bogus error checks 2001-02-28 19:31:39 +00:00
Brian Paul
0221e4d6c8 Now there's four possible display modes:
1. normal, shadowed rendering
2. display depth texture image
3. display depth texture mapped onto scene
4. render grayscale scene where gray level = distance from light source
2001-02-28 18:41:50 +00:00
Keith Whitwell
feb555af03 Templates are in working order. 2001-02-28 18:19:27 +00:00
Brian Paul
be3602da41 GLvisual inside GLframebuffer is no longer a pointer, copy the struct instead.
Added context/drawbuffer visual config sanity checking in _mesa_make_current2().
Added some 'const' keywords.
2001-02-28 00:27:48 +00:00
Brian Paul
6a9851d72d fixed glitches in error checking of imaging extensions 2001-02-27 22:33:59 +00:00
Brian Paul
bf8b5f99a1 signal _NEW_TEXTURE in all teximage functions 2001-02-27 22:16:27 +00:00
Brian Paul
2eb801cda2 added fog coord clamping 2001-02-27 21:58:59 +00:00
Brian Paul
8753b1c397 colortable w/ size=0 wasn't handled correctly 2001-02-27 16:42:01 +00:00
Keith Whitwell
bed4c5bf58 Initialize Line._Width 2001-02-27 16:14:35 +00:00
Brian Paul
18c516655f more tweaks 2001-02-27 00:13:25 +00:00
Brian Paul
01a5dd879b minor extension tweaks 2001-02-27 00:05:27 +00:00
Brian Paul
6975540db2 Disable most extensions by default. Drivers should enable them as needed.
Renamed gl_*() functions as _mesa_*().
2001-02-26 23:58:12 +00:00
Brian Paul
806e20f463 fixed extension checking in _mesa_BlendEquation() 2001-02-26 22:07:03 +00:00
Brian Paul
511378b05d added filtering option, compute shadow tex size from window size 2001-02-26 18:26:32 +00:00
Brian Paul
eb198d2702 tiny change to a gl_problem() call 2001-02-26 18:25:25 +00:00
Brian Paul
1f57563b9d added a cube map error check 2001-02-26 18:24:55 +00:00
Brian Paul
30038ecaa2 bilinear sampling of depth textures 2001-02-26 18:24:37 +00:00
Keith Whitwell
feca368c29 Template work 2001-02-24 18:25:52 +00:00
Brian Paul
0d04827f6d another fix in _mesa_stencil_and_ztest_pixels() for hardware fallbacks 2001-02-23 23:14:11 +00:00
Brian Paul
74b775e14d fixed bug in _mesa_stencil_and_ztest_pixels() found w/ DRI mga driver 2001-02-23 20:08:29 +00:00
Brian Paul
dab76b4dc5 improvements to regions_overlap() function 2001-02-22 17:59:24 +00:00
Brian Paul
ea83bacf9c removed some bogus code 2001-02-22 17:50:13 +00:00
Jouk Jansen
69c283e061 Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 old files removed/ new files included in VMS makefile
----------------------------------------------------------------------
2001-02-22 08:52:30 +00:00
Brian Paul
abe094e4a1 fixed GL_LUMINANCE_ALPHA bug in fetch_2d_texel() 2001-02-21 16:02:27 +00:00
Keith Whitwell
4eebc90a17 Added GLvector4chan type, removed lots of CHAN_TYPE ifdefs. 2001-02-20 18:28:52 +00:00
Brian Paul
8bbc71f2eb more 3.5 updates 2001-02-20 17:08:55 +00:00
Brian Paul
0a0595f2d3 added extension #ifdef/#endifs 2001-02-20 17:06:35 +00:00
Brian Paul
03ca5eb58f added shadow extensions 2001-02-20 17:05:04 +00:00
Brian Paul
d6c3f73fb4 added shadowtex 2001-02-20 17:04:52 +00:00
Brian Paul
1399d7650d demo of GL_SGIX_shadow 2001-02-20 16:43:50 +00:00
Brian Paul
c499ce31ba Implemented GL_SGIX_shadow and GL_SGIX_shadow_texture.
Added some const keywords in the s/w texturing code.
2001-02-20 16:42:25 +00:00
Brian Paul
0c75c4c417 plug in fallback teximage DD functions 2001-02-19 20:14:57 +00:00
Brian Paul
2aadbf41df Updated Driver.CopyTexImage[12]D and Driver.CopyTexSubImage[123]D functions
so they work like the other teximage functions.  Added fallback routines to
texstore.c for drivers to use.
2001-02-19 20:01:41 +00:00
Brian Paul
aaf5a9bb08 added a bunch of extensions (Ray Tice) 2001-02-19 18:28:59 +00:00
Brian Paul
e75d2424e5 Changed FetchTexel() function pointer arguments.
Implemented glGetTexImage(format=GL_COLOR_INDEX).
Changed _mesa_unpack_depth_span() args.
Minor changes/clean-ups in mtypes.h.
Histogram counter component sizes were wrong.
2001-02-17 18:41:01 +00:00
Brian Paul
8f9a594ac8 added MESA_GLX_FORCE_CI env var (useful for conformance testing) 2001-02-17 00:17:31 +00:00
Brian Paul
f7e1dfeaef Work in glGetTexImage() to return GL_COLOR_INDEX images.
Prototype code for GL_SGIX_depth_texture / more flexible teximage code.
2001-02-17 00:15:39 +00:00
Brian Paul
23e8d46e07 moved depth/index/stencil span packing into image.c 2001-02-16 23:29:14 +00:00
Brian Paul
8a42f6b359 added n-key to toggle nice fog, other minor clean-ups 2001-02-16 21:48:16 +00:00
Keith Whitwell
4539e9195d Fix state bitmasks for invalidating line,tri,point functions. (won't fix
the fog problem, I don't think)
2001-02-16 18:56:46 +00:00
Keith Whitwell
46b0988c67 Allow swrast to cope (fairly) cleanly with GL_SEPERATE_SPECULAR when
texturing is not enabled, and without requiring the two colors be
added externally.

As a part of this, collapsed the decomposition of quads into triangles
inside swrast to be hardwired into _swrast_Quad; removed s_quads.[ch].

Removed checks on texture state from t_vb_light.c, which was previously
required by swrast.

Moved the t_dd_ templates to a new directory.
2001-02-16 18:14:41 +00:00
Keith Whitwell
2448fc7dee Fixed conform problems with recent material tracking change.
Remove redundant 'update_materials' stage.
Fix conform segfault with seperate specular colors in mustpass.c.  These
tests still fail, however.
2001-02-16 00:35:34 +00:00
Brian Paul
86ca15ece7 minor scissor optimizations (Klaus Niederkrueger) 2001-02-15 22:59:01 +00:00
Keith Whitwell
c6b2a92613 Fix propogation of material values in VB's that don't reach the lighting
stage.  (Materials now treated more like colors, etc.).

Continue whipping the dd templates into shape.

Remove old NormalLength code; may come back as a driver helper, but not
useful for, eg. hardware t&l drivers.
2001-02-15 01:33:52 +00:00
Brian Paul
4e52e192b2 fixed a CI-mode spot light conformance failure, but still not clear why 2001-02-14 23:00:42 +00:00
Brian Paul
4de3ded28a updated with 3.4 and 3.4.1 entries 2001-02-14 22:59:50 +00:00
Brian Paul
4e492363f0 removed a misplaced _mesa_logicop_ci_span() call 2001-02-14 22:40:21 +00:00
Brian Paul
b5fb4fd55b fixed a CI mode segfault, minor clean-ups 2001-02-13 23:59:34 +00:00
Brian Paul
88c5ceb650 fixed an assertion 2001-02-13 23:58:38 +00:00
Brian Paul
c3a4dbfbd6 fixed a few CI mode span bugs and a dither bug 2001-02-13 23:57:48 +00:00
Brian Paul
45323646bd fixed bug in gl_validate_all_lighting_tables() found with CI mode conformance tests 2001-02-13 23:55:30 +00:00
Brian Paul
10686f42c9 removed bogus assertions 2001-02-13 23:54:12 +00:00
Brian Paul
dc866313af gl_error clean-ups 2001-02-13 23:51:34 +00:00
Brian Paul
8f28f4850b fixed GL_SET bug 2001-02-13 23:50:25 +00:00
Brian Paul
479fa1db1d added debug assertions to be sure drivers initialize all required function pointers 2001-02-12 19:04:30 +00:00
Brian Paul
a81b3532f7 added ctx->Driver.ResetLineStipple, misc clean-up 2001-02-12 18:32:26 +00:00
Brian Paul
3c84ab90f2 fixed RGB over/underflow bug for tiny triangles (bug 128969) 2001-02-12 17:02:00 +00:00
Brian Paul
15bf1cd129 minor updates to sync w/ XFree86 changes 2001-02-09 23:39:02 +00:00
Brian Paul
ccc8b9239c minor changes from XFree86 (dawes) 2001-02-09 23:23:43 +00:00
Jouk Jansen
18ce0f1254 Committing in .
Modified Files:
 	Mesa/src-glut/glut_event.c Mesa/src-glut/glut_get.c
 	Mesa/src-glut/glut_init.c Mesa/src-glut/glutint.h

 Patch for compilation on very old VMS (version 6.2 and earlier)

----------------------------------------------------------------------
2001-02-09 12:19:17 +00:00
Brian Paul
9db3f95ace fixed bytesPerValue bug in OSMesaGetDepthBuffer() 2001-02-08 23:52:29 +00:00
Brian Paul
1f12a07380 fixed bugs in _mesa_clear_depth_buffer(), bug #131366 2001-02-08 15:57:01 +00:00
Brian Paul
1ceda0f84f GLchan fixes 2001-02-07 19:02:23 +00:00
Brian Paul
9a0b12ab00 fixed texel indexing bug in _mesa_GetTexImage() 2001-02-07 18:59:45 +00:00
Brian Paul
b4736f5e17 added divide by zero checks 2001-02-07 18:44:55 +00:00
Brian Paul
5c55aa4e61 fixed divide by zero problem 2001-02-07 18:36:52 +00:00
Brian Paul
a1f1586bcb added some code for proxy texture tests 2001-02-07 16:27:41 +00:00
Keith Whitwell
b8e1c70ec1 Correctly calculate size for disabled texcoord arrays. 2001-02-07 16:00:58 +00:00
Jouk Jansen
fb1565bcdd VMS compile update 2001-02-07 09:15:41 +00:00
Brian Paul
6830123a4c check texture texel type before using optimized sampling functions 2001-02-07 03:55:31 +00:00
Brian Paul
43bc364af4 remove unused functions 2001-02-07 03:53:07 +00:00
Brian Paul
03d967abb5 new texture image routines work now 2001-02-07 03:30:07 +00:00
Brian Paul
6628bc9cff made some changes to the initialization of gl_texture_image fields 2001-02-07 03:27:41 +00:00
Gareth Hughes
dde2da64b5 Force texture download every time to handle lazy texture downloads. 2001-02-07 03:04:58 +00:00
Brian Paul
78ad878b66 updated texture image handling - STILL UNTESTED 2001-02-06 23:35:49 +00:00
Brian Paul
f378ab825c added a number of debugging tests to be sure drivers handle texture images correctly 2001-02-06 23:35:26 +00:00
Brian Paul
8e39ad2cd6 Overhaul of texture image handling.
1. gl_texture_image struct's Data pointer points to images in driver's format.
2. Added FetchTexel() function pointer to struct gl_texture_image.
3. Changed Driver Tex[Sub]Image functions, return void now.
4. Texture storage/fetch code in new texstore.c file.
5. Removed texture.[ch] - functions moved to state.c

Note: FX driver updates not finished yet.
2001-02-06 21:42:48 +00:00
Brian Paul
16461f7c53 added _mesa_adjust_image_for_convolution() 2001-02-06 17:22:16 +00:00
Keith Whitwell
d1baa05439 Use a lookup table to compute exponents in tnl fogging code. Slightly
clean up the shine table lookup macro.
2001-02-06 04:06:34 +00:00
Brian Paul
8fd9f1748d misc updates to match latest device driver changes 2001-02-06 00:03:47 +00:00
Brian Paul
228748bc49 added mesa_profile extern decl 2001-02-05 19:17:31 +00:00
Brian Paul
d8bc5a9eba replaced frustrum with frustum 2001-02-05 18:48:52 +00:00
Jouk Jansen
db7a3318aa Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Updated VMS make-files

----------------------------------------------------------------------
2001-02-05 08:56:12 +00:00
Keith Whitwell
71270195d5 rework to correctly respect _ac_import_range() 2001-02-04 00:47:28 +00:00
Keith Whitwell
6e9f8b7cdb Fast no-copy drawarrays for large tristrips 2001-02-04 00:44:36 +00:00
Gareth Hughes
fe69cb4b9b Some more work on interal debugging, timing routines for things that
will have implementations in assembly code.  To come: texture image
conversions, more of internal T&L pipeline and so on.
2001-02-03 08:41:03 +00:00
Jouk Jansen
6d689e8a69 Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Updates VMS compile-support
----------------------------------------------------------------------
2001-01-31 14:10:16 +00:00
Brian Paul
eeb861df0b make gluPerspective() call glMultMatrix() instead of glFrustum() to get correct error semantics 2001-01-30 18:08:51 +00:00
Brian Paul
d68b699291 added packed types to glGetMinMax and glGetHistogram error checks 2001-01-30 17:46:34 +00:00
Brian Paul
e56cc3970f fixed half pixel offset bug in aa point code 2001-01-30 16:38:20 +00:00
Gareth Hughes
f2515fa83e Upgrade to (patched) version 7 of glext.h 2001-01-30 15:02:34 +00:00
Brian Paul
426628c374 last segment of AA stippled lines wasn't drawn 2001-01-29 23:38:41 +00:00
Brian Paul
326f9ddd8a fixed inverted Y coord for dithering in write_span_DITHER_5R6G5B_ximage() 2001-01-29 22:40:23 +00:00
Brian Paul
ba70e59e82 GL_SHADE_MODEL wasn't popped correctly 2001-01-29 22:15:44 +00:00
Brian Paul
961b7cad05 removed unused vars 2001-01-29 22:10:37 +00:00
Brian Paul
184a575a00 only compute separate specular if texturing really enabled 2001-01-29 22:10:24 +00:00
Brian Paul
407b487017 fixed computation of _MultiTextureEnabled (again) 2001-01-29 21:47:13 +00:00
Keith Whitwell
d98fdad3bf Update implementations of Driver.Clear(). 2001-01-29 20:56:32 +00:00
Keith Whitwell
5c1e7fa6ee Removed knowledge of swrast Clear/Bitmap/Accum/Draw/Read/CopyPixels
functions from core mesa -- if drivers need these fallbacks they
must now call them themselves.

Introduced hooks for clip-vertex-interpolation and the rendering
of clipped lines and polygons.  Allows drivers to interpolate
their hardware-format vertices directly.  Used in dri drivers to
replace fastpath code.

Slight optimizations to pipeline build/run routines.
2001-01-29 20:47:39 +00:00
Brian Paul
4b90e68ac6 optimized lambda computation (Klaus Niederkrueger) 2001-01-29 18:51:25 +00:00
Brian Paul
e5dfe384ad updates to the trace extension 2001-01-29 16:18:37 +00:00
Brian Paul
d6dd0fceb1 updated spec 2001-01-29 16:10:18 +00:00
Brian Paul
f3da389ae0 redo _mesa_PopAttrib() to call Mesa state functions so derived state is updated 2001-01-24 15:27:10 +00:00
Brian Paul
ab36c9aa1c removed the unused/broken GL_PGI_misc_hints extension 2001-01-24 04:56:19 +00:00
Brian Paul
9533fd1842 minor tweaks 2001-01-24 00:07:01 +00:00
Brian Paul
74b493a5e6 Lots of GLchan datatype changes.
Added GLvector4us datatype in math/m_vector.[ch]
Added _math_trans_4us() in math/m_translate.[ch]
Choose GLvector4ub, GLvector4us, GLvector4f at compile time based on CHAN_BITS.
Made Driver.ClearColor() and Driver.ClearIndex() optional driver functions.
Changed args to Driver.ClearColor(), updated drivers.
Reordered files in Makefile.X11
2001-01-24 00:04:58 +00:00
Brian Paul
125fddc31d added DestroyHeads() to test clean-up code 2001-01-23 23:45:05 +00:00
Brian Paul
6140a8c65f minor tweaks 2001-01-23 23:44:39 +00:00
Brian Paul
4e3e9ac8fb added support for 4 texture units 2001-01-23 23:44:15 +00:00
Brian Paul
2b2e62154d space-bar = pause animation 2001-01-23 23:43:53 +00:00
Brian Paul
b6bcae5698 Replaced struct gl_visual with struct __GLcontextModesRec from glcore.h.
Replace "RGBAMode" with "rgbMode", etc.
Other minor clean-ups.
2001-01-23 23:39:36 +00:00
Brian Paul
ab0c886a6c added dispatch override mechanism, used by trace extension 2001-01-23 23:35:47 +00:00
Brian Paul
f2718b0966 fixed glTexSubImage error check bug #128775 2001-01-23 23:35:23 +00:00
Brian Paul
39927e60ea test check-in 2001-01-23 23:29:15 +00:00
Keith Whitwell
c0bcd2ca99 Fixes for performance bug on compiled array element paths. 2001-01-17 02:49:38 +00:00
Brian Paul
547bbcabff updated ctx->Driver functions for s/w setup 2001-01-16 21:16:56 +00:00
Brian Paul
d292b83d1a fixed a small error in import_color(), include m_translate.h 2001-01-16 15:25:11 +00:00
Keith Whitwell
d43a5943d8 Fix several conformance problems. Hack solution to line stipple problem. 2001-01-16 05:29:42 +00:00
Brian Paul
230928ad5f removed unneeded TXTR_COORD macros (Stephen Tse) 2001-01-15 20:04:28 +00:00
Keith Whitwell
3fd01320f1 Fixed conform feedback and drawelements tests.
Use correct pv when rasterizing unfilled polys.
2001-01-14 06:14:21 +00:00
Keith Whitwell
ab8b047ae5 fix conform dlist test 2001-01-13 18:28:19 +00:00
Keith Whitwell
8415686ea2 Use correct pv in swrast lines routines 2001-01-13 07:13:28 +00:00
Keith Whitwell
321f67c472 Fix crash in book/stencil.
Allow drivers to perform the perspective divide themselves.  Assembly
to do cliptesting without perspective divide for size-4 vectors.
2001-01-13 05:48:25 +00:00
Keith Whitwell
a087c7421b Resync with new XFree version of this file 2001-01-13 05:47:06 +00:00
Brian Paul
3f9ee180a8 initialize Driver.RenderPrimitive to _swsetup_RenderPrimNoop 2001-01-12 22:34:27 +00:00
Brian Paul
e448d6cf0c Added PointSize and PointParametersfv to dd interface, for completeness.
Clean-up and updated comments in dd.h file.
2001-01-09 00:02:55 +00:00
Keith Whitwell
ce656b6a0a Fixed 'IRound' to 'IROUND' in mmath.h
Fixed fallback path for drawarrays/_tnl_hard_begin.

Removed disabled debug code.
2001-01-08 21:55:59 +00:00
Keith Whitwell
bfa023921c Still need 'DD_TRI_CULL_FRONT_BACK' 2001-01-08 17:42:13 +00:00
Keith Whitwell
d7fc376de8 Add call to Driver.RenderPrimitive() 2001-01-08 17:41:15 +00:00
Keith Whitwell
7a1f3a37a1 revert XMesaCreateContext changes 2001-01-08 04:55:22 +00:00
Keith Whitwell
b980b2eeb6 Add a 'RenderPrimitive' callback to t_vb_render.c. Helps out drivers
that used to require a 'ReducedPrimitiveChange' callback.

Various compilation fixes for XFree86.

Reverted to the older version of glcore.h used internally in XFree86, and
moved it to 'Mesa/include/GL/internal/glcore.h', for compatibility with
XFree86.
2001-01-08 04:09:41 +00:00
Keith Whitwell
44d8de433e Bring the FX driver into line with core mesa changes. 2001-01-08 04:06:56 +00:00
Keith Whitwell
e9bf776711 Modify X11 driver and fake glx to store a GLcontext
(ie a 'struct __GLcontextRec *') instead of an 'XMesaContext'.

This is to fix conflicts in XFree86 where both the indirect XMesaContext
and the GLcontext were calling themselves __GLcontextRec's.
2001-01-08 04:06:20 +00:00
Keith Whitwell
78477947de Moved glcore.h to a location prefixed by 'GL/internal', for compatibility
with XFree86 and the SI code there.
2001-01-08 03:56:53 +00:00
Gareth Hughes
ba8f6172bd Implementation of GL_EXT_texture_env_dot3. 2001-01-06 22:46:13 +00:00
Gareth Hughes
c851646050 Add GL_POINTS as a primitive, including with CVA DrawElements. Useful
for testing non-triangle primitives on hardware driver fastpaths.
2001-01-06 20:38:03 +00:00
Brian Paul
8cbc573eae Fixed bug in MinMagThresh computation.
Renamed gl_texture_pixels() to _swrast_texture_fragments()
2001-01-05 21:28:31 +00:00
Jouk Jansen
2d7e25c9ff Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 VMS makefile update
----------------------------------------------------------------------
2001-01-05 08:09:46 +00:00
Keith Whitwell
f4b02d1a26 various compilation/warning fixes 2001-01-05 05:31:42 +00:00
Keith Whitwell
58e9917053 Remove 'pv' parameter from Line/Tri/Point funcs. The provoking vertex
is always the last vertex parameter.
Modify clipping to preserve pv colors.
Modify swrast and X11 driver to expect the pv in the last vertex
(was looking in the first vertex previously).
Remove all handling of flatshading from swrast_setup.

Allow drivers to override the unclipped render tabs in tnl_render_stage
directly.  (Like in 3.4).  Removed fxsimplerender stage.

Modified t_vb_rendertmp.h to remove the need for 'parity' arguments
in RENDER_TRI macros.
2001-01-05 02:26:48 +00:00
Brian Paul
f22c04cdae added underflow check in validate_shine_table() 2001-01-04 16:22:18 +00:00
Brian Paul
6517211e12 added divide by zero check 2001-01-04 15:32:32 +00:00
Brian Paul
2fd9c8690f changed some point functions, new picking code 2001-01-04 15:32:10 +00:00
Brian Paul
63cca75e63 minor bug fixes 2001-01-04 15:31:38 +00:00
Brian Paul
1c768645c5 added divide by zero check 2001-01-03 22:56:23 +00:00
Brian Paul
d14fce03f0 added divide by zero checks 2001-01-03 22:55:26 +00:00
Brian Paul
08dfacd425 New point rasterization functions based on template code that
handles CI/RGB, texture, antialiasing, attenuation, etc.
2001-01-03 22:17:16 +00:00
Brian Paul
6532db9868 More color macro clean-ups.
FLOAT_TO_CHAN() macro removed.
2001-01-03 15:59:30 +00:00
Brian Paul
3b399df638 minor clean-up 2001-01-03 15:56:41 +00:00
Jon Taylor
c1d89d4391 Added missing #include "mmath.h" 2001-01-03 02:43:46 +00:00
Brian Paul
a580e1adb7 missed a few color macro changes 2001-01-02 22:05:55 +00:00
Brian Paul
3041d05bbc Removed fixed.h (GLfixed now in mtypes.h, fixed-pt macros in mmath.h)
Clean-up of color conversion macros.
New mmath.h macros (IROUND, IFLOOR, ICEIL, FRAC) used in various places.
2001-01-02 22:02:51 +00:00
Brian Paul
8446d1bab1 include state.h 2001-01-02 21:40:57 +00:00
Brian Paul
6f89984fed minor GLchan-related changes 2001-01-02 21:09:50 +00:00
Jouk Jansen
ef68e7bf71 Committing in .
Modified Files:
 	Mesa/demos/descrip.mms Mesa/src/descrip.mms
 	Mesa/src/dispatch.c

 -Updated VMS compile suppport
 -Included glthread.h in dispatch.c to make sure that THREADS is defined if
   i.e. PTHREADS is defined in the makefile.

----------------------------------------------------------------------
2001-01-02 10:07:33 +00:00
Keith Whitwell
88f3b89a2c Add render stage for unclipped vb's to fx driver.
Bump MAX_TEXTURE_UNITS to 8
Fix mem. leak in destroy_lists
Fix crash in q3 (cva generally)
2000-12-28 22:11:04 +00:00
Keith Whitwell
e5d6fb20a5 try and force a log message 2000-12-28 16:42:37 +00:00
Keith Whitwell
123ff6549b try and force a log message 2000-12-28 16:35:42 +00:00
Keith Whitwell
bc28306f4a try and force a log message 2000-12-28 16:32:22 +00:00
Jon Taylor
4e96ac080a Fixed GGIMesa build problems.
Swrast triangle drawing fixes.
2000-12-28 02:00:27 +00:00
Keith Whitwell
a884b4b811 try and force a log message 2000-12-27 23:01:25 +00:00
Keith Whitwell
4292e9c06b try and force a log message 2000-12-27 22:59:46 +00:00
Keith Whitwell
20911cb17c try and force a log message 2000-12-27 22:57:13 +00:00
Keith Whitwell
1b686cedf4 try and force a log message 2000-12-27 22:55:09 +00:00
Keith Whitwell
376d022e4a fix demos/fire, enable lazy vertex flushing 2000-12-27 22:52:45 +00:00
Keith Whitwell
ae8ec0b30d Fix evalpoints bug (samples/nurb) 2000-12-27 22:30:29 +00:00
Keith Whitwell
93259cdfa1 fix sproingies bug 2000-12-27 21:49:40 +00:00
Keith Whitwell
719344b23e Fixes for compiling assembly (disable unused 'masked' versions)
Fixes for compiling without debug.
Fix line clipping
Fix unfilled polygon clipping (should be correct now).
2000-12-27 19:57:37 +00:00
Keith Whitwell
770169f230 The array cache. 2000-12-26 15:14:04 +00:00
Keith Whitwell
9ef50d5826 fix xscreensaver cores 2000-12-26 07:41:32 +00:00
Keith Whitwell
cab974cf6c Major rework of tnl module
New array_cache module
Support 8 texture units in core mesa (now support 8 everywhere)
Rework core mesa statechange operations to avoid flushing on many
noop statechanges.
2000-12-26 05:09:27 +00:00
pesco
d1ff1f6798 * demos/Makefile.am (INCLUDES): Added -I$(top_srcdir)/util.
* demos/Makefile.X11, demos/Makefile.BeOS-R4, demos/Makefile.cygnus:
Essentially the same.
Program files updated to include "readtex.c", not "../util/readtex.c".
* demos/reflect.c: Likewise for "showbuffer.c".


* Makefile.am (EXTRA_DIST): Added top-level regular files.

* include/GL/Makefile.am (INC_X11): Added glxext.h.


* src/GGI/include/ggi/mesa/Makefile.am (EXTRA_HEADERS): Include
Mesa GGI headers in dist even if HAVE_GGI is not given.

* configure.in: Look for GLUT and demo source dirs in $srcdir.

* src/swrast/Makefile.am (libMesaSwrast_la_SOURCES): Set to *.[ch].
More source list updates in various Makefile.am's.

* Makefile.am (dist-hook): Remove CVS directory from distribution.
(DIST_SUBDIRS): List all possible subdirs here.
(SUBDIRS): Only list subdirs selected for build again.
The above two applied to all subdir Makefile.am's also.
2000-12-24 22:53:54 +00:00
pesco
05ecec6f49 * include/GL/Makefile.am: ENABLE_GLUT_BUILD -> NEED_GLUT
* bootstrap: Fixed stupid mistakes.
* configure.in (LIBGL_VERSION): Include Mesa version as tiny number.
(LIBGLU_VERSION): Likewise.
2000-12-21 20:04:14 +00:00
Brian Paul
9da422c639 set visual->MRD to 2.0 2000-12-16 00:21:28 +00:00
Brian Paul
f1d6b38441 Polygon._OffsetAny wasn't being computed 2000-12-16 00:19:12 +00:00
Brian Paul
74e2dd38ed minor fog clean-ups (Klaus Niederkrueger) 2000-12-15 16:42:30 +00:00
Brian Paul
783d7dfcbf added more GLX extension function stubs 2000-12-15 04:02:50 +00:00
Brian Paul
083e466f88 Renamed texture object _P to _MaxLevel and _M to _MaxLambda.
Now add BaseLevel in _MaxLevel computation.
2000-12-14 20:25:56 +00:00
Brian Paul
daabce72db updated glXSet3DfxModeMESA() prototype types 2000-12-14 17:44:42 +00:00
Brian Paul
4536021a62 added some more GLX extension entrypoints (fix GLUT link problems when using glxext.h) 2000-12-14 17:44:08 +00:00
Brian Paul
a2003c2895 fixed conformance problems in min/max and histogram result packing 2000-12-13 23:13:45 +00:00
Brian Paul
b0dbd3ed13 replaced GLfixed with GLfloat in _mesa_fog_ci_pixels() (Klaus Niederkrueger) 2000-12-13 17:35:43 +00:00
Brian Paul
ac522d4756 use inverted Y coordinate for choosing dither value (conformance fixes) 2000-12-13 16:24:39 +00:00
Brian Paul
813882526d added glReadPixels item 2000-12-13 00:48:02 +00:00
Brian Paul
3cbbef53bc tweaked truecolor dither kernel setup code 2000-12-13 00:47:10 +00:00
Brian Paul
062bc07bde improved precision of glReadPixels for colorbuffers < 24bpp 2000-12-13 00:46:21 +00:00
Brian Paul
75639547e7 disabled two optimized textured triangle functions because of texcoord interpolation errors 2000-12-12 00:31:45 +00:00
Brian Paul
b38ad54c41 clipping, fog, texture optimizations (Klaus Niederkrueger) 2000-12-12 00:27:51 +00:00
Brian Paul
3afb7a0f70 disabled GLX_SGIS_multisample (temporarily) since its tokens aren't defined 2000-12-11 15:42:53 +00:00
Brian Paul
b04bcd14ee minor changes to fix compile problems/warnings 2000-12-11 15:41:47 +00:00
Jon Taylor
14586916b9 Added a new configure.in flag, --enable-glut-build.
This defaults to "off", so GLUT is not built by default.
2000-12-11 05:22:11 +00:00
Brian Paul
90f042ae8d generate GL_INVALID_OPERATION error for bad image format/type combinations 2000-12-10 19:23:19 +00:00
Brian Paul
8aa019d2ef _MultiTextureEnabled was being computed incorrectly 2000-12-09 22:09:50 +00:00
Brian Paul
ab6e78f3a0 adjust texture size for convolution in glCopyTex[Sub]Image[123]D() 2000-12-09 21:30:43 +00:00
Brian Paul
89c9a4cbf2 set default table size to 0, minor error check fix 2000-12-09 20:51:12 +00:00
Brian Paul
2f911cdf17 define GL_ARB_imaging 2000-12-09 20:36:18 +00:00
Brian Paul
67adba15a2 initialize convolution filters to zero 2000-12-09 20:35:54 +00:00
Brian Paul
90f8ebfd8f added queries for convolution enables 2000-12-09 20:35:32 +00:00
Brian Paul
2e5819270b added GL_RESCALE_NORMAL cases 2000-12-09 19:55:18 +00:00
Brian Paul
ec15398681 more detailed texture error messages 2000-12-08 18:09:33 +00:00
Brian Paul
23b1503d79 include glxext.h unless GLX_GLXEXT_LEGACY is defined 2000-12-08 18:08:15 +00:00
Brian Paul
fed386cdc0 standardized GLX extensions header 2000-12-08 18:06:35 +00:00
Brian Paul
536ede7e00 fixed bug 123918: glXCopySubBuffer() y position off by one 2000-12-08 17:37:00 +00:00
Brian Paul
1c6701e1e1 added LL_MESA_sprite_point extension 2000-12-08 00:28:59 +00:00
Brian Paul
cba2ca94f1 initial draft 2000-12-08 00:21:02 +00:00
Brian Paul
06d05afdd6 Initial work on GL_MESA_sprite_point extension.
Still need to resolve clipping issues, finalize the spec.
2000-12-08 00:20:15 +00:00
Brian Paul
fb7899bfec Compute attenuated point size in a new pipeline stage.
Store computed point size in the SWvertex struct.
2000-12-08 00:18:39 +00:00
Brian Paul
c1b97d91c7 minor comments, clean-up 2000-12-08 00:09:24 +00:00
Brian Paul
83886a5a7f call glFinish() before getting t1 time 2000-12-07 21:50:39 +00:00
Gareth Hughes
ab9e273c75 Allow operating system SSE support test to be overridden with an
environment variable.
2000-12-07 02:36:38 +00:00
Gareth Hughes
2ac44e2509 Merge Mesa 3.4 test for operating system support for SSE. 2000-12-06 14:41:47 +00:00
Brian Paul
fac5fd258c added -s option to control when glXSwapBuffers() is called 2000-12-02 20:33:05 +00:00
Gareth Hughes
7853901372 Enable double-buffering, count not even multiple of three. 2000-11-30 03:06:56 +00:00
Gareth Hughes
28861b192f Add basic timing information. 2000-11-30 01:44:24 +00:00
Brian Paul
7f55eb2b14 changed error tests for depth and stencil buffers 2000-11-28 22:34:46 +00:00
Brian Paul
86ca491ade fixed parameter mis-ordering bug in Driver.StencilSpan calls 2000-11-28 21:34:04 +00:00
Jouk Jansen
bfea97321c Committing in .
Modified Files:
 	Mesa/src/swrast/s_copypix.c

 changed one occurence of rgba to rgbaFloat
----------------------------------------------------------------------
2000-11-28 08:03:22 +00:00
Brian Paul
45015e4d79 Pass scale and bias values to _mesa_scale_and_bias_rgba().
Implemented post-convolution scale and bias operation.
2000-11-28 00:07:51 +00:00
Brian Paul
4304790e3e fixed a convolution pixel store bug 2000-11-28 00:04:39 +00:00
Brian Paul
6a35de3cc3 added new source directories to LIB_FILES 2000-11-27 19:13:16 +00:00
Brian Paul
72ef753d5c Set ENABLE_LIGHT according to ctx->Light.Enabled whether or not
individual light sources are enabled.
2000-11-27 18:59:09 +00:00
Brian Paul
297dfa0fbf minor changes to fix compiler warnings 2000-11-27 18:53:59 +00:00
Brian Paul
a864432fb4 Added MaxClipPlanes and MaxLights to gl_constants struct so T&L
drivers can report non-default numbers of lights and clip planes.
2000-11-27 18:22:13 +00:00
Brian Paul
50478ded80 map glIndex* functions to glIndexi() (glIndexub was looping back to glIndexub) 2000-11-27 18:17:09 +00:00
Jouk Jansen
33b2dcf0da Modified Files:
Mesa/src/tnl/t_context.c Mesa/src/tnl/t_debug.c
 	Mesa/src/tnl/t_pipeline.c

 Some updates to silence warnings on my VMS-machine

----------------------------------------------------------------------
2000-11-27 09:05:52 +00:00
Brian Paul
68656667b2 fixed GLX_PBUFFER value 2000-11-25 18:52:58 +00:00
Keith Whitwell
9aff6cfdc3 Fixed a couple of bugs that crept into last commit
- Eval not compiled correctly
	- Material colors computed incorrectly

Reworked the VERT_TEX flags, now support upto 12 texture units in tnl.
2000-11-24 15:21:59 +00:00
Jouk Jansen
65dcc30599 Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Updated VMS-compile support
----------------------------------------------------------------------
2000-11-24 13:55:59 +00:00
Keith Whitwell
b014986fdb New files... 2000-11-24 10:30:04 +00:00
Keith Whitwell
ad2ac216fa Support for swappable t&l modules, including an example one in the FX
driver (enable with FX_ALLOW_VTXFMT=t).
2000-11-24 10:25:05 +00:00
Brian Paul
00608a79dc minor updates for widgets-mesa/ 2000-11-23 16:36:36 +00:00
Jon Taylor
cdfba5d375 More auto* build system updates 2000-11-23 02:50:56 +00:00
Jouk Jansen
30e5ef86a0 Modified Files:
Mesa/macos/src-gli/MDD.h Mesa/macos/src-gli/mgliContext.c
 	Mesa/macos/src-gli/mgliContext.h
 	Mesa/macos/src-gli/mgliError.c Mesa/src/D3D/D3DMESA.H
 	Mesa/src/D3D/D3Dvbrender.c Mesa/src/D3D/NullProcs.c
 	Mesa/src/S3/S3mesa.c

Some more files with capitals.

----------------------------------------------------------------------
2000-11-22 09:01:04 +00:00
Jouk Jansen
dbd1e2b599 Modified Files:
Mesa/src/Allegro/amesa.c Mesa/src/DOS/dosmesa.c
 	Mesa/src/FX/fxdd.c Mesa/src/FX/fxdrv.h
 	Mesa/src/FX/fxfastpath.c
 	Mesa/src/GGI/include/ggi/mesa/ggimesa.h
 	Mesa/src/OSmesa/osmesa.c Mesa/src/SVGA/svgamesa.c
 	Mesa/src/Trace/tr_control.c Mesa/src/Windows/wgl.c
 	Mesa/src/X/xmesaP.h Mesa/src/X86/3dnow.c Mesa/src/X86/katmai.c
 	Mesa/src/X86/x86.c
 Removed Files:
 	Mesa/src/mms_depend

 Oops,... all files containing Caps in directory name or file name were
 missing in my types->mtypes commit.

----------------------------------------------------------------------
2000-11-22 08:55:51 +00:00
Jouk Jansen
22f5dc74c7 Modified Files:
Mesa/src/descrip.mms Mesa/src/swrast/s_lines.c

 VMS compile support
 Added some Type casts to avoid warnings
----------------------------------------------------------------------
2000-11-22 08:42:14 +00:00
Jouk Jansen
5e3bc0c2a2 Committing in .
Modified Files:
 	Mesa/macos/gli_api/gliapi1.h Mesa/macos/gli_api/gliapi2.h
 	Mesa/macos/gli_api/gliapiext.h Mesa/macos/src-gli/fxgli.c
 	Mesa/macos/src-gli/fxgli.h Mesa/macos/src-gli/fxgli2.c
 	Mesa/macos/src-gli/fxgli_tridebug.c Mesa/src/accum.c
 	Mesa/src/accum.h Mesa/src/all.h Mesa/src/alpha.c
 	Mesa/src/alpha.h Mesa/src/attrib.c Mesa/src/attrib.h
 	Mesa/src/bitmap.c Mesa/src/bitmap.h Mesa/src/blend.c
 	Mesa/src/blend.h Mesa/src/buffers.c Mesa/src/buffers.h
 	Mesa/src/clip.c Mesa/src/clip.h Mesa/src/colortab.h
 	Mesa/src/config.c Mesa/src/context.c Mesa/src/context.h
 	Mesa/src/convolve.c Mesa/src/convolve.h Mesa/src/copypix.c
 	Mesa/src/copypix.h Mesa/src/debug.c Mesa/src/depth.c
 	Mesa/src/depth.h Mesa/src/dlist.c Mesa/src/dlist.h
 	Mesa/src/drawpix.c Mesa/src/drawpix.h Mesa/src/enable.c
 	Mesa/src/enable.h Mesa/src/eval.c Mesa/src/eval.h
 	Mesa/src/extensions.c Mesa/src/extensions.h
 	Mesa/src/feedback.c Mesa/src/feedback.h Mesa/src/fog.c
 	Mesa/src/fog.h Mesa/src/get.c Mesa/src/get.h Mesa/src/glapi.c
 	Mesa/src/glthread.h Mesa/src/highpc.c Mesa/src/hint.h
 	Mesa/src/histogram.h Mesa/src/image.c Mesa/src/image.h
 	Mesa/src/imports.c Mesa/src/light.c Mesa/src/light.h
 	Mesa/src/lines.c Mesa/src/lines.h Mesa/src/logic.c
 	Mesa/src/logic.h Mesa/src/masking.c Mesa/src/masking.h
 	Mesa/src/matrix.c Mesa/src/matrix.h Mesa/src/pixel.c
 	Mesa/src/pixel.h Mesa/src/points.c Mesa/src/points.h
 	Mesa/src/polygon.c Mesa/src/polygon.h Mesa/src/rastpos.c
 	Mesa/src/readpix.c Mesa/src/scissor.c Mesa/src/scissor.h
 	Mesa/src/state.c Mesa/src/state.h Mesa/src/stencil.c
 	Mesa/src/stencil.h Mesa/src/teximage.c Mesa/src/teximage.h
 	Mesa/src/texobj.c Mesa/src/texobj.h Mesa/src/texstate.c
 	Mesa/src/texstate.h Mesa/src/texture.c Mesa/src/texture.h
 	Mesa/src/texutil.c Mesa/src/texutil.h Mesa/src/varray.c
 	Mesa/src/varray.h Mesa/src/X/fakeglx.c Mesa/src/X/xm_api.c
 	Mesa/src/X/xm_dd.c Mesa/src/X/xm_line.c Mesa/src/X/xm_span.c
 	Mesa/src/X/xm_tri.c Mesa/src/swrast/s_aaline.c
 	Mesa/src/swrast/s_aaline.h Mesa/src/swrast/s_aatriangle.h
 	Mesa/src/swrast/s_accum.h Mesa/src/swrast/s_alpha.h
 	Mesa/src/swrast/s_alphabuf.h Mesa/src/swrast/s_blend.h
 	Mesa/src/swrast/s_context.c Mesa/src/swrast/s_context.h
 	Mesa/src/swrast/s_depth.h Mesa/src/swrast/s_drawpix.h
 	Mesa/src/swrast/s_feedback.h Mesa/src/swrast/s_fog.h
 	Mesa/src/swrast/s_histogram.h Mesa/src/swrast/s_lines.h
 	Mesa/src/swrast/s_logic.h Mesa/src/swrast/s_masking.h
 	Mesa/src/swrast/s_pb.h Mesa/src/swrast/s_pixeltex.h
 	Mesa/src/swrast/s_points.h Mesa/src/swrast/s_quads.c
 	Mesa/src/swrast/s_quads.h Mesa/src/swrast/s_scissor.h
 	Mesa/src/swrast/s_span.h Mesa/src/swrast/s_stencil.h
 	Mesa/src/swrast/s_texture.h Mesa/src/swrast/s_triangle.h
 	Mesa/src/swrast/s_zoom.h Mesa/src/swrast/swrast.h
 	Mesa/src/swrast_setup/ss_context.h
 	Mesa/src/swrast_setup/ss_triangle.c
 	Mesa/src/swrast_setup/ss_triangle.h
 	Mesa/src/swrast_setup/ss_vb.h Mesa/src/tnl/t_clip.c
 	Mesa/src/tnl/t_clip.h Mesa/src/tnl/t_context.c
 	Mesa/src/tnl/t_context.h Mesa/src/tnl/t_cva.c
 	Mesa/src/tnl/t_cva.h Mesa/src/tnl/t_debug.c
 	Mesa/src/tnl/t_debug.h Mesa/src/tnl/t_dlist.h
 	Mesa/src/tnl/t_eval.c Mesa/src/tnl/t_eval.h
 	Mesa/src/tnl/t_fog.c Mesa/src/tnl/t_fog.h
 	Mesa/src/tnl/t_light.c Mesa/src/tnl/t_light.h
 	Mesa/src/tnl/t_pipeline.c Mesa/src/tnl/t_pipeline.h
 	Mesa/src/tnl/t_shade.c Mesa/src/tnl/t_shade.h
 	Mesa/src/tnl/t_stages.c Mesa/src/tnl/t_stages.h
 	Mesa/src/tnl/t_texture.c Mesa/src/tnl/t_texture.h
 	Mesa/src/tnl/t_trans_elt.c Mesa/src/tnl/t_trans_elt.h
 	Mesa/src/tnl/t_varray.c Mesa/src/tnl/t_varray.h
 	Mesa/src/tnl/t_vb.c Mesa/src/tnl/t_vb.h
 	Mesa/src/tnl/t_vbcull.c Mesa/src/tnl/t_vbcull.h
 	Mesa/src/tnl/t_vbfill.c Mesa/src/tnl/t_vbfill.h
 	Mesa/src/tnl/t_vbindirect.c Mesa/src/tnl/t_vbindirect.h
 	Mesa/src/tnl/t_vbrender.c Mesa/src/tnl/t_vbrender.h
 	Mesa/src/tnl/t_vbxform.c Mesa/src/tnl/t_vbxform.h
 	Mesa/src/tnl/tnl.h
 Added Files:
 	Mesa/src/mtypes.h
 Removed Files:
 	Mesa/src/types.h

 Changed Mesa/src/types to Mesa/src/mtypes.h to avoid conflicts while
compiling on a VMS system.

----------------------------------------------------------------------
2000-11-22 07:32:16 +00:00
Jon Taylor
fbe3726050 More auto* build system fixes 2000-11-22 06:49:43 +00:00
Jon Taylor
e3048be8ba swrast setup fixes 2000-11-22 06:45:38 +00:00
Brian Paul
0c000ec90c call gl_update_state() if needed in glGetColorTable, glGetConvolutionFilter 2000-11-21 23:26:13 +00:00
Brian Paul
c34cea7de5 call RENDER_START/FINISH in read_color_image() 2000-11-21 23:25:40 +00:00
Brian Paul
26d729581f minor clean-ups (Klaus Niederkrueger) 2000-11-21 23:17:36 +00:00
Brian Paul
5c0dccc896 minor clean-ups 2000-11-21 23:09:18 +00:00
Brian Paul
baf3e77ee2 added some RENDER_START/RENDER_FINISH macros. Minor GLchan changes 2000-11-21 23:01:22 +00:00
Jon Taylor
3c2e1022ed More auto* build fixes
Removed spurious trace/Makefile from repository
2000-11-21 05:17:13 +00:00
Brian Paul
189476f265 minor multi-tex changes, changed MAX_TEXTURE_UNITS to 4 2000-11-20 18:06:11 +00:00
Brian Paul
ce2733b7cc removed #include <tgmath.h> 2000-11-20 15:16:33 +00:00
Keith Whitwell
2ac294e67f fix lvalue cast on ctx->swtnl_im 2000-11-20 13:39:36 +00:00
Jon Taylor
1487b3ea3e * More work on the auto* build system
* Added missing #includes all over the place
* Added GGI-style debugging harness to GGIMesa
2000-11-19 23:42:32 +00:00
Brian Paul
a852378a62 Replaced Texture.CurrentD[] with separate Texture.Current1/2/3D vars.
Completely removed the dirty texture object list.  Set texObj->Complete
to GL_FALSE to indicate dirty.
Made point/line/triangle/quad SWvertex parameters const.
Minor code clean-ups.
2000-11-19 23:10:25 +00:00
Jon Taylor
b12d8e3b0d Added GGI-style debugging harness to GGIGLUT. 2000-11-19 07:41:26 +00:00
Gareth Hughes
54d7a74532 - Fix tnl/t_context.h inclusion.
- Some SSE asm updates, more to come.
2000-11-19 02:18:33 +00:00
Brian Paul
a13fab59ae added more programs 2000-11-18 17:13:04 +00:00
Brian Paul
ede37839ae test texture palettes with multitexture 2000-11-18 17:12:33 +00:00
Brian Paul
9b5bb5939b Mark Kilgard's reflection/shadow dino demo 2000-11-18 17:10:07 +00:00
Brian Paul
6b2eab1869 hacked demo to test multi-texture projective textures 2000-11-18 17:07:39 +00:00
Jon Taylor
912d3a04c1 * Auto* build fixes
* Added missing includes to math/*
2000-11-18 08:10:21 +00:00
Brian Paul
5a9026c65d Minor header file changes to silence warnings.
Added _mesa_enable_sw_extensions(), called by software-only drivers
to enable all s/w-supported GL extensions.
2000-11-17 21:01:25 +00:00
Jouk Jansen
9e83e8c790 Committing in .
Patches to compile Mesa on VMS.
   -Updated for new directory tree
   -Now compile with PTHREADS on


 The patch in glthread.h is temporarily. The include file src/types.h
 conflicts with the system defined types.h. In future the mesa supplied one
 should be renamed.

 Modified Files:
 	Mesa/include/GL/vms_x_fix.h Mesa/src/descrip.mms
 	Mesa/src/glthread.h Mesa/src/mms_depend
 ----------------------------------------------------------------------
2000-11-17 11:00:55 +00:00
Keith Whitwell
23caf20169 Move the transform and lighting code to two new directories
math:  Provides basic matrix and vector functionality that
               might be useful to multiple software t&l
	       implementations, and is used by core mesa to
	       manage the Model, Project, etc matrices.

	tnl:   The real transform & lighting code from core mesa,
	       including everything from glVertex3f through vertex
	       buffer handling, transformation, clipping, lighting
	       and handoff to a driver for rasterization.

The interfaces of these can be further tightened up, but the basic
splitting up of state and code move is done.
2000-11-16 21:05:34 +00:00
Jon Taylor
1795166732 Small compile fix 2000-11-16 10:38:39 +00:00
Brian Paul
0a82c75eab added includes to silence warnings 2000-11-15 16:38:59 +00:00
Brian Paul
24a32627d9 Replaced ctx->Point.Size with ctx->Point._Size
Replaced ctx->Point.UserSize with ctx->Point.Size
2000-11-15 16:38:40 +00:00
Brian Paul
30971cd098 rewrite of _mesa_win_fog_coords_from_z() so that both perspective and orthographic projection are handled correctly 2000-11-15 00:26:01 +00:00
Brian Paul
4fae0260a6 more Driver.Color, Driver.Index updates 2000-11-14 17:51:15 +00:00
Brian Paul
f930330d5f removed unused set_color() and set_index() functions 2000-11-14 17:50:07 +00:00
Brian Paul
c19d783e07 Removed Driver.Color() and Driver.Index() functions.
Pass color or color index directly to WriteMono*() span functions.
Updated current s/w drivers accordingly.
Clean-up of X gc handling in XMesa driver.
2000-11-14 17:40:13 +00:00
Keith Whitwell
1e1aac034c Cleanup of derived state calculation prior to seperating software T&L
into a new directory.  Specifically the handling of changes to lighting
lighting space (light in model vs. light in eye) have been revamped.

Moved several derived values used only by swrast into that directory.

Removed direct calls to swrast_flush() from vbrender.c -- pushed into
ctx->Driver.RenderFinish.

Optimized flat-shading case in swrast_setup.
2000-11-13 20:02:56 +00:00
Brian Paul
6b8ae62d6b removed unused var 2000-11-13 15:33:56 +00:00
Brian Paul
a2c4c98023 bumped version to 3.5 2000-11-13 15:33:17 +00:00
Brian Paul
d45fdeae35 fixed another texImage mistake in _mesa_GetTexImage() 2000-11-13 15:25:26 +00:00
Jon Taylor
dd11e7664d * Updated the autoconf/automake/libtool build system
* GGIMesa's stubs targets now uses swrast
2000-11-13 04:15:44 +00:00
Brian Paul
7351049dba init WrapR to GL_REPEAT mode 2000-11-11 20:23:47 +00:00
Brian Paul
e7f55e76db removed tr_attrib.c 2000-11-11 19:09:29 +00:00
Brian Paul
bc58b7b409 latest sources from Loki 2000-11-11 01:43:03 +00:00
Brian Paul
b5012e1ee1 replaced _NEW_IMAGING with _NEW_PIXEL 2000-11-10 18:31:04 +00:00
Brian Paul
df37d5f2db replaced s_imaging.h with s_histogram.h 2000-11-10 18:29:18 +00:00
Brian Paul
8a9507442a renamed imaging files to histogram since that's what's inside 2000-11-10 18:06:14 +00:00
Brian Paul
78bb78d1c3 renamed to histogram 2000-11-10 18:05:13 +00:00
Brian Paul
ba41b8afb1 minor changes to silence compiler warnings 2000-11-10 17:45:15 +00:00
Brian Paul
6c4268204b removed old TexImage() and TexSubImage() functions 2000-11-10 17:36:42 +00:00
Brian Paul
db6aa58267 patched to silence compiler warnings (Martin Lindhe) 2000-11-10 17:23:02 +00:00
Brian Paul
8e3366fda7 restored call to _mesa_select_tex_image() in _mesa_GetTexImage() 2000-11-10 15:32:07 +00:00
Brian Paul
3d960a0d84 GL_BGR case was misplaced in _mesa_is_legal_format_and_type() (Jeff Hartmann) 2000-11-09 23:25:06 +00:00
Brian Paul
71be653edc updated with bug fix from 3.4 branch 2000-11-09 22:41:25 +00:00
Brian Paul
5605385194 fixed mipmap setup bug 2000-11-09 16:53:26 +00:00
Keith Whitwell
14425aeca1 fixed very obvious fog bug 2000-11-07 19:17:23 +00:00
Brian Paul
7298e71360 adjust x/y/zoffset parameters to fill_texture_image() by texture border width 2000-11-07 16:40:37 +00:00
Brian Paul
2d595d7020 test ctx->RenderMode in chooser functions 2000-11-06 17:28:51 +00:00
Brian Paul
8d915cb6fb test ctx->RenderMode in chooser functions, removed dead code 2000-11-06 17:28:20 +00:00
Brian Paul
4f3e7cd3cf added a setup function for selection/feedback 2000-11-06 17:08:02 +00:00
Brian Paul
8fa6b363db added buffer test to xmesa_choose_point(), fixes X protocol error 2000-11-06 15:52:48 +00:00
Jouk Jansen
790ea3dc7f Committing in .
Modified Files:
 	Mesa/src/descrip.mms Mesa/src/mms_depend

 Updating VMS compile support

----------------------------------------------------------------------
2000-11-06 13:04:05 +00:00
Brian Paul
861ca519ab removed obsolete VB vars 2000-11-05 23:21:12 +00:00
Brian Paul
b2ad0754b0 added swrast/s_aaline.c 2000-11-05 23:19:23 +00:00
Brian Paul
0070d398d1 hooked in new AA line code, minor clean-up 2000-11-05 23:18:36 +00:00
Brian Paul
7798374e47 New implementation of antialiased lines. Mesa should now pass the remaining
GL conformance tests for AA lines (but not tried yet).
TODO: improve code sharing with the AA triangle code.
2000-11-05 23:15:16 +00:00
Keith Whitwell
14940c4ffe - Changes for new software rasterizer modules
- Remove support for choosing software fallbacks from core code
- Remove partial fallback code from vbrender.c -- drivers are now
  expected to be able to find a triangle/quad function for every state,
  even if they have to use _swsetup_Triangle or _swsetup_Quad.
- Marked derived variables in the GLcontext struct with a leading
  underscore '_'.
2000-11-05 18:40:57 +00:00
Keith Whitwell
1e885f6e6c Reworked to use the new software rasterizer. Optimized line/tri functions
are hooked into the software rasterizer.
2000-11-05 18:28:01 +00:00
Keith Whitwell
ec0585883a Use the new software rasterizer. Reworked optimized line,tri,point
functions to fit into the framework provided for extending the
software rasterizer.
2000-11-05 18:26:12 +00:00
Keith Whitwell
cd03ed4f54 Reorganized software rasterizer as a module which manages its own state,
with tighter interfaces with the rest of the world.

Proper documentation to come.
2000-11-05 18:24:40 +00:00
Keith Whitwell
7c20642b10 A new module to provide RasterSetup and advanced triangle/line/point
functionality layered on top of the software rasterizer.

An example entrypoint:
	void _swsetup_Triangle( GLcontext, GLuint, GLuint, GLuint, GLuint )

will coerce the software rasterizer to draw flat, twoside-lit,
unfilled and offset triangles (including decomposition to points or lines).
2000-11-05 18:20:18 +00:00
Keith Whitwell
c6f348cbc9 Lots of changes:
- use the new interface to the software rasterizer.
	- manage all fallbacks internally, hooking in swrast or
	  swrast_setup if necessary.
	- removed lots of marginal code no longer appropriate in a
	  maturing driver.
	- reworked the vertex-setup and triangle routines, including
	  drawing unfilled triangles from within the driver.
2000-11-05 18:16:51 +00:00
Brian Paul
a190221f70 update to GL_MESA_trace extension enums 2000-11-03 15:14:18 +00:00
Brian Paul
8e4fa8c3e6 MESA_trace extension (Loki) 2000-11-03 15:10:04 +00:00
Brian Paul
44bd53f259 added GL_MESA_packed_depth_stencil extension 2000-11-03 15:01:38 +00:00
Brian Paul
fcb23bbd6e GL_MESA_packed_depth_stencil extension spec 2000-11-03 14:58:45 +00:00
Brian Paul
75d7425061 added some missing backslashes 2000-11-03 01:37:10 +00:00
Gareth Hughes
5f5632c424 Change transformation from ortho to perspective so we get the MGA elt
path by default.
2000-11-03 00:09:31 +00:00
Brian Paul
861eb8eb16 update for separate libOSMesa.so lib 2000-11-01 16:02:52 +00:00
Brian Paul
563d26b247 print number of texture units 2000-11-01 16:02:01 +00:00
Jouk Jansen
b35ec1ca05 Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Updated Makefiles for VMS
----------------------------------------------------------------------
2000-11-01 15:53:02 +00:00
Gareth Hughes
9f568e512f Added trivial CVA test for testing HW driver fastpaths, good for testing
indexed vertex buffer implementations for instance.

Cleaned up Makefile to make building and adding more tests easier.
2000-11-01 03:14:12 +00:00
Brian Paul
acdb6db846 Always call Driver.SetReadBuffer() in copy pixels functions, just to be safe 2000-10-31 23:11:06 +00:00
Brian Paul
fda3b1a4b1 added comment explaining why the demo is flawed 2000-10-31 20:41:06 +00:00
Keith Whitwell
724abeb058 Moved the software rasterizer to a new directory. 2000-10-31 18:09:44 +00:00
Keith Whitwell
e3a051e053 Moved software rasterizer functionality to new directory. 2000-10-31 18:00:04 +00:00
Keith Whitwell
6e0f0f51e0 Remove dead code in FX driver. 2000-10-31 12:40:57 +00:00
Brian Paul
039bf534aa removed debug printf 2000-10-31 01:20:06 +00:00
Brian Paul
efeddebe81 big overhaul of the demo, works better now 2000-10-30 22:38:55 +00:00
Keith Whitwell
365dc68c39 Rearrange VERT_* flags to support 4 texture units. 2000-10-30 18:50:42 +00:00
Brian Paul
9499e017b7 Removed UPDATE_IMAGE_TRANSFER_STATE, use _NEW_PIXEL flag instead.
More minor GLchan changes.
Silence some compiler warnings in cva.[ch]
2000-10-30 16:32:42 +00:00
Keith Whitwell
caef4a35d6 Removed references to gcc's __FUNCTION__ macro.
Removed dead file fog_tmp.h
2000-10-30 16:30:56 +00:00
Brian Paul
6ad2c5b59a set *t->flag = enabled in gl_extensions_add(), otherwise, extension booleans weren't set 2000-10-30 16:27:21 +00:00
Keith Whitwell
69676ac379 test cvs commit logging 2000-10-30 16:00:42 +00:00
Keith Whitwell
a96308c37d Replace the flags Mesa was using for ctx->NewState with a new set
based on the GL attribute groups.

Introduced constants describing the circumstances under which some
key derived values can change:
	_SWRAST_NEW_RASTERMASK -- ctx->RasterMask
	_SWRAST_NEW_TRIANGLE   -- The software rasterizer's triangle
	                          function
	_DD_NEW_FEEDBACK -- the 'DD_FEEDBACK' bit in ctx->TriangleCaps

These are helpful in deciding whether you need to recalculate state if your
recalculation involves reference to a derived value.
2000-10-30 13:31:59 +00:00
Jouk Jansen
a457549967 Committing in .
Modified Files:
 	Mesa/src/X/xm_api.c

 included macros.h

----------------------------------------------------------------------
2000-10-30 08:39:38 +00:00
Brian Paul
193005393d renamed Current.ByteColor Current.Color 2000-10-29 19:02:23 +00:00
Brian Paul
ebb248aa5c more minor header file re-org (moved CONST, ASSERT, INLINE to config.h) 2000-10-29 18:23:16 +00:00
Brian Paul
699bc7b73d More GLchan color channel changes.
Some header file re-org:
   Move matrix, vertex buffer structs to types.h to fix #include mess.
   Remove typedef, extern declarations from config.h
2000-10-29 18:12:14 +00:00
Brian Paul
c893a015d8 New colormac.h file for color-related macros.
Lot's of clean-up in macros.h and mmath.h
2000-10-28 20:41:13 +00:00
Brian Paul
ba643a2094 Basic work to support deep color channels:
Replace GLubyte with GLchan
  Replace 255 with CHAN_MAX
2000-10-28 18:34:48 +00:00
Keith Whitwell
a897b335be Do per-pixel fog when GL_FOG_HINT is GL_NICEST.
Fix scaling bug in per-pixel fog calculations.
2000-10-28 11:42:12 +00:00
Jon Taylor
1aa958bc9c Lots of misc. bugfixes to bring GGIMesa in sync with the latest Mesa sources. 2000-10-28 10:02:44 +00:00
Brian Paul
1c4b3f4dfb restored test for __alpha in _mesa_win_fog_coords_from_z() 2000-10-27 18:38:35 +00:00
Brian Paul
7dd57a48e1 added info about GL_EXT_secondary_color and GL_EXT_fog_coord 2000-10-27 18:32:55 +00:00
Brian Paul
a14cbff8e5 Enabled GL_EXT_secondary_color. Fixed a bunch of typos in the dlist.c
and state.c file for plugging those functions into the dispatch table.
Don't use Mesa 3.5 for DRI until SGI approves the new dispatch offsets.
Commented-out references to ctx->FogMode and VB->Specular in FX driver.
Minor clean-up in extensions.c
Removed unused prototype in fog.h
2000-10-27 18:31:21 +00:00
Keith Whitwell
fe5d67d95f Implement EXT_fog_coord and EXT_secondary_color.
EXT_secondary_color is disabled until we get some dispatch offsets from SGI.
2000-10-27 16:44:40 +00:00
Gareth Hughes
ba58a6665f Change animated apps to double-buffered visuals by default. 2000-10-27 02:49:17 +00:00
Brian Paul
b4df56fcd9 added GL_BGR case to bytes_per_pixel() 2000-10-26 21:48:18 +00:00
Brian Paul
7460cfabbc removed X86/*.m4 files from tar archive 2000-10-26 19:36:14 +00:00
Brian Paul
66202b75d5 clarified meaning of DEFAULT_SOFTWARE_DEPTH_BITS value 2000-10-26 19:26:18 +00:00
Brian Paul
7ceffd0e0d fixed value for GLU_NURBS_MODE 2000-10-26 15:32:54 +00:00
Brian Paul
27a26bfc4b added a glFinish() call 2000-10-26 15:26:14 +00:00
Brian Paul
21d073d55a added incomplete() debug function/macro 2000-10-24 02:53:18 +00:00
Brian Paul
9a4a958a5c signal NEW_TEXTURING if there's a Driver.BindTexture() function 2000-10-24 01:13:58 +00:00
Brian Paul
6cdf09749c Put a white texel in each corner of each texture.
Draw polygons using the texture's aspect ratio.
The tdfx-3-0-0 texcoord bug is obvious with the -randomsize option.
2000-10-23 23:32:22 +00:00
Brian Paul
0448488e11 added idle() func, enable fog by default 2000-10-23 20:06:36 +00:00
Brian Paul
5a501fbd09 added libOSMesa.so info 2000-10-23 19:46:11 +00:00
Brian Paul
5bb27edac0 generate separate libOSMesa library ala XFree86/DRI 2000-10-23 19:43:36 +00:00
Brian Paul
edda9ae9fb fixed 386/x86 mismatches, reordered a few configs 2000-10-23 19:33:55 +00:00
Gareth Hughes
ac018f5494 Major audit of all Mesa's x86 assembly code. This round is basically
general cleanups - more to come.

Added P6 architecture timing to debug_xform routines.  Still need to add
test_all_vertex_functions test for the v16 asm.  Dynamic reconfiguration
of counter overhead for more accurate benchmarking.

Removed redundant x86 assembly build options, replace with linux-x86 and
so on.  This will build all x86, MMX, 3DNow!, SSE etc assembly into
libGL - preferred over many different options to include some but not
all assembly code.  Note that linux-3dnow and linux-katmai options have
thus been removed.
2000-10-23 00:20:50 +00:00
Gareth Hughes
fc2427e81b Major audit of all Mesa's x86 assembly code. This round is basically
general cleanups - more to come.

Added P6 architecture timing to debug_xform routines.  Still need to add
test_all_vertex_functions test for the v16 asm.  Dynamic reconfiguration
of counter overhead for more accurate benchmarking.
2000-10-23 00:16:28 +00:00
Brian Paul
e188b6e1f1 added a proper idle() function 2000-10-21 04:29:02 +00:00
Brian Paul
eb326f5f01 fixed a texture enable bug 2000-10-21 01:29:12 +00:00
Brian Paul
d0d7d62120 polygon offset changes; added Visual->MRD field 2000-10-21 00:02:47 +00:00
Brian Paul
d475730357 Changes for multitexture > 3, code clean-ups.
Added GLboolean ctx->Texture.MultiTextureEnabled to determine when
multitexture is enabled.  Eventually ctx->Texture.ReallyEnabled may
become a boolean.
2000-10-20 19:54:49 +00:00
Brian Paul
a2d2aed64a use 1.1 glPolygonOffset instead of glPolygonOffsetEXT 2000-10-20 17:26:57 +00:00
Brian Paul
9c7ca850fd Rewrote get_static_proc_address(). It made mistakes in some situations 2000-10-19 20:13:12 +00:00
Brian Paul
a5b66333fb glPixelStore(GL_PACK/UNPACK_SKIP_IMAGES) wasn't handled correctly 2000-10-19 20:09:47 +00:00
Brian Paul
9f0bb59c53 call Driver.SetReadBuffer() in clear_color_buffers() to fix colormasked clear bug 2000-10-19 18:17:19 +00:00
Brian Paul
cc50ed60b3 improved blending accuracy to fix Glean test failures 2000-10-19 18:08:05 +00:00
Brian Paul
6aafd2491c GL_MAX_TEXTURE_UNITS_ARB is now 3 2000-10-18 15:14:48 +00:00
Brian Paul
ce938b307e More fixes for MAX_TEXTURE_UNITS > 2. Seems to work now.
Misc code clean-ups, minor bug fixes.
MAX_TEXTURE_UNITS now defaults to 3.
2000-10-18 15:02:59 +00:00
Brian Paul
d367216678 ported render begin/end calls from Mesa 3.4 2000-10-17 00:42:02 +00:00
Brian Paul
1873b567b2 added _mesa_get_teximages_from_driver() 2000-10-16 23:43:12 +00:00
Brian Paul
1100b4daa3 use gray background, memset TempImage to white to help with debugging 2000-10-16 21:24:39 +00:00
Brian Paul
35324a6c60 if depthBits == 0, set DepthMask = 2^16 to fix per-fragment fog problems 2000-10-09 22:42:40 +00:00
Brian Paul
1791901468 update TriangleCaps in GL_POINT/POLYGON_SMOOTH cases 2000-10-05 23:10:42 +00:00
Brian Paul
fdf2033bda brighter colors 2000-10-05 21:57:00 +00:00
Brian Paul
2c7e6334ec better handling of GLX_DEPTH_SIZE in glXChooseVisual() 2000-10-05 17:38:21 +00:00
Brian Paul
fa849a0e16 drawing color-index image to RGB window was broken 2000-10-05 16:22:22 +00:00
Jouk Jansen
55590ee810 Committing in .
Modified Files:
 	Mesa/demos/paltex.c

 Silenced compiler warnings

----------------------------------------------------------------------
2000-10-05 07:17:43 +00:00
Brian Paul
476609c539 improved to test alpha blending with texture palette 2000-10-04 18:15:39 +00:00
Brian Paul
16eb23a0cb more work to support N texture units 2000-10-02 15:45:12 +00:00
Brian Paul
22f1ca0131 textured line test 2000-09-30 18:48:33 +00:00
Brian Paul
9c05c0494d support for N texture units 2000-09-30 18:42:29 +00:00
Brian Paul
4f66498304 added fps output 2000-09-29 23:09:39 +00:00
Brian Paul
e92dd16605 generalized support for N texure units 2000-09-29 16:58:44 +00:00
Brian Paul
eb6c6439ae removed ctx->Texture.Enabled, use ctx->Texture.ReallyEnabled instead 2000-09-28 22:44:30 +00:00
Brian Paul
37a6211795 new params for SpecificCompressedTexFormat() (Bill White) 2000-09-28 18:30:39 +00:00
Jouk Jansen
574c456a5a Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 inserted imports.c
----------------------------------------------------------------------
2000-09-27 10:59:15 +00:00
Brian Paul
f142a0830a include types.h 2000-09-27 03:30:49 +00:00
Brian Paul
643be95416 renamed gl_copy_context to _mesa_copy_context 2000-09-26 21:28:39 +00:00
Brian Paul
6542324cb0 added imports.c 2000-09-26 21:22:20 +00:00
Brian Paul
b1394fa92a First batch of OpenGL SI related changes:
Renamed struct gl_context to struct __GLcontextRec.
Include glcore.h, setup GL imports/exports.
Replaced gl_ prefix with _mesa_ prefix in context.[ch] functions.
GLcontext's Visual field is no longer a pointer.
2000-09-26 20:53:53 +00:00
Brian Paul
3b18a36f21 Replaced preprocessor symbol GL_MESA_TRACE with MESA_TRACE.
Changed src/Makefile.X11 to compile Trace sources like other drivers.
2000-09-26 15:27:20 +00:00
Brian Paul
63c113a31b use GL_NEAREST texture filter 2000-09-26 15:25:01 +00:00
Brian Paul
423f2b2884 added GL_ARB_texture_env_add 2000-09-25 16:03:59 +00:00
Brian Paul
b9b329d1e5 removed unused display_list struct 2000-09-24 16:11:55 +00:00
Gareth Hughes
5e0bb98abd Added SSE streaming store instructions, external symbol directives. 2000-09-18 22:49:04 +00:00
Gareth Hughes
5aa1c1cd5f Added SSE prefetching instructions. General cleanups. 2000-09-18 16:57:16 +00:00
Brian Paul
1c56fdc707 new comments, misc clean-up 2000-09-17 21:56:07 +00:00
Gareth Hughes
f3c399ec11 General cleanups. Disable gl_katmai_project_vertices and
gl_katmai_project_clipped_vertices for now as they are broken.
2000-09-17 21:12:40 +00:00
Brian Paul
345a71a9cb set default window pos, changed 4 to GL_RGBA 2000-09-15 23:59:46 +00:00
Brian Paul
4ed1d0b2c0 added some missing const keywords in GetString 2000-09-15 19:57:51 +00:00
Brian Paul
1ff933b452 added GL_MESA_trace support 2000-09-15 19:45:40 +00:00
Brian Paul
98b3dd40f7 Added GL_MESA_trace extension (Loki) 2000-09-15 19:45:00 +00:00
Brian Paul
771b975528 added trace support (Loki) 2000-09-15 19:44:39 +00:00
Brian Paul
4360bd7c76 removed unused struct display_list_compilation 2000-09-15 17:04:35 +00:00
Brian Paul
cefc42f1ba added FPS calculation 2000-09-15 16:43:57 +00:00
Brian Paul
008e4e7e39 added more warning options to linux-elf-debug config 2000-09-15 15:55:24 +00:00
Brian Paul
0e52184c48 moved DECLARE_XFORM_GROUP macros outside of gl_init_3dnow_asm_transforms() to silence compiler warnings 2000-09-15 15:54:25 +00:00
Brian Paul
f7a4bcaf79 use cpml.h on Alpha (AlanH) 2000-09-15 15:42:45 +00:00
Brian Paul
64a23a0f9c updated comments 2000-09-14 23:13:51 +00:00
Brian Paul
23316033db explicitly init some texture vars 2000-09-14 23:13:23 +00:00
Brian Paul
ae18872bc7 added cursor key info to instructions 2000-09-13 23:01:52 +00:00
Brian Paul
a94ee16534 replaced GL_RGBA with GL_BGRA for GL_UNSIGNED_SHORT_1_5_5_5_REV datatype 2000-09-13 22:07:20 +00:00
Brian Paul
881ec9ee67 packing of GLushort packed types was broken 2000-09-12 21:10:25 +00:00
Brian Paul
8d4bd87c1a added format/type error check to draw_rgba_pixels() 2000-09-12 21:09:24 +00:00
Brian Paul
e4b684ce49 init mutex 2000-09-12 21:07:40 +00:00
Brian Paul
d49b34a233 better FPS calculation 2000-09-12 18:44:45 +00:00
Brian Paul
b8cc150836 terrain demo data 2000-09-12 17:58:27 +00:00
Brian Paul
4df1f7c7ba better fps computation 2000-09-12 17:38:22 +00:00
Brian Paul
82cfcfa63a added some casts (Takaaki Nomura) 2000-09-12 17:03:59 +00:00
Brian Paul
b9466fca3e Win32 updates (Chris Morley) 2000-09-12 15:46:43 +00:00
Brian Paul
8f39dd1e62 Win32 update (Chris Morley) 2000-09-12 15:41:46 +00:00
Brian Paul
038573aae7 Removed immediate struct's maybe_transform_vb pointer.
Call _mesa_maybe_transform_vb() directly.
2000-09-11 18:49:06 +00:00
Jouk Jansen
b506d8753d Committing in .
Modified Files:
 	Mesa/src/descrip.mms

 Corrected a typo
----------------------------------------------------------------------
2000-09-09 07:05:32 +00:00
Brian Paul
9a2da667f3 added Dither, NEW_DRVSTATE info 2000-09-08 22:39:09 +00:00
Brian Paul
399ae35ac6 removed unused NEW_DRVSTATE flags 2000-09-08 22:07:29 +00:00
Brian Paul
9d3e5db9fc added dither key option 2000-09-08 21:45:21 +00:00
Brian Paul
7f7b205259 removed ctx->Driver.Dither function 2000-09-08 21:44:55 +00:00
Brian Paul
48c6a6ecd2 changed gl_frame_buffer Xmax and Ymax to be exclusive boundary values 2000-09-08 21:28:04 +00:00
Brian Paul
e18e0e98fe added OSMesaCreateContextExt item 2000-09-08 16:42:44 +00:00
Brian Paul
46dbaec56a Use OSMesaCreateContextExt() if using Mesa 3.5 or later 2000-09-08 16:42:06 +00:00
Brian Paul
2bf5d9470d added OSMesaCreateContextExt() 2000-09-08 16:41:38 +00:00
Brian Paul
8ad306baf6 added device driver changes 2000-09-07 15:46:05 +00:00
Brian Paul
c4c639c9a4 Removed ctx->Driver.LogicOp().
ctx->Driver.Index/ColorMask() now return void.
Removed SWmasking and SWLogicOpEnabled variables.
LogicOps and color/index masking are no longer special-case device
driver functions.  The Xlib driver was the only driver that used
them.  Things are more uniform now.
2000-09-07 15:45:26 +00:00
Brian Paul
18f73b622f added xmesa_update_span_funcs() 2000-09-07 15:42:38 +00:00
Brian Paul
16c3ea9459 renamed Xlib driver files 2000-09-07 15:42:13 +00:00
Brian Paul
693f81be4c newly organized Xlib driver files 2000-09-07 15:40:30 +00:00
Brian Paul
38d3f3d660 added device driver function for texture proxy testing 2000-09-07 15:38:49 +00:00
Brian Paul
724f2939f4 silence compiler warning (zoomY0) 2000-09-06 17:44:52 +00:00
Brian Paul
afa61173a8 test for __bsdi__ for XFree86 2000-09-06 17:34:41 +00:00
Brian Paul
37cfb3b5c2 replaced ## with CONCAT macro 2000-09-06 17:33:40 +00:00
Brian Paul
f96ce6a707 oops- forgot convolution for glGetTexImage. Done now. 2000-09-06 15:15:43 +00:00
Brian Paul
c52fc9b49c passing proxy targets to glGetTexImage() should generate GL_INVALID_ENUM 2000-09-05 22:11:38 +00:00
Brian Paul
9c27278acf use clear_proxy_teximage() instead of MEMSET() 2000-09-05 22:04:30 +00:00
Brian Paul
f75d697c03 GetConvolution/SeparableFilter() now finished 2000-09-05 20:28:56 +00:00
Brian Paul
45f3634ce3 added tracing facility from Loki 2000-09-05 20:28:06 +00:00
Brian Paul
3a71d05e53 added tracing facility from Loki 2000-09-05 20:17:37 +00:00
Brian Paul
dca39e8911 added const to _mesa_select_tex_object() 2000-09-05 15:41:25 +00:00
Brian Paul
01e54753ff Fixed bug in fill_texture_image(). Clean-up in _mesaGetTexImage() 2000-09-05 15:40:34 +00:00
Brian Paul
bc6f07856f added convolution, ARB_imaging items 2000-09-02 17:54:28 +00:00
Brian Paul
513d486e75 enabled GL_EXT_convolution and GL_ARB_imaging 2000-09-02 17:52:53 +00:00
Brian Paul
a805bb9691 finished convolution 2000-09-02 17:52:21 +00:00
Brian Paul
bfc6ee1b13 destBytesPerRow was uninitialized in make_texture_image() 2000-09-01 22:01:12 +00:00
Brian Paul
e8a84a93aa initial check-in 2000-09-01 21:01:18 +00:00
Brian Paul
bed573586e added new extensions 2000-08-31 23:04:17 +00:00
Brian Paul
328cb0b512 added Glide3 bug fix info 2000-08-31 23:04:03 +00:00
Brian Paul
b3fdfa1246 fbiRev and tmuRev weren't getting initialized when using Glide3 2000-08-31 22:32:45 +00:00
Brian Paul
15915b03d0 added more resolutions (Andy Sloane) 2000-08-31 22:08:04 +00:00
Brian Paul
5a0d3dc7b3 convolution for glTexImage[123]D now works 2000-08-31 15:24:39 +00:00
Brian Paul
b92d64e150 renamed some variables 2000-08-31 15:24:07 +00:00
Brian Paul
f93b3dd69e more convolution work 2000-08-30 18:22:28 +00:00
Brian Paul
116970154d added _mesa_pack_float_rgba_span() 2000-08-30 18:21:37 +00:00
Brian Paul
8e053916c8 added more extensions testing code 2000-08-30 18:21:06 +00:00
Brian Paul
289d47eee5 finished compressed texture support (Bill White) 2000-08-29 23:31:23 +00:00
Brian Paul
148fb313c5 added MESA_FF_R8_G8_B8 (alpha filled to 0xff) format 2000-08-29 23:30:53 +00:00
Brian Paul
e8e20ae598 changed default Shininess to 6 2000-08-29 21:17:38 +00:00
Brian Paul
8aee2a3326 don't free ctx inside _mesa_initialize_context() if error, caller does that. 2000-08-29 18:57:58 +00:00
Brian Paul
ef9025a641 updated some comments 2000-08-29 14:25:30 +00:00
Jouk Jansen
5d3a95714c Committing in .
Modified Files:
 	Mesa/demos/descrip.mms

 One forgotten file for VMS to support /name=(as_is,short)

----------------------------------------------------------------------
2000-08-24 08:48:27 +00:00
Brian Paul
cf8eebee07 added convolve.h header 2000-08-23 14:33:04 +00:00
Brian Paul
732dd6f417 enabling 1D convolution caused a problem 2000-08-23 14:32:06 +00:00
Brian Paul
147b08328a moved convolution API functions to convolve.c 2000-08-23 14:31:25 +00:00
Brian Paul
7e70874420 finished separable filter functions 2000-08-22 18:54:25 +00:00
Jouk Jansen
b5b5c52034 Committing in .
Modified Files:
 	Mesa/include/GL/glx.h Mesa/include/GL/xmesa.h
 	Mesa/src/descrip.mms Mesa/src/X/glxheader.h
 	Mesa/src/X/xfonts.c Mesa/src/X/xfonts.h
 	Mesa/src-glu/descrip.mms Mesa/src-glut/capturexfont.c
 	Mesa/src-glut/descrip.mms Mesa/src-glut/glut_cmap.c
 	Mesa/src-glut/glut_event.c Mesa/src-glut/glut_fullscrn.c
 	Mesa/src-glut/glut_gamemode.c Mesa/src-glut/glut_init.c
 	Mesa/src-glut/glut_input.c Mesa/src-glut/glut_menu.c
 	Mesa/src-glut/glut_menu2.c Mesa/src-glut/glut_overlay.c
 	Mesa/src-glut/glut_win.c Mesa/src-glut/glut_winmisc.c
 	Mesa/src-glut/glutint.h Mesa/src-glut/layerutil.h
 	Mesa/vms/analyze_map.com
 Added Files:
 	Mesa/include/GL/vms_x_fix.h

 Patches effective on VMS only. This allows for compiling with
 /name=(as_is,short). This breaks the binary compatibility with previous
 versions for VMS, but is the only way to combine Mesa with GTK for VMS.


                      Jouk
----------------------------------------------------------------------
2000-08-22 13:31:00 +00:00
Brian Paul
f4f4dab25a changed quad vertex colors to be tessellation invariant 2000-08-21 21:05:39 +00:00
Brian Paul
043654bbfb print UNDEFINED MODE over samples that are undefined in the GL spec 2000-08-21 20:04:55 +00:00
Brian Paul
9b61162d43 use ImageTransferState 2000-08-21 14:26:01 +00:00
Brian Paul
3f8a70e5dd added convolve.c to file list 2000-08-21 14:25:25 +00:00
Brian Paul
a6d46f6b99 increased max convolution filter size 2000-08-21 14:24:53 +00:00
Brian Paul
d4b799b60c more convolution work, not done 2000-08-21 14:24:30 +00:00
Brian Paul
46e8a51383 basic glDrawPixels convolution implemented 2000-08-21 14:24:10 +00:00
Brian Paul
6339e621f5 fixed image transfer errors 2000-08-21 14:23:09 +00:00
Brian Paul
fa4525e289 implemented new ImageTransferState bitmask 2000-08-21 14:22:24 +00:00
Brian Paul
b1097f24a8 optimized glDrawPixels for glPixelZoom(1,-1) (Andrew Gee) 2000-08-16 20:51:53 +00:00
Brian Paul
e716184cae added missing radius multiplication factor to sphere code 2000-08-16 20:36:34 +00:00
Brian Paul
6f0294ca47 fixed typo which disabled simple_DrawPixels 2000-08-16 17:32:42 +00:00
Brian Paul
e98276c859 fixed some warnings (Alan H.) 2000-08-16 17:26:06 +00:00
Brian Paul
dff7924e25 removed all dependencies on XMesa 2000-08-13 03:57:21 +00:00
Brian Paul
094e2f1a67 fixed segfault problem when using MESA_GLX_FX 2000-08-13 03:44:08 +00:00
Brian Paul
7aac6d6b8e fixed depth mask bug in fxddClear(DD_DEPTH_BIT) 2000-08-09 17:56:27 +00:00
Jouk Jansen
8deec7bf5f Committing in .
Modified Files:
 	Mesa/src-glu/descrip.mms

 Update VMS-makefile for "old" GLU
----------------------------------------------------------------------
2000-08-09 06:24:55 +00:00
Brian Paul
963946d3d7 updated version to 3.5 2000-08-08 16:20:32 +00:00
Brian Paul
d4f6695a3e bumped MESA_MINOR to 5 2000-08-08 16:16:22 +00:00
Brian Paul
042066887b added GetInteger/Float/Double/Boolean/Pointer device driver functions 2000-08-08 16:15:14 +00:00
Brian Paul
507d83e4cc added NULL parameter checking to API functions 2000-08-03 14:03:17 +00:00
Brian Paul
ddf69f247f updated Phil's email address 2000-08-02 20:35:09 +00:00
Brian Paul
585d191ae7 updates from mesa3d@billbaxter.com 2000-08-02 20:29:03 +00:00
Brian Paul
bd0f7f42d6 fixed return val bug in glAreTexturesResident() 2000-08-02 20:16:03 +00:00
Brian Paul
6f173cafbd added include/GL/mesa_wgl.h to tar file list 2000-08-02 20:14:23 +00:00
Brian Paul
b8d907a9bb updated by Alessandro Pisani 2000-08-02 20:09:09 +00:00
Brian Paul
ee2ef90b7f test handling of lots of textures 2000-08-02 17:57:56 +00:00
Brian Paul
769439a23d removed GLU 1.2 symbols 2000-08-02 14:08:48 +00:00
Brian Paul
00277e836d define GL_GLEXT_PROTOTYPES before including mesa_wgl.h 2000-08-02 00:41:21 +00:00
Brian Paul
6d04725282 initialize texture priorities to 1.0, clean-up of _mesa_PrioritizeTextures() 2000-08-02 00:38:25 +00:00
Brian Paul
390488d12e glGetTexParameter(GL_TEXTURE_RESIDENT) didn't query device driver 2000-08-01 17:33:53 +00:00
Brian Paul
85dc4e7a77 test against an epsilon magnitude in gl_rotation_matrix() 2000-07-31 15:31:29 +00:00
Brian Paul
974e468e6d install glext.h too 2000-07-31 15:27:11 +00:00
Brian Paul
6998c71458 added missing widgets-mesa/src/*.c files, updated version numbers to 3.5 2000-07-31 13:59:22 +00:00
Brian Paul
5c8de84f5f 3.5 release notes 2000-07-31 13:58:04 +00:00
Brian Paul
1357249aa9 added placeholders for 3.4 and 3.5 info 2000-07-31 13:57:40 +00:00
663 changed files with 193914 additions and 40043 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,20 @@
# $Id: Makefile.X11,v 1.32.2.7 2001/02/07 23:49:26 brianp Exp $
# $Id: Makefile.X11,v 1.48 2001/06/19 21:49:06 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.4.1
#
# Version: 3.5
#
# Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
#
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
@@ -68,6 +68,7 @@ default:
@echo " make linux for Linux systems, make shared .so libs"
@echo " make linux-static for Linux systems, make static .a libs"
@echo " make linux-trace for Linux systems, with API trace extension"
@echo " make linux-x86 for Linux on Intel, make shared .so libs"
@echo " make linux-x86-static for Linux on Intel, make static .a libs"
@echo " make linux-ggi for Linux systems with libggi"
@@ -75,7 +76,6 @@ default:
@echo " make linux-glide for Linux w/ 3Dfx Glide driver"
@echo " make linux-386-glide for Linux w/ 3Dfx Glide driver, Intel assembly"
@echo " make linux-386-opt-glide for Linux with 3Dfx Voodoo1 for GLQuake"
@echo " make linux-386-opt-V2-glide for Linux with 3Dfx Voodoo2 for GLQuake"
@echo " make linux-x86-glide for Linux w/ all x86 asm for Glide"
@echo " make linux-alpha for Linux on Alpha systems"
@echo " make linux-alpha-static for Linux on Alpha systems, static libs"
@@ -84,6 +84,7 @@ default:
@echo " make linux-sparc for Linux on Sparc systems"
@echo " make linux-sparc5-elf for Sparc5 systems, make ELF shared libs"
@echo " make linux-sparc-ultra for UltraSparc systems, make ELF shared libs"
@echo " make linux-osmesa16 for 16-bit/channel OSMesa"
@echo " make lynxos for LynxOS systems with GCC"
@echo " make macintosh for Macintosh"
@echo " make machten-2.2 for Macs w/ MachTen 2.2 (68k w/ FPU)"
@@ -132,6 +133,9 @@ default:
# XXX we may have to split up this group of targets into those that
# have a C++ compiler and those that don't for the SI-GLU library.
aix aix-sl amix bsdos bsdos4 dgux freebsd freebsd-386 gcc \
hpux9 hpux9-sl hpux9-gcc hpux9-gcc-sl \
hpux10 hpux10-sl hpux10-gcc hpux10-gcc-sl \
@@ -139,7 +143,7 @@ irix4 irix5 irix5-gcc irix5-dso irix6-o32 irix6-o32-dso \
linux linux-static linux-debug linux-static-debug linux-prof \
linux-x86 linux-x86-static linux-x86-debug \
linux-glide linux-386-glide linux-386-opt-glide \
linux-386-opt-V2-glide linux-x86-glide linux-glide-debug linux-glide-prof \
linux-x86-glide linux-glide-debug linux-glide-prof \
linux-alpha-static linux-alpha \
linux-ppc-static linux-ppc \
linux-sparc \
@@ -154,11 +158,11 @@ sunos5-thread sunos5-pthread sunos5-gcc-thread sunos5-gcc-pthread \
sunos5-x11r6-gcc-sl ultrix-gcc unicos unixware uwin vistra:
-mkdir lib
if [ -d src ] ; then touch src/depend ; fi
if [ -d src-glu ] ; then touch src-glu/depend ; fi
if [ -d si-glu ] ; then touch si-glu/depend ; fi
if [ -d src-glut ] ; then touch src-glut/depend ; fi
if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi
if [ -d src ] ; then cd src ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d src-glu ] ; then cd src-glu ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d si-glu ] ; then cd si-glu ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d demos ] ; then cd demos ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d xdemos ] ; then cd xdemos ; $(MAKE) -f Makefile.X11 $@ ; fi
@@ -260,14 +264,14 @@ os2-x11:
linux-ggi linux-386-ggi:
-mkdir lib
touch src/depend
touch src-glu/depend
touch si-glu/depend
if [ -d src-glut ] ; then touch src-glut/depend ; fi
if [ -d widgets-sgi ] ; then touch widgets-sgi/depend ; fi
if [ -d ggi ] ; then touch ggi/depend ; fi
if [ -d src ] ; then cd src ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d src/GGI/default ] ; then cd src/GGI/default ; $(MAKE) ; fi
if [ -d src/GGI/display ] ; then cd src/GGI/display ; $(MAKE) ; fi
if [ -d src-glut ] ; then cd src-glu ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d si-glu ] ; then cd si-glu ; $(MAKE) -f Makefile.X11 $@ ; fi
# if [ -d src-glut ] ; then cd src-glut ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d ggi ] ; then cd ggi ; $(MAKE) -f Makefile.X11 $@ ; fi
if [ -d ggi ] ; then cd ggi/demos; $(MAKE) ; fi
@@ -290,6 +294,12 @@ linux-ggi-install linux-386-ggi-install:
# echo ".include $(DESTDIR)/etc/ggi/ggimesa.conf" >> $(DESTDIR)/etc/ggi/libggi.conf ; \
# fi
linux-osmesa16:
-mkdir lib
if [ -d src ] ; then touch src/depend ; fi
if [ -d src ] ; then cd src ; $(MAKE) -f Makefile.OSMesa16 $@ ; fi
# Remove .o files, emacs backup files, etc.
clean:
-rm -f ggi/*~ *.o
@@ -299,6 +309,7 @@ clean:
-rm -f include/GL/*~
-rm -f src/*.o src/*~ src/*.a src/*/*.o src/*/*~
-rm -f src-glu/*.o src-glu/*~ src-glu/*.a
-rm -f si-glu/*/*.o si-glu/*/*/*.o
-rm -f src-glut/*.o
-rm -f demos/*.o
-rm -f book/*.o book/*~
@@ -320,227 +331,275 @@ realclean: clean
DIRECTORY = Mesa-3.4.1
LIB_NAME = MesaLib-3.4.1
DEMO_NAME = MesaDemos-3.4.1
GLU_NAME = MesaGLU-3.4.1
DIRECTORY = Mesa-3.5
LIB_NAME = MesaLib-3.5
DEMO_NAME = MesaDemos-3.5
GLU_NAME = MesaGLU-3.5
GLUT_NAME = GLUT-3.7
LIB_FILES = \
$(DIRECTORY)/Makefile* \
$(DIRECTORY)/Make-config \
$(DIRECTORY)/acconfig.h \
$(DIRECTORY)/acinclude.m4 \
$(DIRECTORY)/aclocal.m4 \
$(DIRECTORY)/conf.h.in \
$(DIRECTORY)/config.guess \
$(DIRECTORY)/config.sub \
$(DIRECTORY)/configure \
$(DIRECTORY)/configure.in \
$(DIRECTORY)/install-sh \
$(DIRECTORY)/ltconfig \
$(DIRECTORY)/ltmain.sh \
$(DIRECTORY)/missing \
$(DIRECTORY)/mkinstalldirs \
$(DIRECTORY)/stamp-h.in \
$(DIRECTORY)/docs/CONFIG \
$(DIRECTORY)/docs/CONFORM \
$(DIRECTORY)/docs/COPYING \
$(DIRECTORY)/docs/COPYRIGHT \
$(DIRECTORY)/docs/DEVINFO \
$(DIRECTORY)/docs/IAFA-PACKAGE \
$(DIRECTORY)/docs/INSTALL \
$(DIRECTORY)/docs/INSTALL.GNU \
$(DIRECTORY)/docs/README \
$(DIRECTORY)/docs/README.* \
$(DIRECTORY)/docs/RELNOTES* \
$(DIRECTORY)/docs/VERSIONS \
$(DIRECTORY)/docs/*.spec \
$(DIRECTORY)/bin/README \
$(DIRECTORY)/bin/mklib* \
$(DIRECTORY)/*.BAT \
$(DIRECTORY)/*.bat \
$(DIRECTORY)/descrip.mms \
$(DIRECTORY)/mms-config \
$(DIRECTORY)/xlib.opt \
$(DIRECTORY)/STARTUP.MK \
$(DIRECTORY)/mesawin32.mak \
$(DIRECTORY)/Names.win \
$(DIRECTORY)/win32-openstep.sh \
$(DIRECTORY)/common.dja \
$(DIRECTORY)/include/GL/Makefile.in \
$(DIRECTORY)/include/GL/Makefile.am \
$(DIRECTORY)/include/GL/dosmesa.h \
$(DIRECTORY)/include/GL/amesa.h \
$(DIRECTORY)/include/GL/fxmesa.h \
$(DIRECTORY)/include/GL/ggimesa.h \
$(DIRECTORY)/include/GL/gl.h \
$(DIRECTORY)/include/GL/glext.h \
$(DIRECTORY)/include/GL/gl_mangle.h \
$(DIRECTORY)/include/GL/glu.h \
$(DIRECTORY)/include/GL/glu_mangle.h \
$(DIRECTORY)/include/GL/glx.h \
$(DIRECTORY)/include/GL/glx_mangle.h \
$(DIRECTORY)/include/GL/mesa_wgl.h \
$(DIRECTORY)/include/GL/mglmesa.h \
$(DIRECTORY)/include/GL/osmesa.h \
$(DIRECTORY)/include/GL/svgamesa.h \
$(DIRECTORY)/include/GL/wmesa.h \
$(DIRECTORY)/include/GL/xmesa.h \
$(DIRECTORY)/include/GL/xmesa_x.h \
$(DIRECTORY)/include/GL/xmesa_xf86.h \
$(DIRECTORY)/include/GLView.h \
$(DIRECTORY)/include/Makefile.in \
$(DIRECTORY)/include/Makefile.am \
$(DIRECTORY)/src/Makefile* \
$(DIRECTORY)/src/descrip.mms \
$(DIRECTORY)/src/mms_depend \
$(DIRECTORY)/src/mesa.conf \
$(DIRECTORY)/src/*.def \
$(DIRECTORY)/src/depend \
$(DIRECTORY)/src/*.[chS] \
$(DIRECTORY)/src/Allegro/*.[ch] \
$(DIRECTORY)/src/BeOS/*.cpp \
$(DIRECTORY)/src/D3D/*.cpp \
$(DIRECTORY)/src/D3D/*.CPP \
$(DIRECTORY)/src/D3D/*.h \
$(DIRECTORY)/src/D3D/*.H \
$(DIRECTORY)/src/D3D/*.c \
$(DIRECTORY)/src/D3D/*.C \
$(DIRECTORY)/src/D3D/MAKEFILE \
$(DIRECTORY)/src/D3D/*bat \
$(DIRECTORY)/src/D3D/*DEF \
$(DIRECTORY)/src/DOS/DEPEND.DOS \
$(DIRECTORY)/src/DOS/*.c \
$(DIRECTORY)/src/FX/Makefile.am \
$(DIRECTORY)/src/FX/Makefile.in \
$(DIRECTORY)/src/FX/*.[ch] \
$(DIRECTORY)/src/FX/*.def \
$(DIRECTORY)/src/FX/X86/Makefile.am \
$(DIRECTORY)/src/FX/X86/Makefile.in \
$(DIRECTORY)/src/FX/X86/*.[Shc] \
$(DIRECTORY)/src/GGI/Makefile.am \
$(DIRECTORY)/src/GGI/Makefile.in \
$(DIRECTORY)/src/GGI/*.[ch] \
$(DIRECTORY)/src/GGI/ggimesa.conf.in \
$(DIRECTORY)/src/GGI/default/*.c \
$(DIRECTORY)/src/GGI/default/Makefile.am \
$(DIRECTORY)/src/GGI/default/Makefile.in \
$(DIRECTORY)/src/GGI/default/genkgi.conf.in \
$(DIRECTORY)/src/GGI/display/*.c \
$(DIRECTORY)/src/GGI/display/Makefile.am \
$(DIRECTORY)/src/GGI/display/Makefile.in \
$(DIRECTORY)/src/GGI/display/fbdev.conf.in \
$(DIRECTORY)/src/GGI/include/Makefile.am \
$(DIRECTORY)/src/GGI/include/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/Makefile.am \
$(DIRECTORY)/src/GGI/include/ggi/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.am \
$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/mesa/*.h \
$(DIRECTORY)/src/KNOWN_BUGS \
$(DIRECTORY)/src/OSmesa/Makefile.am \
$(DIRECTORY)/src/OSmesa/Makefile.in \
$(DIRECTORY)/src/OSmesa/*.[ch] \
$(DIRECTORY)/src/S3/*.[ch] \
$(DIRECTORY)/src/S3/*.def \
$(DIRECTORY)/src/S3/*.mak \
$(DIRECTORY)/src/S3/*.rc \
$(DIRECTORY)/src/SVGA/Makefile.am \
$(DIRECTORY)/src/SVGA/Makefile.in \
$(DIRECTORY)/src/SVGA/*.[ch] \
$(DIRECTORY)/src/Windows/*.[ch] \
$(DIRECTORY)/src/Windows/*.def \
$(DIRECTORY)/src/X/Makefile.am \
$(DIRECTORY)/src/X/Makefile.in \
$(DIRECTORY)/src/X/*.[ch] \
$(DIRECTORY)/src/X86/*.[ch] \
$(DIRECTORY)/src/X86/Makefile.am \
$(DIRECTORY)/src/X86/Makefile.in \
$(DIRECTORY)/src/X86/*.S \
$(DIRECTORY)/src-glu/README[12] \
$(DIRECTORY)/src-glu/Makefile* \
$(DIRECTORY)/src-glu/descrip.mms \
$(DIRECTORY)/src-glu/mms_depend \
$(DIRECTORY)/src-glu/*.def \
$(DIRECTORY)/src-glu/depend \
$(DIRECTORY)/src-glu/*.[ch] \
$(DIRECTORY)/widgets-mesa/ChangeLog \
$(DIRECTORY)/widgets-mesa/INSTALL \
$(DIRECTORY)/widgets-mesa/Makefile.in \
$(DIRECTORY)/widgets-mesa/README \
$(DIRECTORY)/widgets-mesa/TODO \
$(DIRECTORY)/widgets-mesa/configure \
$(DIRECTORY)/widgets-mesa/configure.in \
$(DIRECTORY)/widgets-mesa/demos/ChangeLog \
$(DIRECTORY)/widgets-mesa/demos/Cube \
$(DIRECTORY)/widgets-mesa/demos/Ed \
$(DIRECTORY)/widgets-mesa/demos/Makefile.in \
$(DIRECTORY)/widgets-mesa/demos/Mcube \
$(DIRECTORY)/widgets-mesa/demos/Tea \
$(DIRECTORY)/widgets-mesa/demos/*.[ch] \
$(DIRECTORY)/widgets-mesa/demos/events \
$(DIRECTORY)/widgets-mesa/include/GL/ChangeLog \
$(DIRECTORY)/widgets-mesa/include/GL/*.h \
$(DIRECTORY)/widgets-mesa/include/GL/Makefile.in \
$(DIRECTORY)/widgets-mesa/man/ChangeLog \
$(DIRECTORY)/widgets-mesa/man/GL* \
$(DIRECTORY)/widgets-mesa/man/Makefile.in \
$(DIRECTORY)/widgets-mesa/man/Mesa* \
$(DIRECTORY)/widgets-mesa/src/ChangeLog \
$(DIRECTORY)/widgets-mesa/src/*.c \
$(DIRECTORY)/widgets-mesa/src/Makefile.in \
$(DIRECTORY)/widgets-sgi/*.[ch] \
$(DIRECTORY)/widgets-sgi/Makefile* \
$(DIRECTORY)/widgets-sgi/README \
$(DIRECTORY)/util/README \
$(DIRECTORY)/util/Makefile.am \
$(DIRECTORY)/util/Makefile.in \
$(DIRECTORY)/util/*.[ch] \
$(DIRECTORY)/util/sampleMakefile \
$(DIRECTORY)/vms/analyze_map.com \
$(DIRECTORY)/vms/xlib.opt \
$(DIRECTORY)/vms/xlib_share.opt \
$(DIRECTORY)/BeOS/Makefile \
$(DIRECTORY)/BeOS/*.cpp \
$(DIRECTORY)/WIN32/NMAKE.MAK \
$(DIRECTORY)/WIN32/NMAKE.MIF \
$(DIRECTORY)/WIN32/RES/*rc \
$(DIRECTORY)/WIN32/RES/*def \
$(DIRECTORY)/WIN32/RULES/lib.* \
$(DIRECTORY)/WIN32/RULES/progs.* \
$(DIRECTORY)/macos/README \
$(DIRECTORY)/macos/gli_api/*.h \
$(DIRECTORY)/macos/cglpane/CGLPane.* \
$(DIRECTORY)/macos/include-mac/*.h \
$(DIRECTORY)/macos/libraries/*.stub \
$(DIRECTORY)/macos/libraries/*Stub \
$(DIRECTORY)/macos/projects/*.mcp \
$(DIRECTORY)/macos/projects/*.exp \
$(DIRECTORY)/macos/projects/*.h \
$(DIRECTORY)/macos/resources/*.c \
$(DIRECTORY)/macos/resources/*.r \
$(DIRECTORY)/macos/resources/*.rsrc \
$(DIRECTORY)/macos/src-agl/*.exp \
$(DIRECTORY)/macos/src-agl/*.[ch] \
$(DIRECTORY)/macos/src-gli/*.[ch] \
$(DIRECTORY)/Makefile* \
$(DIRECTORY)/Make-config \
$(DIRECTORY)/acconfig.h \
$(DIRECTORY)/acinclude.m4 \
$(DIRECTORY)/aclocal.m4 \
$(DIRECTORY)/common_rules.make \
$(DIRECTORY)/conf.h.in \
$(DIRECTORY)/config.guess \
$(DIRECTORY)/config.sub \
$(DIRECTORY)/configure \
$(DIRECTORY)/configure.in \
$(DIRECTORY)/install-sh \
$(DIRECTORY)/ltconfig \
$(DIRECTORY)/ltmain.sh \
$(DIRECTORY)/missing \
$(DIRECTORY)/mkinstalldirs \
$(DIRECTORY)/stamp-h.in \
$(DIRECTORY)/docs/CONFIG \
$(DIRECTORY)/docs/CONFORM \
$(DIRECTORY)/docs/COPYING \
$(DIRECTORY)/docs/COPYRIGHT \
$(DIRECTORY)/docs/DEVINFO \
$(DIRECTORY)/docs/IAFA-PACKAGE \
$(DIRECTORY)/docs/INSTALL \
$(DIRECTORY)/docs/INSTALL.GNU \
$(DIRECTORY)/docs/README \
$(DIRECTORY)/docs/README.* \
$(DIRECTORY)/docs/RELNOTES* \
$(DIRECTORY)/docs/VERSIONS \
$(DIRECTORY)/docs/*.spec \
$(DIRECTORY)/bin/README \
$(DIRECTORY)/bin/mklib* \
$(DIRECTORY)/descrip.mms \
$(DIRECTORY)/mms-config \
$(DIRECTORY)/m4/*.m4 \
$(DIRECTORY)/xlib.opt \
$(DIRECTORY)/mesawin32.mak \
$(DIRECTORY)/include/GL/internal/glcore.h \
$(DIRECTORY)/include/GL/Makefile.in \
$(DIRECTORY)/include/GL/Makefile.am \
$(DIRECTORY)/include/GL/dosmesa.h \
$(DIRECTORY)/include/GL/amesa.h \
$(DIRECTORY)/include/GL/fxmesa.h \
$(DIRECTORY)/include/GL/ggimesa.h \
$(DIRECTORY)/include/GL/gl.h \
$(DIRECTORY)/include/GL/glext.h \
$(DIRECTORY)/include/GL/gl_mangle.h \
$(DIRECTORY)/include/GL/glu.h \
$(DIRECTORY)/include/GL/glu_mangle.h \
$(DIRECTORY)/include/GL/glx.h \
$(DIRECTORY)/include/GL/glxext.h \
$(DIRECTORY)/include/GL/glx_mangle.h \
$(DIRECTORY)/include/GL/mesa_wgl.h \
$(DIRECTORY)/include/GL/mglmesa.h \
$(DIRECTORY)/include/GL/osmesa.h \
$(DIRECTORY)/include/GL/svgamesa.h \
$(DIRECTORY)/include/GL/wmesa.h \
$(DIRECTORY)/include/GL/xmesa.h \
$(DIRECTORY)/include/GL/xmesa_x.h \
$(DIRECTORY)/include/GL/xmesa_xf86.h \
$(DIRECTORY)/include/GLView.h \
$(DIRECTORY)/include/Makefile.in \
$(DIRECTORY)/include/Makefile.am \
$(DIRECTORY)/src/Makefile* \
$(DIRECTORY)/src/libGL_la_SOURCES \
$(DIRECTORY)/src/descrip.mms \
$(DIRECTORY)/src/mms_depend \
$(DIRECTORY)/src/mesa.conf \
$(DIRECTORY)/src/*.def \
$(DIRECTORY)/src/depend \
$(DIRECTORY)/src/*.[chS] \
$(DIRECTORY)/src/array_cache/*.[ch] \
$(DIRECTORY)/src/array_cache/Makefile* \
$(DIRECTORY)/src/array_cache/libMesaAC_la_SOURCES \
$(DIRECTORY)/src/math/*.[ch] \
$(DIRECTORY)/src/math/Makefile* \
$(DIRECTORY)/src/swrast/*.[ch] \
$(DIRECTORY)/src/swrast/Makefile* \
$(DIRECTORY)/src/swrast/libMesaSwrast_la_SOURCES \
$(DIRECTORY)/src/swrast_setup/*.[ch] \
$(DIRECTORY)/src/swrast_setup/Makefile* \
$(DIRECTORY)/src/tnl/*.[ch] \
$(DIRECTORY)/src/tnl/Makefile* \
$(DIRECTORY)/src/tnl/libMesaTnl_la_SOURCES \
$(DIRECTORY)/src/BeOS/*.cpp \
$(DIRECTORY)/src/FX/Makefile.am \
$(DIRECTORY)/src/FX/Makefile.in \
$(DIRECTORY)/src/FX/libMesaFX_la_SOURCES \
$(DIRECTORY)/src/FX/*.[ch] \
$(DIRECTORY)/src/FX/*.def \
$(DIRECTORY)/src/FX/X86/Makefile.am \
$(DIRECTORY)/src/FX/X86/Makefile.in \
$(DIRECTORY)/src/FX/X86/*.[Shc] \
$(DIRECTORY)/src/GGI/Makefile.am \
$(DIRECTORY)/src/GGI/Makefile.in \
$(DIRECTORY)/src/GGI/*.[ch] \
$(DIRECTORY)/src/GGI/ggimesa.conf.in \
$(DIRECTORY)/src/GGI/default/*.c \
$(DIRECTORY)/src/GGI/default/Makefile.am \
$(DIRECTORY)/src/GGI/default/Makefile.in \
$(DIRECTORY)/src/GGI/default/genkgi.conf.in \
$(DIRECTORY)/src/GGI/display/*.c \
$(DIRECTORY)/src/GGI/display/Makefile.am \
$(DIRECTORY)/src/GGI/display/Makefile.in \
$(DIRECTORY)/src/GGI/display/fbdev.conf.in \
$(DIRECTORY)/src/GGI/include/Makefile.am \
$(DIRECTORY)/src/GGI/include/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/Makefile.am \
$(DIRECTORY)/src/GGI/include/ggi/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.am \
$(DIRECTORY)/src/GGI/include/ggi/mesa/Makefile.in \
$(DIRECTORY)/src/GGI/include/ggi/mesa/*.h \
$(DIRECTORY)/src/KNOWN_BUGS \
$(DIRECTORY)/src/OSmesa/Makefile.am \
$(DIRECTORY)/src/OSmesa/Makefile.in \
$(DIRECTORY)/src/OSmesa/*.[ch] \
$(DIRECTORY)/src/SPARC/*.[chS] \
$(DIRECTORY)/src/SPARC/Makefile.am \
$(DIRECTORY)/src/SPARC/Makefile.in \
$(DIRECTORY)/src/SVGA/Makefile.am \
$(DIRECTORY)/src/SVGA/Makefile.in \
$(DIRECTORY)/src/SVGA/*.[ch] \
$(DIRECTORY)/src/Trace/*.[ch] \
$(DIRECTORY)/src/Trace/Makefile.am \
$(DIRECTORY)/src/Trace/Makefile.in \
$(DIRECTORY)/src/Windows/*.[ch] \
$(DIRECTORY)/src/Windows/*.def \
$(DIRECTORY)/src/X/Makefile.am \
$(DIRECTORY)/src/X/Makefile.in \
$(DIRECTORY)/src/X/*.[ch] \
$(DIRECTORY)/src/X86/*.[ch] \
$(DIRECTORY)/src/X86/Makefile.am \
$(DIRECTORY)/src/X86/Makefile.in \
$(DIRECTORY)/src/X86/*.S \
$(DIRECTORY)/si-glu/Makefile.am \
$(DIRECTORY)/si-glu/Makefile.in \
$(DIRECTORY)/si-glu/Makefile.X11 \
$(DIRECTORY)/si-glu/dummy.cc \
$(DIRECTORY)/si-glu/descrip.mms \
$(DIRECTORY)/si-glu/mesaglu.opt \
$(DIRECTORY)/si-glu/include/gluos.h \
$(DIRECTORY)/si-glu/include/Makefile.am \
$(DIRECTORY)/si-glu/include/Makefile.in \
$(DIRECTORY)/si-glu/libnurbs/Makefile.am \
$(DIRECTORY)/si-glu/libnurbs/Makefile.in \
$(DIRECTORY)/si-glu/libnurbs/interface/*.h \
$(DIRECTORY)/si-glu/libnurbs/interface/*.cc \
$(DIRECTORY)/si-glu/libnurbs/interface/libNIFac_la_SOURCES \
$(DIRECTORY)/si-glu/libnurbs/interface/Makefile.am \
$(DIRECTORY)/si-glu/libnurbs/interface/Makefile.in \
$(DIRECTORY)/si-glu/libnurbs/internals/*.h \
$(DIRECTORY)/si-glu/libnurbs/internals/*.cc \
$(DIRECTORY)/si-glu/libnurbs/internals/libNInt_la_SOURCES \
$(DIRECTORY)/si-glu/libnurbs/internals/Makefile.am \
$(DIRECTORY)/si-glu/libnurbs/internals/Makefile.in \
$(DIRECTORY)/si-glu/libnurbs/nurbtess/*.h \
$(DIRECTORY)/si-glu/libnurbs/nurbtess/*.cc \
$(DIRECTORY)/si-glu/libnurbs/nurbtess/libNTess_la_SOURCES \
$(DIRECTORY)/si-glu/libnurbs/nurbtess/Makefile.am \
$(DIRECTORY)/si-glu/libnurbs/nurbtess/Makefile.in \
$(DIRECTORY)/si-glu/libtess/README \
$(DIRECTORY)/si-glu/libtess/alg-outline \
$(DIRECTORY)/si-glu/libtess/*.[ch] \
$(DIRECTORY)/si-glu/libtess/libtess_la_SOURCES \
$(DIRECTORY)/si-glu/libtess/Makefile.am \
$(DIRECTORY)/si-glu/libtess/Makefile.in \
$(DIRECTORY)/si-glu/libutil/*.[ch] \
$(DIRECTORY)/si-glu/libutil/libutil_la_SOURCES \
$(DIRECTORY)/si-glu/libutil/Makefile.am \
$(DIRECTORY)/si-glu/libutil/Makefile.in \
$(DIRECTORY)/src-glu/README[12] \
$(DIRECTORY)/src-glu/Makefile* \
$(DIRECTORY)/src-glu/descrip.mms \
$(DIRECTORY)/src-glu/mms_depend \
$(DIRECTORY)/src-glu/*.def \
$(DIRECTORY)/src-glu/depend \
$(DIRECTORY)/src-glu/*.[ch] \
$(DIRECTORY)/widgets-mesa/ChangeLog \
$(DIRECTORY)/widgets-mesa/INSTALL \
$(DIRECTORY)/widgets-mesa/Makefile.in \
$(DIRECTORY)/widgets-mesa/README \
$(DIRECTORY)/widgets-mesa/TODO \
$(DIRECTORY)/widgets-mesa/configure \
$(DIRECTORY)/widgets-mesa/configure.in \
$(DIRECTORY)/widgets-mesa/demos/ChangeLog \
$(DIRECTORY)/widgets-mesa/demos/Cube \
$(DIRECTORY)/widgets-mesa/demos/Ed \
$(DIRECTORY)/widgets-mesa/demos/Makefile.in \
$(DIRECTORY)/widgets-mesa/demos/Mcube \
$(DIRECTORY)/widgets-mesa/demos/Tea \
$(DIRECTORY)/widgets-mesa/demos/*.[ch] \
$(DIRECTORY)/widgets-mesa/demos/events \
$(DIRECTORY)/widgets-mesa/include/GL/ChangeLog \
$(DIRECTORY)/widgets-mesa/include/GL/*.h \
$(DIRECTORY)/widgets-mesa/include/GL/Makefile.in \
$(DIRECTORY)/widgets-mesa/man/ChangeLog \
$(DIRECTORY)/widgets-mesa/man/GL* \
$(DIRECTORY)/widgets-mesa/man/Makefile.in \
$(DIRECTORY)/widgets-mesa/man/Mesa* \
$(DIRECTORY)/widgets-mesa/src/ChangeLog \
$(DIRECTORY)/widgets-mesa/src/*.c \
$(DIRECTORY)/widgets-mesa/src/Makefile.in \
$(DIRECTORY)/widgets-sgi/*.[ch] \
$(DIRECTORY)/widgets-sgi/Makefile* \
$(DIRECTORY)/widgets-sgi/README \
$(DIRECTORY)/util/README \
$(DIRECTORY)/util/Makefile.am \
$(DIRECTORY)/util/Makefile.in \
$(DIRECTORY)/util/*.[ch] \
$(DIRECTORY)/util/sampleMakefile \
$(DIRECTORY)/vms/analyze_map.com \
$(DIRECTORY)/vms/xlib.opt \
$(DIRECTORY)/vms/xlib_share.opt \
$(DIRECTORY)/BeOS/Makefile \
$(DIRECTORY)/BeOS/*.cpp
OBSOLETE_LIB_FILES = \
$(DIRECTORY)/src/Allegro/*.[ch] \
$(DIRECTORY)/src/D3D/*.cpp \
$(DIRECTORY)/src/D3D/*.CPP \
$(DIRECTORY)/src/D3D/*.h \
$(DIRECTORY)/src/D3D/*.H \
$(DIRECTORY)/src/D3D/*.c \
$(DIRECTORY)/src/D3D/*.C \
$(DIRECTORY)/src/D3D/MAKEFILE \
$(DIRECTORY)/src/D3D/*bat \
$(DIRECTORY)/src/D3D/*DEF \
$(DIRECTORY)/src/DOS/DEPEND.DOS \
$(DIRECTORY)/src/DOS/*.c \
$(DIRECTORY)/src/S3/*.[ch] \
$(DIRECTORY)/src/S3/*.def \
$(DIRECTORY)/src/S3/*.mak \
$(DIRECTORY)/src/S3/*.rc \
$(DIRECTORY)/macos/README \
$(DIRECTORY)/macos/gli_api/*.h \
$(DIRECTORY)/macos/cglpane/CGLPane.* \
$(DIRECTORY)/macos/include-mac/*.h \
$(DIRECTORY)/macos/libraries/*.stub \
$(DIRECTORY)/macos/libraries/*Stub \
$(DIRECTORY)/macos/projects/*.mcp \
$(DIRECTORY)/macos/projects/*.exp \
$(DIRECTORY)/macos/projects/*.h \
$(DIRECTORY)/macos/resources/*.c \
$(DIRECTORY)/macos/resources/*.r \
$(DIRECTORY)/macos/resources/*.rsrc \
$(DIRECTORY)/macos/src-agl/*.exp \
$(DIRECTORY)/macos/src-agl/*.[ch] \
$(DIRECTORY)/macos/src-gli/*.[ch] \
$(DIRECTORY)/OpenStep
DEMO_FILES = \
$(DIRECTORY)/include/GL/glut.h \
$(DIRECTORY)/include/GL/glutf90.h \
$(DIRECTORY)/include/GL/glut_h.dja \
$(DIRECTORY)/src-glut/Makefile* \
$(DIRECTORY)/src-glut/depend \
$(DIRECTORY)/src-glut/*def \
$(DIRECTORY)/src-glut/descrip.mms \
$(DIRECTORY)/src-glut/mms_depend \
$(DIRECTORY)/src-glut/*.[ch] \
$(DIRECTORY)/src-glut.dja/* \
$(DIRECTORY)/src-glut.beos/Makefile \
$(DIRECTORY)/src-glut.beos/*.cpp \
$(DIRECTORY)/src-glut.beos/*.h \
$(DIRECTORY)/images/* \
$(DIRECTORY)/demos/Makefile* \
$(DIRECTORY)/demos/descrip.mms \
@@ -560,6 +619,32 @@ DEMO_FILES = \
$(DIRECTORY)/mtdemos \
$(DIRECTORY)/ggi
OBSOLETE_DEMO_FILES = \
$(DIRECTORY)/include/GL/glut_h.dja \
$(DIRECTORY)/src-glut.dja/* \
$(DIRECTORY)/src-glut.beos/Makefile \
$(DIRECTORY)/src-glut.beos/*.cpp \
$(DIRECTORY)/src-glut.beos/*.h \
SI_GLU_FILES = \
$(DIRECTORY)/Makefile* \
$(DIRECTORY)/Make-config \
$(DIRECTORY)/bin/mklib* \
$(DIRECTORY)/include/GL/glu.h \
$(DIRECTORY)/si-glu/Makefile.X11 \
$(DIRECTORY)/si-glu/include/gluos.h \
$(DIRECTORY)/si-glu/libnurbs/interface/*.h \
$(DIRECTORY)/si-glu/libnurbs/interface/*.cc \
$(DIRECTORY)/si-glu/libnurbs/internals/*.h \
$(DIRECTORY)/si-glu/libnurbs/internals/*.cc \
$(DIRECTORY)/si-glu/libnurbs/nurbstess/*.h \
$(DIRECTORY)/si-glu/libnurbs/nurbstess/*.cc \
$(DIRECTORY)/si-glu/libtess/README \
$(DIRECTORY)/si-glu/libtess/alg-outline \
$(DIRECTORY)/si-glu/libtess/*.[ch] \
$(DIRECTORY)/si-glu/libutil/*.[ch]
GLU_FILES = \
$(DIRECTORY)/Makefile* \
$(DIRECTORY)/Make-config \
@@ -588,13 +673,16 @@ GLUT_FILES = \
$(DIRECTORY)/include/GL/glu_mangle.h \
$(DIRECTORY)/include/GL/glut.h \
$(DIRECTORY)/include/GL/glutf90.h \
$(DIRECTORY)/include/GL/glut_h.dja \
$(DIRECTORY)/src-glut/Makefile* \
$(DIRECTORY)/src-glut/depend \
$(DIRECTORY)/src-glut/*def \
$(DIRECTORY)/src-glut/descrip.mms \
$(DIRECTORY)/src-glut/mms_depend \
$(DIRECTORY)/src-glut/*.[ch] \
$(DIRECTORY)/src-glut/*.[ch]
OBSOLETE_GLUT_FILES = \
$(DIRECTORY)/include/GL/glut_h.dja \
$(DIRECTORY)/src-glut.dja/* \
$(DIRECTORY)/src-glut.beos/Makefile \
$(DIRECTORY)/src-glut.beos/*.cpp \

View File

@@ -0,0 +1,233 @@
XXX - Not complete yet!!!
Name
MESA_packed_depth_stencil
Name Strings
GL_MESA_packed_depth_stencil
Contact
Keith Whitwell, VA Linux Systems Inc. (keithw 'at' valinux.com)
Brian Paul, VA Linux Systems Inc. (brianp 'at' valinux.com)
Status
Not yet shipping.
Version
$Id: MESA_packed_depth_stencil.spec,v 1.1 2000/11/03 14:58:45 brianp Exp $
Number
???
Dependencies
EXT_abgr affects the definition of this extension
SGIS_texture4D affects the definition of this extension
EXT_cmyka affects the definition of this extension
ARB_packed_pixels affects the definition of this extension
Overview
Provides a mechanism for DrawPixels and ReadPixels to efficiently
transfer depth and stencil image data. Specifically, we defined new
packed pixel formats and types which pack both stencil and depth
into one value.
Issues:
1. Is this the right way to distinguish between 24/8 and 8/24
pixel formats? Should we instead provide both:
GL_DEPTH_STENCIL_MESA
GL_STENCIL_DEPTH_MESA
And perhaps just use GL_UNSIGNED_INT, GL_UNSIGNED_SHORT ?
2. If not, is it correct to use _REV to indicate that stencil
preceeds depth in the 1_15 and 8_24 formats?
3. Do we really want the GL_UNSIGNED_SHORT formats?
New Procedures and Functions
None.
New Tokens
Accepted by the <format> parameter of ReadPixels and DrawPixels:
GL_DEPTH_STENCIL_MESA 0x8750
Accepted by the <type> parameter of ReadPixels and DrawPixels:
GL_UNSIGNED_INT_24_8_MESA 0x8751
GL_UNSIGNED_INT_8_24_REV_MESA 0x8752
GL_UNSIGNED_SHORT_15_1_MESA 0x8753
GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754
Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.1 Specification (Rasterization)
One entry is added to table 3.5 (DrawPixels and ReadPixels formats).
The new table is:
Target
Format Name Buffer Element Meaning and Order
----------- ------ -------------------------
COLOR_INDEX Color Color index
STENCIL_INDEX Stencil Stencil index
DEPTH_COMPONENT Depth Depth component
RED Color R component
GREEN Color G component
BLUE Color B component
ALPHA Color A component
RGB Color R, G, B components
RGBA Color R, G, B, A components
BGRA Color B, G, R, A components
ABGR_EXT Color A, B, G, R components
CMYK_EXT Color Cyan, Magenta, Yellow, Black components
CMYKA_EXT Color Cyan, Magenta, Yellow, Black, A components
LUMINANCE Color Luminance component
LUMINANCE_ALPHA Color Luminance, A components
DEPTH_STENCIL Depth, Depth component, stencil index.
Stencil
Table 3.5: DrawPixels and ReadPixels formats. The third column
gives a description of and the number and order of elements in a
group.
Add to the description of packed pixel formats:
<type> Parameter Data of Matching
Token Name Type Elements Pixel Formats
---------------- ---- -------- -------------
UNSIGNED_BYTE_3_3_2 ubyte 3 RGB
UNSIGNED_BYTE_2_3_3_REV ubyte 3 RGB
UNSIGNED_SHORT_5_6_5 ushort 3 RGB
UNSIGNED_SHORT_5_6_5_REV ushort 3 RGB
UNSIGNED_SHORT_4_4_4_4 ushort 4 RGBA,BGRA,ABGR_EXT,CMYK_EXT
UNSIGNED_SHORT_4_4_4_4_REV ushort 4 RGBA,BGRA
UNSIGNED_SHORT_5_5_5_1 ushort 4 RGBA,BGRA,ABGR_EXT,CMYK_EXT
UNSIGNED_SHORT_1_5_5_5_REV ushort 4 RGBA,BGRA
UNSIGNED_INT_8_8_8_8 uint 4 RGBA,BGRA,ABGR_EXT,CMYK_EXT
UNSIGNED_INT_8_8_8_8_REV uint 4 RGBA,BGRA
UNSIGNED_INT_10_10_10_2 uint 4 RGBA,BGRA,ABGR_EXT,CMYK_EXT
UNSIGNED_INT_2_10_10_10_REV uint 4 RGBA,BGRA
UNSIGNED_SHORT_15_1_MESA ushort 2 DEPTH_STENCIL_MESA
UNSIGNED_SHORT_1_15_REV_MESA ushort 2 DEPTH_STENCIL_MESA
UNSIGNED_SHORT_24_8_MESA ushort 2 DEPTH_STENCIL_MESA
UNSIGNED_SHORT_8_24_REV_MESA ushort 2 DEPTH_STENCIL_MESA
UNSIGNED_INT_8_24:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+-----------------------+-----------------------------------------------------------------------+
| | |
+-----------------------+-----------------------------------------------------------------------+
first second
element element
UNSIGNED_INT_24_8:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+----------------------------------------------------------------------+------------------------+
| | |
+----------------------------------------------------------------------+------------------------+
first second
element element
UNSIGNED_SHORT_15_1:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+-----------------------------------------------------------+---+
| | |
+-----------------------------------------------------------+---+
first second
element element
UNSIGNED_SHORT_1_15_REV:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+---+-----------------------------------------------------------+
| | |
+---+-----------------------------------------------------------+
second first
element element
The assignment of elements to fields in the packed pixel is as
described in the table below:
First Second Third Fourth
Format Element Element Element Element
------ ------- ------- ------- -------
RGB red green blue
RGBA red green blue alpha
BGRA blue green red alpha
ABGR_EXT alpha blue green red
CMYK_EXT cyan magenta yellow black
DEPTH_STENCIL_MESA depth stencil
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)
The new format is added to the discussion of Obtaining Pixels from the
Framebuffer. It should read " If the <format> is one of RED, GREEN,
BLUE, ALPHA, RGB, RGBA, ABGR_EXT, LUMINANCE, or LUMINANCE_ALPHA, and
the GL is in color index mode, then the color index is obtained."
The new format is added to the discussion of Index Lookup. It should
read "If <format> is one of RED, GREEN, BLUE, ALPHA, RGB, RGBA,
ABGR_EXT, LUMINANCE, or LUMINANCE_ALPHA, then the index is used to
reference 4 tables of color components: PIXEL_MAP_I_TO_R,
PIXEL_MAP_I_TO_G, PIXEL_MAP_I_TO_B, and PIXEL_MAP_I_TO_A."
Additions to Chapter 5 of the 1.1 Specification (Special Functions)
None
Additions to Chapter 6 of the 1.1 Specification (State and State Requests)
None
Additions to the GLX Specification
None
GLX Protocol
TBD
Errors
None
New State
None
Revision History
Version 1.0 - 23 Sep 2000
Keith's original version.
Version 1.1 - 3 Nov 2000
Brian's edits, assigned values to new enums.

193
docs/MESA_sprite_point.spec Normal file
View File

@@ -0,0 +1,193 @@
XXX - Not complete yet!!!
Name
MESA_sprite_point
Name Strings
GL_MESA_sprite_point
Contact
Brian Paul, VA Linux Systems Inc. (brianp 'at' valinux.com)
Status
Not yet shipping.
Version
$Id: MESA_sprite_point.spec,v 1.1 2000/12/08 00:21:02 brianp Exp $
Number
???
Dependencies
GL_EXT_point_parameters effects the definition of this extension
GL_ARB_multitexture effects the definition of this extension
Overview
This extension modifies the way in which points are rendered,
specifically when they're textured. When SPRITE_POINT_MESA is enabled
a point is rendered as if it were a quadrilateral with unique texture
coordinates at each vertex. This extension effectively turns points
into sprites which may be rendered more easily and quickly than using
conventional textured quadrilaterals.
When using point size > 1 or attenuated points this extension is an
effective way to render many small sprite images for particle systems
or other effects.
Issues:
1. How are the texture coordinates computed?
The lower-left corner has texture coordinate (0,0,r,q).
The lower-right, (1,0,r,q). The upper-right, (1,1,r,q).
The upper-left, (0,1,r,q).
2. What about texgen and texture matrices?
Texgen and the texture matrix have no effect on the point's s and t
texture coordinates. The r and q coordinates may have been computed
by texgen or the texture matrix. Note that with a 3D texture and/or
texgen that the r coordinate could be used to select a slice in the
3D texture.
3. What about point smoothing?
When point smoothing is enabled, a triangle fan could be rendered
to approximate a circular point. This could be problematic to
define and implement so POINT_SMOOTH is ignored when drawing sprite
points.
Smoothed points can be approximated by using an appropriate texture
images, alpha testing and blending.
POLYGON_SMOOTH does effect the rendering of the quadrilateral, however.
4. What about sprite rotation?
There is none. Sprite points are always rendered as window-aligned
squares. One could define rotated texture images if desired. A 3D
texture and appropriate texture r coordinates could be used to
effectively specify image rotation per point.
5. What about POLYGON_MODE?
POLYGON_MODE does not effect the rasterization of the quadrilateral.
6. What about POLYGON_CULL?
TBD. Polygon culling is normally specified and implemented in the
transformation stage of OpenGL. However, some rasterization hardware
implements it later during triangle setup.
Polygon culling wouldn't be useful for sprite points since the
quadrilaterals are always defined in counter-clockwise order in
window space. For that reason, polygon culling should probably be
ignored.
7. Should sprite points be alpha-attenuated if their size is below the
point parameter's threshold size?
8. Should there be an advertisized maximum sprite point size?
No. Since we're rendering the point as a quadrilateral there's no
need to limit the size.
New Procedures and Functions
None.
New Tokens
Accepted by the <pname> parameter of Enable, Disable, IsEnabled,
GetIntegerv, GetBooleanv, GetFloatv and GetDoublev:
SPRITE_POINT_MESA 0x????
MAX_SPRITE_POINT_SIZE_MESA 0x???? (need this?)
Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.1 Specification (Rasterization)
Section ???.
When SPRITE_POINT_MESA is enabled points are rasterized as screen-
aligned quadrilaterals. If the four vertices of the quadrilateral
are labeled A, B, C, and D, starting at the lower-left corner and moving
counter-clockwise around the quadrilateral, then the vertex and
texture coordinates are computed as follows:
vertex window coordinate texture coordinate
A (x-r, y-r, z, w) (0, 0, r, q)
B (x+r, y-r, z, w) (1, 0, r, q)
C (x+r, y+r, z, w) (1, 1, r, q)
D (x-r, y+r, z, w) (0, 1, r, q)
where x, y, z, w are the point's window coordinates, r and q are the
point's 3rd and 4th texture coordinates and r is half the point's
size. The other vertex attributes (such as the color and fog coordinate)
are simply duplicated from the original point vertex.
Point size may either be specified with PointSize or computed
according to the EXT_point_parameters extension.
The new texture coordinates are not effected by texgen or the texture
matrix. Note, however, that the texture r and q coordinates are passed
unchanged and may have been computed with texgen and/or the texture
matrix.
If multiple texture units are present the same texture coordinate is
used for all texture units.
The point is then rendered as if it were a quadrilateral using the
normal point sampling rules. POLYGON_MODE does not effect the
rasterization of the quadrilateral but POLYGON_SMOOTH does.
POINT_SMOOTH has no effect when SPRITE_POINT_MESA is enabled.
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)
None.
Additions to Chapter 5 of the 1.1 Specification (Special Functions)
None
Additions to Chapter 6 of the 1.1 Specification (State and State Requests)
None
Additions to the GLX Specification
None
GLX Protocol
TBD
Errors
None
New State
Add boolean variable SPRITE_POINT_MESA to the point attribute group.
Revision History
Version 1.0 - 4 Dec 2000
Original draft.

360
docs/MESA_trace.spec Normal file
View File

@@ -0,0 +1,360 @@
Name
MESA_trace
Name Strings
GL_MESA_TRACE
Contact
Bernd Kreimeier, Loki Entertainment, bk 'at' lokigames.com
Brian Paul, VA Linux Systems, Inc., brianp 'at' valinux.com
Status
XXX - Not complete yet!!!
Version
$Id: MESA_trace.spec,v 1.2 2001/01/29 16:10:18 brianp Exp $
Number
none yet
Dependencies
OpenGL 1.2 is required.
The extension is written against the OpenGL 1.2 Specification
Overview
Provides the application with means to enable and disable logging
of GL calls including parameters as readable text. The verbosity
of the generated log can be controlled. The resulting logs are
valid (but possibly incomplete) C code and can be compiled and
linked for standalone test programs. The set of calls and the
amount of static data that is logged can be controlled at runtime.
The application can add comments and enable or disable tracing of GL
operations at any time. The data flow from the application to GL
and back is unaffected except for timing.
Application-side implementation of these features raises namespace
and linkage issues. In the driver dispatch table a simple
"chain of responsibility" pattern (aka "composable piepline")
can be added.
IP Status
The extension spec is in the public domain. The current implementation
in Mesa is covered by Mesa's XFree86-style copyright by the authors above.
This extension is partially inspired by the Quake2 QGL wrapper.
Issues
(1) Is this Extension obsolete because it can
be implemented as a wrapper DLL?
RESOLVED: No. While certain operating systems (Win32) provide linkers
that facilitate this kind of solution, other operating systems
(Linux) do not support hierarchical linking, so a wrapper solution
would result in symbol collisions.
Further, IHV's might have builtin support for tracing GL execution
that enjoys privileged access, or that they do not wish to separate
the tracing code from their driver code base.
(2) Should the Trace API explicitely support the notion of "frames?
This would require hooking into glXSwapBuffers calls as well.
RESOLVED: No. The application can use NewTraceMESA/EndTraceMESA
and TraceComment along with external parsing tools to split the
trace into frames, in whatever way considered adequate.
(2a) Should GLX calls be traced?
PBuffers and other render-to-texture solutions demonstrate that
context level commands beyond SwapBuffers might have to be
traced. The GL DLL exports the entry points, so this would not
be out of the question.
(3) Should the specification mandate the actual output format?
RESOLVED: No. It is sufficient to guarantee that all data and commands
will be traced as requested by Enable/DisableTraceMESA, in the order
encountered. Whether the resulting trace is available as a readable
text file, binary metafile, compilable source code, much less which
indentation and formatting has been used, is up to the implementation.
For the same reason this specification does not enforce or prohibit
additional information added to the trace (statistics, profiling/timing,
warnings on possible error conditions).
(4) Should the comment strings associated with names and pointer (ranges)
be considered persistent state?
RESOLVED: No. The implementation is not forced to use this information
on subsequent occurences of name/pointer, and is free to consider it
transient state.
(5) Should comment commands be prohibited between Begin/End?
RESOLVED: Yes, with the exception of TraceCommentMESA. TraceCommentMESA
is transient, the other commands might cause storage of persistent
data in the context. There is no need to have the ability mark names
or pointers between Begin and End.
New Procedures and Functions
void NewTraceMESA( bitfield mask, const ubyte * traceName )
void EndTraceMESA( void )
void EnableTraceMESA( bitfield mask )
void DisableTraceMESA( bitfield mask )
void TraceAssertAttribMESA( bitfield attribMask )
void TraceCommentMESA( const ubyte* comment )
void TraceTextureMESA( uint name, const ubyte* comment )
void TraceListMESA( uint name, const ubyte* comment )
void TracePointerMESA( void* pointer, const ubyte* comment )
void TracePointerRangeMESA( const void* first,
const void* last,
const ubyte* comment )
New Tokens
Accepted by the <mask> parameter of EnableTrace and DisableTrace:
TRACE_ALL_BITS_MESA 0xFFFF
TRACE_OPERATIONS_BIT_MESA 0x0001
TRACE_PRIMITIVES_BIT_MESA 0x0002
TRACE_ARRAYS_BIT_MESA 0x0004
TRACE_TEXTURES_BIT_MESA 0x0008
TRACE_PIXELS_BIT_MESA 0x0010
TRACE_ERRORS_BIT_MESA 0x0020
Accepted by the <pname> parameter of GetIntegerv, GetBooleanv,
GetFloatv, and GetDoublev:
TRACE_MASK_MESA 0x8755
Accepted by the <pname> parameter to GetString:
TRACE_NAME_MESA 0x8756
Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation)
None.
Additions to Chapter 3 of the OpenGL 1.2.1 Specification (OpenGL Operation)
None.
Additions to Chapter 4 of the OpenGL 1.2.1 Specification (OpenGL Operation)
None.
Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions)
Add a new section:
5.7 Tracing
The tracing facility is used to record the execution of a GL program
to a human-readable log. The log appears as a sequence of GL commands
using C syntax. The primary intention of tracing is to aid in program
debugging.
A trace is started with the command
void NewTraceMESA( bitfield mask, const GLubyte * traceName )
<mask> may be any value accepted by PushAttrib and specifies a set of
attribute groups. The state values included in those attribute groups
is written to the trace as a sequence of GL commands.
<traceName> specifies a name or label for the trace. It is expected
that <traceName> will be interpreted as a filename in most implementations.
A trace is ended by calling the command
void EndTraceMESA( void )
It is illegal to call NewTraceMESA or EndTraceMESA between Begin and End.
The commands
void EnableTraceMESA( bitfield mask )
void DisableTraceMESA( bitfield mask )
enable or disable tracing of different classes of GL commands.
<mask> may be the union of any of TRACE_OPERATIONS_BIT_MESA,
TRACE_PRIMITIVES_BIT_MESA, TRACE_ARRAYS_BIT_MESA, TRACE_TEXTURES_BIT_MESA,
and TRACE_PIXELS_BIT_MESA. The special token TRACE_ALL_BITS_MESA
indicates all classes of commands are to be logged.
TRACE_OPERATIONS_BIT_MESA controls logging of all commands outside of
Begin/End, including Begin/End.
TRACE_PRIMITIVES_BIT_MESA controls logging of all commands inside of
Begin/End, including Begin/End.
TRACE_ARRAYS_BIT_MESA controls logging of VertexPointer, NormalPointer,
ColorPointer, IndexPointer, TexCoordPointer and EdgeFlagPointer commands.
TRACE_TEXTURES_BIT_MESA controls logging of texture data dereferenced by
TexImage1D, TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, and
TexSubImage3D commands.
TRACE_PIXELS_BIT_MESA controls logging of image data dereferenced by
Bitmap and DrawPixels commands.
TRACE_ERRORS_BIT_MESA controls logging of all errors. If this bit is
set, GetError will be executed whereever applicable, and the result will
be added to the trace as a comment. The error returns are cached and
returned to the application on its GetError calls. If the user does not
wish the additional GetError calls to be performed, this bit should not
be set.
The command
void TraceCommentMESA( const ubyte* comment )
immediately adds the <comment> string to the trace output, surrounded
by C-style comment delimiters.
The commands
void TraceTextureMESA( uint name, const ubyte* comment )
void TraceListMESA( uint name, const ubyte* comment )
associates <comment> with the texture object or display list specified
by <name>. Logged commands which reference the named texture object or
display list will be annotated with <comment>. If IsTexture(name) or
IsList(name) fail (respectively) the command is quietly ignored.
The commands
void TracePointerMESA( void* pointer, const ubyte* comment )
void TracePointerRangeMESA( const void* first,
const void* last,
const ubyte* comment )
associate <comment> with the address specified by <pointer> or with
a range of addresses specified by <first> through <last>.
Any logged commands which reference <pointer> or an address between
<first> and <last> will be annotated with <comment>.
The command
void TraceAssertAttribMESA( bitfield attribMask )
will add GL state queries and assertion statements to the log to
confirm that the current state at the time TraceAssertAttrib is
executed matches the current state when the trace log is executed
in the future.
<attribMask> is any value accepted by PushAttrib and specifies
the groups of state variables which are to be asserted.
The commands NewTraceMESA, EndTraceMESA, EnableTraceMESA, DisableTraceMESA,
TraceAssertAttribMESA, TraceCommentMESA, TraceTextureMESA, TraceListMESA,
TracePointerMESA and TracePointerRangeMESA are not compiled into display lists.
Examples:
The command NewTraceMESA(DEPTH_BUFFER_BIT, "log") will query the state
variables DEPTH_TEST, DEPTH_FUNC, DEPTH_WRITEMASK, and DEPTH_CLEAR_VALUE
to get the values <test>, <func>, <mask>, and <clear> respectively.
Statements equivalent to the following will then be logged:
glEnable(GL_DEPTH_TEST); (if <test> is true)
glDisable(GL_DEPTH_TEST); (if <test> is false)
glDepthFunc(<func>);
glDepthMask(<mask>);
glClearDepth(<clear>);
The command TraceAssertAttribMESA(DEPTH_BUFFER_BIT) will query the state
variables DEPTH_TEST, DEPTH_FUNC, DEPTH_WRITEMASK, and DEPTH_CLEAR_VALUE
to get the values <test>, <func>, <mask>, and <clear> respectively.
The resulting trace might then look will like this:
{
GLboolean b;
GLint i;
GLfloat f;
b = glIsEnabled(GL_DEPTH_TEST);
assert(b == <test>);
glGetIntegerv(GL_DEPTH_FUNC, &i);
assert(i == <func>);
glGetIntegerv(GL_DEPTH_MASK, &i);
assert(i == <mask>);
glGetFloatv(GL_DEPTH_CLEAR_VALUE, &f);
assert(f == <clear>);
}
Additions to Chapter 6 of the OpenGL 1.2.1 Specification
(State and State Requests)
Querying TRACE_MASK_MESA with GetIntegerv, GetFloatv, GetBooleanv or
GetDoublev returns the current command class trace mask.
Querying TRACE_NAME_MESA with GetString returns the current trace name.
Additions to Appendix A of the OpenGL 1.2.1 Specification (Invariance)
The MESA_trace extension can be used in a way that does not affect data
flow from application to OpenGL, as well as data flow from OpenGL to
application, except for timing, possible print I/O. TRACE_ERRORS_BIT_MESA
will add additional GetError queries. Setting a trace mask with NewTraceMESA
as well as use of TraceAssertAttribMESA might cause additional state queries.
With the possible exception of performance, OpenGL rendering should not be
affected at all by a properly chosen logging operation.
Additions to the AGL/GLX/WGL Specifications
None.
GLX Protocol
None. The logging operation is carried out client-side, by exporting
entry points to the wrapper functions that execute the logging operation.
Errors
INVALID_OPERATION is generated if any trace command except TraceCommentMESA
is called between Begin and End.
New State
The current trace name and current command class mask are stored
per-context.
New Implementation Dependent State
None.
Revision History
* Revision 0.1 - Initial draft from template (bk000415)
* Revision 0.2 - Draft (bk000906)
* Revision 0.3 - Draft (bk000913)
* Revision 0.4 - Reworked text, fixed typos (bp000914)
* Revision 0.5 - Assigned final GLenum values (bp001103)
* Revision 0.6 - TRACE_ERRORS_BIT_MESA (bk000916)
* Revision 0.7 - Added MESA postfix (bk010126)

View File

@@ -1,11 +1,8 @@
3Dfx Glide device driver for Mesa 3.4.1
3Dfx Glide device driver for Mesa 3.3
(see below for FAQ)
NOTE: This information is probably somewhat out of date. A rewrite is
overdue.
What do you need ?
------------------
@@ -16,7 +13,7 @@ What do you need ?
under Linux (more information in the "Useful Glide Environment
Variables");
- Mesa 3.4.1;
- Mesa 3.1;
- The 3Dfx Glide library 2.3 or later for your OS (the 2.4 works fine).
The Voodoo2 requires the Glide library 2.51. The Glide 3.1 is not
@@ -26,6 +23,8 @@ What do you need ?
- A compiler supported by the Glide library (Micro$oft VC++ (tested),
Watcom (tested), GCC for Linux (tested), etc.);
- A lot of patience, this is an alpha release.
- It's nice to have two monitors - one for your normal graphics
card and one for your 3Dfx card. If something goes wrong with
an application using the 3Dfx hardware you can still see your
@@ -78,28 +77,31 @@ Linux:
If your Glide libraries and headers are in a different directory
you'll have to modify the Mesa-config and mklib.glide files.
- Unpack the MesaLib-3.4.1.tar.gz and MesaDemos-3.4.1.tar.gz archives;
- Unpack the MesaLib-3.1.tar.gz and MesaDemos-3.1.tar.gz archives;
- If you're going to use a newer Mesa/Glide driver than v0.27 then
unpack the new driver archive over the Mesa directory.
- In the Mesa-3.4.1 directory type "make linux-glide"
- In the Mesa-3.1 directory type "make linux-glide"
- Compilation _should_ finish without errors;
- Set your LD_LIBRARY_PATH environment variable so that the
libglide2x.so and Mesa library files can be found. For example:
setenv LD_LIBRARY_PATH "/usr/local/glide/lib:/SOMEDIR/Mesa-3.4.1/lib"
setenv LD_LIBRARY_PATH "/usr/local/glide/lib:/SOMEDIR/Mesa-3.1/lib"
- You'll have to run Glide-based programs as root or set the suid
bit on executables;
- Try a demo:
cd demos
cd gdemos
su
setenv MESA_GLX_FX f
./gears (hit ESC to exit)
- You can find the demos especially designed for the Voodoo driver in
in the Mesa-3.1/3Dfx/demos directory (type "make" in order to compile
everything).
MacOS:
------
@@ -115,10 +117,13 @@ MS Windows:
- You must have the vcvars32.bat script in your PATH;
- Go to the directory Mesa-3.4.1 and run the mesafx.bat;
- Go to the directory Mesa-3.1 and run the mesafx.bat;
- The script will compile everything (Mesa-3.4.1/lib/OpenGL32.{lib,dll},
Mesa-3.4.1/lib/GLU32.{lib,dll}, Mesa-3.4.1/lib/GLUT32.{lib,dll};
- The script will compile everything (Mesa-3.1/lib/OpenGL32.{lib,dll},
Mesa-3.1/lib/GLU32.{lib,dll}, Mesa-3.1/lib/GLUT32.{lib,dll} and
Voodoo demos);
- At the end, you will be in the Mesa-3.1/3Dfx/demos directory;
- Try some demo (fire.exe, teapot.exe, etc.) in order to check if
everything is OK (you can use Alt-Tab or Ctrl-F9 to switch between
@@ -130,6 +135,10 @@ MS Windows:
- I think that you can easy change the Makefile.fx files in order
to work with other kind of compilers;
- To discover how open the 3Dfx screen, read the sources under
the Mesa-3.1/3Dfx/demos directory. You can use the GLUT library or
the Diego Picciani's wgl emulator.
NOTE: the MSVC++ 5.0 optimizer is really buggy. Also if you install the
SP3, you could have some problem (you can disable optimization in order
solve these kind of problems).
@@ -227,7 +236,7 @@ Doing more with Mesa & Linux Glide:
#endif
...
See the demos/tunnel.c program
See the 3Dfx/demos/tunnel.c program
for an example. You have to set the -DXMESA flag in the Makefile's COPTS
to enable it.
@@ -386,7 +395,7 @@ Hints and Special Features:
- The Voodoo driver support multiple Voodoo Graphics boards in the
some PC. Using this feature, you can write applications that use
multiple monitors, videoprojectors or HMDs for the output. See
Mesa-3.4.1/demos/tunnel2.c for an example of how setup one
Mesa-3.1/3Dfx/demos/tunnel2.c for an example of how setup one
context for each board.
- The v0.19 introduces a new powerful texture memory manager: the
@@ -404,8 +413,13 @@ Hints and Special Features:
- The Voodoo driver supports the GL_EXT_paletted_texture. it works
only with GL_COLOR_INDEX8_EXT, GL_RGBA palettes and the alpha value
is ignored because this is a limitation of the the current Glide
version and of the Voodoo hardware. See Mesa-3.4.1/demos/paltex.c
for a demo of this extension.
version and of the Voodoo hardware. See Mesa-3.1/3Dfx/demos/paltex.c for
a demo of this extension.
- The Voodoo driver directly supports 3Dfx Global Palette extension.
It was written for GLQuake and I think that it isn't a good idea
to use this extension for any other purpose (it is a trick). See
Mesa-3.1/3Dfx/demos/glbpaltex.c for a demo of this extension.
- The Voodoo driver chooses the screen resolution according to the
requested window size. If you open a 640x480 window, you will get
@@ -476,12 +490,12 @@ version of GLQuake with works with the Mesa/3Dfx/Glide combo.
Here's what you need to run GLQuake on Linux:
PC with 100MHz Pentium or better
a 3Dfx-based card
Mesa 3.4.1 libraries: libGL.so libGLU.so
Mesa 3.1 libraries: libMesaGL.so libMesaGLU.so
Glide 2.4 libraries: libglide2x.so libtexus.so
GLQuake for Linux.
Also, the windows version of GLQuake works fine with the Mesa OpenGL32.dll,
you have only to copy the Mesa-3.4.1/lib/OpenGL32.dll in the GLQuake directory
you have only to copy the Mesa-3.1/lib/OpenGL32.dll in the GLQuake directory
in order to test 'MesaQuake'.

View File

@@ -1,5 +1,5 @@
Mesa 3.4.1 Unix/X11 Information
Mesa 3.5 Unix/X11 Information
@@ -25,7 +25,7 @@ There are two ways to compile Mesa on Unix/X11 systems:
The top-level makefile will execute the makefiles in a number of sub-
directories. When finished, the Mesa libraries will be in the Mesa-3.3/lib/
directories. When finished, the Mesa libraries will be in the Mesa-3.5/lib/
directory. A few GLUT demos in the demos/ directory should be ready to run.
If you also downloaded and unpacked the demos there should be executables
@@ -323,4 +323,4 @@ Summary of X-related environment variables:
----------------------------------------------------------------------
$Id: README.X11,v 3.5.4.2 2001/01/24 04:53:26 brianp Exp $
$Id: README.X11,v 3.6 2001/06/20 19:02:48 brianp Exp $

View File

@@ -1,22 +0,0 @@
Mesa 3.4 release notes
November 3, 2000
PLEASE READ!!!!
Introduction
------------
Mesa uses an even/odd version number scheme like the Linux kernel.
Odd numbered versions (such as 3.3) designate new developmental releases.
Even numbered versions (such as 3.4) designate stable releases.
Mesa 3.4 simply fixes bugs found in the Mesa 3.3 release. For details,
see the VERSIONS file.
----------------------------------------------------------------------
$Id: RELNOTES-3.4,v 1.1.2.2 2000/11/02 18:05:34 brianp Exp $

View File

@@ -19,4 +19,4 @@ the Mesa 3.4 release. For details, see the VERSIONS file.
----------------------------------------------------------------------
$Id: RELNOTES-3.4.1,v 1.1.2.2 2001/02/07 22:54:04 brianp Exp $
$Id: RELNOTES-3.4.1,v 1.2 2001/05/23 14:45:01 brianp Exp $

22
docs/RELNOTES-3.4.2 Normal file
View File

@@ -0,0 +1,22 @@
Mesa 3.4.2 release notes
May 17, 2001
PLEASE READ!!!!
Introduction
------------
Mesa uses an even/odd version number scheme like the Linux kernel.
Odd numbered versions (such as 3.3) designate new developmental releases.
Even numbered versions (such as 3.4) designate stable releases.
Mesa 3.4.2 is a maintenance release that simply fixes bugs found since
the Mesa 3.4.1 release. For details, see the VERSIONS file.
----------------------------------------------------------------------
$Id: RELNOTES-3.4.2,v 1.2 2001/05/23 14:45:01 brianp Exp $

228
docs/RELNOTES-3.5 Normal file
View File

@@ -0,0 +1,228 @@
Mesa 3.5 release notes
June 21, 2001
PLEASE READ!!!!
Introduction
------------
Mesa uses an even/odd version number scheme like the Linux kernel.
Odd numbered versions (such as 3.5) designate new developmental releases.
Even numbered versions (such as 3.4) designate stable releases.
The biggest change in Mesa 3.5 is a complete overhaul of the source
code in order to make it more modular. This was driven by the DRI
hardware drivers. It simplifies the DRI drivers and opens the door
to hardware transform/clip/lighting (TCL). Keith Whitwell can take
the credit for that.
Driver Support
--------------
The device driver interface in Mesa 3.5 has changed a lot since Mesa 3.4
Not all of the older Mesa drivers have been updated. Here's the status:
Driver Status
---------------------- -----------
XMesa (Xlib) updated
OSMesa (off-screen) updated
FX (3dfx Voodoo1/2) updated
SVGA updated
GGI not updated
Windows/Win32 not updated
DOS/DJGPP not updated
BeOS not updated
Allegro not updated
D3D not updated
DOS not updated
We're looking for volunteers to update the remaining drivers. Please
post to the Mesa3d-dev mailing list if you can help.
GLU 1.3
-------
Mesa 3.5 includes the SGI Sample Implementation (SI) GLU library.
This version of GLU supports the GLU 1.3 specification. The old
Mesa GLU library implemented the 1.1 specification. The SI GLU
library should work much better.
You'll need a C++ compiler to compile the SI GLU library. This may
be a problem on some systems.
New Extensions
--------------
GL_EXT_convolution
Adds image convolution to glRead/Copy/DrawPixels/TexImage.
GL_ARB_imaging
This is the optional imaging subset of OpenGL 1.2.
It's the GL_EXT_convolution, GL_HP_convolution_border_modes,
GL_EXT_histogram, GL_EXT_color_table, GL_EXT_color_subtable
GL_EXT_blend_color, GL_EXT_blend_minmax, GL_EXT_blend_subtract
and GL_SGI_color_matrix extensions all rolled together.
This is supported in all software renderers but not in all
hardware drivers (3dfx for example).
GL_ARB_texture_compression
This is supported in Mesa but only used by the 3dfx DRI drivers
for Voodoo4 and later.
GL_ARB_texture_env_add
This is identical to GL_EXT_texture_env_add.
GL_NV_blend_square
Adds extra blend source and dest factors which allow squaring
of color values.
GL_EXT_fog_coord
Allows specification of a per-vertex fog coordinate instead of
having fog always computed from the eye distance.
GL_EXT_secondary_color
Allows specifying the secondary (specular) color for each vertex
instead of getting it only from lighting in GL_SEPARATE_SPECULAR_COLOR
mode.
GL_ARB_texture_env_combine
Basically the same as GL_EXT_texture_env_combine
GL_ARB_texture_env_add extension
Texture addition mode.
GL_ARB_texture_env_dot3 extension
Dot product texture environment.
GL_ARB_texture_border_clamp
Adds GL_CLAMP_TO_BORDER_ARB texture wrap mode
GL_SGIX_depth_texture, GL_SGIX_shadow and GL_SGIX_shadow_ambient
Implements a shadow casting algorithm based on depth map textures
GL_SGIS_generate_mipmap
Automatically generate lower mipmap images whenever the base mipmap
image is changed with glTexImage, glCopyTexImage, etc.
libOSMesa.so
------------
libOSMesa.so is a new library which contains the OSMesa interface for
off-screen rendering. Apps which need the OSMesa interface should link
with both -lOSMesa and -lGL. This change was made so that stand-alone
Mesa works the same way as XFree86/DRI's libGL.
Device Driver Changes / Core Mesa Changes
-----------------------------------------
The ctx->Driver.LogicOp() function has been removed. It used to
be called during state update in order to determine if the driver
could do glLogicOp() operations, and if not, set the SWLogicOpEnabled
flag. Drivers should instead examine the LogicOp state themselves
and choose specialized point, line, and triangle functions appropriately,
or fall back to software rendering. The Xlib driver was the only driver
to use this function. And since the Xlib driver no longer draws
points, lines or triangles using Xlib, the LogicOp function isn't needed.
The ctx->Driver.Dither() function has been removed. Drivers should
detect dither enable/disable via ctx->Driver.Enable() instead.
The ctx->Driver.IndexMask() and ctx->Driver.ColorMask() functions
are now just called from glIndexMask and glColorMask like the other
GL state-changing functions. They are no longer called from inside
gl_update_state(). Also, they now return void. The change was made
mostly for sake of uniformity.
The NEW_DRVSTATE[0123] flags have been removed. They weren't being used
and are obsolete w.r.t. the way state updates are done in DRI drivers.
Removed obsolete gl_create_visual() and gl_destroy_visual().
Renamed functions (new namespace):
old new
gl_create_framebuffer _mesa_create_framebuffer
gl_destroy_framebuffer _mesa_destroy_framebuffer
gl_create_context _mesa_create_context
gl_destroy_context _mesa_destroy_context
gl_context_initialize _mesa_context_initialize
gl_copy_context _mesa_copy_context
gl_make_current _mesa_make_current
gl_make_current2 _mesa_make_current2
gl_get_current_context _mesa_get_current_context
gl_flush_vb _mesa_flush_vb
gl_warning _mesa_warning
gl_compile_error _mesa_compile_error
All the drivers have been updated, but not all of them have been
tested since I can't test some platforms (DOS, Windows, Allegro, etc).
X/Mesa Driver
-------------
The source files for the X/Mesa driver in src/X have been renamed.
The xmesa[1234].c files are gone. The new files are xm_api.c,
xm_dd.c, xm_line.c, xm_span.c and xm_tri.c.
Multitexture
------------
Eight texture units are now supported by default.
OpenGL SI related changes
-------------------------
In an effort to make Mesa's internal interfaces more like the OpenGL
SI interfaces, a number of changes have been made:
1. Importing the SI's glcore.h file which defines a number of
interface structures like __GLimports and __GLexports.
2. Renamed "struct gl_context" to "struct __GLcontextRec".
3. Added __glCoreCreateContext() and __glCoreNopDispatch() functions.
4. The GLcontext member Visual is no longer a pointer.
5. New file: imports.c to setup default import functions for Mesa.
16-bit color channels
---------------------
There's experimental support for 16-bit color channels (64-bit pixels)
in Mesa 3.5. Only the OSMesa interface can be used for 16-bit rendering.
Type "make linux-osmesa16" in the top-level directory to build the
special libOSMesa16.so library.
This hasn't been tested very thoroughly yet so please file bug reports
if you have trouble.
In the future I hope to implement support for 32-bit, floating point
color channels.
----------------------------------------------------------------------
$Id: RELNOTES-3.5,v 1.14 2001/06/20 19:02:48 brianp Exp $

View File

@@ -1,4 +1,4 @@
$Id: VERSIONS,v 1.38.2.29 2001/02/14 15:25:06 brianp Exp $
$Id: VERSIONS,v 1.60 2001/06/20 19:02:48 brianp Exp $
Mesa Version History
@@ -801,3 +801,69 @@ Mesa Version History
- fixed RGB color over/underflow bug for very tiny triangles
Known problems:
- NURBS or evaluator surfaces inside display lists don't always work
3.4.2 May 17, 2001
Bug fixes:
- deleting the currently bound texture could cause bad problems
- using fog could result in random vertex alpha values
- AA triangle rendering could touch pixels outside right window bound
- fixed byteswapping problem in clear_32bit_ximage() function
- fixed bugs in wglUseFontBitmapsA(), by Frank Warmerdam
- fixed memory leak in glXUseXFont()
- fragment sampling in AA triangle function was off by 1/2 pixel
- Windows: reading pixels from framebuffer didn't always work
- glConvolutionFilter2D could segfault or cause FP exception
- fixed segfaults in FX and X drivers when using tex unit 1 but not 0
- GL_NAND logicop didn't work right in RGBA mode
- fixed a memory corruption bug in vertex buffer reset code
- clearing the softwara alpha buffer with scissoring was broken
- fixed a few color index mode fog bugs
- fixed some bad assertions in color index mode
- fixed FX line 'stipple' bug #420091
- fixed stencil buffer clear width/height typo
- fixed GL error glitches in gl[Client]ActiveTextureARB()
- fixed Windows compilation problem in texutil.c
- fixed 1/8-pixel AA triangle sampling error
Changes:
- optimized writing mono-colored pixel spans to X pixmaps
- increased max viewport size to 2048 x 2048
3.5 June 21, 2001
New:
- internals of Mesa divided into modular pieces (Keith Whitwell)
- 100% OpenGL 1.2 conformance (passes all conformance tests)
- new AA line algorithm
- GL_EXT_convolution extension
- GL_ARB_imaging subset
- OSMesaCreateContextExt() function
- GL_ARB_texture_env_add extension (same as GL_EXT_texture_env_add)
- GL_MAX_TEXTURE_UNITS_ARB now defaults to eight
- GL_EXT_fog_coord extension (Keith Whitwell)
- GL_EXT_secondary_color extension (Keith Whitwell)
- GL_ARB_texture_env_add extension (same as GL_EXT_texture_env_add)
- GL_SGIX_depth_texture extension
- GL_SGIX_shadow and GL_SGIX_shadow_ambient extensions
- demos/shadowtex.c demo of GL_SGIX_depth_texture and GL_SGIX_shadow
- GL_ARB_texture_env_combine extension
- GL_ARB_texture_env_dot3 extension
- GL_ARB_texture_border_clamp (aka GL_SGIS_texture_border_clamp)
- OSMesaCreateContextExt() function
- libOSMesa.so library, contains the OSMesa driver interface
- GL/glxext.h header file for GLX extensions
- somewhat faster software texturing, fogging, depth testing
- all color-index conformance tests now pass (only 8bpp tested)
- SPARC assembly language TCL optimizations (David Miller)
- GL_SGIS_generate_mipmap extension
Bug Fixes:
- fbiRev and tmuRev were unitialized when using Glide3
- fixed a few color index mode conformance failures; all pass now
- now appling antialiasing coverage to alpha after texturing
- colors weren't getting clamped to [0,1] before color table lookup
- fixed RISC alignment errors caused by COPY_4UBV macro
- drawing wide, flat-shaded lines could cause a segfault
- vertices now snapped to 1/16 pixel to fix rendering of tiny triangles
Changes:
- SGI's Sample Implementation (SI) 1.3 GLU library replaces Mesa GLU
- new libOSMesa.so library, contains the OSMesa driver interface

View File

@@ -2,33 +2,42 @@
GLincludedir = $(includedir)/GL
if HAVE_FX
INC_FX = fxmesa.h
INC_GGI = ggimesa.h
INC_OSMESA = osmesa.h
INC_SVGA = svgamesa.h
INC_X11 = glx.h glxext.h glx_mangle.h xmesa.h xmesa_x.h xmesa_xf86.h
INC_GLUT = glut.h glutf90.h
if HAVE_FX
sel_inc_fx = $(INC_FX)
endif
if HAVE_GGI
INC_GGI = ggimesa.h
sel_inc_ggi = $(INC_GGI)
endif
if HAVE_OSMESA
INC_OSMESA = osmesa.h
sel_inc_osmesa = $(INC_OSMESA)
endif
if HAVE_SVGA
INC_SVGA = svgamesa.h
sel_inc_svga = $(INC_SVGA)
endif
if HAVE_X11
INC_X11 = glx.h glx_mangle.h xmesa.h xmesa_x.h xmesa_xf86.h
sel_inc_x11 = $(INC_X11)
endif
if NEED_GLUT
INC_GLUT = glut.h
sel_inc_glut = $(INC_GLUT)
endif
EXTRA_DIST = fxmesa.h ggimesa.h osmesa.h svgamesa.h \
glx.h glx_mangle.h xmesa.h xmesa_x.h xmesa_xf86.h
GLinclude_HEADERS = gl.h glext.h gl_mangle.h glu.h glu_mangle.h \
EXTRA_HEADERS = amesa.h dosmesa.h foomesa.h glut_h.dja mesa_wgl.h mglmesa.h \
vms_x_fix.h wmesa.h \
$(INC_FX) $(INC_GGI) $(INC_OSMESA) $(INC_SVGA) $(INC_X11) $(INC_GLUT)
GLinclude_HEADERS = gl.h glext.h gl_mangle.h glu.h glu_mangle.h \
$(sel_inc_fx) $(sel_inc_ggi) $(sel_inc_osmesa) $(sel_inc_svga) \
$(sel_inc_x11) $(sel_inc_glut)
include $(top_srcdir)/common_rules.make

View File

@@ -1,9 +1,9 @@
/* $Id: fxmesa.h,v 1.2 1999/11/24 18:44:53 brianp Exp $ */
/* $Id: fxmesa.h,v 1.3 2001/06/20 19:52:11 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Copyright (C) 1995-1999 Brian Paul
* Copyright (C) 1995-2001 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -41,7 +41,7 @@ extern "C" {
#define FXMESA_MAJOR_VERSION 3
#define FXMESA_MINOR_VERSION 3
#define FXMESA_MINOR_VERSION 5
/*

View File

@@ -1,8 +1,8 @@
/* $Id: gl.h,v 1.44.4.2 2001/01/06 22:43:00 gareth Exp $ */
/* $Id: gl.h,v 1.57 2001/06/14 21:37:43 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.4
* Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
@@ -44,11 +44,11 @@
#define OPENSTEP
#endif
#if defined(_WIN32) && !defined(__WIN32__)
#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__)
#define __WIN32__
#endif
#if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN__))
#if !defined(OPENSTEP) && (defined(__WIN32__) && !defined(__CYGWIN__))
# if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
# define GLAPI __declspec(dllexport)
# elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
@@ -63,7 +63,7 @@
# define GLAPIENTRY
#endif /* WIN32 / CYGWIN bracket */
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP)
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP) && !defined(__CYGWIN__)
#include <gl/mesa_wgl.h>
#endif
@@ -84,7 +84,7 @@ extern "C" {
#define GL_VERSION_1_1 1
#define GL_VERSION_1_2 1
#define GL_ARB_imaging 1
/*
@@ -325,12 +325,12 @@ typedef double GLclampd; /* double precision float in [0,1] */
#define GL_ONE 0x1
#define GL_SRC_COLOR 0x0300
#define GL_ONE_MINUS_SRC_COLOR 0x0301
#define GL_DST_COLOR 0x0306
#define GL_ONE_MINUS_DST_COLOR 0x0307
#define GL_SRC_ALPHA 0x0302
#define GL_ONE_MINUS_SRC_ALPHA 0x0303
#define GL_DST_ALPHA 0x0304
#define GL_ONE_MINUS_DST_ALPHA 0x0305
#define GL_DST_COLOR 0x0306
#define GL_ONE_MINUS_DST_COLOR 0x0307
#define GL_SRC_ALPHA_SATURATE 0x0308
#define GL_CONSTANT_COLOR 0x8001
#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
@@ -745,7 +745,7 @@ typedef double GLclampd; /* double precision float in [0,1] */
/*
* OpenGL 1.2 imaging subset (NOT IMPLEMENTED BY MESA)
* OpenGL 1.2 imaging subset
*/
/* GL_EXT_color_table */
#define GL_COLOR_TABLE 0x80D0
@@ -852,7 +852,7 @@ typedef double GLclampd; /* double precision float in [0,1] */
#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001
#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002
#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF
#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF
@@ -1270,7 +1270,7 @@ GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type,
GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );
GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, void **params );
GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params );
GLAPI void GLAPIENTRY glArrayElement( GLint i );
@@ -1591,7 +1591,7 @@ GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start,
GLuint end, GLsizei count, GLenum type, const GLvoid *indices );
GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level,
GLint internalFormat,
GLenum internalFormat,
GLsizei width, GLsizei height,
GLsizei depth, GLint border,
GLenum format, GLenum type,
@@ -1971,7 +1971,7 @@ GLAPI void GLAPIENTRY glTexCoordPointerEXT( GLint size, GLenum type, GLsizei str
GLAPI void GLAPIENTRY glEdgeFlagPointerEXT( GLsizei stride, GLsizei count, const GLboolean *ptr );
GLAPI void GLAPIENTRY glGetPointervEXT( GLenum pname, void **params );
GLAPI void GLAPIENTRY glGetPointervEXT( GLenum pname, GLvoid **params );
GLAPI void GLAPIENTRY glArrayElementEXT( GLint i );
@@ -2249,6 +2249,64 @@ GLAPI void GLAPIENTRY glResizeBuffersMESA( void );
/*
* ???. GL_MESA_trace
* XXX this should go into glext.h at some point
*/
#ifndef GL_MESA_trace
#define GL_MESA_trace 1
#define GL_TRACE_ALL_BITS_MESA 0xFFFF
#define GL_TRACE_OPERATIONS_BIT_MESA 0x0001
#define GL_TRACE_PRIMITIVES_BIT_MESA 0x0002
#define GL_TRACE_ARRAYS_BIT_MESA 0x0004
#define GL_TRACE_TEXTURES_BIT_MESA 0x0008
#define GL_TRACE_PIXELS_BIT_MESA 0x0010
#define GL_TRACE_ERRORS_BIT_MESA 0x0020
#define GL_TRACE_MASK_MESA 0x8755
#define GL_TRACE_NAME_MESA 0x8756
GLAPI void GLAPIENTRY glEnableTraceMESA( GLbitfield mask );
GLAPI void GLAPIENTRY glDisableTraceMESA( GLbitfield mask );
GLAPI void GLAPIENTRY glNewTraceMESA( GLbitfield mask, const GLubyte * traceName );
GLAPI void GLAPIENTRY glEndTraceMESA( void );
GLAPI void GLAPIENTRY glTraceAssertAttribMESA( GLbitfield attribMask );
GLAPI void GLAPIENTRY glTraceCommentMESA( const GLubyte * comment );
GLAPI void GLAPIENTRY glTraceTextureMESA( GLuint name, const GLubyte* comment );
GLAPI void GLAPIENTRY glTraceListMESA( GLuint name, const GLubyte* comment );
GLAPI void GLAPIENTRY glTracePointerMESA( GLvoid* pointer, const GLubyte* comment );
GLAPI void GLAPIENTRY glTracePointerRangeMESA( const GLvoid* first, const GLvoid* last, const GLubyte* comment );
#endif /* GL_MESA_trace */
/*
* ???. GL_MESA_packed_depth_stencil
* XXX this will be in glext.h someday
*/
#ifndef GL_MESA_packed_depth_stencil
#define GL_MESA_packed_depth_stencil 1
#define GL_DEPTH_STENCIL_MESA 0x8750
#define GL_UNSIGNED_INT_24_8_MESA 0x8751
#define GL_UNSIGNED_INT_8_24_REV_MESA 0x8752
#define GL_UNSIGNED_SHORT_15_1_MESA 0x8753
#define GL_UNSIGNED_SHORT_1_15_REV_MESA 0x8754
#endif /* GL_MESA_packed_depth_stencil */
/*
* ??. GL_MESA_sprite_point
*/
#ifndef GL_MESA_sprite_point
#define GL_MESA_sprite_point 1
#define GL_SPRITE_POINT_MESA 0x8757 /* XXX not finalized! */
#endif
/**********************************************************************
* Begin system-specific stuff
*/

View File

@@ -1,10 +1,10 @@
/* $Id: gl_mangle.h,v 1.4 2000/01/04 08:07:09 brianp Exp $ */
/* $Id: gl_mangle.h,v 1.6 2001/04/19 22:33:03 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.5
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -535,5 +535,145 @@
#define glCopyColorTable mglCopyColorTable
#define glLockArraysEXT mglLockArraysEXT
#define glUnlockArraysEXT mglUnlockArraysEXT
#define glGetFinalCombinerInputParameterivNV mglGetFinalCombinerInputParameterivNV
#define glGetFinalCombinerInputParameterfvNV mglGetFinalCombinerInputParameterfvNV
#define glGetCombinerOutputParameterivNV mglGetCombinerOutputParameterivNV
#define glGetCombinerOutputParameterfvNV mglGetCombinerOutputParameterfvNV
#define glGetCombinerInputParameterivNV mglGetCombinerInputParameterivNV
#define glGetCombinerInputParameterfvNV mglGetCombinerInputParameterfvNV
#define glFinalCombinerInputNV mglFinalCombinerInputNV
#define glCombinerOutputNV mglCombinerOutputNV
#define glCombinerInputNV mglCombinerInputNV
#define glCombinerParameteriNV mglCombinerParameteriNV
#define glCombinerParameterivNV mglCombinerParameterivNV
#define glCombinerParameterfNV mglCombinerParameterfNV
#define glCombinerParameterfvNV mglCombinerParameterfvNV
#define glVertexArrayRangeNV mglVertexArrayRangeNV
#define glFlushVertexArrayRangeNV mglFlushVertexArrayRangeNV
#define glVertexWeightPointerEXT mglVertexWeightPointerEXT
#define glVertexWeightfvEXT mglVertexWeightfvEXT
#define glVertexWeightfEXT mglVertexWeightfEXT
#define glBlendFuncSeparateEXT mglBlendFuncSeparateEXT
#define glFogCoordPointerEXT mglFogCoordPointerEXT
#define glFogCoorddEXT mglFogCoorddEXT
#define glFogCoordfvEXT mglFogCoordfvEXT
#define glFogCoordfEXT mglFogCoordfEXT
#define glLightEnviSGIX mglLightEnviSGIX
#define glGetFragmentMaterialivSGIX mglGetFragmentMaterialivSGIX
#define glGetFragmentMaterialfvSGIX mglGetFragmentMaterialfvSGIX
#define glGetFragmentLightivSGIX mglGetFragmentLightivSGIX
#define glGetFragmentLightfvSGIX mglGetFragmentLightfvSGIX
#define glFragmentMaterialivSGIX mglFragmentMaterialivSGIX
#define glFragmentMaterialiSGIX mglFragmentMaterialiSGIX
#define glFragmentMaterialfvSGIX mglFragmentMaterialfvSGIX
#define glFragmentMaterialfSGIX mglFragmentMaterialfSGIX
#define glFragmentLightModelivSGIX mglFragmentLightModelivSGIX
#define glFragmentLightModeliSGIX mglFragmentLightModeliSGIX
#define glFragmentLightModelfvSGIX mglFragmentLightModelfvSGIX
#define glFragmentLightModelfSGIX mglFragmentLightModelfSGIX
#define glFragmentLightivSGIX mglFragmentLightivSGIX
#define glFragmentLightiSGIX mglFragmentLightiSGIX
#define glFragmentLightfvSGIX mglFragmentLightfvSGIX
#define glFragmentLightfSGIX mglFragmentLightfSGIX
#define glFragmentColorMaterialSGIX mglFragmentColorMaterialSGIX
#define glCullParameterdvEXT mglCullParameterdvEXT
#define glCullParameterfvEXT mglCullParameterfvEXT
#define glIndexFuncEXT mglIndexFuncEXT
#define glIndexMaterialEXT mglIndexMaterialEXT
#define glListParameterivSGIX mglListParameterivSGIX
#define glListParameteriSGIX mglListParameteriSGIX
#define glListParameterfvSGIX mglListParameterfvSGIX
#define glListParameterfSGIX mglListParameterfSGIX
#define glGetListParameterivSGIX mglGetListParameterivSGIX
#define glGetListParameterfvSGIX mglGetListParameterfvSGIX
#define glHintPGI mglHintPGI
#define glCopyColorSubTableEXT mglCopyColorSubTableEXT
#define glFlushRasterSGIX mglFlushRasterSGIX
#define glReferencePlaneSGIX mglReferencePlaneSGIX
#define glTagSampleBufferSGIX mglTagSampleBufferSGIX
#define glFrameZoomSGIX mglFrameZoomSGIX
#define glGetInstrumentsSGIX mglGetInstrumentsSGIX
#define glPollInstrumentsSGIX mglPollInstrumentsSGIX
#define glReadInstrumentsSGIX mglReadInstrumentsSGIX
#define glStopInstrumentsSGIX mglStopInstrumentsSGIX
#define glStartInstrumentsSGIX mglStartInstrumentsSGIX
#define glInstrumentsBufferSGIX mglInstrumentsBufferSGIX
#define glPointParameterfvSGIS mglPointParameterfvSGIS
#define glPointParameterfSGIS mglPointParameterfSGIS
#define glSpriteParameterivSGIX mglSpriteParameterivSGIX
#define glSpriteParameteriSGIX mglSpriteParameteriSGIX
#define glSpriteParameterfvSGIX mglSpriteParameterfvSGIX
#define glSpriteParameterfSGIX mglSpriteParameterfSGIX
#define glSamplePatternSGIS mglSamplePatternSGIS
#define glSampleMaskSGIS mglSampleMaskSGIS
#define glSharpenTexFuncSGIS mglSharpenTexFuncSGIS
#define glGetSharpenTexFuncSGIS mglGetSharpenTexFuncSGIS
#define glGetDetailTexFuncSGIS mglGetDetailTexFuncSGIS
#define glDetailTexFuncSGIS mglDetailTexFuncSGIS
#define glTexSubImage4DSGIS mglTexSubImage4DSGIS
#define glTexImage4DSGIS mglTexImage4DSGIS
#define glGetPixelTexGenParameterivSGIS mglGetPixelTexGenParameterivSGIS
#define glGetPixelTexGenParameterfvSGIS mglGetPixelTexGenParameterfvSGIS
#define glPixelTexGenParameteriSGIS mglPixelTexGenParameteriSGIS
#define glPixelTexGenParameterfSGIS mglPixelTexGenParameterfSGIS
#define glGetColorTableParameterivSGI mglGetColorTableParameterivSGI
#define glGetColorTableParameterfvSGI mglGetColorTableParameterfvSGI
#define glGetColorTableSGI mglGetColorTableSGI
#define glCopyColorTableSGI mglCopyColorTableSGI
#define glColorTableParameterivSGI mglColorTableParameterivSGI
#define glColorTableParameterfvSGI mglColorTableParameterfvSGI
#define glColorTableSGI mglColorTableSGI
#define glSeparableFilter2DEXT mglSeparableFilter2DEXT
#define glGetSeparableFilterEXT mglGetSeparableFilterEXT
#define glGetConvolutionParameterfvEXT mglGetConvolutionParameterfvEXT
#define glGetConvolutionParameterivEXT mglGetConvolutionParameterivEXT
#define glGetConvolutionFilterEXT mglGetConvolutionFilterEXT
#define glCopyConvolutionFilter2DEXT mglCopyConvolutionFilter2DEXT
#define glCopyConvolutionFilter1DEXT mglCopyConvolutionFilter1DEXT
#define glConvolutionParameterivEXT mglConvolutionParameterivEXT
#define glConvolutionParameteriEXT mglConvolutionParameteriEXT
#define glConvolutionParameterfvEXT mglConvolutionParameterfvEXT
#define glConvolutionParameterfEXT mglConvolutionParameterfEXT
#define glConvolutionFilter2DEXT mglConvolutionFilter2DEXT
#define glConvolutionFilter1DEXT mglConvolutionFilter1DEXT
#define glResetMinmaxEXT mglResetMinmaxEXT
#define glResetHistogramEXT mglResetHistogramEXT
#define glMinmaxEXT mglMinmaxEXT
#define glHistogramEXT mglHistogramEXT
#define glGetMinmaxParameterivEXT mglGetMinmaxParameterivEXT
#define glGetMinmaxParameterfvEXT mglGetMinmaxParameterfvEXT
#define glGetMinmaxEXT mglGetMinmaxEXT
#define glGetHistogramParameterivEXT mglGetHistogramParameterivEXT
#define glGetHistogramParameterfvEXT mglGetHistogramParameterfvEXT
#define glGetHistogramEXT mglGetHistogramEXT
#define glCopyTexSubImage2DEXT mglCopyTexSubImage2DEXT
#define glCopyTexSubImage1DEXT mglCopyTexSubImage1DEXT
#define glCopyTexImage2DEXT mglCopyTexImage2DEXT
#define glCopyTexImage1DEXT mglCopyTexImage1DEXT
#define glTexSubImage2DEXT mglTexSubImage2DEXT
#define glTexSubImage1DEXT mglTexSubImage1DEXT
#define glSampleCoverageARB mglSampleCoverageARB
#define glSamplePassARB mglSamplePassARB
#define glMultTransposeMatrixfARB mglMultTransposeMatrixfARB
#define glMultTransposeMatrixdARB mglMultTransposeMatrixdARB
#define glLoadTransposeMatrixfARB mglLoadTransposeMatrixfARB
#define glLoadTransposeMatrixdARB mglLoadTransposeMatrixdARB
#define glSecondaryColor3fEXT mglSecondaryColor3fEXT
#define glSecondaryColor3ubEXT mglSecondaryColor3ubEXT
#define glSecondaryColor3uivEXT mglSecondaryColor3uivEXT
#define glSecondaryColor3ubvEXT mglSecondaryColor3ubvEXT
#define glSecondaryColor3svEXT mglSecondaryColor3svEXT
#define glSecondaryColor3ivEXT mglSecondaryColor3ivEXT
#define glSecondaryColor3fvEXT mglSecondaryColor3fvEXT
#define glSecondaryColor3dvEXT mglSecondaryColor3dvEXT
#define glSecondaryColor3bvEXT mglSecondaryColor3bvEXT
#define glSecondaryColor3usvEXT mglSecondaryColor3usvEXT
#define glSecondaryColorPointerEXT mglSecondaryColorPointerEXT
#define glSecondaryColor3iEXT mglSecondaryColor3iEXT
#define glSecondaryColor3dEXT mglSecondaryColor3dEXT
#define glSecondaryColor3bEXT mglSecondaryColor3bEXT
#define glSecondaryColor3uiEXT mglSecondaryColor3uiEXT
#define glSecondaryColor3usEXT mglSecondaryColor3usEXT
#define glSecondaryColor3sEXT mglSecondaryColor3sEXT
#endif

View File

@@ -271,6 +271,40 @@ extern "C" {
#define GL_MODELVIEW31_ARB 0x873F
#endif
#ifndef GL_ARB_texture_env_combine
#define GL_COMBINE_ARB 0x8570
#define GL_COMBINE_RGB_ARB 0x8571
#define GL_COMBINE_ALPHA_ARB 0x8572
#define GL_SOURCE0_RGB_ARB 0x8580
#define GL_SOURCE1_RGB_ARB 0x8581
#define GL_SOURCE2_RGB_ARB 0x8582
#define GL_SOURCE0_ALPHA_ARB 0x8588
#define GL_SOURCE1_ALPHA_ARB 0x8589
#define GL_SOURCE2_ALPHA_ARB 0x858A
#define GL_OPERAND0_RGB_ARB 0x8590
#define GL_OPERAND1_RGB_ARB 0x8591
#define GL_OPERAND2_RGB_ARB 0x8592
#define GL_OPERAND0_ALPHA_ARB 0x8598
#define GL_OPERAND1_ALPHA_ARB 0x8599
#define GL_OPERAND2_ALPHA_ARB 0x859A
#define GL_RGB_SCALE_ARB 0x8573
#define GL_ADD_SIGNED_ARB 0x8574
#define GL_INTERPOLATE_ARB 0x8575
#define GL_SUBTRACT_ARB 0x84E7
#define GL_CONSTANT_ARB 0x8576
#define GL_PRIMARY_COLOR_ARB 0x8577
#define GL_PREVIOUS_ARB 0x8578
#endif
#ifndef GL_ARB_texture_env_dot3
#define GL_DOT3_RGB_ARB 0x86AE
#define GL_DOT3_RGBA_ARB 0x86AF
#endif
#ifndef GL_ARB_texture_border_clamp
#define GL_CLAMP_TO_BORDER_ARB 0x812D
#endif
#ifndef GL_EXT_abgr
#define GL_ABGR_EXT 0x8000
#endif
@@ -1718,8 +1752,16 @@ typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GL
typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
#endif
#ifndef GL_EXT_abgr
#define GL_EXT_abgr 1
#ifndef GL_ARB_texture_env_combine
#define GL_ARB_texture_env_combine 1
#endif
#ifndef GL_ARB_texture_env_dot3
#define GL_ARB_texture_env_dot3 1
#endif
#ifndef GL_ARB_texture_border_clamp
#define GL_ARB_texture_border_clamp 1
#endif
#ifndef GL_EXT_blend_color

View File

@@ -1,534 +1,323 @@
/* $Id: glu.h,v 1.22.4.1 2000/10/26 15:32:46 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: This software was created using the
** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
** not been independently verified as being compliant with the OpenGL(R)
** version 1.2.1 Specification.
*/
#ifndef __glu_h__
#define __glu_h__
#ifndef GLU_H
#define GLU_H
#if defined(USE_MGL_NAMESPACE)
#include "glu_mangle.h"
#endif
#include <GL/gl.h>
#ifdef __cplusplus
extern "C" {
#endif
/*************************************************************/
#include <GL/gl.h>
/* Extensions */
#define GLU_EXT_object_space_tess 1
#define GLU_EXT_nurbs_tessellator 1
/* Boolean */
#define GLU_FALSE 0
#define GLU_TRUE 1
/* Version */
#define GLU_VERSION_1_1 1
#define GLU_VERSION_1_2 1
#define GLU_VERSION_1_3 1
/* StringName */
#define GLU_VERSION 100800
#define GLU_EXTENSIONS 100801
/* ErrorCode */
#define GLU_INVALID_ENUM 100900
#define GLU_INVALID_VALUE 100901
#define GLU_OUT_OF_MEMORY 100902
#define GLU_INVALID_OPERATION 100904
/* NurbsDisplay */
/* GLU_FILL */
#define GLU_OUTLINE_POLYGON 100240
#define GLU_OUTLINE_PATCH 100241
/* NurbsCallback */
#define GLU_NURBS_ERROR 100103
#define GLU_ERROR 100103
#define GLU_NURBS_BEGIN 100164
#define GLU_NURBS_BEGIN_EXT 100164
#define GLU_NURBS_VERTEX 100165
#define GLU_NURBS_VERTEX_EXT 100165
#define GLU_NURBS_NORMAL 100166
#define GLU_NURBS_NORMAL_EXT 100166
#define GLU_NURBS_COLOR 100167
#define GLU_NURBS_COLOR_EXT 100167
#define GLU_NURBS_TEXTURE_COORD 100168
#define GLU_NURBS_TEX_COORD_EXT 100168
#define GLU_NURBS_END 100169
#define GLU_NURBS_END_EXT 100169
#define GLU_NURBS_BEGIN_DATA 100170
#define GLU_NURBS_BEGIN_DATA_EXT 100170
#define GLU_NURBS_VERTEX_DATA 100171
#define GLU_NURBS_VERTEX_DATA_EXT 100171
#define GLU_NURBS_NORMAL_DATA 100172
#define GLU_NURBS_NORMAL_DATA_EXT 100172
#define GLU_NURBS_COLOR_DATA 100173
#define GLU_NURBS_COLOR_DATA_EXT 100173
#define GLU_NURBS_TEXTURE_COORD_DATA 100174
#define GLU_NURBS_TEX_COORD_DATA_EXT 100174
#define GLU_NURBS_END_DATA 100175
#define GLU_NURBS_END_DATA_EXT 100175
/* NurbsError */
#define GLU_NURBS_ERROR1 100251
#define GLU_NURBS_ERROR2 100252
#define GLU_NURBS_ERROR3 100253
#define GLU_NURBS_ERROR4 100254
#define GLU_NURBS_ERROR5 100255
#define GLU_NURBS_ERROR6 100256
#define GLU_NURBS_ERROR7 100257
#define GLU_NURBS_ERROR8 100258
#define GLU_NURBS_ERROR9 100259
#define GLU_NURBS_ERROR10 100260
#define GLU_NURBS_ERROR11 100261
#define GLU_NURBS_ERROR12 100262
#define GLU_NURBS_ERROR13 100263
#define GLU_NURBS_ERROR14 100264
#define GLU_NURBS_ERROR15 100265
#define GLU_NURBS_ERROR16 100266
#define GLU_NURBS_ERROR17 100267
#define GLU_NURBS_ERROR18 100268
#define GLU_NURBS_ERROR19 100269
#define GLU_NURBS_ERROR20 100270
#define GLU_NURBS_ERROR21 100271
#define GLU_NURBS_ERROR22 100272
#define GLU_NURBS_ERROR23 100273
#define GLU_NURBS_ERROR24 100274
#define GLU_NURBS_ERROR25 100275
#define GLU_NURBS_ERROR26 100276
#define GLU_NURBS_ERROR27 100277
#define GLU_NURBS_ERROR28 100278
#define GLU_NURBS_ERROR29 100279
#define GLU_NURBS_ERROR30 100280
#define GLU_NURBS_ERROR31 100281
#define GLU_NURBS_ERROR32 100282
#define GLU_NURBS_ERROR33 100283
#define GLU_NURBS_ERROR34 100284
#define GLU_NURBS_ERROR35 100285
#define GLU_NURBS_ERROR36 100286
#define GLU_NURBS_ERROR37 100287
/* NurbsProperty */
#define GLU_AUTO_LOAD_MATRIX 100200
#define GLU_CULLING 100201
#define GLU_SAMPLING_TOLERANCE 100203
#define GLU_DISPLAY_MODE 100204
#define GLU_PARAMETRIC_TOLERANCE 100202
#define GLU_SAMPLING_METHOD 100205
#define GLU_U_STEP 100206
#define GLU_V_STEP 100207
#define GLU_NURBS_MODE 100160
#define GLU_NURBS_MODE_EXT 100160
#define GLU_NURBS_TESSELLATOR 100161
#define GLU_NURBS_TESSELLATOR_EXT 100161
#define GLU_NURBS_RENDERER 100162
#define GLU_NURBS_RENDERER_EXT 100162
/* NurbsSampling */
#define GLU_OBJECT_PARAMETRIC_ERROR 100208
#define GLU_OBJECT_PARAMETRIC_ERROR_EXT 100208
#define GLU_OBJECT_PATH_LENGTH 100209
#define GLU_OBJECT_PATH_LENGTH_EXT 100209
#define GLU_PATH_LENGTH 100215
#define GLU_PARAMETRIC_ERROR 100216
#define GLU_DOMAIN_DISTANCE 100217
/* NurbsTrim */
#define GLU_MAP1_TRIM_2 100210
#define GLU_MAP1_TRIM_3 100211
/* QuadricDrawStyle */
#define GLU_POINT 100010
#define GLU_LINE 100011
#define GLU_FILL 100012
#define GLU_SILHOUETTE 100013
/* QuadricCallback */
/* GLU_ERROR */
/* QuadricNormal */
#define GLU_SMOOTH 100000
#define GLU_FLAT 100001
#define GLU_NONE 100002
/* QuadricOrientation */
#define GLU_OUTSIDE 100020
#define GLU_INSIDE 100021
/* TessCallback */
#define GLU_TESS_BEGIN 100100
#define GLU_BEGIN 100100
#define GLU_TESS_VERTEX 100101
#define GLU_VERTEX 100101
#define GLU_TESS_END 100102
#define GLU_END 100102
#define GLU_TESS_ERROR 100103
#define GLU_TESS_EDGE_FLAG 100104
#define GLU_EDGE_FLAG 100104
#define GLU_TESS_COMBINE 100105
#define GLU_TESS_BEGIN_DATA 100106
#define GLU_TESS_VERTEX_DATA 100107
#define GLU_TESS_END_DATA 100108
#define GLU_TESS_ERROR_DATA 100109
#define GLU_TESS_EDGE_FLAG_DATA 100110
#define GLU_TESS_COMBINE_DATA 100111
/* TessContour */
#define GLU_CW 100120
#define GLU_CCW 100121
#define GLU_INTERIOR 100122
#define GLU_EXTERIOR 100123
#define GLU_UNKNOWN 100124
/* TessProperty */
#define GLU_TESS_WINDING_RULE 100140
#define GLU_TESS_BOUNDARY_ONLY 100141
#define GLU_TESS_TOLERANCE 100142
/* TessError */
#define GLU_TESS_ERROR1 100151
#define GLU_TESS_ERROR2 100152
#define GLU_TESS_ERROR3 100153
#define GLU_TESS_ERROR4 100154
#define GLU_TESS_ERROR5 100155
#define GLU_TESS_ERROR6 100156
#define GLU_TESS_ERROR7 100157
#define GLU_TESS_ERROR8 100158
#define GLU_TESS_MISSING_BEGIN_POLYGON 100151
#define GLU_TESS_MISSING_BEGIN_CONTOUR 100152
#define GLU_TESS_MISSING_END_POLYGON 100153
#define GLU_TESS_MISSING_END_CONTOUR 100154
#define GLU_TESS_COORD_TOO_LARGE 100155
#define GLU_TESS_NEED_COMBINE_CALLBACK 100156
/* TessWinding */
#define GLU_TESS_WINDING_ODD 100130
#define GLU_TESS_WINDING_NONZERO 100131
#define GLU_TESS_WINDING_POSITIVE 100132
#define GLU_TESS_WINDING_NEGATIVE 100133
#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
/*************************************************************/
/* to facilitate clean DLL building ... */
#if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN__))
# if defined(_MSC_VER) && defined(BUILD_GLU32) /* tag specify we're building mesa as a DLL */
# define GLUAPI __declspec(dllexport)
# elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
# define GLUAPI __declspec(dllimport)
# else /* for use with static link lib build of Win32 edition only */
# define GLUAPI extern
# endif /* _STATIC_MESA support */
# define GLCALLBACK __stdcall
# define GLCALLBACKP __stdcall *
#ifdef __cplusplus
class GLUnurbs;
class GLUquadric;
class GLUtesselator;
#else
# define GLUAPI extern
# define GLCALLBACK
# define GLCALLBACKP *
#endif /* WIN32 / CYGWIN bracket */
/* compatability guard so we don't need to change client code */
#if defined(_WIN32) && !defined(_WINDEF_) && !defined(_GNU_H_WINDOWS32_BASE) && !defined(OPENSTEP)
# define CALLBACK GLCALLBACK
#endif
#ifdef macintosh
#pragma enumsalwaysint on
#if PRAGMA_IMPORT_SUPPORTED
#pragma import on
#endif
#endif
#ifndef GLUAPI
#define GLUAPI
#endif
#ifndef GLAPIENTRY
#define GLAPIENTRY
#endif
#ifndef GLCALLBACK
#define GLCALLBACK
#endif
#define GLU_VERSION_1_1 1
#define GLU_TRUE 1
#define GLU_FALSE 0
/* Normal vectors */
#define GLU_SMOOTH 100000
#define GLU_FLAT 100001
#define GLU_NONE 100002
/* Quadric draw styles */
#define GLU_POINT 100010
#define GLU_LINE 100011
#define GLU_FILL 100012
#define GLU_SILHOUETTE 100013
/* Quadric orientation */
#define GLU_OUTSIDE 100020
#define GLU_INSIDE 100021
/* Tessellator */
#define GLU_TESS_BEGIN 100100
#define GLU_TESS_VERTEX 100101
#define GLU_TESS_END 100102
#define GLU_TESS_ERROR 100103
#define GLU_TESS_EDGE_FLAG 100104
#define GLU_TESS_COMBINE 100105
#define GLU_TESS_BEGIN_DATA 100106
#define GLU_TESS_VERTEX_DATA 100107
#define GLU_TESS_END_DATA 100108
#define GLU_TESS_ERROR_DATA 100109
#define GLU_TESS_EDGE_FLAG_DATA 100110
#define GLU_TESS_COMBINE_DATA 100111
/* Winding rules */
#define GLU_TESS_WINDING_ODD 100130
#define GLU_TESS_WINDING_NONZERO 100131
#define GLU_TESS_WINDING_POSITIVE 100132
#define GLU_TESS_WINDING_NEGATIVE 100133
#define GLU_TESS_WINDING_ABS_GEQ_TWO 100134
/* Tessellation properties */
#define GLU_TESS_WINDING_RULE 100140
#define GLU_TESS_BOUNDARY_ONLY 100141
#define GLU_TESS_TOLERANCE 100142
/* Tessellation errors */
#define GLU_TESS_ERROR1 100151 /* Missing gluBeginPolygon */
#define GLU_TESS_ERROR2 100152 /* Missing gluBeginContour */
#define GLU_TESS_ERROR3 100153 /* Missing gluEndPolygon */
#define GLU_TESS_ERROR4 100154 /* Missing gluEndContour */
#define GLU_TESS_ERROR5 100155 /* */
#define GLU_TESS_ERROR6 100156 /* */
#define GLU_TESS_ERROR7 100157 /* */
#define GLU_TESS_ERROR8 100158 /* */
/* NURBS */
#define GLU_AUTO_LOAD_MATRIX 100200
#define GLU_CULLING 100201
#define GLU_PARAMETRIC_TOLERANCE 100202
#define GLU_SAMPLING_TOLERANCE 100203
#define GLU_DISPLAY_MODE 100204
#define GLU_SAMPLING_METHOD 100205
#define GLU_U_STEP 100206
#define GLU_V_STEP 100207
#define GLU_PATH_LENGTH 100215
#define GLU_PARAMETRIC_ERROR 100216
#define GLU_DOMAIN_DISTANCE 100217
#define GLU_MAP1_TRIM_2 100210
#define GLU_MAP1_TRIM_3 100211
#define GLU_OUTLINE_POLYGON 100240
#define GLU_OUTLINE_PATCH 100241
#define GLU_NURBS_ERROR1 100251 /* spline order un-supported */
#define GLU_NURBS_ERROR2 100252 /* too few knots */
#define GLU_NURBS_ERROR3 100253 /* valid knot range is empty */
#define GLU_NURBS_ERROR4 100254 /* decreasing knot sequence */
#define GLU_NURBS_ERROR5 100255 /* knot multiplicity > spline order */
#define GLU_NURBS_ERROR6 100256 /* endcurve() must follow bgncurve() */
#define GLU_NURBS_ERROR7 100257 /* bgncurve() must precede endcurve() */
#define GLU_NURBS_ERROR8 100258 /* ctrlarray or knot vector is NULL */
#define GLU_NURBS_ERROR9 100259 /* can't draw pwlcurves */
#define GLU_NURBS_ERROR10 100260 /* missing gluNurbsCurve() */
#define GLU_NURBS_ERROR11 100261 /* missing gluNurbsSurface() */
#define GLU_NURBS_ERROR12 100262 /* endtrim() must precede endsurface() */
#define GLU_NURBS_ERROR13 100263 /* bgnsurface() must precede endsurface() */
#define GLU_NURBS_ERROR14 100264 /* curve of improper type passed as trim curve */
#define GLU_NURBS_ERROR15 100265 /* bgnsurface() must precede bgntrim() */
#define GLU_NURBS_ERROR16 100266 /* endtrim() must follow bgntrim() */
#define GLU_NURBS_ERROR17 100267 /* bgntrim() must precede endtrim()*/
#define GLU_NURBS_ERROR18 100268 /* invalid or missing trim curve*/
#define GLU_NURBS_ERROR19 100269 /* bgntrim() must precede pwlcurve() */
#define GLU_NURBS_ERROR20 100270 /* pwlcurve referenced twice*/
#define GLU_NURBS_ERROR21 100271 /* pwlcurve and nurbscurve mixed */
#define GLU_NURBS_ERROR22 100272 /* improper usage of trim data type */
#define GLU_NURBS_ERROR23 100273 /* nurbscurve referenced twice */
#define GLU_NURBS_ERROR24 100274 /* nurbscurve and pwlcurve mixed */
#define GLU_NURBS_ERROR25 100275 /* nurbssurface referenced twice */
#define GLU_NURBS_ERROR26 100276 /* invalid property */
#define GLU_NURBS_ERROR27 100277 /* endsurface() must follow bgnsurface() */
#define GLU_NURBS_ERROR28 100278 /* intersecting or misoriented trim curves */
#define GLU_NURBS_ERROR29 100279 /* intersecting trim curves */
#define GLU_NURBS_ERROR30 100280 /* UNUSED */
#define GLU_NURBS_ERROR31 100281 /* unconnected trim curves */
#define GLU_NURBS_ERROR32 100282 /* unknown knot error */
#define GLU_NURBS_ERROR33 100283 /* negative vertex count encountered */
#define GLU_NURBS_ERROR34 100284 /* negative byte-stride */
#define GLU_NURBS_ERROR35 100285 /* unknown type descriptor */
#define GLU_NURBS_ERROR36 100286 /* null control point reference */
#define GLU_NURBS_ERROR37 100287 /* duplicate point on pwlcurve */
/* GLU 1.3 and later */
#define GLU_NURBS_MODE 100160
/* Errors */
#define GLU_INVALID_ENUM 100900
#define GLU_INVALID_VALUE 100901
#define GLU_OUT_OF_MEMORY 100902
#define GLU_INCOMPATIBLE_GL_VERSION 100903
/* GLU 1.1 and later */
#define GLU_VERSION 100800
#define GLU_EXTENSIONS 100801
/*** GLU 1.0 tessellation ***/
/* Contour types */
#define GLU_CW 100120
#define GLU_CCW 100121
#define GLU_INTERIOR 100122
#define GLU_EXTERIOR 100123
#define GLU_UNKNOWN 100124
/* Tessellator */
#define GLU_BEGIN GLU_TESS_BEGIN
#define GLU_VERTEX GLU_TESS_VERTEX
#define GLU_END GLU_TESS_END
#define GLU_ERROR GLU_TESS_ERROR
#define GLU_EDGE_FLAG GLU_TESS_EDGE_FLAG
#if defined(__BEOS__)
/* The BeOS does something funky and makes these typedefs in one
* of its system headers.
*/
#else
#if defined GLU_VERSION_1_2
typedef struct GLUquadric GLUquadricObj;
typedef struct GLUnurbs GLUnurbsObj;
/* FIXME: We need to implement the other 1.3 typedefs - GH */
typedef struct GLUtesselator GLUtesselator;
typedef GLUtesselator GLUtriangulatorObj;
#else
/* GLU 1.1 and older */
typedef struct GLUquadric GLUquadricObj;
typedef struct GLUtriangulatorObj GLUtriangulatorObj;
typedef struct GLUnurbs GLUnurbsObj;
#endif
#endif
#if defined(__BEOS__) || defined(__QUICKDRAW__)
#pragma export on
#endif
/*
*
* Miscellaneous functions
*
*/
GLUAPI void GLAPIENTRY gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble centerx, GLdouble centery,
GLdouble centerz,
GLdouble upx, GLdouble upy, GLdouble upz );
GLUAPI void GLAPIENTRY gluOrtho2D( GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top );
GLUAPI void GLAPIENTRY gluPerspective( GLdouble fovy, GLdouble aspect,
GLdouble zNear, GLdouble zFar );
GLUAPI void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y,
GLdouble width, GLdouble height,
const GLint viewport[4] );
GLUAPI GLint GLAPIENTRY gluProject( GLdouble objx, GLdouble objy, GLdouble objz,
const GLdouble modelMatrix[16],
const GLdouble projMatrix[16],
const GLint viewport[4],
GLdouble *winx, GLdouble *winy,
GLdouble *winz );
GLUAPI GLint GLAPIENTRY gluUnProject( GLdouble winx, GLdouble winy,
GLdouble winz,
const GLdouble modelMatrix[16],
const GLdouble projMatrix[16],
const GLint viewport[4],
GLdouble *objx, GLdouble *objy,
GLdouble *objz );
GLUAPI const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode );
/*
*
* Mipmapping and image scaling
*
*/
GLUAPI GLint GLAPIENTRY gluScaleImage( GLenum format,
GLsizei widthin, GLsizei heightin,
GLenum typein, const void *datain,
GLsizei widthout, GLsizei heightout,
GLenum typeout, void *dataout );
GLUAPI GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
GLsizei width, GLenum format,
GLenum type, const void *data );
GLUAPI GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
GLsizei width, GLsizei height,
GLenum format,
GLenum type, const void *data );
/*
*
* Quadrics
*
*/
GLUAPI GLUquadricObj* GLAPIENTRY gluNewQuadric( void );
GLUAPI void GLAPIENTRY gluDeleteQuadric( GLUquadricObj *state );
GLUAPI void GLAPIENTRY gluQuadricDrawStyle( GLUquadricObj *quadObject,
GLenum drawStyle );
GLUAPI void GLAPIENTRY gluQuadricOrientation( GLUquadricObj *quadObject,
GLenum orientation );
GLUAPI void GLAPIENTRY gluQuadricNormals( GLUquadricObj *quadObject,
GLenum normals );
GLUAPI void GLAPIENTRY gluQuadricTexture( GLUquadricObj *quadObject,
GLboolean textureCoords );
GLUAPI void GLAPIENTRY gluQuadricCallback( GLUquadricObj *qobj,
GLenum which,
void (GLCALLBACK *fn)() );
GLUAPI void GLAPIENTRY gluCylinder( GLUquadricObj *qobj,
GLdouble baseRadius,
GLdouble topRadius,
GLdouble height,
GLint slices, GLint stacks );
GLUAPI void GLAPIENTRY gluSphere( GLUquadricObj *qobj,
GLdouble radius,
GLint slices, GLint stacks );
GLUAPI void GLAPIENTRY gluDisk( GLUquadricObj *qobj,
GLdouble innerRadius, GLdouble outerRadius,
GLint slices, GLint loops );
GLUAPI void GLAPIENTRY gluPartialDisk( GLUquadricObj *qobj,
GLdouble innerRadius,
GLdouble outerRadius, GLint slices,
GLint loops, GLdouble startAngle,
GLdouble sweepAngle );
/*
*
* Nurbs
*
*/
GLUAPI GLUnurbsObj* GLAPIENTRY gluNewNurbsRenderer( void );
GLUAPI void GLAPIENTRY gluDeleteNurbsRenderer( GLUnurbsObj *nobj );
GLUAPI void GLAPIENTRY gluLoadSamplingMatrices( GLUnurbsObj *nobj,
const GLfloat modelMatrix[16],
const GLfloat projMatrix[16],
const GLint viewport[4] );
GLUAPI void GLAPIENTRY gluNurbsProperty( GLUnurbsObj *nobj, GLenum property,
GLfloat value );
GLUAPI void GLAPIENTRY gluGetNurbsProperty( GLUnurbsObj *nobj, GLenum property,
GLfloat *value );
GLUAPI void GLAPIENTRY gluBeginCurve( GLUnurbsObj *nobj );
GLUAPI void GLAPIENTRY gluEndCurve( GLUnurbsObj * nobj );
GLUAPI void GLAPIENTRY gluNurbsCurve( GLUnurbsObj *nobj, GLint nknots,
GLfloat *knot, GLint stride,
GLfloat *ctlarray, GLint order,
GLenum type );
GLUAPI void GLAPIENTRY gluBeginSurface( GLUnurbsObj *nobj );
GLUAPI void GLAPIENTRY gluEndSurface( GLUnurbsObj * nobj );
GLUAPI void GLAPIENTRY gluNurbsSurface( GLUnurbsObj *nobj,
GLint sknot_count, GLfloat *sknot,
GLint tknot_count, GLfloat *tknot,
GLint s_stride, GLint t_stride,
GLfloat *ctlarray,
GLint sorder, GLint torder,
GLenum type );
GLUAPI void GLAPIENTRY gluBeginTrim( GLUnurbsObj *nobj );
GLUAPI void GLAPIENTRY gluEndTrim( GLUnurbsObj *nobj );
GLUAPI void GLAPIENTRY gluPwlCurve( GLUnurbsObj *nobj, GLint count,
GLfloat *array,
GLint stride, GLenum type );
GLUAPI void GLAPIENTRY gluNurbsCallback( GLUnurbsObj *nobj, GLenum which,
void (GLCALLBACK *fn)() );
/*
*
* Polygon tessellation
*
*/
#ifdef GLU_VERSION_1_2
GLUAPI GLUtesselator* GLAPIENTRY gluNewTess( void );
GLUAPI void GLAPIENTRY gluDeleteTess( GLUtesselator *tobj );
GLUAPI void GLAPIENTRY gluTessBeginPolygon( GLUtesselator *tobj,
void *polygon_data );
GLUAPI void GLAPIENTRY gluTessBeginContour( GLUtesselator *tobj );
GLUAPI void GLAPIENTRY gluTessVertex( GLUtesselator *tobj, GLdouble coords[3],
void *vertex_data );
GLUAPI void GLAPIENTRY gluTessEndContour( GLUtesselator *tobj );
GLUAPI void GLAPIENTRY gluTessEndPolygon( GLUtesselator *tobj );
GLUAPI void GLAPIENTRY gluTessProperty( GLUtesselator *tobj, GLenum which,
GLdouble value );
GLUAPI void GLAPIENTRY gluTessNormal( GLUtesselator *tobj, GLdouble x,
GLdouble y, GLdouble z );
GLUAPI void GLAPIENTRY gluTessCallback( GLUtesselator *tobj, GLenum which,
void (GLCALLBACK *fn)() );
GLUAPI void GLAPIENTRY gluGetTessProperty( GLUtesselator *tobj, GLenum which,
GLdouble *value );
#else
GLUAPI GLUtriangulatorObj* GLAPIENTRY gluNewTess( void );
GLUAPI void GLAPIENTRY gluTessCallback( GLUtriangulatorObj *tobj, GLenum which,
void (GLCALLBACK *fn)() );
GLUAPI void GLAPIENTRY gluDeleteTess( GLUtriangulatorObj *tobj );
GLUAPI void GLAPIENTRY gluBeginPolygon( GLUtriangulatorObj *tobj );
GLUAPI void GLAPIENTRY gluEndPolygon( GLUtriangulatorObj *tobj );
GLUAPI void GLAPIENTRY gluNextContour( GLUtriangulatorObj *tobj, GLenum type );
GLUAPI void GLAPIENTRY gluTessVertex( GLUtriangulatorObj *tobj, GLdouble v[3],
void *data );
#endif
/*
*
* New functions in GLU 1.1
*
*/
GLUAPI const GLubyte* GLAPIENTRY gluGetString( GLenum name );
/*
*
* GLU 1.3 functions
*
*/
#ifdef GLU_VERSION_1_3
GLUAPI GLboolean GLAPIENTRY
gluCheckExtension( const char *extName, const GLubyte *extString );
#endif
#if defined(__BEOS__) || defined(__QUICKDRAW__)
#pragma export off
#endif
#ifdef macintosh
#pragma enumsalwaysint reset
#if PRAGMA_IMPORT_SUPPORTED
#pragma import off
#endif
typedef struct GLUnurbs GLUnurbs;
typedef struct GLUquadric GLUquadric;
typedef struct GLUtesselator GLUtesselator;
#endif
typedef struct GLUnurbs GLUnurbsObj;
typedef struct GLUquadric GLUquadricObj;
typedef struct GLUtesselator GLUtesselatorObj;
typedef struct GLUtesselator GLUtriangulatorObj;
#define GLU_TESS_MAX_COORD 1.0e150
/* Internal convenience typedefs */
typedef void (*_GLUfuncptr)();
extern void gluBeginCurve (GLUnurbs* nurb);
extern void gluBeginPolygon (GLUtesselator* tess);
extern void gluBeginSurface (GLUnurbs* nurb);
extern void gluBeginTrim (GLUnurbs* nurb);
extern GLint gluBuild1DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
extern GLint gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
extern GLint gluBuild2DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
extern GLint gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
extern GLint gluBuild3DMipmapLevels (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLint level, GLint base, GLint max, const void *data);
extern GLint gluBuild3DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data);
extern GLboolean gluCheckExtension (const GLubyte *extName, const GLubyte *extString);
extern void gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);
extern void gluDeleteNurbsRenderer (GLUnurbs* nurb);
extern void gluDeleteQuadric (GLUquadric* quad);
extern void gluDeleteTess (GLUtesselator* tess);
extern void gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);
extern void gluEndCurve (GLUnurbs* nurb);
extern void gluEndPolygon (GLUtesselator* tess);
extern void gluEndSurface (GLUnurbs* nurb);
extern void gluEndTrim (GLUnurbs* nurb);
extern const GLubyte * gluErrorString (GLenum error);
extern void gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);
extern const GLubyte * gluGetString (GLenum name);
extern void gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);
extern void gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);
extern void gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
extern GLUnurbs* gluNewNurbsRenderer (void);
extern GLUquadric* gluNewQuadric (void);
extern GLUtesselator* gluNewTess (void);
extern void gluNextContour (GLUtesselator* tess, GLenum type);
extern void gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);
extern void gluNurbsCallbackData (GLUnurbs* nurb, GLvoid* userData);
extern void gluNurbsCallbackDataEXT (GLUnurbs* nurb, GLvoid* userData);
extern void gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);
extern void gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);
extern void gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);
extern void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
extern void gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);
extern void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
extern void gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
extern GLint gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
extern void gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
extern void gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);
extern void gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);
extern void gluQuadricNormals (GLUquadric* quad, GLenum normal);
extern void gluQuadricOrientation (GLUquadric* quad, GLenum orientation);
extern void gluQuadricTexture (GLUquadric* quad, GLboolean texture);
extern GLint gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
extern void gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);
extern void gluTessBeginContour (GLUtesselator* tess);
extern void gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
extern void gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
extern void gluTessEndContour (GLUtesselator* tess);
extern void gluTessEndPolygon (GLUtesselator* tess);
extern void gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
extern void gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
extern void gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
extern GLint gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
extern GLint gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble near, GLdouble far, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);
#ifdef __cplusplus
}
#endif
#endif
#endif /* __glu_h__ */

View File

@@ -1,8 +1,8 @@
/* $Id: glx.h,v 1.22.4.1 2000/11/25 18:52:02 brianp Exp $ */
/* $Id: glx.h,v 1.27 2001/05/24 19:07:14 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.4
* Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
@@ -30,6 +30,7 @@
#ifdef __VMS
#include <GL/vms_x_fix.h>
# ifdef __cplusplus
/* VMS Xlib.h gives problems with C++.
* this avoids a bunch of trivial warnings */
@@ -43,11 +44,11 @@
#pragma message enable nosimpint
#endif
#endif
#include "GL/gl.h"
#include <GL/gl.h>
#if defined(USE_MGL_NAMESPACE)
#include "glx_mangle.h"
#include <GL/glx_mangle.h>
#endif
@@ -162,11 +163,11 @@ extern "C" {
typedef void * GLXContext;
typedef struct __GLXcontextRec *GLXContext;
typedef XID GLXPixmap;
typedef XID GLXDrawable;
/* GLX 1.3 and later */
typedef void * GLXFBConfig;
typedef struct __GLXFBConfigRec *GLXFBConfig;
typedef XID GLXFBConfigID;
typedef XID GLXContextID;
typedef XID GLXWindow;
@@ -279,11 +280,11 @@ extern void glXGetSelectedEvent( Display *dpy, GLXDrawable drawable,
/*#ifndef GLX_GLXEXT_LEGACY*/
#ifndef GLX_GLXEXT_LEGACY
/*#include <GL/glxext.h>*/
#include <GL/glxext.h>
/*#else*/
#else
/*
@@ -413,7 +414,7 @@ extern Bool glXReleaseBuffersMESA( Display *dpy, GLXDrawable d );
#define GLX_3DFX_WINDOW_MODE_MESA 0x1
#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
extern GLboolean glXSet3DfxModeMESA( GLint mode );
extern Bool glXSet3DfxModeMESA( int mode );
#endif /* GLX_MESA_set_3dfx_mode */
@@ -431,7 +432,7 @@ extern void (*glXGetProcAddressARB(const GLubyte *procName))();
/*#endif*/ /* GLX_GLXEXT_LEGACY */
#endif /* GLX_GLXEXT_LEGACY */

534
include/GL/glxext.h Normal file
View File

@@ -0,0 +1,534 @@
#ifndef __glxext_h_
#define __glxext_h_
#ifdef __cplusplus
extern "C" {
#endif
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: This software was created using the
** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
** not been independently verified as being compliant with the OpenGL(R)
** version 1.2.1 Specification.
*/
#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__)
#define WIN32_LEAN_AND_MEAN 1
#include <windows.h>
#endif
#ifndef APIENTRY
#define APIENTRY
#endif
/*************************************************************/
/* Header file version number, required by OpenGL ABI for Linux */
#define GLX_GLXEXT_VERSION 2
#ifndef GLX_VERSION_1_3
#define GLX_WINDOW_BIT 0x00000001
#define GLX_PIXMAP_BIT 0x00000002
#define GLX_PBUFFER_BIT 0x00000004
#define GLX_RGBA_BIT 0x00000001
#define GLX_COLOR_INDEX_BIT 0x00000002
#define GLX_PBUFFER_CLOBBER_MASK 0x08000000
#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
#define GLX_AUX_BUFFERS_BIT 0x00000010
#define GLX_DEPTH_BUFFER_BIT 0x00000020
#define GLX_STENCIL_BUFFER_BIT 0x00000040
#define GLX_ACCUM_BUFFER_BIT 0x00000080
#define GLX_CONFIG_CAVEAT 0x20
#define GLX_X_VISUAL_TYPE 0x22
#define GLX_TRANSPARENT_TYPE 0x23
#define GLX_TRANSPARENT_INDEX_VALUE 0x24
#define GLX_TRANSPARENT_RED_VALUE 0x25
#define GLX_TRANSPARENT_GREEN_VALUE 0x26
#define GLX_TRANSPARENT_BLUE_VALUE 0x27
#define GLX_TRANSPARENT_ALPHA_VALUE 0x28
#define GLX_DONT_CARE 0xFFFFFFFF
#define GLX_NONE 0x8000
#define GLX_SLOW_CONFIG 0x8001
#define GLX_TRUE_COLOR 0x8002
#define GLX_DIRECT_COLOR 0x8003
#define GLX_PSEUDO_COLOR 0x8004
#define GLX_STATIC_COLOR 0x8005
#define GLX_GRAY_SCALE 0x8006
#define GLX_STATIC_GRAY 0x8007
#define GLX_TRANSPARENT_RGB 0x8008
#define GLX_TRANSPARENT_INDEX 0x8009
#define GLX_VISUAL_ID 0x800B
#define GLX_SCREEN 0x800C
#define GLX_NON_CONFORMANT_CONFIG 0x800D
#define GLX_DRAWABLE_TYPE 0x8010
#define GLX_RENDER_TYPE 0x8011
#define GLX_X_RENDERABLE 0x8012
#define GLX_FBCONFIG_ID 0x8013
#define GLX_RGBA_TYPE 0x8014
#define GLX_COLOR_INDEX_TYPE 0x8015
#define GLX_MAX_PBUFFER_WIDTH 0x8016
#define GLX_MAX_PBUFFER_HEIGHT 0x8017
#define GLX_MAX_PBUFFER_PIXELS 0x8018
#define GLX_PRESERVED_CONTENTS 0x801B
#define GLX_LARGEST_PBUFFER 0x801C
#define GLX_WIDTH 0x801D
#define GLX_HEIGHT 0x801E
#define GLX_EVENT_MASK 0x801F
#define GLX_DAMAGED 0x8020
#define GLX_SAVED 0x8021
#define GLX_WINDOW 0x8022
#define GLX_PBUFFER 0x8023
#define GLX_PBUFFER_HEIGHT 0x8040
#define GLX_PBUFFER_WIDTH 0x8041
#endif
/* XXX Added by BrianP */
#ifndef GLX_SGIS_multisample
#define GLX_SAMPLE_BUFFERS_SGIS 100000
#define GLX_SAMPLES_SGIS 100001
#endif
#ifndef GLX_EXT_visual_info
#define GLX_X_VISUAL_TYPE_EXT 0x22
#define GLX_TRANSPARENT_TYPE_EXT 0x23
#define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24
#define GLX_TRANSPARENT_RED_VALUE_EXT 0x25
#define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26
#define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27
#define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28
#define GLX_NONE_EXT 0x8000
#define GLX_TRUE_COLOR_EXT 0x8002
#define GLX_DIRECT_COLOR_EXT 0x8003
#define GLX_PSEUDO_COLOR_EXT 0x8004
#define GLX_STATIC_COLOR_EXT 0x8005
#define GLX_GRAY_SCALE_EXT 0x8006
#define GLX_STATIC_GRAY_EXT 0x8007
#define GLX_TRANSPARENT_RGB_EXT 0x8008
#define GLX_TRANSPARENT_INDEX_EXT 0x8009
#endif
#ifndef GLX_SGI_swap_control
#endif
#ifndef GLX_SGI_video_sync
#endif
#ifndef GLX_SGI_make_current_read
#endif
#ifndef GLX_SGIX_video_source
#endif
#ifndef GLX_EXT_visual_rating
#define GLX_VISUAL_CAVEAT_EXT 0x20
#define GLX_SLOW_VISUAL_EXT 0x8001
#define GLX_NON_CONFORMANT_VISUAL_EXT 0x800D
/* reuse GLX_NONE_EXT */
#endif
#ifndef GLX_EXT_import_context
#define GLX_SHARE_CONTEXT_EXT 0x800A
#define GLX_VISUAL_ID_EXT 0x800B
#define GLX_SCREEN_EXT 0x800C
#endif
#ifndef GLX_SGIX_fbconfig
#define GLX_WINDOW_BIT_SGIX 0x00000001
#define GLX_PIXMAP_BIT_SGIX 0x00000002
#define GLX_RGBA_BIT_SGIX 0x00000001
#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
#define GLX_DRAWABLE_TYPE_SGIX 0x8010
#define GLX_RENDER_TYPE_SGIX 0x8011
#define GLX_X_RENDERABLE_SGIX 0x8012
#define GLX_FBCONFIG_ID_SGIX 0x8013
#define GLX_RGBA_TYPE_SGIX 0x8014
#define GLX_COLOR_INDEX_TYPE_SGIX 0x8015
/* reuse GLX_SCREEN_EXT */
#endif
#ifndef GLX_SGIX_pbuffer
#define GLX_PBUFFER_BIT_SGIX 0x00000004
#define GLX_BUFFER_CLOBBER_MASK_SGIX 0x08000000
#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
#define GLX_STENCIL_BUFFER_BIT_SGIX 0x00000040
#define GLX_ACCUM_BUFFER_BIT_SGIX 0x00000080
#define GLX_SAMPLE_BUFFERS_BIT_SGIX 0x00000100
#define GLX_MAX_PBUFFER_WIDTH_SGIX 0x8016
#define GLX_MAX_PBUFFER_HEIGHT_SGIX 0x8017
#define GLX_MAX_PBUFFER_PIXELS_SGIX 0x8018
#define GLX_OPTIMAL_PBUFFER_WIDTH_SGIX 0x8019
#define GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX 0x801A
#define GLX_PRESERVED_CONTENTS_SGIX 0x801B
#define GLX_LARGEST_PBUFFER_SGIX 0x801C
#define GLX_WIDTH_SGIX 0x801D
#define GLX_HEIGHT_SGIX 0x801E
#define GLX_EVENT_MASK_SGIX 0x801F
#define GLX_DAMAGED_SGIX 0x8020
#define GLX_SAVED_SGIX 0x8021
#define GLX_WINDOW_SGIX 0x8022
#define GLX_PBUFFER_SGIX 0x8023
#endif
#ifndef GLX_SGI_cushion
#endif
#ifndef GLX_SGIX_video_resize
#define GLX_SYNC_FRAME_SGIX 0x00000000
#define GLX_SYNC_SWAP_SGIX 0x00000001
#endif
#ifndef GLX_SGIX_dmbuffer
#define GLX_DIGITAL_MEDIA_PBUFFER_SGIX 0x8024
#endif
#ifndef GLX_SGIX_swap_group
#endif
#ifndef GLX_SGIX_swap_barrier
#endif
#ifndef GLX_SGIS_blended_overlay
#define GLX_BLENDED_RGBA_SGIS 0x8025
#endif
#ifndef GLX_SGIS_shared_multisample
#define GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS 0x8026
#define GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS 0x8027
#endif
#ifndef GLX_SUN_get_transparent_index
#endif
#ifndef GLX_3DFX_multisample
#define GLX_SAMPLE_BUFFERS_3DFX 0x8050
#define GLX_SAMPLES_3DFX 0x8051
#endif
#ifndef GLX_MESA_copy_sub_buffer
#endif
#ifndef GLX_MESA_pixmap_colormap
#endif
#ifndef GLX_MESA_release_buffers
#endif
#ifndef GLX_MESA_set_3dfx_mode
#define GLX_3DFX_WINDOW_MODE_MESA 0x1
#define GLX_3DFX_FULLSCREEN_MODE_MESA 0x2
#endif
/*************************************************************/
#ifndef GLX_ARB_get_proc_address
/* XXX Added void parameter to silence many, many warnings (BrianP) */
typedef void (*__GLXextFuncPtr)(void);
#endif
#ifndef GLX_SGIX_video_source
typedef XID GLXVideoSourceSGIX;
#endif
#ifndef GLX_SGIX_fbconfig
typedef XID GLXFBConfigIDSGIX;
typedef struct __GLXFBConfigRec *GLXFBConfigSGIX;
#endif
#ifndef GLX_SGIX_pbuffer
typedef XID GLXPbufferSGIX;
typedef struct {
int type;
unsigned long serial; /* # of last request processed by server */
Bool send_event; /* true if this came for SendEvent request */
Display *display; /* display the event was read from */
GLXDrawable drawable; /* i.d. of Drawable */
int event_type; /* GLX_DAMAGED_SGIX or GLX_SAVED_SGIX */
int draw_type; /* GLX_WINDOW_SGIX or GLX_PBUFFER_SGIX */
unsigned int mask; /* mask indicating which buffers are affected*/
int x, y;
int width, height;
int count; /* if nonzero, at least this many more */
} GLXBufferClobberEventSGIX;
#endif
#ifndef GLX_VERSION_1_3
#define GLX_VERSION_1_3 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXFBConfig * glXGetFBConfigs (Display *, int, int *);
extern GLXFBConfig * glXChooseFBConfig (Display *, int, const int *, int *);
extern int glXGetFBConfigAttrib (Display *, GLXFBConfig, int, int *);
extern XVisualInfo * glXGetVisualFromFBConfig (Display *, GLXFBConfig);
extern GLXWindow glXCreateWindow (Display *, GLXFBConfig, Window, const int *);
extern void glXDestroyWindow (Display *, GLXWindow);
extern GLXPixmap glXCreatePixmap (Display *, GLXFBConfig, Pixmap, const int *);
extern void glXDestroyPixmap (Display *, GLXPixmap);
extern GLXPbuffer glXCreatePbuffer (Display *, GLXFBConfig, const int *);
extern void glXDestroyPbuffer (Display *, GLXPbuffer);
extern void glXQueryDrawable (Display *, GLXDrawable, int, unsigned int *);
extern GLXContext glXCreateNewContext (Display *, GLXFBConfig, int, GLXContext, Bool);
extern Bool glXMakeContextCurrent (Display *, GLXDrawable, GLXDrawable, GLXContext);
extern GLXDrawable glXGetCurrentReadDrawable (void);
extern Display * glXGetCurrentDisplay (void);
extern int glXQueryContext (Display *, GLXContext, int, int *);
extern void glXSelectEvent (Display *, GLXDrawable, unsigned long);
extern void glXGetSelectedEvent (Display *, GLXDrawable, unsigned long *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXFBConfig * ( * PFNGLXGETFBCONFIGSPROC) (Display *dpy, int screen, int *nelements);
typedef GLXFBConfig * ( * PFNGLXCHOOSEFBCONFIGPROC) (Display *dpy, int screen, const int *attrib_list, int *nelements);
typedef int ( * PFNGLXGETFBCONFIGATTRIBPROC) (Display *dpy, GLXFBConfig config, int attribute, int *value);
typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGPROC) (Display *dpy, GLXFBConfig config);
typedef GLXWindow ( * PFNGLXCREATEWINDOWPROC) (Display *dpy, GLXFBConfig config, Window win, const int *attrib_list);
typedef void ( * PFNGLXDESTROYWINDOWPROC) (Display *dpy, GLXWindow win);
typedef GLXPixmap ( * PFNGLXCREATEPIXMAPPROC) (Display *dpy, GLXFBConfig config, Pixmap pixmap, const int *attrib_list);
typedef void ( * PFNGLXDESTROYPIXMAPPROC) (Display *dpy, GLXPixmap pixmap);
typedef GLXPbuffer ( * PFNGLXCREATEPBUFFERPROC) (Display *dpy, GLXFBConfig config, const int *attrib_list);
typedef void ( * PFNGLXDESTROYPBUFFERPROC) (Display *dpy, GLXPbuffer pbuf);
typedef void ( * PFNGLXQUERYDRAWABLEPROC) (Display *dpy, GLXDrawable draw, int attribute, unsigned int *value);
typedef GLXContext ( * PFNGLXCREATENEWCONTEXTPROC) (Display *dpy, GLXFBConfig config, int render_type, GLXContext share_list, Bool direct);
typedef Bool ( * PFNGLXMAKECONTEXTCURRENTPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLEPROC) (void);
typedef Display * ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
typedef int ( * PFNGLXQUERYCONTEXTPROC) (Display *dpy, GLXContext ctx, int attribute, int *value);
typedef void ( * PFNGLXSELECTEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long event_mask);
typedef void ( * PFNGLXGETSELECTEDEVENTPROC) (Display *dpy, GLXDrawable draw, unsigned long *event_mask);
#endif
#ifndef GLX_ARB_get_proc_address
#define GLX_ARB_get_proc_address 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern __GLXextFuncPtr glXGetProcAddressARB (const GLubyte *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef __GLXextFuncPtr ( * PFNGLXGETPROCADDRESSARBPROC) (const GLubyte *procName);
#endif
#ifndef GLX_SGIS_multisample
#define GLX_SGIS_multisample 1
#endif
#ifndef GLX_EXT_visual_info
#define GLX_EXT_visual_info 1
#endif
#ifndef GLX_SGI_swap_control
#define GLX_SGI_swap_control 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXSwapIntervalSGI (int);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXSWAPINTERVALSGIPROC) (int interval);
#endif
#ifndef GLX_SGI_video_sync
#define GLX_SGI_video_sync 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXGetVideoSyncSGI (unsigned int *);
extern int glXWaitVideoSyncSGI (int, int, unsigned int *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXGETVIDEOSYNCSGIPROC) (unsigned int *count);
typedef int ( * PFNGLXWAITVIDEOSYNCSGIPROC) (int divisor, int remainder, unsigned int *count);
#endif
#ifndef GLX_SGI_make_current_read
#define GLX_SGI_make_current_read 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXMakeCurrentReadSGI (Display *, GLXDrawable, GLXDrawable, GLXContext);
extern GLXDrawable glXGetCurrentReadDrawableSGI (void);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXMAKECURRENTREADSGIPROC) (Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx);
typedef GLXDrawable ( * PFNGLXGETCURRENTREADDRAWABLESGIPROC) (void);
#endif
#ifdef _VL_H
#ifndef GLX_SGIX_video_source
#define GLX_SGIX_video_source 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXVideoSourceSGIX glXCreateGLXVideoSourceSGIX (Display *, int, VLServer, VLPath, int, VLNode);
extern void glXDestroyGLXVideoSourceSGIX (Display *, GLXVideoSourceSGIX);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXVideoSourceSGIX ( * PFNGLXCREATEGLXVIDEOSOURCESGIXPROC) (Display *display, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode);
typedef void ( * PFNGLXDESTROYGLXVIDEOSOURCESGIXPROC) (Display *dpy, GLXVideoSourceSGIX glxvideosource);
#endif
#endif /* _VL_H */
#ifndef GLX_EXT_visual_rating
#define GLX_EXT_visual_rating 1
#endif
#ifndef GLX_EXT_import_context
#define GLX_EXT_import_context 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Display * glXGetCurrentDisplayEXT (void);
extern int glXQueryContextInfoEXT (Display *, GLXContext, int, int *);
extern GLXContextID glXGetContextIDEXT (GLXContext);
extern GLXContext glXImportContextEXT (Display *, GLXContextID);
extern void glXFreeContextEXT (Display *, GLXContext);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Display * ( * PFNGLXGETCURRENTDISPLAYEXTPROC) (void);
typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display *dpy, GLXContext context, int attribute, int *value);
typedef GLXContextID ( * PFNGLXGETCONTEXTIDEXTPROC) (GLXContext context);
typedef GLXContext ( * PFNGLXIMPORTCONTEXTEXTPROC) (Display *dpy, GLXContextID contextID);
typedef void ( * PFNGLXFREECONTEXTEXTPROC) (Display *dpy, GLXContext context);
#endif
#ifndef GLX_SGIX_fbconfig
#define GLX_SGIX_fbconfig 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXGetFBConfigAttribSGIX (Display *, GLXFBConfigSGIX, int, int *);
extern GLXFBConfigSGIX * glXChooseFBConfigSGIX (Display *, int, int *, int *);
extern GLXPixmap glXCreateGLXPixmapWithConfigSGIX (Display *, GLXFBConfigSGIX, Pixmap);
extern GLXContext glXCreateContextWithConfigSGIX (Display *, GLXFBConfigSGIX, int, GLXContext, Bool);
extern XVisualInfo * glXGetVisualFromFBConfigSGIX (Display *, GLXFBConfigSGIX);
extern GLXFBConfigSGIX glXGetFBConfigFromVisualSGIX (Display *, XVisualInfo *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXGETFBCONFIGATTRIBSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int attribute, int *value);
typedef GLXFBConfigSGIX * ( * PFNGLXCHOOSEFBCONFIGSGIXPROC) (Display *dpy, int screen, int *attrib_list, int *nelements);
typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap);
typedef GLXContext ( * PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct);
typedef XVisualInfo * ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLXFBConfigSGIX config);
typedef GLXFBConfigSGIX ( * PFNGLXGETFBCONFIGFROMVISUALSGIXPROC) (Display *dpy, XVisualInfo *vis);
#endif
#ifndef GLX_SGIX_pbuffer
#define GLX_SGIX_pbuffer 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXPbufferSGIX glXCreateGLXPbufferSGIX (Display *, GLXFBConfigSGIX, unsigned int, unsigned int, int *);
extern void glXDestroyGLXPbufferSGIX (Display *, GLXPbufferSGIX);
extern int glXQueryGLXPbufferSGIX (Display *, GLXPbufferSGIX, int, unsigned int *);
extern void glXSelectEventSGIX (Display *, GLXDrawable, unsigned long);
extern void glXGetSelectedEventSGIX (Display *, GLXDrawable, unsigned long *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXPbufferSGIX ( * PFNGLXCREATEGLXPBUFFERSGIXPROC) (Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list);
typedef void ( * PFNGLXDESTROYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf);
typedef int ( * PFNGLXQUERYGLXPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value);
typedef void ( * PFNGLXSELECTEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long mask);
typedef void ( * PFNGLXGETSELECTEDEVENTSGIXPROC) (Display *dpy, GLXDrawable drawable, unsigned long *mask);
#endif
#ifndef GLX_SGI_cushion
#define GLX_SGI_cushion 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXCushionSGI (Display *, Window, float);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXCUSHIONSGIPROC) (Display *dpy, Window window, float cushion);
#endif
#ifndef GLX_SGIX_video_resize
#define GLX_SGIX_video_resize 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern int glXBindChannelToWindowSGIX (Display *, int, int, Window);
extern int glXChannelRectSGIX (Display *, int, int, int, int, int, int);
extern int glXQueryChannelRectSGIX (Display *, int, int, int *, int *, int *, int *);
extern int glXQueryChannelDeltasSGIX (Display *, int, int, int *, int *, int *, int *);
extern int glXChannelRectSyncSGIX (Display *, int, int, GLenum);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef int ( * PFNGLXBINDCHANNELTOWINDOWSGIXPROC) (Display *display, int screen, int channel, Window window);
typedef int ( * PFNGLXCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int x, int y, int w, int h);
typedef int ( * PFNGLXQUERYCHANNELRECTSGIXPROC) (Display *display, int screen, int channel, int *dx, int *dy, int *dw, int *dh);
typedef int ( * PFNGLXQUERYCHANNELDELTASSGIXPROC) (Display *display, int screen, int channel, int *x, int *y, int *w, int *h);
typedef int ( * PFNGLXCHANNELRECTSYNCSGIXPROC) (Display *display, int screen, int channel, GLenum synctype);
#endif
#ifdef _DM_BUFFER_H_
#ifndef GLX_SGIX_dmbuffer
#define GLX_SGIX_dmbuffer 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXAssociateDMPbufferSGIX (Display *, GLXPbufferSGIX, DMparams *, DMbuffer);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXASSOCIATEDMPBUFFERSGIXPROC) (Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer);
#endif
#endif /* _DM_BUFFER_H_ */
#ifndef GLX_SGIX_swap_group
#define GLX_SGIX_swap_group 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXJoinSwapGroupSGIX (Display *, GLXDrawable, GLXDrawable);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawable, GLXDrawable member);
#endif
#ifndef GLX_SGIX_swap_barrier
#define GLX_SGIX_swap_barrier 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXBindSwapBarrierSGIX (Display *, GLXDrawable, int);
extern Bool glXQueryMaxSwapBarriersSGIX (Display *, int, int *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXBINDSWAPBARRIERSGIXPROC) (Display *dpy, GLXDrawable drawable, int barrier);
typedef Bool ( * PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC) (Display *dpy, int screen, int *max);
#endif
#ifndef GLX_SUN_get_transparent_index
#define GLX_SUN_get_transparent_index 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Status glXGetTransparentIndexSUN (Display *, Window, Window, long *);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Status ( * PFNGLXGETTRANSPARENTINDEXSUNPROC) (Display *dpy, Window overlay, Window underlay, long *pTransparentIndex);
#endif
#ifndef GLX_MESA_copy_sub_buffer
#define GLX_MESA_copy_sub_buffer 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern void glXCopySubBufferMESA (Display *, GLXDrawable, int, int, int, int);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef void ( * PFNGLXCOPYSUBBUFFERMESAPROC) (Display *dpy, GLXDrawable drawable, int x, int y, int width, int height);
#endif
#ifndef GLX_MESA_pixmap_colormap
#define GLX_MESA_pixmap_colormap 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern GLXPixmap glXCreateGLXPixmapMESA (Display *, XVisualInfo *, Pixmap, Colormap);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef GLXPixmap ( * PFNGLXCREATEGLXPIXMAPMESAPROC) (Display *dpy, XVisualInfo *visual, Pixmap pixmap, Colormap cmap);
#endif
#ifndef GLX_MESA_release_buffers
#define GLX_MESA_release_buffers 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXReleaseBuffersMESA (Display *, GLXDrawable);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXRELEASEBUFFERSMESAPROC) (Display *dpy, GLXDrawable drawable);
#endif
#ifndef GLX_MESA_set_3dfx_mode
#define GLX_MESA_set_3dfx_mode 1
#ifdef GLX_GLXEXT_PROTOTYPES
extern Bool glXSet3DfxModeMESA (int);
#endif /* GLX_GLXEXT_PROTOTYPES */
typedef Bool ( * PFNGLXSET3DFXMODEMESAPROC) (int mode);
#endif
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,424 @@
#ifndef __gl_core_h_
#define __gl_core_h_
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
** $Date: 2001/01/08 03:56:53 $ $Revision: 1.1 $
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/include/GL/internal/Attic/glcore-new.h,v 1.1 2001/01/08 03:56:53 keithw Exp $
*/
#ifdef XFree86LOADER
#include "xf86_ansic.h"
#else
#include <sys/types.h>
#endif
typedef struct __GLcontextRec __GLcontext;
typedef struct __GLinterfaceRec __GLinterface;
/*
** This file defines the interface between the GL core and the surrounding
** "operating system" that supports it (currently the GLX or WGL extensions).
**
** Members (data and function pointers) are documented as imported or
** exported according to how they are used by the core rendering functions.
** Imported members are initialized by the "operating system" and used by
** the core functions. Exported members are initialized by the core functions
** and used by the "operating system".
*/
/*
** Mode and limit information for a context. This information is
** kept around in the context so that values can be used during
** command execution, and for returning information about the
** context to the application.
*/
typedef struct __GLcontextModesRec {
GLboolean rgbMode;
GLboolean colorIndexMode;
GLboolean doubleBufferMode;
GLboolean stereoMode;
GLboolean haveAccumBuffer;
GLboolean haveDepthBuffer;
GLboolean haveStencilBuffer;
GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */
GLuint redMask, greenMask, blueMask, alphaMask;
GLint rgbBits; /* total bits for rgb */
GLint indexBits; /* total bits for colorindex */
GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
GLint depthBits;
GLint stencilBits;
GLint numAuxBuffers;
GLint level;
GLint pixmapMode;
} __GLcontextModes;
/************************************************************************/
/*
** Structure used for allocating and freeing drawable private memory.
** (like software buffers, for example).
**
** The memory allocation routines are provided by the surrounding
** "operating system" code, and they are to be used for allocating
** software buffers and things which are associated with the drawable,
** and used by any context which draws to that drawable. There are
** separate memory allocation functions for drawables and contexts
** since drawables and contexts can be created and destroyed independently
** of one another, and the "operating system" may want to use separate
** allocation arenas for each.
**
** The freePrivate function is filled in by the core routines when they
** allocates software buffers, and stick them in "private". The freePrivate
** function will destroy anything allocated to this drawable (to be called
** when the drawable is destroyed).
*/
typedef struct __GLdrawableRegionRec __GLdrawableRegion;
typedef struct __GLdrawableBufferRec __GLdrawableBuffer;
typedef struct __GLdrawablePrivateRec __GLdrawablePrivate;
typedef struct __GLregionRectRec {
/* lower left (inside the rectangle) */
GLint x0, y0;
/* upper right (outside the rectangle) */
GLint x1, y1;
} __GLregionRect;
struct __GLdrawableRegionRec {
GLint numRects;
__GLregionRect *rects;
__GLregionRect boundingRect;
};
/************************************************************************/
/* masks for the buffers */
#define __GL_FRONT_BUFFER_MASK 0x00000001
#define __GL_FRONT_LEFT_BUFFER_MASK 0x00000001
#define __GL_FRONT_RIGHT_BUFFER_MASK 0x00000002
#define __GL_BACK_BUFFER_MASK 0x00000004
#define __GL_BACK_LEFT_BUFFER_MASK 0x00000004
#define __GL_BACK_RIGHT_BUFFER_MASK 0x00000008
#define __GL_ACCUM_BUFFER_MASK 0x00000010
#define __GL_DEPTH_BUFFER_MASK 0x00000020
#define __GL_STENCIL_BUFFER_MASK 0x00000040
#define __GL_AUX_BUFFER_MASK(i) (0x0000080 << (i))
#define __GL_ALL_BUFFER_MASK 0xffffffff
/* what Resize routines return if resize resorted to fallback case */
#define __GL_BUFFER_FALLBACK 0x10
typedef void (*__GLbufFallbackInitFn)(__GLdrawableBuffer *buf,
__GLdrawablePrivate *glPriv, GLint bits);
typedef void (*__GLbufMainInitFn)(__GLdrawableBuffer *buf,
__GLdrawablePrivate *glPriv, GLint bits,
__GLbufFallbackInitFn back);
/*
** A drawable buffer
**
** This data structure describes the context side of a drawable.
**
** According to the spec there could be multiple contexts bound to the same
** drawable at the same time (from different threads). In order to avoid
** multiple-access conflicts, locks are used to serialize access. When a
** thread needs to access (read or write) a member of the drawable, it takes
** a lock first. Some of the entries in the drawable are treated "mostly
** constant", so we take the freedom of allowing access to them without
** taking a lock (for optimization reasons).
**
** For more details regarding locking, see buffers.h in the GL core
*/
struct __GLdrawableBufferRec {
/*
** Buffer dimensions
*/
GLint width, height, depth;
/*
** Framebuffer base address
*/
void *base;
/*
** Framebuffer size (in bytes)
*/
GLuint size;
/*
** Size (in bytes) of each element in the framebuffer
*/
GLuint elementSize;
GLuint elementSizeLog2;
/*
** Element skip from one scanline to the next.
** If the buffer is part of another buffer (for example, fullscreen
** front buffer), outerWidth is the width of that buffer.
*/
GLint outerWidth;
/*
** outerWidth * elementSize
*/
GLint byteWidth;
/*
** Allocation/deallocation is done based on this handle. A handle
** is conceptually different from the framebuffer 'base'.
*/
void *handle;
/* imported */
GLboolean (*resize)(__GLdrawableBuffer *buf,
GLint x, GLint y, GLuint width, GLuint height,
__GLdrawablePrivate *glPriv, GLuint bufferMask);
void (*lock)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
void (*unlock)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
void (*fill)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv,
GLuint val, GLint x, GLint y, GLint w, GLint h);
void (*free)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
/* exported */
void (*freePrivate)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
#ifdef __cplusplus
void *privatePtr;
#else
void *private;
#endif
/* private */
void *other; /* implementation private data */
__GLbufMainInitFn mainInit;
__GLbufFallbackInitFn fallbackInit;
};
/*
** The context side of the drawable private
*/
struct __GLdrawablePrivateRec {
/*
** Drawable Modes
*/
__GLcontextModes *modes;
/*
** Drawable size
*/
GLuint width, height;
/*
** Origin in screen coordinates of the drawable
*/
GLint xOrigin, yOrigin;
#ifdef __GL_ALIGNED_BUFFERS
/*
** Drawable offset from screen origin
*/
GLint xOffset, yOffset;
/*
** Alignment restriction
*/
GLint xAlignment, yAlignment;
#endif
/*
** Should we invert the y axis?
*/
GLint yInverted;
/*
** Mask specifying which buffers are renderable by the hw
*/
GLuint accelBufferMask;
/*
** the buffers themselves
*/
__GLdrawableBuffer frontBuffer;
__GLdrawableBuffer backBuffer;
__GLdrawableBuffer accumBuffer;
__GLdrawableBuffer depthBuffer;
__GLdrawableBuffer stencilBuffer;
#if __GL_NUMBER_OF_AUX_BUFFERS > 0
__GLdrawableBuffer *auxBuffer;
#endif
__GLdrawableRegion ownershipRegion;
/*
** Lock for the drawable private structure
*/
void *lock;
#ifdef DEBUG
/* lock debugging info */
int lockRefCount;
int lockLine[10];
char *lockFile[10];
#endif
/* imported */
void *(*malloc)(size_t size);
void *(*calloc)(size_t numElem, size_t elemSize);
void *(*realloc)(void *oldAddr, size_t newSize);
void (*free)(void *addr);
GLboolean (*addSwapRect)(__GLdrawablePrivate *glPriv,
GLint x, GLint y, GLsizei width, GLsizei height);
void (*setClipRect)(__GLdrawablePrivate *glPriv,
GLint x, GLint y, GLsizei width, GLsizei height);
void (*updateClipRegion)(__GLdrawablePrivate *glPriv);
GLboolean (*resize)(__GLdrawablePrivate *glPriv);
void (*getDrawableSize)(__GLdrawablePrivate *glPriv,
GLint *x, GLint *y, GLuint *width, GLuint *height);
void (*lockDP)(__GLdrawablePrivate *glPriv, __GLcontext *gc);
void (*unlockDP)(__GLdrawablePrivate *glPriv);
/* exported */
void *wsPriv; /* pointer to the window system DrawablePrivate */
#ifdef __cplusplus
void *privatePtr;
#else
void *private;
#endif
void (*freePrivate)(__GLdrawablePrivate *);
/* client data */
void *other;
};
/*
** Macros to lock/unlock the drawable private
*/
#if defined(DEBUG)
#define __GL_LOCK_DP(glPriv,gc) \
(*(glPriv)->lockDP)(glPriv,gc); \
(glPriv)->lockLine[(glPriv)->lockRefCount] = __LINE__; \
(glPriv)->lockFile[(glPriv)->lockRefCount] = __FILE__; \
(glPriv)->lockRefCount++
#define __GL_UNLOCK_DP(glPriv) \
(glPriv)->lockRefCount--; \
(glPriv)->lockLine[(glPriv)->lockRefCount] = 0; \
(glPriv)->lockFile[(glPriv)->lockRefCount] = NULL; \
(*(glPriv)->unlockDP)(glPriv)
#else /* DEBUG */
#define __GL_LOCK_DP(glPriv,gc) (*(glPriv)->lockDP)(glPriv,gc)
#define __GL_UNLOCK_DP(glPriv) (*(glPriv)->unlockDP)(glPriv)
#endif /* DEBUG */
/*
** Procedures which are imported by the GL from the surrounding
** "operating system". Math functions are not considered part of the
** "operating system".
*/
typedef struct __GLimportsRec {
/* Memory management */
void * (*malloc)(__GLcontext *gc, size_t size);
void *(*calloc)(__GLcontext *gc, size_t numElem, size_t elemSize);
void *(*realloc)(__GLcontext *gc, void *oldAddr, size_t newSize);
void (*free)(__GLcontext *gc, void *addr);
/* Error handling */
void (*warning)(__GLcontext *gc, char *fmt);
void (*fatal)(__GLcontext *gc, char *fmt);
/* other system calls */
char *(CAPI *getenv)(__GLcontext *gc, const char *var);
int (CAPI *atoi)(__GLcontext *gc, const char *str);
int (CAPI *sprintf)(__GLcontext *gc, char *str, const char *fmt, ...);
void *(CAPI *fopen)(__GLcontext *gc, const char *path, const char *mode);
int (CAPI *fclose)(__GLcontext *gc, void *stream);
int (CAPI *fprintf)(__GLcontext *gc, void *stream, const char *fmt, ...);
/* Drawing surface management */
__GLdrawablePrivate *(*getDrawablePrivate)(__GLcontext *gc);
/* Pointer to the window system context */
void *wscx;
/* Operating system dependent data goes here */
void *other;
} __GLimports;
/************************************************************************/
/*
** Procedures which are exported by the GL to the surrounding "operating
** system" so that it can manage multiple GL context's.
*/
typedef struct __GLexportsRec {
/* Context management (return GL_FALSE on failure) */
GLboolean (*destroyContext)(__GLcontext *gc);
GLboolean (*loseCurrent)(__GLcontext *gc);
GLboolean (*makeCurrent)(__GLcontext *gc);
GLboolean (*shareContext)(__GLcontext *gc, __GLcontext *gcShare);
GLboolean (*copyContext)(__GLcontext *dst, const __GLcontext *src, GLuint mask);
GLboolean (*forceCurrent)(__GLcontext *gc);
/* Drawing surface notification callbacks */
GLboolean (*notifyResize)(__GLcontext *gc);
void (*notifyDestroy)(__GLcontext *gc);
void (*notifySwapBuffers)(__GLcontext *gc);
/* Dispatch table override control for external agents like libGLS */
struct __GLdispatchStateRec* (*dispatchExec)(__GLcontext *gc);
void (*beginDispatchOverride)(__GLcontext *gc);
void (*endDispatchOverride)(__GLcontext *gc);
} __GLexports;
/************************************************************************/
/*
** This must be the first member of a __GLcontext structure. This is the
** only part of a context that is exposed to the outside world; everything
** else is opaque.
*/
struct __GLinterfaceRec {
__GLimports imports;
__GLexports exports;
};
extern __GLcontext *__glCoreCreateContext(__GLimports *, __GLcontextModes *);
extern void __glCoreNopDispatch(void);
#endif /* __gl_core_h_ */

View File

@@ -0,0 +1,424 @@
/* $XFree86: xc/lib/GL/include/GL/internal/glcore.h,v 1.7 2001/03/25 05:32:00 tsi Exp $ */
#ifndef __gl_core_h_
#define __gl_core_h_
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
*/
#ifndef XFree86LOADER
#include <sys/types.h>
#endif
#define GL_CORE_SGI 1
#define GL_CORE_MESA 2
typedef struct __GLcontextRec __GLcontext;
typedef struct __GLinterfaceRec __GLinterface;
/*
** This file defines the interface between the GL core and the surrounding
** "operating system" that supports it (currently the GLX or WGL extensions).
**
** Members (data and function pointers) are documented as imported or
** exported according to how they are used by the core rendering functions.
** Imported members are initialized by the "operating system" and used by
** the core functions. Exported members are initialized by the core functions
** and used by the "operating system".
*/
/*
** Mode and limit information for a context. This information is
** kept around in the context so that values can be used during
** command execution, and for returning information about the
** context to the application.
*/
typedef struct __GLcontextModesRec {
GLboolean rgbMode;
GLboolean colorIndexMode;
GLboolean doubleBufferMode;
GLboolean stereoMode;
GLboolean haveAccumBuffer;
GLboolean haveDepthBuffer;
GLboolean haveStencilBuffer;
GLint redBits, greenBits, blueBits, alphaBits; /* bits per comp */
GLuint redMask, greenMask, blueMask, alphaMask;
GLint rgbBits; /* total bits for rgb */
GLint indexBits; /* total bits for colorindex */
GLint accumRedBits, accumGreenBits, accumBlueBits, accumAlphaBits;
GLint depthBits;
GLint stencilBits;
GLint numAuxBuffers;
GLint level;
GLint pixmapMode;
} __GLcontextModes;
/************************************************************************/
/*
** Structure used for allocating and freeing drawable private memory.
** (like software buffers, for example).
**
** The memory allocation routines are provided by the surrounding
** "operating system" code, and they are to be used for allocating
** software buffers and things which are associated with the drawable,
** and used by any context which draws to that drawable. There are
** separate memory allocation functions for drawables and contexts
** since drawables and contexts can be created and destroyed independently
** of one another, and the "operating system" may want to use separate
** allocation arenas for each.
**
** The freePrivate function is filled in by the core routines when they
** allocates software buffers, and stick them in "private". The freePrivate
** function will destroy anything allocated to this drawable (to be called
** when the drawable is destroyed).
*/
typedef struct __GLdrawableRegionRec __GLdrawableRegion;
typedef struct __GLdrawableBufferRec __GLdrawableBuffer;
typedef struct __GLdrawablePrivateRec __GLdrawablePrivate;
typedef struct __GLregionRectRec {
/* lower left (inside the rectangle) */
GLint x0, y0;
/* upper right (outside the rectangle) */
GLint x1, y1;
} __GLregionRect;
struct __GLdrawableRegionRec {
GLint numRects;
__GLregionRect *rects;
__GLregionRect boundingRect;
};
/************************************************************************/
/* masks for the buffers */
#define __GL_FRONT_BUFFER_MASK 0x00000001
#define __GL_FRONT_LEFT_BUFFER_MASK 0x00000001
#define __GL_FRONT_RIGHT_BUFFER_MASK 0x00000002
#define __GL_BACK_BUFFER_MASK 0x00000004
#define __GL_BACK_LEFT_BUFFER_MASK 0x00000004
#define __GL_BACK_RIGHT_BUFFER_MASK 0x00000008
#define __GL_ACCUM_BUFFER_MASK 0x00000010
#define __GL_DEPTH_BUFFER_MASK 0x00000020
#define __GL_STENCIL_BUFFER_MASK 0x00000040
#define __GL_AUX_BUFFER_MASK(i) (0x0000080 << (i))
#define __GL_ALL_BUFFER_MASK 0xffffffff
/* what Resize routines return if resize resorted to fallback case */
#define __GL_BUFFER_FALLBACK 0x10
typedef void (*__GLbufFallbackInitFn)(__GLdrawableBuffer *buf,
__GLdrawablePrivate *glPriv, GLint bits);
typedef void (*__GLbufMainInitFn)(__GLdrawableBuffer *buf,
__GLdrawablePrivate *glPriv, GLint bits,
__GLbufFallbackInitFn back);
/*
** A drawable buffer
**
** This data structure describes the context side of a drawable.
**
** According to the spec there could be multiple contexts bound to the same
** drawable at the same time (from different threads). In order to avoid
** multiple-access conflicts, locks are used to serialize access. When a
** thread needs to access (read or write) a member of the drawable, it takes
** a lock first. Some of the entries in the drawable are treated "mostly
** constant", so we take the freedom of allowing access to them without
** taking a lock (for optimization reasons).
**
** For more details regarding locking, see buffers.h in the GL core
*/
struct __GLdrawableBufferRec {
/*
** Buffer dimensions
*/
GLint width, height, depth;
/*
** Framebuffer base address
*/
void *base;
/*
** Framebuffer size (in bytes)
*/
GLuint size;
/*
** Size (in bytes) of each element in the framebuffer
*/
GLuint elementSize;
GLuint elementSizeLog2;
/*
** Element skip from one scanline to the next.
** If the buffer is part of another buffer (for example, fullscreen
** front buffer), outerWidth is the width of that buffer.
*/
GLint outerWidth;
/*
** outerWidth * elementSize
*/
GLint byteWidth;
/*
** Allocation/deallocation is done based on this handle. A handle
** is conceptually different from the framebuffer 'base'.
*/
void *handle;
/* imported */
GLboolean (*resize)(__GLdrawableBuffer *buf,
GLint x, GLint y, GLuint width, GLuint height,
__GLdrawablePrivate *glPriv, GLuint bufferMask);
void (*lock)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
void (*unlock)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
void (*fill)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv,
GLuint val, GLint x, GLint y, GLint w, GLint h);
void (*free)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
/* exported */
void (*freePrivate)(__GLdrawableBuffer *buf, __GLdrawablePrivate *glPriv);
#ifdef __cplusplus
void *privatePtr;
#else
void *private;
#endif
/* private */
void *other; /* implementation private data */
__GLbufMainInitFn mainInit;
__GLbufFallbackInitFn fallbackInit;
};
/*
** The context side of the drawable private
*/
struct __GLdrawablePrivateRec {
/*
** Drawable Modes
*/
__GLcontextModes *modes;
/*
** Drawable size
*/
GLuint width, height;
/*
** Origin in screen coordinates of the drawable
*/
GLint xOrigin, yOrigin;
#ifdef __GL_ALIGNED_BUFFERS
/*
** Drawable offset from screen origin
*/
GLint xOffset, yOffset;
/*
** Alignment restriction
*/
GLint xAlignment, yAlignment;
#endif
/*
** Should we invert the y axis?
*/
GLint yInverted;
/*
** Mask specifying which buffers are renderable by the hw
*/
GLuint accelBufferMask;
/*
** the buffers themselves
*/
__GLdrawableBuffer frontBuffer;
__GLdrawableBuffer backBuffer;
__GLdrawableBuffer accumBuffer;
__GLdrawableBuffer depthBuffer;
__GLdrawableBuffer stencilBuffer;
#if defined(__GL_NUMBER_OF_AUX_BUFFERS) && (__GL_NUMBER_OF_AUX_BUFFERS > 0)
__GLdrawableBuffer *auxBuffer;
#endif
__GLdrawableRegion ownershipRegion;
/*
** Lock for the drawable private structure
*/
void *lock;
#ifdef DEBUG
/* lock debugging info */
int lockRefCount;
int lockLine[10];
char *lockFile[10];
#endif
/* imported */
void *(*malloc)(size_t size);
void *(*calloc)(size_t numElem, size_t elemSize);
void *(*realloc)(void *oldAddr, size_t newSize);
void (*free)(void *addr);
GLboolean (*addSwapRect)(__GLdrawablePrivate *glPriv,
GLint x, GLint y, GLsizei width, GLsizei height);
void (*setClipRect)(__GLdrawablePrivate *glPriv,
GLint x, GLint y, GLsizei width, GLsizei height);
void (*updateClipRegion)(__GLdrawablePrivate *glPriv);
GLboolean (*resize)(__GLdrawablePrivate *glPriv);
void (*getDrawableSize)(__GLdrawablePrivate *glPriv,
GLint *x, GLint *y, GLuint *width, GLuint *height);
void (*lockDP)(__GLdrawablePrivate *glPriv, __GLcontext *gc);
void (*unlockDP)(__GLdrawablePrivate *glPriv);
/* exported */
void *wsPriv; /* pointer to the window system DrawablePrivate */
#ifdef __cplusplus
void *privatePtr;
#else
void *private;
#endif
void (*freePrivate)(__GLdrawablePrivate *);
/* client data */
void *other;
};
/*
** Macros to lock/unlock the drawable private
*/
#if defined(DEBUG)
#define __GL_LOCK_DP(glPriv,gc) \
(*(glPriv)->lockDP)(glPriv,gc); \
(glPriv)->lockLine[(glPriv)->lockRefCount] = __LINE__; \
(glPriv)->lockFile[(glPriv)->lockRefCount] = __FILE__; \
(glPriv)->lockRefCount++
#define __GL_UNLOCK_DP(glPriv) \
(glPriv)->lockRefCount--; \
(glPriv)->lockLine[(glPriv)->lockRefCount] = 0; \
(glPriv)->lockFile[(glPriv)->lockRefCount] = NULL; \
(*(glPriv)->unlockDP)(glPriv)
#else /* DEBUG */
#define __GL_LOCK_DP(glPriv,gc) (*(glPriv)->lockDP)(glPriv,gc)
#define __GL_UNLOCK_DP(glPriv) (*(glPriv)->unlockDP)(glPriv)
#endif /* DEBUG */
/*
** Procedures which are imported by the GL from the surrounding
** "operating system". Math functions are not considered part of the
** "operating system".
*/
typedef struct __GLimportsRec {
/* Memory management */
void * (*malloc)(__GLcontext *gc, size_t size);
void *(*calloc)(__GLcontext *gc, size_t numElem, size_t elemSize);
void *(*realloc)(__GLcontext *gc, void *oldAddr, size_t newSize);
void (*free)(__GLcontext *gc, void *addr);
/* Error handling */
void (*warning)(__GLcontext *gc, char *fmt);
void (*fatal)(__GLcontext *gc, char *fmt);
/* other system calls */
char *(CAPI *getenv)(__GLcontext *gc, const char *var);
int (CAPI *atoi)(__GLcontext *gc, const char *str);
int (CAPI *sprintf)(__GLcontext *gc, char *str, const char *fmt, ...);
void *(CAPI *fopen)(__GLcontext *gc, const char *path, const char *mode);
int (CAPI *fclose)(__GLcontext *gc, void *stream);
int (CAPI *fprintf)(__GLcontext *gc, void *stream, const char *fmt, ...);
/* Drawing surface management */
__GLdrawablePrivate *(*getDrawablePrivate)(__GLcontext *gc);
/* Pointer to the window system context */
void *wscx;
/* Operating system dependent data goes here */
void *other;
} __GLimports;
/************************************************************************/
/*
** Procedures which are exported by the GL to the surrounding "operating
** system" so that it can manage multiple GL context's.
*/
typedef struct __GLexportsRec {
/* Context management (return GL_FALSE on failure) */
GLboolean (*destroyContext)(__GLcontext *gc);
GLboolean (*loseCurrent)(__GLcontext *gc);
GLboolean (*makeCurrent)(__GLcontext *gc);
GLboolean (*shareContext)(__GLcontext *gc, __GLcontext *gcShare);
GLboolean (*copyContext)(__GLcontext *dst, const __GLcontext *src, GLuint mask);
GLboolean (*forceCurrent)(__GLcontext *gc);
/* Drawing surface notification callbacks */
GLboolean (*notifyResize)(__GLcontext *gc);
void (*notifyDestroy)(__GLcontext *gc);
void (*notifySwapBuffers)(__GLcontext *gc);
/* Dispatch table override control for external agents like libGLS */
struct __GLdispatchStateRec* (*dispatchExec)(__GLcontext *gc);
void (*beginDispatchOverride)(__GLcontext *gc);
void (*endDispatchOverride)(__GLcontext *gc);
} __GLexports;
/************************************************************************/
/*
** This must be the first member of a __GLcontext structure. This is the
** only part of a context that is exposed to the outside world; everything
** else is opaque.
*/
struct __GLinterfaceRec {
__GLimports imports;
__GLexports exports;
};
extern __GLcontext *__glCoreCreateContext(__GLimports *, __GLcontextModes *);
extern void __glCoreNopDispatch(void);
#endif /* __gl_core_h_ */

View File

@@ -1,124 +1,125 @@
/* $Id: mesa_wgl.h,v 1.5.4.1 2000/11/20 17:31:51 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* prototypes for the Mesa WGL functions */
/* relocated here so that I could make GLUT get them properly */
#ifndef _mesa_wgl_h_
#define _mesa_wgl_h_
#include <windows.h>
#include <gl/gl.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN32__))
# if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
# define GLAPI __declspec(dllexport)
# define WGLAPI __declspec(dllexport)
# elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
# define GLAPI __declspec(dllimport)
# define WGLAPI __declspec(dllimport)
# else /* for use with static link lib build of Win32 edition only */
# define GLAPI extern
# define WGLAPI __declspec(dllimport)
# endif /* _STATIC_MESA support */
# define GLAPIENTRY __stdcall
#else
/* non-Windows compilation */
# define GLAPI extern
# define GLAPIENTRY
#endif /* WIN32 / CYGWIN32 bracket */
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP)
#ifndef _GNU_H_WINDOWS32_FUNCTIONS
# ifdef UNICODE
# define wglUseFontBitmaps wglUseFontBitmapsW
# define wglUseFontOutlines wglUseFontOutlinesW
# else
# define wglUseFontBitmaps wglUseFontBitmapsA
# define wglUseFontOutlines wglUseFontOutlinesA
# endif /* !UNICODE */
#endif /* _GNU_H_WINDOWS32_FUNCTIONS */
typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
#endif
#ifdef _MSC_VER
# pragma warning( disable : 4615 ) /* pragma warning : unknown user warning type*/
# pragma warning( push )
# pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */
#endif
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC,HGLRC);
WGLAPI int GLAPIENTRY wglSetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglSwapBuffers(HDC hdc);
WGLAPI HDC GLAPIENTRY wglGetCurrentDC(void);
WGLAPI HGLRC GLAPIENTRY wglCreateContext(HDC);
WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC,int);
WGLAPI HGLRC GLAPIENTRY wglGetCurrentContext(void);
WGLAPI PROC GLAPIENTRY wglGetProcAddress(const char*);
WGLAPI int GLAPIENTRY wglChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglCopyContext(HGLRC, HGLRC, unsigned int);
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglDescribeLayerPlane(HDC, int, int, unsigned int,LPLAYERPLANEDESCRIPTOR);
WGLAPI int GLAPIENTRY wglDescribePixelFormat(HDC,int, unsigned int, LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY wglGetLayerPaletteEntries(HDC, int, int, int,COLORREF *);
WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC, HGLRC);
WGLAPI int GLAPIENTRY wglRealizeLayerPalette(HDC, int, int);
WGLAPI int GLAPIENTRY wglSetLayerPaletteEntries(HDC, int, int, int,const COLORREF *);
WGLAPI int GLAPIENTRY wglShareLists(HGLRC, HGLRC);
WGLAPI int GLAPIENTRY wglSwapLayerBuffers(HDC, unsigned int);
WGLAPI int GLAPIENTRY wglUseFontBitmapsA(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontBitmapsW(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY SwapBuffers(HDC);
WGLAPI int GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY GetPixelFormat(HDC);
WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
#ifdef _MSC_VER
# pragma warning( pop )
#endif
#ifdef __cplusplus
}
#endif
#endif /* _mesa_wgl_h_ */
/* $Id: mesa_wgl.h,v 1.6 2001/05/07 13:58:00 gareth Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* prototypes for the Mesa WGL functions */
/* relocated here so that I could make GLUT get them properly */
#define _mesa_wgl_h_
#ifndef _mesa_wgl_h_
#define _mesa_wgl_h_
#include <gl/gl.h>
#ifdef __cplusplus
extern "C" {
#endif
#if !defined(OPENSTEP) && (defined(__WIN32__) || defined(__CYGWIN32__))
# if defined(_MSC_VER) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */
# define GLAPI __declspec(dllexport)
# define WGLAPI __declspec(dllexport)
# elif defined(_MSC_VER) && defined(_DLL) /* tag specifying we're building for DLL runtime support */
# define GLAPI __declspec(dllimport)
# define WGLAPI __declspec(dllimport)
# else /* for use with static link lib build of Win32 edition only */
# define GLAPI extern
# define WGLAPI __declspec(dllimport)
# endif /* _STATIC_MESA support */
# define GLAPIENTRY __stdcall
#else
/* non-Windows compilation */
# define GLAPI extern
# define GLAPIENTRY
#endif /* WIN32 / CYGWIN32 bracket */
#if defined(_WIN32) && !defined(_WINGDI_) && !defined(_GNU_H_WINDOWS32_DEFINES) && !defined(OPENSTEP)
#ifndef _GNU_H_WINDOWS32_FUNCTIONS
# ifdef UNICODE
# define wglUseFontBitmaps wglUseFontBitmapsW
# define wglUseFontOutlines wglUseFontOutlinesW
# else
# define wglUseFontBitmaps wglUseFontBitmapsA
# define wglUseFontOutlines wglUseFontOutlinesA
# endif /* !UNICODE */
#endif /* _GNU_H_WINDOWS32_FUNCTIONS */
typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
typedef struct tagPIXELFORMATDESCRIPTOR PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
#endif
#ifdef _MSC_VER
# pragma warning( disable : 4615 ) /* pragma warning : unknown user warning type*/
# pragma warning( push )
# pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */
#endif
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC,HGLRC);
WGLAPI int GLAPIENTRY wglSetPixelFormat(HDC, int, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglSwapBuffers(HDC hdc);
WGLAPI HDC GLAPIENTRY wglGetCurrentDC(void);
WGLAPI HGLRC GLAPIENTRY wglCreateContext(HDC);
WGLAPI HGLRC GLAPIENTRY wglCreateLayerContext(HDC,int);
WGLAPI HGLRC GLAPIENTRY wglGetCurrentContext(void);
WGLAPI PROC GLAPIENTRY wglGetProcAddress(const char*);
WGLAPI int GLAPIENTRY wglChoosePixelFormat(HDC, const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY wglCopyContext(HGLRC, HGLRC, unsigned int);
WGLAPI int GLAPIENTRY wglDeleteContext(HGLRC);
WGLAPI int GLAPIENTRY wglDescribeLayerPlane(HDC, int, int, unsigned int,LPLAYERPLANEDESCRIPTOR);
WGLAPI int GLAPIENTRY wglDescribePixelFormat(HDC,int, unsigned int, LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY wglGetLayerPaletteEntries(HDC, int, int, int,COLORREF *);
WGLAPI int GLAPIENTRY wglGetPixelFormat(HDC hdc);
WGLAPI int GLAPIENTRY wglMakeCurrent(HDC, HGLRC);
WGLAPI int GLAPIENTRY wglRealizeLayerPalette(HDC, int, int);
WGLAPI int GLAPIENTRY wglSetLayerPaletteEntries(HDC, int, int, int,const COLORREF *);
WGLAPI int GLAPIENTRY wglShareLists(HGLRC, HGLRC);
WGLAPI int GLAPIENTRY wglSwapLayerBuffers(HDC, unsigned int);
WGLAPI int GLAPIENTRY wglUseFontBitmapsA(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontBitmapsW(HDC, unsigned long, unsigned long, unsigned long);
WGLAPI int GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY wglUseFontOutlinesW(HDC, unsigned long, unsigned long, unsigned long, float,float, int, LPGLYPHMETRICSFLOAT);
WGLAPI int GLAPIENTRY SwapBuffers(HDC);
WGLAPI int GLAPIENTRY ChoosePixelFormat(HDC,const PIXELFORMATDESCRIPTOR *);
WGLAPI int GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY GetPixelFormat(HDC);
WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
#ifdef _MSC_VER
# pragma warning( pop )
#endif
#ifdef __cplusplus
}
#endif
#endif /* _mesa_wgl_h_ */

View File

@@ -1,8 +1,8 @@
/* $Id: osmesa.h,v 1.5 2000/03/28 16:59:39 rjfrank Exp $ */
/* $Id: osmesa.h,v 1.6 2000/09/08 16:41:38 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
@@ -59,11 +59,11 @@ extern "C" {
#endif
#include "GL/gl.h"
#include <GL/gl.h>
#define OSMESA_MAJOR_VERSION 3
#define OSMESA_MINOR_VERSION 3
#define OSMESA_MINOR_VERSION 5
@@ -114,18 +114,31 @@ typedef struct osmesa_context *OSMesaContext;
* display lists. NULL indicates no sharing.
* Return: an OSMesaContext or 0 if error
*/
GLAPI OSMesaContext GLAPIENTRY OSMesaCreateContext( GLenum format,
OSMesaContext sharelist );
GLAPI OSMesaContext GLAPIENTRY
OSMesaCreateContext( GLenum format, OSMesaContext sharelist );
/*
* Create an Off-Screen Mesa rendering context and specify desired
* size of depth buffer, stencil buffer and accumulation buffer.
* If you specify zero for depthBits, stencilBits, accumBits you
* can save some memory.
*
* New in Mesa 3.5
*/
GLAPI OSMesaContext GLAPIENTRY
OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
GLint accumBits, OSMesaContext sharelist);
/*
* Destroy an Off-Screen Mesa rendering context.
*
* Input: ctx - the context to destroy
*/
GLAPI void GLAPIENTRY OSMesaDestroyContext( OSMesaContext ctx );
GLAPI void GLAPIENTRY
OSMesaDestroyContext( OSMesaContext ctx );
@@ -156,9 +169,9 @@ GLAPI void GLAPIENTRY OSMesaDestroyContext( OSMesaContext ctx );
* invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1,
* width>internal limit or height>internal limit.
*/
GLAPI GLboolean GLAPIENTRY OSMesaMakeCurrent( OSMesaContext ctx,
void *buffer, GLenum type,
GLsizei width, GLsizei height );
GLAPI GLboolean GLAPIENTRY
OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type,
GLsizei width, GLsizei height );
@@ -166,7 +179,8 @@ GLAPI GLboolean GLAPIENTRY OSMesaMakeCurrent( OSMesaContext ctx,
/*
* Return the current Off-Screen Mesa rendering context handle.
*/
GLAPI OSMesaContext GLAPIENTRY OSMesaGetCurrentContext( void );
GLAPI OSMesaContext GLAPIENTRY
OSMesaGetCurrentContext( void );
@@ -183,7 +197,8 @@ GLAPI OSMesaContext GLAPIENTRY OSMesaGetCurrentContext( void );
*
* New in version 2.0.
*/
GLAPI void GLAPIENTRY OSMesaPixelStore( GLint pname, GLint value );
GLAPI void GLAPIENTRY
OSMesaPixelStore( GLint pname, GLint value );
@@ -198,7 +213,8 @@ GLAPI void GLAPIENTRY OSMesaPixelStore( GLint pname, GLint value );
* OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction
* value - pointer to integer in which to return result.
*/
GLAPI void GLAPIENTRY OSMesaGetIntegerv( GLint pname, GLint *value );
GLAPI void GLAPIENTRY
OSMesaGetIntegerv( GLint pname, GLint *value );
@@ -212,10 +228,10 @@ GLAPI void GLAPIENTRY OSMesaGetIntegerv( GLint pname, GLint *value );
*
* New in Mesa 2.4.
*/
GLAPI GLboolean GLAPIENTRY OSMesaGetDepthBuffer( OSMesaContext c,
GLint *width, GLint *height,
GLint *bytesPerValue,
void **buffer );
GLAPI GLboolean GLAPIENTRY
OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height,
GLint *bytesPerValue, void **buffer );
/*
@@ -228,10 +244,10 @@ GLAPI GLboolean GLAPIENTRY OSMesaGetDepthBuffer( OSMesaContext c,
*
* New in Mesa 3.3.
*/
GLAPI GLboolean GLAPIENTRY OSMesaGetColorBuffer( OSMesaContext c,
GLint *width, GLint *height,
GLint *format,
void **buffer );
GLAPI GLboolean GLAPIENTRY
OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height,
GLint *format, void **buffer );
#if defined(__BEOS__) || defined(__QUICKDRAW__)

View File

@@ -1,9 +1,9 @@
/* $Id: svgamesa.h,v 1.4 2000/02/09 19:03:28 brianp Exp $ */
/* $Id: svgamesa.h,v 1.5 2001/06/20 19:52:11 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Copyright (C) 1995-2000 Brian Paul
* Version: 3.5
* Copyright (C) 1995-2001 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -53,7 +53,7 @@
#define SVGAMESA_MAJOR_VERSION 3
#define SVGAMESA_MINOR_VERSION 3
#define SVGAMESA_MINOR_VERSION 5
#ifdef __cplusplus

View File

@@ -1,10 +1,10 @@
/* $Id: xmesa.h,v 1.8.4.1 2000/11/02 18:08:28 brianp Exp $ */
/* $Id: xmesa.h,v 1.11 2001/06/20 19:52:11 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.5
*
* Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -58,7 +58,6 @@ and create a window, you must do the following to use the X/Mesa interface:
8. Before exiting, call XMesaDestroyVisual and XMesaDestroyContext.
See the demos/xdemo.c and xmesa1.c files for examples.
*/
@@ -67,12 +66,14 @@ See the demos/xdemo.c and xmesa1.c files for examples.
#ifndef XMESA_H
#define XMESA_H
#ifdef __VMS
#include <GL/vms_x_fix.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef XFree86Server
#include "xmesa_xf86.h"
#else
@@ -89,7 +90,7 @@ extern struct Library *XLibBase;
#define XMESA_MAJOR_VERSION 3
#define XMESA_MINOR_VERSION 4
#define XMESA_MINOR_VERSION 5

View File

@@ -1,8 +1,8 @@
# $Id: Makefile.BeOS-R4,v 1.12 2000/06/27 16:54:18 brianp Exp $
# $Id: Makefile.BeOS-R4,v 1.14 2001/02/20 17:04:52 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.3
# Copyright (C) 1995-2000 Brian Paul
# Version: 3.5
# Copyright (C) 1995-2001 Brian Paul
# Makefile for GLUT-based demo programs for BeOS R4
@@ -43,6 +43,7 @@ PROGS = bounce \
readpix \
reflect \
renormal \
shadowtex \
spectex \
stex3d \
teapot \
@@ -64,7 +65,7 @@ PROGS = bounce \
.SUFFIXES: .c
.c: $(LIB_DEP)
$(CC) -I$(INCDIR) $(CFLAGS) $< $(GL_LIBS) -o $@
$(CC) -I$(INCDIR) -I../util $(CFLAGS) $< $(GL_LIBS) -o $@

View File

@@ -1,8 +1,8 @@
# $Id: Makefile.X11,v 1.14 2000/06/27 16:54:18 brianp Exp $
# $Id: Makefile.X11,v 1.19 2001/03/27 17:44:35 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.3
# Copyright (C) 1995-2000 Brian Paul
# Version: 3.5
# Copyright (C) 1995-2001 Brian Paul
# Makefile for GLUT-based demo programs for Unix/X11
@@ -14,9 +14,12 @@ LIBDIR = ../lib
GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(APP_LIB_DEPS)
OSMESA_LIBS = -L$(LIBDIR) -lglut -lOSMesa -lGLU -lGL $(APP_LIB_DEPS)
LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB)
PROGS = bounce \
PROGS = anisotropic \
bounce \
clearspd \
cubemap \
drawpix \
@@ -42,6 +45,7 @@ PROGS = bounce \
readpix \
reflect \
renormal \
shadowtex \
spectex \
stex3d \
teapot \
@@ -62,9 +66,14 @@ PROGS = bounce \
.SUFFIXES:
.SUFFIXES: .c
.c: $(LIB_DEP)
$(CC) -I$(INCDIR) $(CFLAGS) $< $(GL_LIBS) -o $@
# make executable from .c file:
.c: $(LIB_DEP)
$(CC) -I$(INCDIR) -I../util $(CFLAGS) $< $(GL_LIBS) -o $@
# special case: need the -lOSMesa library:
osdemo: osdemo.c
$(CC) -I$(INCDIR) $(CFLAGS) osdemo.c $(OSMESA_LIBS) -o $@
##### TARGETS #####
@@ -78,8 +87,17 @@ clean:
realclean:
-rm $(PROGS)
-rm *.o *~
-rm readtex.[ch]
targets: readtex.c readtex.h $(PROGS)
readtex.c:
cp ../util/readtex.c .
readtex.h:
cp ../util/readtex.c .
targets: $(PROGS)
# execute all programs
exec: $(PROGS)
@@ -92,4 +110,3 @@ exec: $(PROGS)
include ../Make-config

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.cygnus,v 1.11 2000/06/27 16:54:18 brianp Exp $
# $Id: Makefile.cygnus,v 1.12 2000/12/24 22:53:54 pesco Exp $
# Mesa 3-D graphics library
# Version: 3.3
@@ -66,7 +66,7 @@ PROGS = bounce \
.SUFFIXES: .c
.c: $(LIB_DEP)
$(CC) -I$(INCDIR) $(CFLAGS) $< $(GL_LIBS) -o $@
$(CC) -I$(INCDIR) -I../util $(CFLAGS) $< $(GL_LIBS) -o $@
##### TARGETS #####

220
progs/demos/anisotropic.c Normal file
View File

@@ -0,0 +1,220 @@
/* $Id: anisotropic.c,v 1.1 2001/03/22 15:24:15 gareth Exp $ */
/*
* GL_ARB_texture_filter_anisotropic demo
*
* Gareth Hughes
* March 2001
*
* Copyright (C) 2000 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/* This is a fairly early version. All it does is draw a couple of
* textured quads with different forms of texture filtering. Eventually,
* you'll be able to adjust the maximum anisotropy and so on.
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
#define TEXTURE_SIZE 256
static GLubyte image[TEXTURE_SIZE][TEXTURE_SIZE][3];
static GLfloat repeat = 1.0;
static GLfloat texcoords[] = {
0.0, 0.0,
0.0, 1.0,
1.0, 0.0,
1.0, 1.0
};
static GLfloat vertices[] = {
-400.0, -400.0, 0.0,
-400.0, 400.0, -7000.0,
400.0, -400.0, 0.0,
400.0, 400.0, -7000.0
};
static GLfloat maxAnisotropy;
static void init( void )
{
int i, j;
if ( !glutExtensionSupported( "GL_EXT_texture_filter_anisotropic" ) ) {
fprintf( stderr, "Sorry, this demo requires GL_EXT_texture_filter_anisotropic.\n" );
exit( 0 );
}
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glShadeModel( GL_SMOOTH );
/* Init the vertex arrays.
*/
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glVertexPointer( 3, GL_FLOAT, 0, vertices );
glTexCoordPointer( 2, GL_FLOAT, 0, texcoords );
/* Init the texture environment.
*/
glEnable( GL_TEXTURE_2D );
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
glMatrixMode( GL_TEXTURE );
glScalef( repeat, repeat, 0 );
glMatrixMode( GL_MODELVIEW );
glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maxAnisotropy );
printf( "Maximum supported anisotropy: %.2f\n", maxAnisotropy );
/* Make the texture image.
*/
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
for ( i = 0 ; i < TEXTURE_SIZE ; i++ ) {
for ( j = 0 ; j < TEXTURE_SIZE ; j++ ) {
if ( (i/4 + j/4) & 1 ) {
image[i][j][0] = 0;
image[i][j][1] = 0;
image[i][j][2] = 0;
} else {
image[i][j][0] = 255;
image[i][j][1] = 255;
image[i][j][2] = 255;
}
}
}
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, TEXTURE_SIZE, TEXTURE_SIZE,
GL_RGB, GL_UNSIGNED_BYTE, image );
}
static void display( void )
{
GLint vp[4], w, h;
glClear( GL_COLOR_BUFFER_BIT );
glGetIntegerv( GL_VIEWPORT, vp );
w = vp[2] / 2;
h = vp[3] / 2;
/* Upper left corner:
*/
glViewport( 1, h + 1, w - 2, h - 2 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy );
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
/* Upper right corner:
*/
glViewport( w + 1, h + 1, w - 2, h - 2 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy );
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
/* Lower left corner:
*/
glViewport( 1, 1, w - 2, h - 2 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy );
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
/* Lower right corner:
*/
glViewport( w + 1, 1, w - 2, h - 2 );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, maxAnisotropy );
glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 );
glViewport( vp[0], vp[1], vp[2], vp[3] );
glutSwapBuffers();
}
static void reshape( int w, int h )
{
glViewport( 0, 0, (GLsizei) w, (GLsizei) h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 10.0, 10000.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -10.0 );
}
static void key( unsigned char key, int x, int y )
{
(void) x; (void) y;
switch ( key ) {
case 27:
exit( 0 );
}
glutPostRedisplay();
}
static void usage( void )
{
/* Nothing yet... */
}
int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
glutInitWindowSize( 600, 300 );
glutInitWindowPosition( 0, 0 );
glutCreateWindow( "Anisotropic Texture Filter Demo" );
init();
glutDisplayFunc( display );
glutReshapeFunc( reshape );
glutKeyboardFunc( key );
usage();
glutMainLoop();
return 0;
}

View File

@@ -1,4 +1,4 @@
/* $Id: bounce.c,v 1.2.4.1 2000/08/16 20:36:32 brianp Exp $ */
/* $Id: bounce.c,v 1.3 2000/08/16 20:36:34 brianp Exp $ */
/*
* Bouncing ball demo.

View File

@@ -1,4 +1,4 @@
/* $Id: clearspd.c,v 1.2 2000/04/10 16:25:15 brianp Exp $ */
/* $Id: clearspd.c,v 1.3 2000/12/07 21:50:39 brianp Exp $ */
/*
* Simple GLUT program to measure glClear() and glutSwapBuffers() speed.
@@ -7,6 +7,9 @@
/*
* $Log: clearspd.c,v $
* Revision 1.3 2000/12/07 21:50:39 brianp
* call glFinish() before getting t1 time
*
* Revision 1.2 2000/04/10 16:25:15 brianp
* fixed visual selection and reporting results
*
@@ -71,14 +74,15 @@ static void Display( void )
glClear( BufferMask );
glutSwapBuffers();
}
glFinish();
t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
}
else {
t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
for (i=0;i<Loops;i++) {
glClear( BufferMask );
glFlush();
}
glFinish();
t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
glutSwapBuffers();
}

View File

@@ -1,6 +1,6 @@
# Makefile for core library for VMS
# Makefile for GLUT-based demo programs for VMS
# contributed by Jouk Jansen joukj@crys.chem.uva.nl
# Last revision : 3 May 1999
.first
define gl [-.include.gl]
@@ -9,172 +9,55 @@
##### MACROS #####
VPATH = RCS
INCDIR = ([-.include],[-.util])
CFLAGS = /include=$(INCDIR)/prefix=all/name=(as_is,short)
INCDIR = [-.include]
LIBDIR = [-.lib]
CFLAGS = /include=($(INCDIR),[])/define=(FBIND=1)/name=(as_is,short)
.ifdef SHARE
GL_LIBS = $(XLIBS)
.else
GL_LIBS = [-.lib]libGLUT/l,libMesaGLU/l,libMesaGL/l,$(XLIBS)
.endif
CORE_SOURCES = aatriangle.c accum.c alpha.c alphabuf.c attrib.c \
bitmap.c blend.c buffers.c clip.c colortab.c context.c copypix.c depth.c \
dispatch.c \
dlist.c drawpix.c enable.c eval.c feedback.c fog.c \
get.c hash.c hint.c image.c imaging.c light.c lines.c logic.c masking.c matrix.c \
mem.c glapi.c glapinoop.c \
mmath.c pb.c pixel.c points.c polygon.c \
quads.c rastpos.c readpix.c rect.c scissor.c shade.c span.c \
stencil.c teximage.c texobj.c texstate.c texture.c translate.c triangle.c \
varray.c winpos.c vb.c vbcull.c vbfill.c vbrender.c vbxform.c xform.c \
zoom.c bbox.c cva.c vector.c vbindirect.c config.c enums.c extensions.c \
pipeline.c stages.c state.c vertices.c [.x86]x86.c
LIB_DEP = [-.lib]$(GL_LIB) [-.lib]$(GLU_LIB) [-.lib]$(GLUT_LIB)
DRIVER_SOURCES = [.x]glxapi.c [.x]fakeglx.c [.x]xfonts.c \
[.x]xmesa1.c [.x]xmesa2.c [.x]xmesa3.c [.x]xmesa4.c \
[.osmesa]osmesa.c \
[.svga]svgamesa.c \
[.fx]fxapi.c [.fx]fxdd.c [.fx]fxddtex.c [.fx]fxvsetup.c [.fx]fxsetup.c \
[.fx]fxtrifuncs.c [.fx]fxclip.c [.fx]fxfastpath.c [.fx]fxpipeline.c\
[.fx]fxrender.c [.fx]fxtexman.c [.fx]fxddspan.c [.fx]fxcva.c [.fx]fxsanity.c\
[.fx]fxglidew.c
PROGS = bounce.exe;,clearspd.exe;,drawpix.exe;,gamma.exe;,gears.exe;,\
glinfo.exe;,glutfx.exe;,isosurf.exe;,morph3d.exe;,osdemo.exe;,\
paltex.exe;,pointblast.exe;,reflect.exe;,spectex.exe;,stex3d.exe;,\
tessdemo.exe;,texcyl.exe;,texobj.exe;,trispd.exe;,winpos.exe;
ASM_SOURCES =
OBJECTS =aatriangle.obj,\
accum.obj,alpha.obj,alphabuf.obj,attrib.obj,\
bitmap.obj,blend.obj,buffers.obj,clip.obj,colortab.obj,context.obj,copypix.obj,depth.obj,\
dlist.obj,drawpix.obj,enable.obj,eval.obj,feedback.obj,fog.obj
OBJECTS3=get.obj,hash.obj,hint.obj,image.obj,light.obj,lines.obj,logic.obj,masking.obj,\
matrix.obj,glapi.obj,glapinoop.obj,dispatch.obj,imaging.obj,mem.obj,\
mmath.obj,pb.obj,pixel.obj,points.obj
OBJECTS7=polygon.obj,\
quads.obj,rastpos.obj,readpix.obj,rect.obj,scissor.obj,shade.obj,span.obj,\
pixeltex.obj
OBJECTS4=stencil.obj,teximage.obj,texobj.obj,texstate.obj,texture.obj,translate.obj,\
triangle.obj,varray.obj,winpos.obj,vb.obj,vbcull.obj,vbfill.obj,vbrender.obj
OBJECTS6=vbxform.obj,xform.obj,zoom.obj,bbox.obj,cva.obj,vector.obj,vbindirect.obj,\
config.obj,enums.obj,extensions.obj,pipeline.obj,stages.obj,state.obj,\
vertices.obj,[.x86]x86.obj
OBJECTS2=[.x]glxapi.obj,[.x]fakeglx.obj,[.x]xfonts.obj,\
[.x]xmesa1.obj,[.x]xmesa2.obj,[.x]xmesa3.obj,[.x]xmesa4.obj,\
[.osmesa]osmesa.obj,\
[.svga]svgamesa.obj
OBJECTS5=[.fx]fxapi.obj,[.fx]fxdd.obj,[.fx]fxddtex.obj,[.fx]fxvsetup.obj,\
[.fx]fxsetup.obj,[.fx]fxclip.obj,[.fx]fxfastpath.obj,[.fx]fxpipeline.obj
OBJECTS8=[.fx]fxtrifuncs.obj,[.fx]fxsanity.obj,[.fx]fxglidew.obj,\
[.fx]fxrender.obj,[.fx]fxtexman.obj,[.fx]fxddspan.obj,[.fx]fxcva.obj
##### RULES #####
VERSION=Mesa V3.1
.obj.exe :
cxxlink $(MMS$TARGET_NAME),$(GL_LIBS)
##### TARGETS #####
# Make the library
$(LIBDIR)$(GL_LIB) : $(OBJECTS),$(OBJECTS2) $(OBJECTS3) $(OBJECTS4)\
$(OBJECTS5) $(OBJECTS8) $(OBJECTS7) $(OBJECTS6)
.ifdef SHARE
@ WRITE_ SYS$OUTPUT " generating mesagl1.opt"
@ OPEN_/WRITE FILE mesagl1.opt
@ WRITE_ FILE "!"
@ WRITE_ FILE "! mesagl1.opt generated by DESCRIP.$(MMS_EXT)"
@ WRITE_ FILE "!"
@ WRITE_ FILE "IDENTIFICATION=""$(VERSION)"""
@ WRITE_ FILE "GSMATCH=LEQUAL,3,1
@ WRITE_ FILE "$(OBJECTS)"
@ WRITE_ FILE "$(OBJECTS3)"
@ WRITE_ FILE "$(OBJECTS4)"
@ WRITE_ FILE "$(OBJECTS7)"
@ WRITE_ FILE "$(OBJECTS6)"
@ WRITE_ FILE "$(OBJECTS2)"
@ WRITE_ FILE "$(OBJECTS5)"
@ WRITE_ FILE "$(OBJECTS8)"
@ WRITE_ FILE "SYS$SHARE:DECW$XEXTLIBSHR/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XLIBSHR/SHARE"
@ CLOSE_ FILE
@ WRITE_ SYS$OUTPUT " generating mesagl.map ..."
@ LINK_/NODEB/NOSHARE/NOEXE/MAP=mesagl.map/FULL mesagl1.opt/OPT
@ WRITE_ SYS$OUTPUT " analyzing mesagl.map ..."
@ @[-.vms]ANALYZE_MAP.COM mesagl.map mesagl.opt
@ WRITE_ SYS$OUTPUT " linking $(GL_LIB) ..."
@ LINK_/NODEB/SHARE=$(GL_LIB)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesagl.opt/opt
.else
@ $(MAKELIB) $(GL_LIB) $(OBJECTS)
@ library $(GL_LIB) $(OBJECTS2)
@ library $(GL_LIB) $(OBJECTS3)
@ library $(GL_LIB) $(OBJECTS4)
@ library $(GL_LIB) $(OBJECTS5)
@ library $(GL_LIB) $(OBJECTS8)
@ library $(GL_LIB) $(OBJECTS7)
@ library $(GL_LIB) $(OBJECTS6)
.endif
@ rename $(GL_LIB)* $(LIBDIR)
default :
$(MMS)$(MMSQUALIFIERS) $(PROGS)
clean :
purge
delete *.obj;*
aatriangle.obj : aatriangle.c
realclean :
delete $(PROGS)
delete *.obj;*
triangle.obj : triangle.c
pixeltex.obj : pixeltex.c
[.x86]x86.obj : [.x86]x86.c
$(CC) $(CFLAGS) /obj=[.x86]x86.obj [.x86]x86.c
[.x]glxapi.obj : [.x]glxapi.c
$(CC) $(CFLAGS) /obj=[.x]glxapi.obj [.x]glxapi.c
[.x]fakeglx.obj : [.x]fakeglx.c
$(CC) $(CFLAGS) /obj=[.x]fakeglx.obj [.x]fakeglx.c
[.x]xfonts.obj : [.x]xfonts.c
$(CC) $(CFLAGS) /obj=[.x]xfonts.obj [.x]xfonts.c
[.x]xmesa1.obj : [.x]xmesa1.c
$(CC) $(CFLAGS) /obj=[.x]xmesa1.obj [.x]xmesa1.c
[.x]xmesa2.obj : [.x]xmesa2.c
$(CC) $(CFLAGS) /obj=[.x]xmesa2.obj [.x]xmesa2.c
[.x]xmesa3.obj : [.x]xmesa3.c
$(CC) $(CFLAGS) /obj=[.x]xmesa3.obj [.x]xmesa3.c
[.x]xmesa4.obj : [.x]xmesa4.c
$(CC) $(CFLAGS) /obj=[.x]xmesa4.obj [.x]xmesa4.c
[.osmesa]osmesa.obj : [.osmesa]osmesa.c
$(CC) $(CFLAGS) /obj=[.osmesa]osmesa.obj [.osmesa]osmesa.c
[.svga]svgamesa.obj : [.svga]svgamesa.c
$(CC) $(CFLAGS) /obj=[.svga]svgamesa.obj [.svga]svgamesa.c
[.fx]fxapi.obj : [.fx]fxapi.c
$(CC) $(CFLAGS) /obj=[.fx]fxapi.obj [.fx]fxapi.c
[.fx]fxclip.obj : [.fx]fxclip.c
$(CC) $(CFLAGS) /obj=[.fx]fxclip.obj [.fx]fxclip.c
[.fx]fxcva.obj : [.fx]fxcva.c
$(CC) $(CFLAGS) /obj=[.fx]fxcva.obj [.fx]fxcva.c
[.fx]fxdd.obj : [.fx]fxdd.c
$(CC) $(CFLAGS) /obj=[.fx]fxdd.obj [.fx]fxdd.c
[.fx]fxddtex.obj : [.fx]fxddtex.c
$(CC) $(CFLAGS) /obj=[.fx]fxddtex.obj [.fx]fxddtex.c
[.fx]fxfastpath.obj : [.fx]fxfastpath.c
$(CC) $(CFLAGS) /obj=[.fx]fxfastpath.obj [.fx]fxfastpath.c
[.fx]fxpipeline.obj : [.fx]fxpipeline.c
$(CC) $(CFLAGS) /obj=[.fx]fxpipeline.obj [.fx]fxpipeline.c
[.fx]fxsanity.obj : [.fx]fxsanity.c
$(CC) $(CFLAGS) /obj=[.fx]fxsanity.obj [.fx]fxsanity.c
[.fx]fxvsetup.obj : [.fx]fxvsetup.c
$(CC) $(CFLAGS) /obj=[.fx]fxvsetup.obj [.fx]fxvsetup.c
[.fx]fxsetup.obj : [.fx]fxsetup.c
$(CC) $(CFLAGS) /obj=[.fx]fxsetup.obj [.fx]fxsetup.c
[.fx]fxtrifuncs.obj : [.fx]fxtrifuncs.c
$(CC) $(CFLAGS) /obj=[.fx]fxtrifuncs.obj [.fx]fxtrifuncs.c
[.fx]fxrender.obj : [.fx]fxrender.c
$(CC) $(CFLAGS) /obj=[.fx]fxrender.obj [.fx]fxrender.c
[.fx]fxtexman.obj : [.fx]fxtexman.c
$(CC) $(CFLAGS) /obj=[.fx]fxtexman.obj [.fx]fxtexman.c
[.fx]fxddspan.obj : [.fx]fxddspan.c
$(CC) $(CFLAGS) /obj=[.fx]fxddspan.obj [.fx]fxddspan.c
[.fx]fxglidew.obj : [.fx]fxglidew.c
$(CC) $(CFLAGS) /obj=[.fx]fxglidew.obj [.fx]fxglidew.c
.include mms_depend.
bounce.exe; : bounce.obj $(LIB_DEP)
clearspd.exe; : clearspd.obj $(LIB_DEP)
drawpix.exe; : drawpix.obj $(LIB_DEP)
gamma.exe; : gamma.obj $(LIB_DEP)
gears.exe; : gears.obj $(LIB_DEP)
glinfo.exe; : glinfo.obj $(LIB_DEP)
glutfx.exe; : glutfx.obj $(LIB_DEP)
isosurf.exe; : isosurf.obj $(LIB_DEP)
morph3d.exe; : morph3d.obj $(LIB_DEP)
osdemo.exe; : osdemo.obj $(LIB_DEP)
paltex.exe; : paltex.obj $(LIB_DEP)
pointblast.exe; : pointblast.obj $(LIB_DEP)
reflect.exe; : reflect.obj $(LIB_DEP)
spectex.exe; : spectex.obj $(LIB_DEP)
stex3d.exe; : stex3d.obj $(LIB_DEP)
tessdemo.exe; : tessdemo.obj $(LIB_DEP)
texcyl.exe; : texcyl.obj $(LIB_DEP)
texobj.exe; : texobj.obj $(LIB_DEP)
trispd.exe; : trispd.obj $(LIB_DEP)
winpos.exe; : winpos.obj $(LIB_DEP)

View File

@@ -1,4 +1,4 @@
/* $Id: drawpix.c,v 1.3 1999/10/28 18:23:29 brianp Exp $ */
/* $Id: drawpix.c,v 1.5 2000/12/24 22:53:54 pesco Exp $ */
/*
* glDrawPixels demo/test/benchmark
@@ -8,6 +8,35 @@
/*
* $Log: drawpix.c,v $
* Revision 1.5 2000/12/24 22:53:54 pesco
* * demos/Makefile.am (INCLUDES): Added -I$(top_srcdir)/util.
* * demos/Makefile.X11, demos/Makefile.BeOS-R4, demos/Makefile.cygnus:
* Essentially the same.
* Program files updated to include "readtex.c", not "../util/readtex.c".
* * demos/reflect.c: Likewise for "showbuffer.c".
*
*
* * Makefile.am (EXTRA_DIST): Added top-level regular files.
*
* * include/GL/Makefile.am (INC_X11): Added glxext.h.
*
*
* * src/GGI/include/ggi/mesa/Makefile.am (EXTRA_HEADERS): Include
* Mesa GGI headers in dist even if HAVE_GGI is not given.
*
* * configure.in: Look for GLUT and demo source dirs in $srcdir.
*
* * src/swrast/Makefile.am (libMesaSwrast_la_SOURCES): Set to *.[ch].
* More source list updates in various Makefile.am's.
*
* * Makefile.am (dist-hook): Remove CVS directory from distribution.
* (DIST_SUBDIRS): List all possible subdirs here.
* (SUBDIRS): Only list subdirs selected for build again.
* The above two applied to all subdir Makefile.am's also.
*
* Revision 1.4 2000/09/08 21:45:21 brianp
* added dither key option
*
* Revision 1.3 1999/10/28 18:23:29 brianp
* minor changes to Usage() function
*
@@ -37,7 +66,7 @@
#include <math.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* a hack, I know */
#include "readtex.c"
#define IMAGE_FILE "../images/girl.rgb"
@@ -51,7 +80,7 @@ static int DrawWidth, DrawHeight;
static int Scissor = 0;
static float Xzoom, Yzoom;
static GLboolean DrawFront = GL_FALSE;
static GLboolean Dither = GL_TRUE;
static void Reset( void )
@@ -154,6 +183,13 @@ static void Key( unsigned char key, int x, int y )
case ' ':
Reset();
break;
case 'd':
Dither = !Dither;
if (Dither)
glEnable(GL_DITHER);
else
glDisable(GL_DITHER);
break;
case 'w':
if (DrawWidth > 0)
DrawWidth--;
@@ -318,7 +354,7 @@ int main( int argc, char *argv[] )
if (ciMode)
glutInitDisplayMode( GLUT_INDEX | GLUT_DOUBLE );
else
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow(argv[0]);

View File

@@ -17,7 +17,7 @@
#endif
#include <GL/glut.h>
#include "../util/readtex.c"
#include "readtex.c"
#ifdef XMESA
#include "GL/xmesa.h"
@@ -71,7 +71,10 @@ static int fullscreen = 1;
static int WIDTH = 640;
static int HEIGHT = 480;
#define FRAME 50
static GLint T0 = 0;
static GLint Frames = 0;
static GLint NiceFog = 1;
#define DIMP 20.0
#define DIMTP 16.0
@@ -136,21 +139,6 @@ static float v = 0.0;
static float alpha = -90.0;
static float beta = 90.0;
static float
gettime(void)
{
static clock_t told = 0;
clock_t tnew, ris;
tnew = clock();
ris = tnew - told;
told = tnew;
return (ris / (float) CLOCKS_PER_SEC);
}
static float
vrnd(void)
{
@@ -269,6 +257,13 @@ calcposobs(void)
dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[1] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
obs[0] += v * dir[0];
obs[1] += v * dir[1];
obs[2] += v * dir[2];
@@ -387,13 +382,16 @@ dojoy(void)
static void
drawfire(void)
{
static int count = 0;
static char frbuf[80];
static char frbuf[80] = "";
int j;
float fr;
dojoy();
if (NiceFog)
glHint(GL_FOG_HINT, GL_NICEST);
else
glHint(GL_FOG_HINT, GL_DONT_CARE);
glEnable(GL_DEPTH_TEST);
if (fog)
@@ -416,6 +414,7 @@ drawfire(void)
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, groundid);
#if 1
glBegin(GL_QUADS);
glTexCoord2fv(qt[0]);
glVertex3fv(q[0]);
@@ -426,6 +425,26 @@ drawfire(void)
glTexCoord2fv(qt[3]);
glVertex3fv(q[3]);
glEnd();
#else
/* Subdivide the ground into a bunch of quads. This improves fog
* if GL_FOG_HINT != GL_NICEST
*/
{
float x, y;
float dx = 1.0, dy = 1.0;
glBegin(GL_QUADS);
for (y = -DIMP; y < DIMP; y += 1.0) {
for (x = -DIMP; x < DIMP; x += 1.0) {
glTexCoord2f(0, 0); glVertex3f(x, 0, y);
glTexCoord2f(1, 0); glVertex3f(x+dx, 0, y);
glTexCoord2f(1, 1); glVertex3f(x+dx, 0, y+dy);
glTexCoord2f(0, 1); glVertex3f(x, 0, y+dy);
}
}
glEnd();
}
#endif
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GEQUAL, 0.9);
@@ -468,11 +487,6 @@ drawfire(void)
}
glEnd();
if ((count % FRAME) == 0) {
fr = gettime();
sprintf(frbuf, "Frame rate: %f", FRAME / fr);
}
glDisable(GL_TEXTURE_2D);
glDisable(GL_ALPHA_TEST);
glDisable(GL_DEPTH_TEST);
@@ -499,7 +513,24 @@ drawfire(void)
glutSwapBuffers();
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
sprintf(frbuf, "Frame rate: %f", fps);
T0 = t;
Frames = 0;
}
}
}
static void
idle(void)
{
glutPostRedisplay();
}
@@ -520,6 +551,7 @@ special(int key, int x, int y)
beta += 2.0;
break;
}
glutPostRedisplay();
}
static void
@@ -567,7 +599,12 @@ key(unsigned char key, int x, int y)
fullscreen = (!fullscreen);
break;
#endif
case 'n':
NiceFog = !NiceFog;
printf("NiceFog %d\n", NiceFog);
break;
}
glutPostRedisplay();
}
static void
@@ -671,8 +708,6 @@ main(int ac, char **av)
/* Default settings */
WIDTH = 640;
HEIGHT = 480;
np = 800;
eject_r = 0.1;
dt = 0.015;
@@ -716,9 +751,6 @@ main(int ac, char **av)
glFogi(GL_FOG_MODE, GL_EXP);
glFogfv(GL_FOG_COLOR, fogcolor);
glFogf(GL_FOG_DENSITY, 0.1);
#ifdef FX
glHint(GL_FOG_HINT, GL_NICEST);
#endif
p = malloc(sizeof(part) * np);
@@ -730,7 +762,7 @@ main(int ac, char **av)
glutKeyboardFunc(key);
glutSpecialFunc(special);
glutDisplayFunc(drawfire);
glutIdleFunc(drawfire);
glutIdleFunc(idle);
glutReshapeFunc(reshape);
glutMainLoop();

View File

@@ -1,4 +1,4 @@
/* $Id: geartrain.c,v 1.6 2000/04/06 02:22:59 brianp Exp $ */
/* $Id: geartrain.c,v 1.7 2000/11/30 01:44:24 gareth Exp $ */
/*
* GearTrain Simulator * Version: 1.00
@@ -42,7 +42,7 @@ typedef GLfloat TDA[4];
TDA background;
struct AXLE
struct AXLE
{
char name[20];
GLint id;
@@ -57,7 +57,7 @@ struct AXLE
};
struct GEAR
struct GEAR
{
char name[20];
char type[7];
@@ -79,7 +79,7 @@ struct GEAR
};
struct BELT
struct BELT
{
char name[20];
GLint id;
@@ -99,9 +99,12 @@ int number_of_belts;
char Buf1[256], Buf2[256], Buf3[256], Buf4[256], Buf5[256];
static GLint T0 = 0;
static GLint Frames = 0;
static void
strset (char buf[], char ch)
static void
strset (char buf[], char ch)
{
int i;
for (i = 0; i < strlen (buf); i++)
@@ -109,8 +112,8 @@ strset (char buf[], char ch)
}
static void
Clear_Buffers ()
static void
Clear_Buffers ()
{
strset (Buf1, 0);
strset (Buf2, 0);
@@ -120,8 +123,8 @@ Clear_Buffers ()
}
static void
LoadTriplet (TDA A)
static void
LoadTriplet (TDA A)
{
Clear_Buffers ();
fscanf (mainfile, "%s %s %s %s", Buf1, Buf2, Buf3, Buf4);
@@ -131,8 +134,8 @@ LoadTriplet (TDA A)
}
static void
LoadReal (float *a)
static void
LoadReal (float *a)
{
Clear_Buffers ();
fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -140,8 +143,8 @@ LoadReal (float *a)
}
static void
LoadInteger (int *a)
static void
LoadInteger (int *a)
{
Clear_Buffers ();
fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -149,8 +152,8 @@ LoadInteger (int *a)
}
static void
LoadText (char *a)
static void
LoadText (char *a)
{
Clear_Buffers ();
fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -158,11 +161,11 @@ LoadText (char *a)
}
static void
getdata (char filename[])
static void
getdata (char filename[])
{
int gear_count = 0, axle_count = 0, belt_count = 0, i;
mainfile = fopen (filename, "r");
if (!mainfile) {
printf("Error: couldn't open %s\n", filename);
@@ -181,92 +184,92 @@ getdata (char filename[])
if (!(strcmp (Buf1, "BACKGROUND")))
LoadTriplet (background);
if (!(strcmp (Buf1, "ANAME")))
{
LoadText (a[axle_count].name);
axle_count++;
}
if (!(strcmp (Buf1, "ARADIUS")))
LoadReal (&a[axle_count - 1].radius);
if (!(strcmp (Buf1, "AAXIS")))
LoadInteger (&a[axle_count - 1].axis);
if (!(strcmp (Buf1, "ACOLOR")))
LoadTriplet (a[axle_count - 1].color);
if (!(strcmp (Buf1, "APOSITION")))
LoadTriplet (a[axle_count - 1].position);
if (!(strcmp (Buf1, "ALENGTH")))
LoadReal (&a[axle_count - 1].length);
if (!(strcmp (Buf1, "AMOTORED")))
LoadInteger (&a[axle_count - 1].motored);
if (!(strcmp (Buf1, "AANGULARVELOCITY")))
LoadReal (&a[axle_count - 1].angular_velocity);
if (!(strcmp (Buf1, "ADIRECTION")))
LoadInteger (&a[axle_count - 1].direction);
if (!(strcmp (Buf1, "GNAME")))
{
LoadText (g[gear_count].name);
gear_count++;
}
if (!(strcmp (Buf1, "GTYPE")))
LoadText (g[gear_count - 1].type);
if (!(strcmp (Buf1, "GFACE")))
LoadInteger (&g[gear_count - 1].face);
if (!(strcmp (Buf1, "GRADIUS")))
LoadReal (&g[gear_count - 1].radius);
if (!(strcmp (Buf1, "GWIDTH")))
LoadReal (&g[gear_count - 1].width);
if (!(strcmp (Buf1, "GTEETH")))
LoadInteger (&g[gear_count - 1].teeth);
if (!(strcmp (Buf1, "GTOOTHDEPTH")))
LoadReal (&g[gear_count - 1].tooth_depth);
if (!(strcmp (Buf1, "GCOLOR")))
LoadTriplet (g[gear_count - 1].color);
if (!(strcmp (Buf1, "GAXLE")))
LoadText (g[gear_count - 1].axle_name);
if (!(strcmp (Buf1, "GPOSITION")))
LoadInteger (&g[gear_count - 1].relative_position);
if (!(strcmp (Buf1, "BELTNAME")))
{
LoadText (b[belt_count].name);
belt_count++;
}
if (!(strcmp (Buf1, "GEAR1NAME")))
LoadText (b[belt_count - 1].gear1_name);
if (!(strcmp (Buf1, "GEAR2NAME")))
LoadText (b[belt_count - 1].gear2_name);
}
while (Buf1[0] != 0);
for (i = 0; i < number_of_gears; i++)
{
g[i].axis = -1;
g[i].direction = 0;
g[i].angular_velocity = 0.0;
}
number_of_gears = gear_count;
number_of_axles = axle_count;
number_of_belts = belt_count;
@@ -274,12 +277,12 @@ getdata (char filename[])
}
static void
axle (GLint j, GLfloat radius, GLfloat length)
static void
axle (GLint j, GLfloat radius, GLfloat length)
{
GLfloat angle, rad, incr = 10.0 * M_PI / 180.0;
/* draw main cylinder */
/* draw main cylinder */
glBegin (GL_QUADS);
for (angle = 0.0; angle < 360.0; angle += 5.0)
{
@@ -291,8 +294,8 @@ axle (GLint j, GLfloat radius, GLfloat length)
glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), length / 2);
}
glEnd ();
/* draw front face */
/* draw front face */
glNormal3f (0.0, 0.0, 1.0);
glBegin (GL_TRIANGLES);
for (angle = 0.0; angle < 360.0; angle += 5.0)
@@ -304,8 +307,8 @@ axle (GLint j, GLfloat radius, GLfloat length)
glVertex3f (0.0, 0.0, length / 2);
}
glEnd ();
/* draw back face */
/* draw back face */
glNormal3f (0.0, 0.0, -1.0);
glBegin (GL_TRIANGLES);
for (angle = 0.0; angle <= 360.0; angle += 5.0)
@@ -321,9 +324,9 @@ axle (GLint j, GLfloat radius, GLfloat length)
static void
gear (GLint j, char type[], GLfloat radius, GLfloat width,
GLint teeth, GLfloat tooth_depth)
static void
gear (GLint j, char type[], GLfloat radius, GLfloat width,
GLint teeth, GLfloat tooth_depth)
{
GLint i;
GLfloat r1, r2;
@@ -333,7 +336,7 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
r1 = radius - tooth_depth;
r2 = radius;
da = 2.0 * M_PI / teeth / 4.0;
if (!g[j].face)
{
@@ -346,7 +349,7 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
n = 1.0;
}
/* draw front face */
/* draw front face */
if (!(strcmp (type, "NORMAL")))
{
glNormal3f (0.0, 0.0, 1.0 * n);
@@ -375,8 +378,8 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
}
glEnd ();
}
/* draw front sides of teeth */
/* draw front sides of teeth */
if (!(strcmp (type, "NORMAL")))
{
glNormal3f (0.0, 0.0, 1.0 * n);
@@ -392,10 +395,10 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
}
glEnd ();
}
glNormal3f (0.0, 0.0, -1.0 * n);
/* draw back face */
/* draw back face */
glBegin (GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++)
{
@@ -406,8 +409,8 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
glVertex3f (0.0, 0.0, -width * fraction);
}
glEnd ();
/* draw back sides of teeth */
/* draw back sides of teeth */
glNormal3f (0.0, 0.0, -1.0 * n);
glBegin (GL_QUADS);
da = 2.0 * M_PI / teeth / 4.0;
@@ -420,16 +423,16 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction);
}
glEnd ();
/* draw outward faces of teeth */
/* draw outward faces of teeth */
if (!(strcmp (type, "NORMAL")))
{
glBegin (GL_QUAD_STRIP);
for (i = 0; i < teeth; i++)
{
angle = i * 2.0 * M_PI / teeth;
glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction);
glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction);
u = r2 * cos (angle + da) - r1 * cos (angle);
@@ -478,27 +481,27 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
glNormal3f (cos (angle), sin (angle), n);
}
}
glVertex3f (r1 * cos (0), r1 * sin (0), width * fraction);
glVertex3f (r1 * cos (0), r1 * sin (0), -width * fraction);
glEnd ();
}
static void
belt (struct GEAR g1, struct GEAR g2)
static void
belt (struct GEAR g1, struct GEAR g2)
{
GLfloat D, alpha, phi, angle, incr, width;
GLint indexes[3] =
{
0, 0, 0
};
GLfloat col[3] =
{
0.0, 0.0, 0.0
};
width = min (g1.width, g2.width);
D = sqrt (pow (g1.position[0] - g2.position[0], 2) + pow (g1.position[1] - g2.position[1], 2) + pow (g1.position[2] - g2.position[2], 2));
alpha = acos ((g2.position[0] - g1.position[0]) / D);
@@ -545,11 +548,11 @@ belt (struct GEAR g1, struct GEAR g2)
}
static int
axle_find (char axle_name[])
static int
axle_find (char axle_name[])
{
int i;
for (i = 0; i < number_of_axles; i++)
{
if (!(strcmp (axle_name, a[i].name)))
@@ -559,11 +562,11 @@ axle_find (char axle_name[])
}
static int
gear_find (char gear_name[])
static int
gear_find (char gear_name[])
{
int i;
for (i = 0; i < number_of_gears; i++)
{
if (!(strcmp (gear_name, g[i].name)))
@@ -573,13 +576,13 @@ gear_find (char gear_name[])
}
static void
process ()
static void
process ()
{
GLfloat x, y, z, D, dist;
GLint axle_index, i, j, g1, g2, k;
char error[80];
for (i = 0; i < number_of_gears; i++)
{
x = 0.0;
@@ -599,12 +602,12 @@ process ()
y = 1.0;
else
z = 1.0;
g[i].position[0] = a[axle_index].position[0] + x * g[i].relative_position;
g[i].position[1] = a[axle_index].position[1] + y * g[i].relative_position;
g[i].position[2] = a[axle_index].position[2] + z * g[i].relative_position;
}
for (k = 0; k < number_of_axles; k++)
{
for (i = 0; i < number_of_gears - 1; i++)
@@ -617,11 +620,11 @@ process ()
if (D < 1.1 * (g[i].radius - g[i].tooth_depth + g[j].radius - g[j].tooth_depth))
{
printf (error, "Gear %s and %s are too close to each other.", g[i].name, g[j].name);
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
if (g[i].axis == 0)
{
dist = g[i].position[0] - g[j].position[0];
@@ -632,9 +635,9 @@ process ()
}
else
dist = g[i].position[2] - g[j].position[2];
dist = fabs (dist);
if (dist < (g[i].width / 2 + g[j].width / 2))
{
if ((g[i].motored) && (!(g[j].motored)) && (D < 0.95 * (g[i].radius + g[j].radius)))
@@ -646,13 +649,13 @@ process ()
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
g[j].motored = (a[axle_index].motored = 1);
g[j].direction = (a[axle_index].direction = -g[i].direction);
a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth;
g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius);
}
if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * (g[i].radius + g[j].radius)))
{
axle_index = axle_find (g[i].axle_name);
@@ -662,16 +665,16 @@ process ()
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
g[i].motored = (a[axle_index].motored = 1);
g[i].direction = (a[axle_index].direction = -g[j].direction);
a[axle_index].angular_velocity = g[j].angular_velocity * g[j].teeth / g[i].teeth;
g[i].angular_velocity = (a[axle_index].angular_velocity *= g[j].radius / g[i].radius);
}
}
}
if (!(strcmp (g[i].type, g[j].type)) && (!(strcmp (g[i].type, "BEVEL"))) && ((strcmp (g[i].axle_name, g[j].axle_name) != 0)) && (g[i].axis != g[j].axis))
{
D = sqrt (pow (g[i].position[0] - g[j].position[0], 2) + pow (g[i].position[1] - g[j].position[1], 2) + pow (g[i].position[2] - g[j].position[2], 2));
@@ -689,8 +692,8 @@ process ()
a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth;
g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius);
}
if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * sqrt (g[i].radius * g[i].radius + g[j].radius * g[j].radius)))
{
axle_index = axle_find (g[i].axle_name);
@@ -708,7 +711,7 @@ process ()
}
}
}
for (i = 0; i < number_of_gears; i++)
{
axle_index = axle_find (g[i].axle_name);
@@ -719,7 +722,7 @@ process ()
g[i].angular_velocity = a[axle_index].angular_velocity;
}
}
for (i = 0; i < number_of_belts; i++)
{
g1 = gear_find (b[i].gear1_name);
@@ -731,7 +734,7 @@ process ()
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
if ((g[g1].axis == g[g2].axis) && (!strcmp (g[g1].type, g[g2].type)) && (!strcmp (g[g1].type, "NORMAL")))
{
/*
@@ -742,7 +745,7 @@ process ()
MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);
exit(1);
}
*/
*/
if (g[g1].axis == 0)
{
dist = g[g1].position[0] - g[g2].position[0];
@@ -753,16 +756,16 @@ process ()
}
else
dist = g[g1].position[2] - g[g2].position[2];
dist = fabs (dist);
if (dist > (g[g1].width / 2 + g[g2].width / 2))
{
printf (error, "Belt %s invalid.", b[i].name);
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
if (dist < (g[g1].width / 2 + g[g2].width / 2))
{
if (D < g[g1].radius + g[g2].radius)
@@ -771,7 +774,7 @@ process ()
/*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
exit (1);
}
if ((g[g1].motored) && (!(g[g2].motored)))
{
axle_index = axle_find (g[g2].axle_name);
@@ -779,7 +782,7 @@ process ()
g[g2].direction = (a[axle_index].direction = g[g1].direction);
g[g2].angular_velocity = (a[axle_index].angular_velocity = g[g1].angular_velocity * g[g1].radius / g[g2].radius);
}
if ((!(g[g1].motored)) && (g[g2].motored))
{
axle_index = axle_find (g[g1].axle_name);
@@ -790,7 +793,7 @@ process ()
}
}
}
for (i = 0; i < number_of_gears; i++)
{
axle_index = axle_find (g[i].axle_name);
@@ -809,20 +812,20 @@ process ()
GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 10.0;
static void
draw (void)
static void
draw (void)
{
int i;
GLfloat x, y, z;
int index;
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
glRotatef (view_rotx, 1.0, 0.0, 0.0);
glRotatef (view_roty, 0.0, 1.0, 0.0);
glRotatef (view_rotz, 0.0, 0.0, 1.0);
for (i = 0; i < number_of_gears; i++)
{
x = 0.0;
@@ -837,15 +840,15 @@ draw (void)
x = 1.0;
else
z = 1.0;
if (z != 1.0)
glRotatef (90.0, x, y, z);
glRotatef (g[i].direction * g[i].angle, 0.0, 0.0, 1.0);
glCallList (g[i].id);
glPopMatrix ();
}
for (i = 0; i < number_of_axles; i++)
{
x = 0.0;
@@ -862,11 +865,11 @@ draw (void)
if (z != 1.0)
glRotatef (90.0, x, y, z);
glCallList (a[i].id);
glPopMatrix ();
}
for (i = 0; i < number_of_belts; i++)
{
x = 0.0;
@@ -881,23 +884,35 @@ draw (void)
x = 1.0;
else
z = 1.0;
if (z != 1.0)
glRotatef (90.0, x, y, z);
glCallList (b[i].id);
glPopMatrix ();
}
glPopMatrix ();
glutSwapBuffers ();
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
Frames++;
if (t - T0 >= 5000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
T0 = t;
Frames = 0;
}
}
}
static void
idle (void)
static void
idle (void)
{
int i;
for (i = 0; i < number_of_gears; i++)
@@ -908,9 +923,9 @@ idle (void)
/* change view angle, exit upon ESC */
static void
key (unsigned char k, int x, int y)
/* change view angle, exit upon ESC */
static void
key (unsigned char k, int x, int y)
{
switch (k)
{
@@ -940,9 +955,9 @@ key (unsigned char k, int x, int y)
/* new window size or exposure */
static void
reshape (int width, int height)
/* new window size or exposure */
static void
reshape (int width, int height)
{
glViewport (0, 0, (GLint) width, (GLint) height);
glMatrixMode (GL_PROJECTION);
@@ -957,7 +972,7 @@ reshape (int width, int height)
GLfloat h = (GLfloat) height / (GLfloat) width;
glFrustum (-1.0, 1.0, -h, h, 5.0, 60.0);
}
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
glTranslatef (0.0, 0.0, -40.0);
@@ -966,8 +981,8 @@ reshape (int width, int height)
static void
init (void)
static void
init (void)
{
GLfloat matShine = 20.00F;
GLfloat light0Pos[4] =
@@ -975,19 +990,19 @@ init (void)
0.70F, 0.70F, 1.25F, 0.50F
};
int i;
glClearColor (background[0], background[1], background[2], 1.0F);
glClearIndex ((GLfloat) 0.0);
glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, matShine);
glLightfv (GL_LIGHT0, GL_POSITION, light0Pos);
glEnable (GL_LIGHT0);
glEnable (GL_LIGHTING);
glEnable (GL_DEPTH_TEST);
for (i = 0; i < number_of_gears; i++)
g[i].angle = 0.0;
for (i = 0; i < number_of_gears; i++)
{
g[i].id = glGenLists (1);
@@ -997,7 +1012,7 @@ init (void)
gear (i, g[i].type, g[i].radius, g[i].width, g[i].teeth, g[i].tooth_depth);
glEndList ();
}
for (i = 0; i < number_of_axles; i++)
{
a[i].id = glGenLists (1);
@@ -1007,7 +1022,7 @@ init (void)
axle (i, a[i].radius, a[i].length);
glEndList ();
}
for (i = 0; i < number_of_belts; i++)
{
b[i].id = glGenLists (1);
@@ -1015,14 +1030,14 @@ init (void)
belt (g[gear_find (b[i].gear1_name)], g[gear_find (b[i].gear2_name)]);
glEndList ();
}
glEnable (GL_COLOR_MATERIAL);
}
int
main (int argc, char *argv[])
int
main (int argc, char *argv[])
{
char *file;
@@ -1034,14 +1049,14 @@ main (int argc, char *argv[])
glutInitWindowPosition (0, 0);
glutInitWindowSize(640,480);
glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
if (glutCreateWindow ("Gear Train Simulation") == GL_FALSE)
exit (1);
getdata (file);
process ();
init ();
glutDisplayFunc (draw);
glutReshapeFunc (reshape);
glutKeyboardFunc (key);
@@ -1049,4 +1064,3 @@ main (int argc, char *argv[])
glutMainLoop ();
return 0;
}

View File

@@ -1,4 +1,4 @@
/* $Id: gloss.c,v 1.4.4.1 2000/08/29 21:17:25 brianp Exp $ */
/* $Id: gloss.c,v 1.6 2000/12/24 22:53:54 pesco Exp $ */
/*
* Specular reflection demo. The specular highlight is modulated by
@@ -24,7 +24,7 @@
#include <math.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#include "readtex.c" /* I know, this is a hack. */
#define SPECULAR_TEXTURE_FILE "../images/reflect.rgb"
#define BASE_TEXTURE_FILE "../images/tile.rgb"

View File

@@ -18,7 +18,7 @@
#include <GL/glut.h>
#include "../util/readtex.c"
#include "readtex.c"
#ifdef XMESA
#include "GL/xmesa.h"
@@ -28,6 +28,9 @@ static int fullscreen = 1;
static int WIDTH = 640;
static int HEIGHT = 480;
static GLint T0;
static GLint Frames;
#define MAX_LOD 9
#define TEX_SKY_WIDTH 256
@@ -195,21 +198,6 @@ inittextures(void)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
static float
gettime(void)
{
static clock_t told = 0;
clock_t tnew, ris;
tnew = clock();
ris = tnew - told;
told = tnew;
return (ris / (float) CLOCKS_PER_SEC);
}
static void
calcposobs(void)
{
@@ -217,6 +205,13 @@ calcposobs(void)
dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[2] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
obs[0] += v * dir[0];
obs[1] += v * dir[1];
obs[2] += v * dir[2];
@@ -544,11 +539,10 @@ drawipers(int depth, int from)
static void
draw(void)
{
static int count = 0;
static char frbuf[80];
static char frbuf[80] = "";
static GLfloat alpha = 0.0f;
static GLfloat beta = 0.0f;
float fr;
static float fr = 0.0;
dojoy();
@@ -610,10 +604,9 @@ draw(void)
/* Help Screen */
fr = gettime();
sprintf(frbuf,
"Frame rate: %0.2f LOD: %d Tot. poly.: %d Poly/sec: %.1f",
1.0 / fr, LODbias, totpoly, totpoly / fr);
fr, LODbias, totpoly, totpoly * fr);
glDisable(GL_TEXTURE_2D);
glDisable(GL_FOG);
@@ -644,7 +637,16 @@ draw(void)
glutSwapBuffers();
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
fr = Frames / seconds;
T0 = t;
Frames = 0;
}
}
}
int

View File

@@ -1,7 +1,7 @@
/* $Id: isosurf.c,v 1.6 2000/06/27 17:04:43 brianp Exp $ */
/* $Id: isosurf.c,v 1.12 2001/06/04 15:34:31 keithw Exp $ */
/*
* Display an isosurface of 3-D wind speed volume.
* Display an isosurface of 3-D wind speed volume.
*
* Command line options:
* -info print GL implementation information
@@ -33,66 +33,68 @@
#define GL_GLEXT_LEGACY
#include "GL/glut.h"
#include "../util/readtex.c" /* I know, this is a hack. KW: me too. */
#include "readtex.c" /* I know, this is a hack. KW: me too. */
#define TEXTURE_FILE "../images/reflect.rgb"
#define LIT 0x1
#define UNLIT 0x2
#define TEXTURE 0x4
#define NO_TEXTURE 0x8
#define REFLECT 0x10
#define NO_REFLECT 0x20
#define POINT_FILTER 0x40
#define LINEAR_FILTER 0x80
#define GLVERTEX 0x100
#define DRAW_ARRAYS 0x200 /* or draw_elts, if compiled */
#define ARRAY_ELT 0x400
#define COMPILED 0x800
#define IMMEDIATE 0x1000
#define SHADE_SMOOTH 0x2000
#define SHADE_FLAT 0x4000
#define TRIANGLES 0x8000
#define STRIPS 0x10000
#define USER_CLIP 0x20000
#define NO_USER_CLIP 0x40000
#define MATERIALS 0x80000
#define NO_MATERIALS 0x100000
#define FOG 0x200000
#define NO_FOG 0x400000
#define QUIT 0x800000
#define DISPLAYLIST 0x1000000
#define GLINFO 0x2000000
#define STIPPLE 0x4000000
#define NO_STIPPLE 0x8000000
#define LIT 0x1
#define UNLIT 0x2
#define REFLECT 0x10
#define POINT_FILTER 0x40
#define LINEAR_FILTER 0x80
#define GLVERTEX 0x100
#define DRAW_ELTS 0x4
#define DRAW_ARRAYS 0x200
#define ARRAY_ELT 0x400
#define LOCKED 0x800
#define UNLOCKED 0x8
#define IMMEDIATE 0x1000
#define DISPLAYLIST 0x2000000
#define SHADE_SMOOTH 0x2000
#define SHADE_FLAT 0x4000
#define TRIANGLES 0x8000
#define STRIPS 0x10000
#define POINTS 0x20000
#define USER_CLIP 0x40000
#define NO_USER_CLIP 0x80000
#define MATERIALS 0x100000
#define NO_MATERIALS 0x200000
#define FOG 0x400000
#define NO_FOG 0x800000
#define QUIT 0x1000000
#define GLINFO 0x4000000
#define STIPPLE 0x8000000
#define NO_STIPPLE 0x20
#define LIGHT_MASK (LIT|UNLIT)
#define TEXTURE_MASK (TEXTURE|NO_TEXTURE)
#define REFLECT_MASK (REFLECT|NO_REFLECT)
#define FILTER_MASK (POINT_FILTER|LINEAR_FILTER)
#define RENDER_STYLE_MASK (GLVERTEX|DRAW_ARRAYS|ARRAY_ELT)
#define COMPILED_MASK (COMPILED|IMMEDIATE|DISPLAYLIST)
#define MATERIAL_MASK (MATERIALS|NO_MATERIALS)
#define PRIMITIVE_MASK (TRIANGLES|STRIPS)
#define CLIP_MASK (USER_CLIP|NO_USER_CLIP)
#define SHADE_MASK (SHADE_SMOOTH|SHADE_FLAT)
#define FOG_MASK (FOG|NO_FOG)
#define STIPPLE_MASK (STIPPLE|NO_STIPPLE)
#define LIGHT_MASK (LIT|UNLIT|REFLECT)
#define FILTER_MASK (POINT_FILTER|LINEAR_FILTER)
#define RENDER_STYLE_MASK (GLVERTEX|DRAW_ARRAYS|DRAW_ELTS|ARRAY_ELT)
#define DLIST_MASK (IMMEDIATE|DISPLAYLIST)
#define LOCK_MASK (LOCKED|UNLOCKED)
#define MATERIAL_MASK (MATERIALS|NO_MATERIALS)
#define PRIMITIVE_MASK (TRIANGLES|STRIPS|POINTS)
#define CLIP_MASK (USER_CLIP|NO_USER_CLIP)
#define SHADE_MASK (SHADE_SMOOTH|SHADE_FLAT)
#define FOG_MASK (FOG|NO_FOG)
#define STIPPLE_MASK (STIPPLE|NO_STIPPLE)
#define MAXVERTS 10000
static GLuint maxverts = MAXVERTS;
static float data[MAXVERTS][6];
static float compressed_data[MAXVERTS][6];
static float expanded_data[MAXVERTS*3][6];
static GLuint indices[MAXVERTS];
static GLuint tri_indices[MAXVERTS*3];
static GLuint strip_indices[MAXVERTS];
static GLfloat col[100][4];
static GLint numverts, num_tri_verts, numuniq;
static GLfloat xrot;
static GLfloat yrot;
static GLfloat dist = -6;
static GLfloat dist;
static GLint state, allowed = ~0;
static GLboolean doubleBuffer = GL_TRUE;
static GLdouble plane[4] = {1.0, 0.0, -1.0, 0.0};
static GLuint surf1;
static GLdouble plane[4];
static GLuint surf1, dlist_state;
static GLboolean PrintInfo = GL_FALSE;
@@ -110,9 +112,6 @@ static GLubyte halftone[] = {
0x55, 0x55, 0x55, 0x55, 0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55};
/* forward decl */
int BuildList( int mode );
static void read_surface( char *filename )
{
@@ -125,7 +124,7 @@ static void read_surface( char *filename )
}
numverts = 0;
while (!feof(f) && numverts<MAXVERTS) {
while (!feof(f) && numverts<maxverts) {
fscanf( f, "%f %f %f %f %f %f",
&data[numverts][0], &data[numverts][1], &data[numverts][2],
&data[numverts][3], &data[numverts][4], &data[numverts][5] );
@@ -139,6 +138,31 @@ static void read_surface( char *filename )
static void print_flags( const char *msg, GLuint flags )
{
fprintf(stderr,
"%s (0x%x): %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
msg, flags,
(flags & GLVERTEX) ? "glVertex, " : "",
(flags & DRAW_ARRAYS) ? "glDrawArrays, " : "",
(flags & DRAW_ELTS) ? "glDrawElements, " : "",
(flags & ARRAY_ELT) ? "glArrayElement, " : "",
(flags & LOCKED) ? "locked arrays, " : "",
(flags & TRIANGLES) ? "GL_TRIANGLES, " : "",
(flags & STRIPS) ? "GL_TRIANGLE_STRIP, " : "",
(flags & POINTS) ? "GL_POINTS, " : "",
(flags & DISPLAYLIST) ? "as a displaylist, " : "",
(flags & LIT) ? "lit, " : "",
(flags & UNLIT) ? "unlit, " : "",
(flags & REFLECT) ? "reflect, " : "",
(flags & SHADE_FLAT) ? "flat-shaded, " : "",
(flags & USER_CLIP) ? "user_clip, " : "",
(flags & MATERIALS) ? "materials, " : "",
(flags & FOG) ? "fog, " : "",
(flags & STIPPLE) ? "stipple, " : "");
}
struct data_idx {
float *data;
@@ -180,7 +204,7 @@ int (*(compare[7]))( const void *a, const void *b ) =
#define VEC_ELT(f, s, i) (float *)(((char *)f) + s * i)
static int sort_axis( int axis,
static int sort_axis( int axis,
int vec_size,
int vec_stride,
struct data_idx *indices,
@@ -192,27 +216,27 @@ static int sort_axis( int axis,
{
int i;
if (finish-start > 2)
if (finish-start > 2)
{
qsort( indices+start, finish-start, sizeof(*indices), compare[axis] );
}
else if (indices[start].data[axis] > indices[start+1].data[axis])
}
else if (indices[start].data[axis] > indices[start+1].data[axis])
{
struct data_idx tmp = indices[start];
indices[start] = indices[start+1];
indices[start+1] = tmp;
}
if (axis == vec_size-1) {
for (i = start ; i < finish ; ) {
float max = indices[i].data[axis] + fudge;
float *dest = VEC_ELT(out, vec_stride, uniq);
int j;
for (j = 0 ; j < vec_size ; j++)
dest[j] = indices[i].data[j];
for ( ; i < finish && max >= indices[i].data[axis]; i++)
for ( ; i < finish && max >= indices[i].data[axis]; i++)
indices[i].uniq_idx = uniq;
uniq++;
@@ -227,7 +251,7 @@ static int sort_axis( int axis,
int k;
indices[i].uniq_idx = uniq;
for (k = 0 ; k < vec_size ; k++)
dest[k] = indices[i].data[k];
@@ -244,7 +268,7 @@ static int sort_axis( int axis,
}
static void extract_indices1( const struct data_idx *in, unsigned int *out,
static void extract_indices1( const struct data_idx *in, unsigned int *out,
int n )
{
int i;
@@ -266,13 +290,13 @@ static void compactify_arrays(void)
ind[i].data = data[i];
}
numuniq = sort_axis(0,
sizeof(compressed_data[0])/sizeof(float),
numuniq = sort_axis(0,
sizeof(compressed_data[0])/sizeof(float),
sizeof(compressed_data[0]),
ind,
0,
numverts,
(float *)compressed_data,
ind,
0,
numverts,
(float *)compressed_data,
0,
1e-6);
@@ -282,6 +306,20 @@ static void compactify_arrays(void)
free( ind );
}
static void expand_arrays(void)
{
int i;
int parity = 0;
for (i = 2 ; i < numverts ; i++, parity ^= 1) {
int v0 = i-2+parity;
int v1 = i-1-parity;
int v2 = i;
memcpy( expanded_data[(i-2)*3+0], data[v0], sizeof(data[0]) );
memcpy( expanded_data[(i-2)*3+1], data[v1], sizeof(data[0]) );
memcpy( expanded_data[(i-2)*3+2], data[v2], sizeof(data[0]) );
}
}
static float myrand( float max )
{
return max*rand()/(RAND_MAX+1.0);
@@ -297,7 +335,7 @@ static void make_tri_indices( void )
for (j=2;j<numverts;j++,parity^=1) {
if (parity) {
*v++ = indices[j-1];
*v++ = indices[j-2];
*v++ = indices[j-2];
*v++ = indices[j];
} else {
*v++ = indices[j-2];
@@ -305,7 +343,7 @@ static void make_tri_indices( void )
*v++ = indices[j];
}
}
num_tri_verts = v - tri_indices;
printf("num_tri_verts: %d\n", num_tri_verts);
@@ -315,6 +353,9 @@ static void make_tri_indices( void )
col[j][1] = myrand(1);
col[j][0] = myrand(1);
}
for (i = 0; i < numverts ; i++)
strip_indices[i] = i;
}
#define MIN(x,y) (x < y) ? x : y
@@ -322,24 +363,33 @@ static void make_tri_indices( void )
static void draw_surface( int with_state )
{
GLuint i, j;
if (with_state & DISPLAYLIST) {
if ((with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK|MATERIAL_MASK)) !=
dlist_state) {
/*
*/
fprintf(stderr, "rebuilding displaylist\n");
switch (with_state & (COMPILED_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK)) {
if (dlist_state)
glDeleteLists( surf1, 1 );
dlist_state = with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK|
MATERIAL_MASK);
surf1 = glGenLists(1);
glNewList(surf1, GL_COMPILE);
draw_surface( dlist_state );
glEndList();
}
glCallList( surf1 );
return;
}
switch (with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK)) {
#ifdef GL_EXT_vertex_array
case (COMPILED|DRAW_ARRAYS|STRIPS):
glDrawElements( GL_TRIANGLE_STRIP, numverts, GL_UNSIGNED_INT, indices );
break;
case (COMPILED|ARRAY_ELT|STRIPS):
glBegin( GL_TRIANGLE_STRIP );
for (i = 0 ; i < numverts ; i++)
glArrayElement( indices[i] );
glEnd();
break;
case (COMPILED|DRAW_ARRAYS|TRIANGLES):
case (IMMEDIATE|DRAW_ARRAYS|TRIANGLES):
case (DRAW_ELTS|TRIANGLES):
if (with_state & MATERIALS) {
for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) {
GLuint nr = MIN(num_tri_verts-i, 600);
@@ -348,29 +398,16 @@ static void draw_surface( int with_state )
glDrawElements( GL_TRIANGLES, nr, GL_UNSIGNED_INT, tri_indices+i );
}
} else {
glDrawElements( GL_TRIANGLES, num_tri_verts, GL_UNSIGNED_INT,
glDrawElements( GL_TRIANGLES, num_tri_verts, GL_UNSIGNED_INT,
tri_indices );
}
break;
/* Uses the original arrays (including duplicate elements):
*/
case (IMMEDIATE|DRAW_ARRAYS|STRIPS):
glDrawArraysEXT( GL_TRIANGLE_STRIP, 0, numverts );
case (DRAW_ARRAYS|TRIANGLES):
glDrawArraysEXT( GL_TRIANGLES, 0, (numverts-2)*3 );
break;
/* Uses the original arrays (including duplicate elements):
*/
case (IMMEDIATE|ARRAY_ELT|STRIPS):
glBegin( GL_TRIANGLE_STRIP );
for (i = 0 ; i < numverts ; i++)
glArrayElement( i );
glEnd();
break;
case (IMMEDIATE|ARRAY_ELT|TRIANGLES):
case (COMPILED|ARRAY_ELT|TRIANGLES):
case (ARRAY_ELT|TRIANGLES):
if (with_state & MATERIALS) {
for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) {
GLuint nr = MIN(num_tri_verts-i, 600);
@@ -386,12 +423,51 @@ static void draw_surface( int with_state )
glBegin( GL_TRIANGLES );
for (i = 0 ; i < num_tri_verts ; i++)
glArrayElement( tri_indices[i] );
glEnd();
}
}
break;
case (IMMEDIATE|GLVERTEX|TRIANGLES):
/* Uses the original arrays (including duplicate elements):
*/
case (DRAW_ARRAYS|STRIPS):
glDrawArraysEXT( GL_TRIANGLE_STRIP, 0, numverts );
break;
case (DRAW_ELTS|STRIPS):
glDrawElements( GL_TRIANGLE_STRIP, numverts,
GL_UNSIGNED_INT, strip_indices );
break;
/* Uses the original arrays (including duplicate elements):
*/
case (ARRAY_ELT|STRIPS):
glBegin( GL_TRIANGLE_STRIP );
for (i = 0 ; i < numverts ; i++)
glArrayElement( i );
glEnd();
break;
case (DRAW_ARRAYS|POINTS):
glDrawArraysEXT( GL_POINTS, 0, numuniq );
break;
case (DRAW_ELTS|POINTS):
/* can use numuniq with strip_indices as strip_indices[i] == i.
*/
glDrawElements( GL_POINTS, numuniq,
GL_UNSIGNED_INT, strip_indices );
break;
case (ARRAY_ELT|POINTS):
/* just emit each unique element once:
*/
glBegin( GL_POINTS );
for (i = 0 ; i < numuniq ; i++)
glArrayElement( i );
glEnd();
break;
#endif
case (GLVERTEX|TRIANGLES):
if (with_state & MATERIALS) {
for (j = i = 0 ; i < num_tri_verts ; i += 600, j++) {
GLuint nr = MIN(num_tri_verts-i, 600);
@@ -412,27 +488,35 @@ static void draw_surface( int with_state )
glVertex3fv( &compressed_data[tri_indices[i]][0] );
}
glEnd();
}
}
break;
case (DISPLAYLIST|GLVERTEX|STRIPS):
if (!surf1)
surf1 = BuildList( GL_COMPILE_AND_EXECUTE );
else
glCallList(surf1);
break;
#endif
/* Uses the original arrays (including duplicate elements):
case (GLVERTEX|POINTS):
/* Renders all points, but not in strip order... Shouldn't be a
* problem, but people may be confused as to why points are so
* much faster in this demo... And why cva doesn't help them...
*/
default:
glBegin( GL_POINTS );
for ( i = 0 ; i < numuniq ; i++ ) {
glNormal3fv( &compressed_data[i][3] );
glVertex3fv( &compressed_data[i][0] );
}
glEnd();
break;
case (GLVERTEX|STRIPS):
glBegin( GL_TRIANGLE_STRIP );
for (i=0;i<numverts;i++) {
glNormal3fv( &data[i][3] );
glVertex3fv( &data[i][0] );
}
glEnd();
break;
default:
fprintf(stderr, "unimplemented mode %x...\n",
(with_state & (RENDER_STYLE_MASK|PRIMITIVE_MASK)));
break;
}
}
@@ -443,17 +527,9 @@ static void Display(void)
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
draw_surface( state );
glFlush();
if (doubleBuffer) glutSwapBuffers();
if (doubleBuffer) glutSwapBuffers();
}
int BuildList( int mode )
{
int rv = glGenLists(1);
glNewList(rv, mode );
draw_surface( IMMEDIATE|GLVERTEX|STRIPS );
glEndList();
return rv;
}
/* KW: only do this when necessary, so CVA can re-use results.
*/
@@ -515,12 +591,12 @@ static void InitMaterials(void)
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, position0);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT1, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT1, GL_POSITION, position1);
glEnable(GL_LIGHT1);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
@@ -534,8 +610,7 @@ static void InitMaterials(void)
#define UPDATE(o,n,mask) (o&=~mask, o|=n&mask)
#define CHANGED(o,n,mask) ((n&mask) && \
(n&mask) != (o&mask) ? UPDATE(o,n,mask) : 0)
#define CHANGED(o,n,mask) ((n&mask) && (n&mask) != (o&mask) )
static void ModeMenu(int m)
{
@@ -543,7 +618,7 @@ static void ModeMenu(int m)
if (!m) return;
if (m==QUIT)
if (m==QUIT)
exit(0);
if (m==GLINFO) {
@@ -554,6 +629,7 @@ static void ModeMenu(int m)
}
if (CHANGED(state, m, FILTER_MASK)) {
UPDATE(state, m, FILTER_MASK);
if (m & LINEAR_FILTER) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
@@ -564,13 +640,29 @@ static void ModeMenu(int m)
}
if (CHANGED(state, m, LIGHT_MASK)) {
if (m & LIT)
UPDATE(state, m, LIGHT_MASK);
if (m & LIT) {
glEnable(GL_LIGHTING);
else
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_2D);
}
else if (m & UNLIT) {
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_2D);
}
else if (m & REFLECT) {
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_2D);
}
}
if (CHANGED(state, m, SHADE_MASK)) {
UPDATE(state, m, SHADE_MASK);
if (m & SHADE_SMOOTH)
glShadeModel(GL_SMOOTH);
else
@@ -578,24 +670,8 @@ static void ModeMenu(int m)
}
if (CHANGED(state, m, TEXTURE_MASK)) {
if (m & TEXTURE)
glEnable(GL_TEXTURE_2D);
else
glDisable(GL_TEXTURE_2D);
}
if (CHANGED(state, m, REFLECT_MASK)) {
if (m & REFLECT) {
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
} else {
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
}
}
if (CHANGED(state, m, CLIP_MASK)) {
UPDATE(state, m, CLIP_MASK);
if (m & USER_CLIP) {
glEnable(GL_CLIP_PLANE0);
} else {
@@ -604,66 +680,121 @@ static void ModeMenu(int m)
}
if (CHANGED(state, m, FOG_MASK)) {
if (m & FOG)
UPDATE(state, m, FOG_MASK);
if (m & FOG)
{
glEnable(GL_FOG);
printf("FOG enable\n");
}
else
}
else
{
glDisable(GL_FOG);
printf("FOG disable\n");
}
}
if (CHANGED(state, m, STIPPLE_MASK)) {
if (m & STIPPLE)
UPDATE(state, m, STIPPLE_MASK);
if (m & STIPPLE)
{
glEnable(GL_POLYGON_STIPPLE);
printf("STIPPLE enable\n");
}
else
}
else
{
glDisable(GL_POLYGON_STIPPLE);
printf("STIPPLE disable\n");
}
}
#ifdef GL_EXT_vertex_array
if (CHANGED(state, m, (COMPILED_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK)))
if (CHANGED(state, m, (LOCK_MASK|RENDER_STYLE_MASK|PRIMITIVE_MASK)))
{
if ((m & (COMPILED_MASK|PRIMITIVE_MASK)) == (IMMEDIATE|STRIPS))
if (m & (PRIMITIVE_MASK)) {
UPDATE(state, m, (PRIMITIVE_MASK));
}
if (m & (RENDER_STYLE_MASK)) {
UPDATE(state, m, (RENDER_STYLE_MASK));
}
if (m & LOCK_MASK) {
UPDATE(state, m, (LOCK_MASK));
}
print_flags("primitive", state & PRIMITIVE_MASK);
print_flags("render style", state & RENDER_STYLE_MASK);
if ((state & PRIMITIVE_MASK) != STRIPS &&
((state & RENDER_STYLE_MASK) == DRAW_ELTS ||
(state & RENDER_STYLE_MASK) == ARRAY_ELT ||
(state & PRIMITIVE_MASK) == POINTS))
{
fprintf(stderr, "enabling small arrays\n");
/* Rendering any primitive with draw-element/array-element
* --> Can't do strips here as ordering has been lost in
* compaction process...
*/
glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), numuniq,
compressed_data );
glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), numuniq,
&compressed_data[0][3]);
#ifdef GL_EXT_compiled_vertex_array
if (allowed & LOCKED) {
if (state & LOCKED) {
glLockArraysEXT( 0, numuniq );
} else {
glUnlockArraysEXT();
}
}
#endif
}
else if ((state & PRIMITIVE_MASK) == TRIANGLES &&
(state & RENDER_STYLE_MASK) == DRAW_ARRAYS) {
fprintf(stderr, "enabling big arrays\n");
/* Only get here for TRIANGLES and drawarrays
*/
glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), (numverts-2) * 3,
expanded_data );
glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), (numverts-2) * 3,
&expanded_data[0][3]);
#ifdef GL_EXT_compiled_vertex_array
if (allowed & LOCKED) {
if (state & LOCKED) {
glLockArraysEXT( 0, (numverts-2)*3 );
} else {
glUnlockArraysEXT();
}
}
#endif
}
else {
fprintf(stderr, "enabling normal arrays\n");
glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), numverts, data );
glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), numverts, &data[0][3]);
}
else
{
glVertexPointerEXT( 3, GL_FLOAT, sizeof(data[0]), numuniq,
compressed_data );
glNormalPointerEXT( GL_FLOAT, sizeof(data[0]), numuniq,
&compressed_data[0][3]);
}
#ifdef GL_EXT_compiled_vertex_array
if (allowed & COMPILED) {
if (m & COMPILED) {
glLockArraysEXT( 0, numuniq );
} else {
glUnlockArraysEXT();
if (allowed & LOCKED) {
if (state & LOCKED) {
glLockArraysEXT( 0, numverts );
} else {
glUnlockArraysEXT();
}
}
}
#endif
}
}
#endif
if (m & (RENDER_STYLE_MASK|PRIMITIVE_MASK)) {
UPDATE(state, m, (RENDER_STYLE_MASK|PRIMITIVE_MASK));
if (m & DLIST_MASK) {
UPDATE(state, m, DLIST_MASK);
}
if (m & MATERIAL_MASK) {
UPDATE(state, m, MATERIAL_MASK);
}
print_flags("new flags", state);
glutPostRedisplay();
}
@@ -673,20 +804,28 @@ static void Init(int argc, char *argv[])
{
GLfloat fogColor[4] = {0.5,1.0,0.5,1.0};
xrot = 0;
yrot = 0;
dist = -6;
plane[0] = 1.0;
plane[1] = 0.0;
plane[2] = -1.0;
plane[3] = 0.0;
glClearColor(0.0, 0.0, 1.0, 0.0);
glEnable( GL_DEPTH_TEST );
glEnable( GL_VERTEX_ARRAY_EXT );
glEnable( GL_NORMAL_ARRAY_EXT );
InitMaterials();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 5, 25 );
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClipPlane(GL_CLIP_PLANE0, plane);
glClipPlane(GL_CLIP_PLANE0, plane);
InitMaterials();
set_matrix();
@@ -696,10 +835,6 @@ static void Init(int argc, char *argv[])
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
}
/* Green fog is easy to see */
glFogi(GL_FOG_MODE,GL_EXP2);
@@ -707,22 +842,31 @@ static void Init(int argc, char *argv[])
glFogf(GL_FOG_DENSITY,0.15);
glHint(GL_FOG_HINT,GL_DONT_CARE);
{
static int firsttime = 1;
if (firsttime) {
firsttime = 0;
compactify_arrays();
expand_arrays();
make_tri_indices();
compactify_arrays();
make_tri_indices();
surf1 = BuildList( GL_COMPILE );
if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
}
}
}
ModeMenu(SHADE_SMOOTH|
LIT|
NO_TEXTURE|
NO_REFLECT|
POINT_FILTER|
IMMEDIATE|
NO_USER_CLIP|
NO_MATERIALS|
NO_FOG|
NO_STIPPLE|
IMMEDIATE|
STRIPS|
UNLOCKED|
GLVERTEX);
if (PrintInfo) {
@@ -759,7 +903,7 @@ static void Key( unsigned char key, int x, int y )
ModeMenu((state ^ STIPPLE_MASK) & STIPPLE_MASK);
break;
case 'l':
ModeMenu((state ^ LIGHT_MASK) & LIGHT_MASK);
ModeMenu((state ^ LIGHT_MASK) & (LIT|UNLIT));
break;
case 'm':
ModeMenu((state ^ MATERIAL_MASK) & MATERIAL_MASK);
@@ -768,11 +912,10 @@ static void Key( unsigned char key, int x, int y )
ModeMenu((state ^ CLIP_MASK) & CLIP_MASK);
break;
case 'v':
if (allowed&COMPILED)
ModeMenu(COMPILED|DRAW_ARRAYS|TRIANGLES);
ModeMenu((LOCKED|IMMEDIATE|DRAW_ELTS|TRIANGLES) & allowed);
break;
case 'V':
ModeMenu(IMMEDIATE|GLVERTEX|STRIPS);
ModeMenu(UNLOCKED|IMMEDIATE|GLVERTEX|STRIPS);
break;
case 'b':
Benchmark(5.0, 0);
@@ -808,7 +951,9 @@ static void Key( unsigned char key, int x, int y )
set_matrix();
glutPostRedisplay();
break;
case ' ':
Init(0,0);
break;
}
}
@@ -854,6 +999,15 @@ static GLint Args(int argc, char **argv)
else if (strcmp(argv[i], "-info") == 0) {
PrintInfo = GL_TRUE;
}
else if (strcmp(argv[i], "-10") == 0) {
maxverts = 10;
}
else if (strcmp(argv[i], "-100") == 0) {
maxverts = 100;
}
else if (strcmp(argv[i], "-1000") == 0) {
maxverts = 1000;
}
else {
printf("%s (Bad option).\n", argv[i]);
return QUIT;
@@ -877,7 +1031,7 @@ int main(int argc, char **argv)
glutInitWindowPosition(0, 0);
glutInitWindowSize(400, 400);
type = GLUT_DEPTH;
type |= GLUT_RGB;
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
@@ -890,70 +1044,59 @@ int main(int argc, char **argv)
/* Make sure server supports the vertex array extension */
extensions = (char *) glGetString( GL_EXTENSIONS );
if (!strstr( extensions, "GL_EXT_vertex_array" ))
if (!strstr( extensions, "GL_EXT_vertex_array" ))
{
printf("Vertex arrays not supported by this renderer\n");
allowed &= ~(COMPILED|DRAW_ARRAYS|ARRAY_ELT);
allowed &= ~(LOCKED|DRAW_ARRAYS|DRAW_ELTS|ARRAY_ELT);
}
else if (!strstr( extensions, "GL_EXT_compiled_vertex_array" ))
else if (!strstr( extensions, "GL_EXT_compiled_vertex_array" ))
{
printf("Compiled vertex arrays not supported by this renderer\n");
allowed &= ~COMPILED;
allowed &= ~LOCKED;
}
Init(argc, argv);
ModeMenu(arg_mode);
glutCreateMenu(ModeMenu);
glutAddMenuEntry("GL info", GLINFO);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Lit", LIT|NO_TEXTURE|NO_REFLECT);
glutAddMenuEntry("Unlit", UNLIT|NO_TEXTURE|NO_REFLECT);
/* glutAddMenuEntry("Textured", TEXTURE); */
glutAddMenuEntry("Reflect", TEXTURE|REFLECT);
glutAddMenuEntry("", 0);
glutAddMenuEntry("GL info", GLINFO);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Lit", LIT);
glutAddMenuEntry("Unlit", UNLIT);
glutAddMenuEntry("Reflect", REFLECT);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Smooth", SHADE_SMOOTH);
glutAddMenuEntry("Flat", SHADE_FLAT);
glutAddMenuEntry("", 0);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Fog", FOG);
glutAddMenuEntry("No Fog", NO_FOG);
glutAddMenuEntry("", 0);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Stipple", STIPPLE);
glutAddMenuEntry("No Stipple", NO_STIPPLE);
glutAddMenuEntry("", 0);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Point Filtered", POINT_FILTER);
glutAddMenuEntry("Linear Filtered", LINEAR_FILTER);
glutAddMenuEntry("", 0);
glutAddMenuEntry("glVertex (STRIPS)", IMMEDIATE|GLVERTEX|STRIPS);
glutAddMenuEntry("glVertex (TRIANGLES)", IMMEDIATE|GLVERTEX|TRIANGLES);
glutAddMenuEntry("", 0);
glutAddMenuEntry("glVertex display list (STRIPS)",
DISPLAYLIST|GLVERTEX|STRIPS);
glutAddMenuEntry("", 0);
glutAddMenuEntry("", 0);
glutAddMenuEntry("GL_TRIANGLES", TRIANGLES);
glutAddMenuEntry("GL_TRIANGLE_STRIPS", STRIPS);
glutAddMenuEntry("GL_POINTS", POINTS);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Displaylist", DISPLAYLIST);
glutAddMenuEntry("Immediate", IMMEDIATE);
glutAddMenuEntry("", 0);
if (allowed & LOCKED) {
glutAddMenuEntry("Locked Arrays (CVA)", LOCKED);
glutAddMenuEntry("Unlocked Arrays", UNLOCKED);
glutAddMenuEntry("", 0);
}
glutAddMenuEntry("glVertex", GLVERTEX);
if (allowed & DRAW_ARRAYS) {
glutAddMenuEntry("DrawArrays (STRIPS)",
IMMEDIATE|DRAW_ARRAYS|STRIPS);
glutAddMenuEntry("ArrayElement (STRIPS)",
IMMEDIATE|ARRAY_ELT|STRIPS);
glutAddMenuEntry("DrawElements (TRIANGLES)",
IMMEDIATE|DRAW_ARRAYS|TRIANGLES);
glutAddMenuEntry("ArrayElement (TRIANGLES)",
IMMEDIATE|ARRAY_ELT|TRIANGLES);
glutAddMenuEntry("", 0);
glutAddMenuEntry("glDrawElements", DRAW_ELTS);
glutAddMenuEntry("glDrawArrays", DRAW_ARRAYS);
glutAddMenuEntry("glArrayElement", ARRAY_ELT);
}
if (allowed & COMPILED) {
glutAddMenuEntry("Compiled DrawElements (TRIANGLES)",
COMPILED|DRAW_ARRAYS|TRIANGLES);
glutAddMenuEntry("Compiled DrawElements (STRIPS)",
COMPILED|DRAW_ARRAYS|STRIPS);
glutAddMenuEntry("Compiled ArrayElement (TRIANGLES)",
COMPILED|ARRAY_ELT|TRIANGLES);
glutAddMenuEntry("Compiled ArrayElement (STRIPS)",
COMPILED|ARRAY_ELT|STRIPS);
glutAddMenuEntry("", 0);
}
glutAddMenuEntry("Quit", QUIT);
glutAddMenuEntry("", 0);
glutAddMenuEntry("Quit", QUIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutReshapeFunc(Reshape);

View File

@@ -33,7 +33,7 @@
#include <GL/glut.h>
#include <GL/glext.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#include "readtex.c" /* I know, this is a hack. */
#define TEXTURE_FILE "../images/girl.rgb"

View File

@@ -1,4 +1,4 @@
/* $Id: multiarb.c,v 1.6 2000/05/23 23:21:00 brianp Exp $ */
/* $Id: multiarb.c,v 1.10 2001/06/20 19:12:30 brianp Exp $ */
/*
* GL_ARB_multitexture demo
@@ -12,6 +12,41 @@
/*
* $Log: multiarb.c,v $
* Revision 1.10 2001/06/20 19:12:30 brianp
* also print GL_MAX_TEXTURE_SIZE
*
* Revision 1.9 2001/06/13 14:33:16 brianp
* moved glTexEnvi calls to better logical locations
*
* Revision 1.8 2000/12/24 22:53:54 pesco
* * demos/Makefile.am (INCLUDES): Added -I$(top_srcdir)/util.
* * demos/Makefile.X11, demos/Makefile.BeOS-R4, demos/Makefile.cygnus:
* Essentially the same.
* Program files updated to include "readtex.c", not "../util/readtex.c".
* * demos/reflect.c: Likewise for "showbuffer.c".
*
*
* * Makefile.am (EXTRA_DIST): Added top-level regular files.
*
* * include/GL/Makefile.am (INC_X11): Added glxext.h.
*
*
* * src/GGI/include/ggi/mesa/Makefile.am (EXTRA_HEADERS): Include
* Mesa GGI headers in dist even if HAVE_GGI is not given.
*
* * configure.in: Look for GLUT and demo source dirs in $srcdir.
*
* * src/swrast/Makefile.am (libMesaSwrast_la_SOURCES): Set to *.[ch].
* More source list updates in various Makefile.am's.
*
* * Makefile.am (dist-hook): Remove CVS directory from distribution.
* (DIST_SUBDIRS): List all possible subdirs here.
* (SUBDIRS): Only list subdirs selected for build again.
* The above two applied to all subdir Makefile.am's also.
*
* Revision 1.7 2000/11/01 16:02:01 brianp
* print number of texture units
*
* Revision 1.6 2000/05/23 23:21:00 brianp
* set default window pos
*
@@ -48,7 +83,7 @@
#include <string.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#include "readtex.c" /* I know, this is a hack. */
#define TEXTURE_1_FILE "../images/girl.rgb"
#define TEXTURE_2_FILE "../images/reflect.rgb"
@@ -246,6 +281,7 @@ static void SpecialKey( int key, int x, int y )
static void Init( int argc, char *argv[] )
{
GLuint texObj[2];
GLint units, size;
const char *exten = (const char *) glGetString(GL_EXTENSIONS);
if (!strstr(exten, "GL_ARB_multitexture")) {
@@ -253,6 +289,14 @@ static void Init( int argc, char *argv[] )
exit(1);
}
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &units);
printf("%d texture units supported\n", units);
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &size);
printf("%d x %d max texture size\n", size, size);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
/* allocate two texture objects */
glGenTextures(2, texObj);
@@ -266,11 +310,6 @@ static void Init( int argc, char *argv[] )
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
#endif
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
if (!LoadRGBMipmaps(TEXTURE_1_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
@@ -287,9 +326,6 @@ static void Init( int argc, char *argv[] )
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
#endif
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
if (!LoadRGBMipmaps(TEXTURE_2_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
@@ -300,8 +336,10 @@ static void Init( int argc, char *argv[] )
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, texObj[0]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, texObj[1]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
#endif
glShadeModel(GL_FLAT);

View File

@@ -1,4 +1,4 @@
/* $Id: osdemo.c,v 1.4 2000/03/28 16:59:39 rjfrank Exp $ */
/* $Id: osdemo.c,v 1.5 2000/09/08 16:42:06 brianp Exp $ */
/*
* Demo of off-screen Mesa rendering
@@ -223,15 +223,38 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
int main( int argc, char *argv[] )
{
void *buffer;
/* Create an RGBA-mode context */
#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305
/* specify Z, stencil, accum sizes */
OSMesaContext ctx = OSMesaCreateContextExt( GL_RGBA, 16, 0, 0, NULL );
#else
OSMesaContext ctx = OSMesaCreateContext( GL_RGBA, NULL );
#endif
if (!ctx) {
printf("OSMesaCreateContext failed!\n");
return 0;
}
/* Allocate the image buffer */
void *buffer = malloc( WIDTH * HEIGHT * 4 );
buffer = malloc( WIDTH * HEIGHT * 4 );
if (!buffer) {
printf("Alloc image buffer failed!\n");
return 0;
}
/* Bind the buffer to the context and make it current */
OSMesaMakeCurrent( ctx, buffer, GL_UNSIGNED_BYTE, WIDTH, HEIGHT );
{
int z, s, a;
glGetIntegerv(GL_DEPTH_BITS, &z);
glGetIntegerv(GL_STENCIL_BITS, &s);
glGetIntegerv(GL_ACCUM_RED_BITS, &a);
printf("%d %d %d\n", z, s, a);
}
render_image();
if (argc>1) {

View File

@@ -1,4 +1,4 @@
/* $Id: paltex.c,v 1.4 2000/06/27 17:12:10 brianp Exp $ */
/* $Id: paltex.c,v 1.6 2000/10/05 07:17:43 joukj Exp $ */
/*
* Paletted texture demo. Written by Brian Paul.
@@ -8,27 +8,38 @@
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define GL_GLEXT_LEGACY
#include <GL/glut.h>
static float Rot = 0.0;
static GLboolean Anim = 1;
static void Idle( void )
{
Rot += 5.0;
float t = glutGet(GLUT_ELAPSED_TIME) * 0.001; /* in seconds */
Rot = t * 360 / 4; /* 1 rotation per 4 seconds */
glutPostRedisplay();
}
static void Display( void )
{
glClear( GL_COLOR_BUFFER_BIT );
/* draw background gradient */
glDisable(GL_TEXTURE_2D);
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.2); glVertex2f(-1.5, -1.0);
glColor3f(1.0, 0.0, 0.2); glVertex2f( 1.5, -1.0);
glColor3f(0.0, 0.0, 1.0); glVertex2f( 1.5, 1.0);
glColor3f(0.0, 0.0, 1.0); glVertex2f(-1.5, 1.0);
glEnd();
glPushMatrix();
glRotatef(Rot, 0, 0, 1);
glEnable(GL_TEXTURE_2D);
glBegin(GL_POLYGON);
glTexCoord2f(0, 1); glVertex2f(-1, -0.5);
glTexCoord2f(1, 1); glVertex2f( 1, -0.5);
@@ -47,10 +58,9 @@ static void Reshape( int width, int height )
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
glOrtho( -1.5, 1.5, -1.0, 1.0, -1.0, 1.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -7.0 );
}
@@ -62,6 +72,16 @@ static void Key( unsigned char key, int x, int y )
case 27:
exit(0);
break;
case 's':
Rot += 0.5;
break;
case ' ':
Anim = !Anim;
if (Anim)
glutIdleFunc( Idle );
else
glutIdleFunc( NULL );
break;
}
glutPostRedisplay();
}
@@ -89,26 +109,27 @@ static void Init( void )
}
/* load the color table for each texel-index */
table[' '][0] = 50;
table[' '][1] = 50;
table[' '][2] = 50;
table[' '][3] = 50;
memset(table, 0, 256*4);
table[' '][0] = 255;
table[' '][1] = 255;
table[' '][2] = 255;
table[' '][3] = 64;
table['M'][0] = 255;
table['M'][1] = 0;
table['M'][2] = 0;
table['M'][3] = 0;
table['M'][3] = 255;
table['E'][0] = 0;
table['E'][1] = 255;
table['E'][2] = 0;
table['E'][3] = 0;
table['S'][0] = 40;
table['S'][1] = 40;
table['E'][3] = 255;
table['S'][0] = 0;
table['S'][1] = 0;
table['S'][2] = 255;
table['S'][3] = 0;
table['S'][3] = 255;
table['A'][0] = 255;
table['A'][1] = 255;
table['A'][2] = 0;
table['A'][3] = 0;
table['A'][3] = 255;
#ifdef GL_EXT_paletted_texture
@@ -144,6 +165,81 @@ static void Init( void )
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
#undef HEIGHT
#undef WIDTH
}
/*
* Color ramp test
*/
static void Init2( void )
{
#define HEIGHT 32
#define WIDTH 256
static char texture[HEIGHT][WIDTH];
GLubyte table[256][4];
int i, j;
if (!glutExtensionSupported("GL_EXT_paletted_texture")) {
printf("Sorry, GL_EXT_paletted_texture not supported\n");
exit(0);
}
for (j = 0; j < HEIGHT; j++) {
for (i = 0; i < WIDTH; i++) {
texture[j][i] = i;
}
}
for (i = 0; i < 255; i++) {
table[i][0] = i;
table[i][1] = 0;
table[i][2] = 0;
table[i][3] = 255;
}
#ifdef GL_EXT_paletted_texture
#if defined(GL_EXT_shared_texture_palette) && defined(USE_SHARED_PALETTE)
printf("Using shared palette\n");
glColorTableEXT(GL_SHARED_TEXTURE_PALETTE_EXT, /* target */
GL_RGBA, /* internal format */
256, /* table size */
GL_RGBA, /* table format */
GL_UNSIGNED_BYTE, /* table type */
table); /* the color table */
glEnable(GL_SHARED_TEXTURE_PALETTE_EXT);
#else
glColorTableEXT(GL_TEXTURE_2D, /* target */
GL_RGBA, /* internal format */
256, /* table size */
GL_RGBA, /* table format */
GL_UNSIGNED_BYTE, /* table type */
table); /* the color table */
#endif
glTexImage2D(GL_TEXTURE_2D, /* target */
0, /* level */
GL_COLOR_INDEX8_EXT, /* internal format */
WIDTH, HEIGHT, /* width, height */
0, /* border */
GL_COLOR_INDEX, /* texture format */
GL_UNSIGNED_BYTE, /* texture type */
texture); /* teh texture */
#endif
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
@@ -151,7 +247,7 @@ int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( 400, 400 );
glutInitWindowSize( 400, 300 );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
@@ -162,7 +258,8 @@ int main( int argc, char *argv[] )
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutDisplayFunc( Display );
glutIdleFunc( Idle );
if (Anim)
glutIdleFunc( Idle );
glutMainLoop();
return 0;

View File

@@ -56,7 +56,7 @@
#include <string.h>
#include <GL/glut.h>
#include <GL/glext.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#include "readtex.c" /* I know, this is a hack. */
#define TEXTURE_FILE "../images/girl.rgb"

View File

@@ -24,7 +24,8 @@ static int fullscreen = 1;
static int WIDTH = 640;
static int HEIGHT = 480;
#define FRAME 50
static GLint T0 = 0;
static GLint Frames = 0;
#define BASESIZE 7.5f
#define SPHERE_RADIUS 0.75f
@@ -94,21 +95,6 @@ static int showreflectmap = 1;
static int joyavailable = 0;
static int joyactive = 0;
static float
gettime(void)
{
static float told = 0.0f;
float tnew, ris;
tnew = glutGet(GLUT_ELAPSED_TIME);
ris = tnew - told;
told = tnew;
return ris / 1000.0;
}
static void
calcposobs(void)
{
@@ -116,6 +102,13 @@ calcposobs(void)
dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[2] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
obs[0] += v * dir[0];
obs[1] += v * dir[1];
obs[2] += v * dir[2];
@@ -393,8 +386,7 @@ colorcheckmap(float ppos[3], float c[3])
h[1] = 0.5f * (vdir[1] + ldir[1]);
h[2] = 0.5f * (vdir[2] + ldir[2]);
kfact = dprod(h, norm);
kfact =
kfact * kfact * kfact * kfact * kfact * kfact * kfact * 7.0f * 255.0f;
kfact = pow(kfact, 6.0) * 7.0 * 255.0;
r = r * dfact + kfact;
g = g * dfact + kfact;
@@ -494,12 +486,10 @@ updatereflectmap(int slot)
h[1] = 0.5f * (vdir[1] + ldir[1]);
h[2] = 0.5f * (vdir[2] + ldir[2]);
kfact = dprod(h, norm);
kfact *= kfact;
kfact *= kfact;
kfact *= kfact;
kfact *= kfact;
kfact *= 10.0f;
}
kfact = pow(kfact, 4.0);
if (kfact < 1.0e-10)
kfact = 0.0;
}
r = dfact + kfact;
g = dfact + kfact;
@@ -622,9 +612,7 @@ updatemaps(void)
static void
draw(void)
{
static int count = 0;
static char frbuf[80];
float fr;
static char frbuf[80] = "";
dojoy();
@@ -657,11 +645,6 @@ draw(void)
glPopMatrix();
if ((count % FRAME) == 0) {
fr = gettime();
sprintf(frbuf, "Frame rate: %f", FRAME / fr);
}
glDisable(GL_DEPTH_TEST);
glDisable(GL_FOG);
@@ -746,7 +729,17 @@ draw(void)
glutSwapBuffers();
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
sprintf(frbuf, "Frame rate: %f", fps);
T0 = t;
Frames = 0;
}
}
}
static void

View File

@@ -1,4 +1,4 @@
/* $Id: readpix.c,v 1.3 2000/03/31 01:01:31 brianp Exp $ */
/* $Id: readpix.c,v 1.4 2000/10/16 21:24:39 brianp Exp $ */
/*
* glReadPixels and glCopyPixels test
@@ -8,6 +8,9 @@
/*
* $Log: readpix.c,v $
* Revision 1.4 2000/10/16 21:24:39 brianp
* use gray background, memset TempImage to white to help with debugging
*
* Revision 1.3 2000/03/31 01:01:31 brianp
* tweaks to allow different read formats/types
*
@@ -43,11 +46,11 @@ static GLboolean ScaleAndBias = GL_FALSE;
static GLboolean Benchmark = GL_FALSE;
static GLubyte *TempImage = NULL;
#if 1
#if 0
#define ReadFormat ImgFormat
#define ReadType GL_UNSIGNED_BYTE
#endif
#if 0
#if 1
static GLenum ReadFormat = GL_RGBA;
static GLenum ReadType = GL_UNSIGNED_BYTE;
#endif
@@ -55,6 +58,18 @@ static GLenum ReadType = GL_UNSIGNED_BYTE;
static GLenum ReadFormat = GL_RGB;
static GLenum ReadType = GL_UNSIGNED_SHORT_5_6_5;
#endif
#if 0
static GLenum ReadFormat = GL_RGBA;
static GLenum ReadType = GL_UNSIGNED_SHORT_1_5_5_5_REV;
#endif
#if 0
static GLenum ReadFormat = GL_BGRA;
static GLenum ReadType = GL_UNSIGNED_SHORT_5_5_5_1;
#endif
#if 0
static GLenum ReadFormat = GL_BGRA;
static GLenum ReadType = GL_UNSIGNED_SHORT_4_4_4_4_REV;
#endif
static void
@@ -101,6 +116,7 @@ SetupPixelTransfer(GLboolean invert)
static void
Display( void )
{
glClearColor(.3, .3, .3, 1);
glClear( GL_COLOR_BUFFER_BIT );
glRasterPos2i(5, ImgHeight+25);
@@ -137,6 +153,8 @@ Display( void )
Benchmark = GL_FALSE;
}
else {
/* clear the temporary image to white (helpful for debugging */
memset(TempImage, 255, ImgWidth * ImgHeight * 4);
glReadPixels(APosX, APosY, ImgWidth, ImgHeight,
ReadFormat, ReadType, TempImage);
}

View File

@@ -1,4 +1,4 @@
/* $Id: reflect.c,v 1.3 2000/06/15 14:25:48 brianp Exp $ */
/* $Id: reflect.c,v 1.7 2001/04/25 15:51:32 brianp Exp $ */
/*
* Demo of a reflective, texture-mapped surface with OpenGL.
@@ -53,7 +53,11 @@ static GLfloat spin;
static GLint Width = 400, Height = 300;
static GLenum ShowBuffer = GL_NONE;
static GLboolean Anim = GL_TRUE;
/* performance info */
static GLint T0 = 0;
static GLint Frames = 0;
static void make_table( void )
@@ -144,7 +148,7 @@ static void init( void )
glEnable( GL_LIGHT0 );
glEnable( GL_LIGHTING );
glClearColor( 0.5, 0.5, 0.9, 1.0 );
glClearColor( 0.5, 0.5, 0.9, 0.0 );
glEnable( GL_NORMALIZE );
}
@@ -293,8 +297,31 @@ static void draw_scene( void )
else if (ShowBuffer == GL_STENCIL) {
ShowStencilBuffer(Width, Height, 255.0, 0.0);
}
else if (ShowBuffer == GL_ALPHA) {
ShowAlphaBuffer(Width, Height);
}
glutSwapBuffers();
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
Frames++;
if (t - T0 >= 5000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
T0 = t;
Frames = 0;
}
}
}
static void idle( void )
{
spin += 2.0;
yrot += 3.0;
glutPostRedisplay();
}
@@ -308,6 +335,16 @@ static void Key( unsigned char key, int x, int y )
else if (key == 's') {
ShowBuffer = GL_STENCIL;
}
else if (key == 'a') {
ShowBuffer = GL_ALPHA;
}
else if (key == ' ') {
Anim = !Anim;
if (Anim)
glutIdleFunc(idle);
else
glutIdleFunc(NULL);
}
else if (key==27) {
exit(0);
}
@@ -344,16 +381,6 @@ static void SpecialKey( int key, int x, int y )
}
static void idle( void )
{
spin += 2.0;
yrot += 3.0;
glutPostRedisplay();
}
int main( int argc, char *argv[] )
{
glutInit(&argc, argv);

View File

@@ -1,119 +0,0 @@
/**
(c) Copyright 1993, Silicon Graphics, Inc.
ALL RIGHTS RESERVED
Permission to use, copy, modify, and distribute this software
for any purpose and without fee is hereby granted, provided
that the above copyright notice appear in all copies and that
both the copyright notice and this permission notice appear in
supporting documentation, and that the name of Silicon
Graphics, Inc. not be used in advertising or publicity
pertaining to distribution of the software without specific,
written prior permission.
THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU
"AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR
OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO
EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE
ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR
CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER,
INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE,
SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR
NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY
OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR
PERFORMANCE OF THIS SOFTWARE.
US Government Users Restricted Rights
Use, duplication, or disclosure by the Government is subject to
restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
(c)(1)(ii) of the Rights in Technical Data and Computer
Software clause at DFARS 252.227-7013 and/or in similar or
successor clauses in the FAR or the DOD or NASA FAR
Supplement. Unpublished-- rights reserved under the copyright
laws of the United States. Contractor/manufacturer is Silicon
Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA
94039-7311.
OpenGL(TM) is a trademark of Silicon Graphics, Inc.
*/
/* Taken from the projshadow.c - by Tom McReynolds, SGI */
/* Modified by David Bucciarelli */
/* Rendering shadows using projective shadows. */
#include <GL/glut.h>
#include "shadow.h"
enum {
X, Y, Z, W
};
enum {
A, B, C, D
};
/* create a matrix that will project the desired shadow */
void
shadowmatrix(GLfloat shadowMat[4][4],
GLfloat groundplane[4],
GLfloat lightpos[4])
{
GLfloat dot;
/* find dot product between light position vector and ground plane normal */
dot = groundplane[X] * lightpos[X] +
groundplane[Y] * lightpos[Y] +
groundplane[Z] * lightpos[Z] +
groundplane[W] * lightpos[W];
shadowMat[0][0] = dot - lightpos[X] * groundplane[X];
shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y];
shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z];
shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W];
shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X];
shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y];
shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z];
shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W];
shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X];
shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y];
shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z];
shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W];
shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X];
shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y];
shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z];
shadowMat[3][3] = dot - lightpos[W] * groundplane[W];
}
/* find the plane equation given 3 points */
void
findplane(GLfloat plane[4],
GLfloat v0[3], GLfloat v1[3], GLfloat v2[3])
{
GLfloat vec0[3], vec1[3];
/* need 2 vectors to find cross product */
vec0[X] = v1[X] - v0[X];
vec0[Y] = v1[Y] - v0[Y];
vec0[Z] = v1[Z] - v0[Z];
vec1[X] = v2[X] - v0[X];
vec1[Y] = v2[Y] - v0[Y];
vec1[Z] = v2[Z] - v0[Z];
/* find cross product to get A, B, and C of plane equation */
plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y];
plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]);
plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X];
plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]);
}

View File

@@ -1,18 +0,0 @@
#ifndef SHADOW_H
#define SHADOW_H
extern void
shadowmatrix(GLfloat shadowMat[4][4],
GLfloat groundplane[4],
GLfloat lightpos[4]);
extern void
findplane(GLfloat plane[4],
GLfloat v0[3], GLfloat v1[3], GLfloat v2[3]);
#endif

528
progs/demos/shadowtex.c Normal file
View File

@@ -0,0 +1,528 @@
/* $Id: shadowtex.c,v 1.4 2001/02/28 18:41:50 brianp Exp $ */
/*
* Shadow demo using the GL_SGIX_depth_texture, GL_SGIX_shadow and
* GL_SGIX_shadow_ambient extensions.
*
* Brian Paul
* 19 Feb 2001
*
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#include "../util/showbuffer.c"
#define DEG_TO_RAD (3.14159 / 180.0)
static GLint WindowWidth = 450, WindowHeight = 300;
static GLfloat Xrot = 15, Yrot = 0, Zrot = 0;
static GLfloat Red[4] = {1, 0, 0, 1};
static GLfloat Green[4] = {0, 1, 0, 1};
static GLfloat Blue[4] = {0, 0, 1, 1};
static GLfloat Yellow[4] = {1, 1, 0, 1};
static GLfloat LightDist = 10;
static GLfloat LightLatitude = 45.0;
static GLfloat LightLongitude = 45.0;
static GLfloat LightPos[4];
static GLfloat SpotDir[3];
static GLfloat SpotAngle = 40.0 * DEG_TO_RAD;
static GLfloat ShadowNear = 4.0, ShadowFar = 24.0;
static GLint ShadowTexWidth = 256, ShadowTexHeight = 256;
static GLboolean LinearFilter = GL_FALSE;
static GLfloat Bias = -0.06;
static GLboolean Anim = GL_TRUE;
static GLuint DisplayMode;
#define SHOW_NORMAL 0
#define SHOW_DEPTH_IMAGE 1
#define SHOW_DEPTH_MAPPING 2
#define SHOW_DISTANCE 3
static void
DrawScene(void)
{
GLfloat k = 6;
/* sphere */
glPushMatrix();
glTranslatef(1.6, 2.2, 2.7);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Green);
glColor4fv(Green);
glutSolidSphere(1.5, 15, 15);
glPopMatrix();
/* dodecahedron */
glPushMatrix();
glTranslatef(-2.0, 1.2, 2.1);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Red);
glColor4fv(Red);
glutSolidDodecahedron();
glPopMatrix();
/* icosahedron */
glPushMatrix();
glTranslatef(-0.6, 1.3, -0.5);
glScalef(1.5, 1.5, 1.5);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Yellow);
glColor4fv(Red);
glutSolidIcosahedron();
glPopMatrix();
/* a plane */
glPushMatrix();
glTranslatef(0, -1.1, 0);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, Blue);
glColor4fv(Blue);
glNormal3f(0, 1, 0);
glBegin(GL_POLYGON);
glVertex3f(-k, 0, -k);
glVertex3f( k, 0, -k);
glVertex3f( k, 0, k);
glVertex3f(-k, 0, k);
glEnd();
glPopMatrix();
}
/*
* Load the GL_TEXTURE matrix with the projection from the light
* source's point of view.
*/
static void
MakeShadowMatrix(const GLfloat lightPos[4], const GLfloat spotDir[3],
GLfloat spotAngle, GLfloat shadowNear, GLfloat shadowFar)
{
GLfloat d;
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.5, 0.5, 0.5 + Bias);
glScalef(0.5, 0.5, 0.5);
d = shadowNear * tan(spotAngle);
glFrustum(-d, d, -d, d, shadowNear, shadowFar);
gluLookAt(lightPos[0], lightPos[1], lightPos[2],
lightPos[0] + spotDir[0],
lightPos[1] + spotDir[1],
lightPos[2] + spotDir[2],
0, 1, 0);
glMatrixMode(GL_MODELVIEW);
}
static void
EnableIdentityTexgen(void)
{
/* texgen so that texcoord = vertex coord */
static GLfloat sPlane[4] = { 1, 0, 0, 0 };
static GLfloat tPlane[4] = { 0, 1, 0, 0 };
static GLfloat rPlane[4] = { 0, 0, 1, 0 };
static GLfloat qPlane[4] = { 0, 0, 0, 1 };
glTexGenfv(GL_S, GL_EYE_PLANE, sPlane);
glTexGenfv(GL_T, GL_EYE_PLANE, tPlane);
glTexGenfv(GL_R, GL_EYE_PLANE, rPlane);
glTexGenfv(GL_Q, GL_EYE_PLANE, qPlane);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);
}
/*
* Setup 1-D texgen so that the distance from the light source, between
* the near and far planes maps to s=0 and s=1. When we draw the scene,
* the grayness will indicate the fragment's distance from the light
* source.
*/
static void
EnableDistanceTexgen(const GLfloat lightPos[4], const GLfloat lightDir[3],
GLfloat lightNear, GLfloat lightFar)
{
GLfloat m, d;
GLfloat sPlane[4];
GLfloat nearPoint[3];
m = sqrt(lightDir[0] * lightDir[0] +
lightDir[1] * lightDir[1] +
lightDir[2] * lightDir[2]);
d = lightFar - lightNear;
/* nearPoint = point on light direction vector which intersects the
* near plane of the light frustum.
*/
nearPoint[0] = LightPos[0] + lightDir[0] / m * lightNear;
nearPoint[1] = LightPos[1] + lightDir[1] / m * lightNear;
nearPoint[2] = LightPos[2] + lightDir[2] / m * lightNear;
sPlane[0] = lightDir[0] / d / m;
sPlane[1] = lightDir[1] / d / m;
sPlane[2] = lightDir[2] / d / m;
sPlane[3] = -(sPlane[0] * nearPoint[0]
+ sPlane[1] * nearPoint[1]
+ sPlane[2] * nearPoint[2]);
glTexGenfv(GL_S, GL_EYE_PLANE, sPlane);
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glEnable(GL_TEXTURE_GEN_S);
}
static void
DisableTexgen(void)
{
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);
}
static void
ComputeLightPos(GLfloat dist, GLfloat latitude, GLfloat longitude,
GLfloat pos[4], GLfloat dir[3])
{
pos[0] = dist * sin(longitude * DEG_TO_RAD);
pos[1] = dist * sin(latitude * DEG_TO_RAD);
pos[2] = dist * cos(latitude * DEG_TO_RAD) * cos(longitude * DEG_TO_RAD);
pos[3] = 1;
dir[0] = -pos[0];
dir[1] = -pos[1];
dir[2] = -pos[2];
}
static void
Display(void)
{
GLfloat ar = (GLfloat) WindowWidth / (GLfloat) WindowHeight;
GLfloat d;
ComputeLightPos(LightDist, LightLatitude, LightLongitude,
LightPos, SpotDir);
/*
* Step 1: render scene from point of view of the light source
*/
/* compute frustum to enclose spot light cone */
d = ShadowNear * tan(SpotAngle);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-d, d, -d, d, ShadowNear, ShadowFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(LightPos[0], LightPos[1], LightPos[2], /* from */
0, 0, 0, /* target */
0, 1, 0); /* up */
glViewport(0, 0, ShadowTexWidth, ShadowTexHeight);
glClear(GL_DEPTH_BUFFER_BIT);
DrawScene();
/*
* Step 2: copy depth buffer into texture map
*/
if (DisplayMode == SHOW_DEPTH_MAPPING) {
/* load depth image as gray-scale luminance texture */
GLfloat *depth = malloc(ShadowTexWidth * ShadowTexHeight
* sizeof(GLfloat));
if (depth) {
glReadPixels(0, 0, ShadowTexWidth, ShadowTexHeight,
GL_DEPTH_COMPONENT, GL_FLOAT, depth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE,
ShadowTexWidth, ShadowTexHeight, 0,
GL_LUMINANCE, GL_FLOAT, depth);
free(depth);
}
}
else {
/* The normal shadow case */
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
0, 0, ShadowTexWidth, ShadowTexHeight, 0);
}
/*
* Step 3: render scene from point of view of the camera
*/
glViewport(0, 0, WindowWidth, WindowHeight);
if (DisplayMode == SHOW_DEPTH_IMAGE) {
ShowDepthBuffer(WindowWidth, WindowHeight, 0, 1);
}
else {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 4.0, 50.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -22.0);
glRotatef(Xrot, 1, 0, 0);
glRotatef(Yrot, 0, 1, 0);
glRotatef(Zrot, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLightfv(GL_LIGHT0, GL_POSITION, LightPos);
if (LinearFilter) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
if (DisplayMode == SHOW_DEPTH_MAPPING) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_FALSE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_TEXTURE_2D);
MakeShadowMatrix(LightPos, SpotDir, SpotAngle, ShadowNear, ShadowFar);
EnableIdentityTexgen();
}
else if (DisplayMode == SHOW_DISTANCE) {
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
EnableDistanceTexgen(LightPos, SpotDir, ShadowNear+Bias, ShadowFar);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glEnable(GL_TEXTURE_1D);
}
else {
assert(DisplayMode == SHOW_NORMAL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_SGIX, GL_TRUE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
MakeShadowMatrix(LightPos, SpotDir, SpotAngle, ShadowNear, ShadowFar);
EnableIdentityTexgen();
}
DrawScene();
DisableTexgen();
glDisable(GL_TEXTURE_1D);
glDisable(GL_TEXTURE_2D);
}
glutSwapBuffers();
}
static void
Reshape(int width, int height)
{
WindowWidth = width;
WindowHeight = height;
if (width >= 512 && height >= 512) {
ShadowTexWidth = ShadowTexHeight = 512;
}
else if (width >= 256 && height >= 256) {
ShadowTexWidth = ShadowTexHeight = 256;
}
else {
ShadowTexWidth = ShadowTexHeight = 128;
}
printf("Using %d x %d depth texture\n", ShadowTexWidth, ShadowTexHeight);
}
static void
Idle(void)
{
Yrot += 5.0;
/*LightLongitude -= 5.0;*/
glutPostRedisplay();
}
static void
Key(unsigned char key, int x, int y)
{
const GLfloat step = 3.0;
(void) x;
(void) y;
switch (key) {
case 'a':
Anim = !Anim;
if (Anim)
glutIdleFunc(Idle);
else
glutIdleFunc(NULL);
break;
case 'b':
Bias -= 0.01;
printf("Bias %g\n", Bias);
break;
case 'B':
Bias += 0.01;
printf("Bias %g\n", Bias);
break;
case 'd':
DisplayMode = SHOW_DISTANCE;
break;
case 'f':
LinearFilter = !LinearFilter;
printf("%s filtering\n", LinearFilter ? "Bilinear" : "Nearest");
break;
case 'i':
DisplayMode = SHOW_DEPTH_IMAGE;
break;
case 'm':
DisplayMode = SHOW_DEPTH_MAPPING;
break;
case 'n':
case ' ':
DisplayMode = SHOW_NORMAL;
break;
case 'z':
Zrot -= step;
break;
case 'Z':
Zrot += step;
break;
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
static void
SpecialKey(int key, int x, int y)
{
const GLfloat step = 3.0;
const int mod = glutGetModifiers();
(void) x;
(void) y;
switch (key) {
case GLUT_KEY_UP:
if (mod)
LightLatitude += step;
else
Xrot += step;
break;
case GLUT_KEY_DOWN:
if (mod)
LightLatitude -= step;
else
Xrot -= step;
break;
case GLUT_KEY_LEFT:
if (mod)
LightLongitude += step;
else
Yrot += step;
break;
case GLUT_KEY_RIGHT:
if (mod)
LightLongitude -= step;
else
Yrot -= step;
break;
}
glutPostRedisplay();
}
static void
Init(void)
{
if (!glutExtensionSupported("GL_SGIX_depth_texture") ||
!glutExtensionSupported("GL_SGIX_shadow")) {
printf("Sorry, this demo requires the GL_SGIX_depth_texture and GL_SGIX_shadow extensions\n");
exit(1);
}
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
#ifdef GL_SGIX_shadow
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_OPERATOR_SGIX,
GL_TEXTURE_LEQUAL_R_SGIX);
#endif
#ifdef GL_SGIX_shadow_ambient
if (glutExtensionSupported("GL_SGIX_shadow_ambient"))
glTexParameterf(GL_TEXTURE_2D, GL_SHADOW_AMBIENT_SGIX, 0.3);
#endif
/* setup 1-D grayscale texture image for SHOW_DISTANCE mode */
{
GLuint i;
GLubyte image[256];
for (i = 0; i < 256; i++)
image[i] = i;
glTexImage1D(GL_TEXTURE_1D, 0, GL_LUMINANCE,
256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, image);
}
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
static void
PrintHelp(void)
{
printf("Keys:\n");
printf(" a = toggle animation\n");
printf(" i = show depth texture image\n");
printf(" m = show depth texture mapping\n");
printf(" d = show fragment distance from light source\n");
printf(" n = show normal, shadowed image\n");
printf(" f = toggle nearest/bilinear texture filtering\n");
printf(" b/B = decrease/increase shadow map Z bias\n");
printf(" cursor keys = rotate scene\n");
printf(" <shift> + cursor keys = rotate light source\n");
}
int
main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowPosition(0, 0);
glutInitWindowSize(WindowWidth, WindowHeight);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow(argv[0]);
glutReshapeFunc(Reshape);
glutKeyboardFunc(Key);
glutSpecialFunc(SpecialKey);
glutDisplayFunc(Display);
if (Anim)
glutIdleFunc(Idle);
Init();
PrintHelp();
glutMainLoop();
return 0;
}

View File

@@ -16,8 +16,7 @@
#endif
#include <GL/glut.h>
#include "../util/readtex.c"
#include "shadow.c"
#include "readtex.c"
#ifdef XMESA
#include "GL/xmesa.h"
@@ -27,7 +26,8 @@ static int fullscreen=1;
static int WIDTH=640;
static int HEIGHT=480;
#define FRAME 50
static GLint T0 = 0;
static GLint Frames = 0;
#define BASESIZE 10.0
@@ -65,20 +65,84 @@ static int joyactive=0;
static GLuint t1id,t2id;
static GLuint teapotdlist,basedlist,lightdlist;
static float gettime(void)
/******************** begin shadow code ********************/
/* Taken from the projshadow.c - by Tom McReynolds, SGI */
/* Modified by David Bucciarelli */
enum {
X, Y, Z, W
};
enum {
A, B, C, D
};
/* create a matrix that will project the desired shadow */
void
shadowmatrix(GLfloat shadowMat[4][4],
GLfloat groundplane[4],
GLfloat lightpos[4])
{
static clock_t told=0;
clock_t tnew,ris;
GLfloat dot;
tnew=clock();
/* find dot product between light position vector and ground plane normal */
dot = groundplane[X] * lightpos[X] +
groundplane[Y] * lightpos[Y] +
groundplane[Z] * lightpos[Z] +
groundplane[W] * lightpos[W];
ris=tnew-told;
shadowMat[0][0] = dot - lightpos[X] * groundplane[X];
shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y];
shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z];
shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W];
told=tnew;
shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X];
shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y];
shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z];
shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W];
shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X];
shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y];
shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z];
shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W];
shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X];
shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y];
shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z];
shadowMat[3][3] = dot - lightpos[W] * groundplane[W];
return(ris/(float)CLOCKS_PER_SEC);
}
/* find the plane equation given 3 points */
void
findplane(GLfloat plane[4],
GLfloat v0[3], GLfloat v1[3], GLfloat v2[3])
{
GLfloat vec0[3], vec1[3];
/* need 2 vectors to find cross product */
vec0[X] = v1[X] - v0[X];
vec0[Y] = v1[Y] - v0[Y];
vec0[Z] = v1[Z] - v0[Z];
vec1[X] = v2[X] - v0[X];
vec1[Y] = v2[Y] - v0[Y];
vec1[Z] = v2[Z] - v0[Z];
/* find cross product to get A, B, and C of plane equation */
plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y];
plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]);
plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X];
plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]);
}
/******************** end shadow code ********************/
static void calcposobs(void)
{
dir[0]=sin(alpha*M_PI/180.0);
@@ -208,11 +272,15 @@ static void printhelp(void)
static void drawbase(void)
{
static const GLfloat amb[4] = { 1, .5, 0.2, 1 };
static const GLfloat diff[4] = { 1, .4, 0.2, 1 };
int i,j;
float x,y,dx,dy;
glBindTexture(GL_TEXTURE_2D,t1id);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff);
dx=BASESIZE/BASERES;
dy=-BASESIZE/BASERES;
for(y=BASESIZE/2.0,j=0;j<BASERES;y+=dy,j++) {
@@ -232,9 +300,14 @@ static void drawbase(void)
static void drawteapot(void)
{
static const GLfloat amb[4] = { 0.2, 0.2, 0.2, 1 };
static const GLfloat diff[4] = { 0.8, 0.3, 0.5, 1 };
static float xrot=0.0;
static float zrot=0.0;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diff);
glPushMatrix();
glRotatef(lightalpha,0.0,0.0,1.0);
glMultMatrixf((GLfloat *)baseshadow);
@@ -339,9 +412,7 @@ static void dojoy(void)
static void draw(void)
{
static int count=0;
static char frbuf[80];
float fr;
static char frbuf[80] = "";
dojoy();
@@ -375,11 +446,6 @@ static void draw(void)
drawlight2();
glPopMatrix();
if((count % FRAME)==0) {
fr=gettime();
sprintf(frbuf,"Frame rate: %f",FRAME/fr);
}
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
@@ -405,7 +471,18 @@ static void draw(void)
glutSwapBuffers();
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
sprintf(frbuf, "Frame rate: %f", fps);
T0 = t;
Frames = 0;
}
}
}
static void inittextures(void)
@@ -430,11 +507,26 @@ static void inittextures(void)
glGenTextures(1,&t2id);
glBindTexture(GL_TEXTURE_2D,t2id);
glPixelTransferf(GL_RED_SCALE, 0.75);
glPixelTransferf(GL_RED_BIAS, 0.25);
glPixelTransferf(GL_GREEN_SCALE, 0.75);
glPixelTransferf(GL_GREEN_BIAS, 0.25);
glPixelTransferf(GL_BLUE_SCALE, 0.75);
glPixelTransferf(GL_BLUE_BIAS, 0.25);
if (!LoadRGBMipmaps("../images/bw.rgb", GL_RGB)) {
fprintf(stderr,"Error reading a texture.\n");
exit(-1);
}
glPixelTransferf(GL_RED_SCALE, 1.0);
glPixelTransferf(GL_RED_BIAS, 0.0);
glPixelTransferf(GL_GREEN_SCALE, 1.0);
glPixelTransferf(GL_GREEN_BIAS, 0.0);
glPixelTransferf(GL_BLUE_SCALE, 1.0);
glPixelTransferf(GL_BLUE_BIAS, 0.0);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
@@ -446,17 +538,26 @@ static void inittextures(void)
static void initlight(void)
{
float lamb[4]={0.2,0.2,0.2,1.0};
float lspec[4]={1.0,1.0,1.0,1.0};
float matamb[4] ={0.5, 0.5, 0.5, 1.0};
float matdiff[4]={0.9, 0.2, 0.2, 1.0};
float matspec[4]={1.0,1.0,1.0,1.0};
float lamb[4] ={1.5, 1.5, 1.5, 1.0};
float ldiff[4]={1.0, 1.0, 1.0, 1.0};
float lspec[4]={1.0, 1.0, 1.0, 1.0};
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,70.0);
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0);
glLightfv(GL_LIGHT0,GL_AMBIENT,lamb);
glLightfv(GL_LIGHT0,GL_DIFFUSE,ldiff);
glLightfv(GL_LIGHT0,GL_SPECULAR,lspec);
glMaterialf(GL_FRONT_AND_BACK,GL_SHININESS,20.0);
glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,lspec);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 15.0);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, matdiff);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, matspec);
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, matamb);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lamb);
glEnable(GL_LIGHT0);
}

View File

@@ -38,9 +38,10 @@ static int fullscreen = 1;
#define WIDTH 640
#define HEIGHT 480
#define TSCALE 4
static GLint T0 = 0;
static GLint Frames = 0;
#define FRAME 50
#define TSCALE 4
#define FOV 85
@@ -71,21 +72,6 @@ static float v = 15.0;
static float alpha = 75.0;
static float beta = 90.0;
static float
gettime(void)
{
static clock_t told = 0;
clock_t tnew, ris;
tnew = clock();
ris = tnew - told;
told = tnew;
return (ris / (float) CLOCKS_PER_SEC);
}
static void
calcposobs(void)
{
@@ -95,6 +81,13 @@ calcposobs(void)
dir[2] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[1] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
alpha1 = alpha + FOV / 2.0;
v1[0] = sin(alpha1 * M_PI / 180.0);
v1[1] = cos(alpha1 * M_PI / 180.0);
@@ -360,9 +353,7 @@ dojoy(void)
static void
drawscene(void)
{
static int count = 0;
static char frbuf[80];
float fr;
static char frbuf[80] = "";
dojoy();
@@ -391,11 +382,6 @@ drawscene(void)
drawterrain();
glPopMatrix();
if ((count % FRAME) == 0) {
fr = gettime();
sprintf(frbuf, "Frame rate: %.3f", FRAME / fr);
}
glDisable(GL_TEXTURE_2D);
glDisable(GL_DEPTH_TEST);
glDisable(GL_FOG);
@@ -424,7 +410,17 @@ drawscene(void)
glutSwapBuffers();
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
sprintf(frbuf, "Frame rate: %f", fps);
T0 = t;
Frames = 0;
}
}
}
static void
@@ -558,7 +554,7 @@ loadpic(void)
GLenum gluerr;
if ((FilePic = fopen("terrain.dat", "r")) == NULL) {
fprintf(stderr, "Error loading Mnt.bin\n");
fprintf(stderr, "Error loading terrain.dat\n");
exit(-1);
}
fread(bufferter, 256 * 256, 1, FilePic);

1
progs/demos/terrain.dat Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,331 +1,410 @@
/* $Id: tessdemo.c,v 1.8 2000/07/11 14:11:58 brianp Exp $ */
/* $Id: tessdemo.c,v 1.11 2001/03/21 02:47:32 gareth Exp $ */
/*
* A demo of the GLU polygon tesselation functions written by Bogdan Sikorski.
* Updated for GLU 1.3 tessellation by Gareth Hughes <gareth@valinux.com>
*/
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_POINTS 200
#define MAX_CONTOURS 50
#define MAX_POINTS 256
#define MAX_CONTOURS 32
#define MAX_TRIANGLES 256
static int menu;
typedef enum
{ QUIT, TESSELATE, CLEAR }
menu_entries;
#ifndef GLCALLBACK
#ifdef CALLBACK
#define GLCALLBACK CALLBACK
#else
#define GLCALLBACK
#endif
#endif
typedef enum
{ DEFINE, TESSELATED }
mode_type;
#ifdef GLU_VERSION_1_2
struct
typedef enum{ QUIT, TESSELATE, CLEAR } menu_entries;
typedef enum{ DEFINE, TESSELATED } mode_type;
static GLsizei width, height;
static GLuint contour_cnt;
static GLuint triangle_cnt;
static mode_type mode;
static int menu;
static GLuint list_start;
static GLfloat edge_color[3];
static struct {
GLfloat p[MAX_POINTS][2];
GLuint point_cnt;
} contours[MAX_CONTOURS];
static struct {
GLsizei no;
GLfloat p[3][2];
GLclampf color[3][3];
} triangles[MAX_TRIANGLES];
static void GLCALLBACK error_callback( GLenum err )
{
GLint p[MAX_POINTS][2];
GLuint point_cnt;
}
contours[MAX_CONTOURS];
int len, i;
char const *str;
static GLuint contour_cnt;
static GLsizei width, height;
static mode_type mode;
glColor3f( 0.9, 0.9, 0.9 );
glRasterPos2i( 5, 5 );
struct
{
GLsizei no;
GLfloat color[3];
GLint p[3][2];
GLclampf p_color[3][3];
}
triangle;
str = (const char *) gluErrorString( err );
len = strlen( str );
static void GLCALLBACK
my_error(GLenum err)
{
int len, i;
char const *str;
glColor3f(0.9, 0.9, 0.9);
glRasterPos2i(5, 5);
str = (const char *) gluErrorString(err);
len = strlen(str);
for (i = 0; i < len; i++)
glutBitmapCharacter(GLUT_BITMAP_9_BY_15, str[i]);
}
static void GLCALLBACK
begin_callback(GLenum mode)
{
triangle.no = 0;
}
static void GLCALLBACK
edge_callback(GLenum flag)
{
if (flag == GL_TRUE) {
triangle.color[0] = 1.0;
triangle.color[1] = 1.0;
triangle.color[2] = 0.5;
}
else {
triangle.color[0] = 1.0;
triangle.color[1] = 0.0;
triangle.color[2] = 0.0;
for ( i = 0 ; i < len ; i++ ) {
glutBitmapCharacter( GLUT_BITMAP_9_BY_15, str[i] );
}
}
static void GLCALLBACK
end_callback()
static void GLCALLBACK begin_callback( GLenum mode )
{
glBegin(GL_LINES);
glColor3f(triangle.p_color[0][0], triangle.p_color[0][1],
triangle.p_color[0][2]);
glVertex2i(triangle.p[0][0], triangle.p[0][1]);
glVertex2i(triangle.p[1][0], triangle.p[1][1]);
glColor3f(triangle.p_color[1][0], triangle.p_color[1][1],
triangle.p_color[1][2]);
glVertex2i(triangle.p[1][0], triangle.p[1][1]);
glVertex2i(triangle.p[2][0], triangle.p[2][1]);
glColor3f(triangle.p_color[2][0], triangle.p_color[2][1],
triangle.p_color[2][2]);
glVertex2i(triangle.p[2][0], triangle.p[2][1]);
glVertex2i(triangle.p[0][0], triangle.p[0][1]);
/* Allow multiple triangles to be output inside the begin/end pair. */
triangle_cnt = 0;
triangles[triangle_cnt].no = 0;
}
static void GLCALLBACK edge_callback( GLenum flag )
{
/* Persist the edge flag across triangles. */
if ( flag == GL_TRUE ) {
edge_color[0] = 1.0;
edge_color[1] = 1.0;
edge_color[2] = 0.5;
} else {
edge_color[0] = 1.0;
edge_color[1] = 0.0;
edge_color[2] = 0.0;
}
}
static void GLCALLBACK end_callback()
{
GLint i;
glBegin( GL_LINES );
/* Output the three edges of each triangle as lines colored
according to their edge flag. */
for ( i = 0 ; i < triangle_cnt ; i++ ) {
glColor3f( triangles[i].color[0][0],
triangles[i].color[0][1],
triangles[i].color[0][2] );
glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] );
glVertex2f( triangles[i].p[1][0], triangles[i].p[1][1] );
glColor3f( triangles[i].color[1][0],
triangles[i].color[1][1],
triangles[i].color[1][2] );
glVertex2f( triangles[i].p[1][0], triangles[i].p[1][1] );
glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] );
glColor3f( triangles[i].color[2][0],
triangles[i].color[2][1],
triangles[i].color[2][2] );
glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] );
glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] );
}
glEnd();
}
static void GLCALLBACK
vertex_callback(void *data)
static void GLCALLBACK vertex_callback( void *data )
{
GLsizei no;
GLint *p;
GLsizei no;
GLfloat *p;
p = (GLint *) data;
no = triangle.no;
triangle.p[no][0] = p[0];
triangle.p[no][1] = p[1];
triangle.p_color[no][0] = triangle.color[0];
triangle.p_color[no][1] = triangle.color[1];
triangle.p_color[no][2] = triangle.color[2];
++(triangle.no);
p = (GLfloat *) data;
no = triangles[triangle_cnt].no;
triangles[triangle_cnt].p[no][0] = p[0];
triangles[triangle_cnt].p[no][1] = p[1];
triangles[triangle_cnt].color[no][0] = edge_color[0];
triangles[triangle_cnt].color[no][1] = edge_color[1];
triangles[triangle_cnt].color[no][2] = edge_color[2];
/* After every three vertices, initialize the next triangle. */
if ( ++(triangles[triangle_cnt].no) == 3 ) {
triangle_cnt++;
triangles[triangle_cnt].no = 0;
}
}
static void GLCALLBACK combine_callback( GLdouble coords[3],
GLdouble *vertex_data[4],
GLfloat weight[4], void **data )
{
GLfloat *vertex;
vertex = (GLfloat *) malloc( 2 * sizeof(GLfloat) );
vertex[0] = (GLfloat) coords[0];
vertex[1] = (GLfloat) coords[1];
*data = vertex;
}
static void
set_screen_wh(GLsizei w, GLsizei h)
static void set_screen_wh( GLsizei w, GLsizei h )
{
width = w;
height = h;
}
static void
tesse(void)
static void tesse( void )
{
GLUtriangulatorObj *tobj;
GLdouble data[3];
GLuint i, j, point_cnt;
GLUtesselator *tobj;
GLdouble data[3];
GLuint i, j, point_cnt;
list_start = glGenLists( 2 );
tobj = gluNewTess();
if (tobj != NULL) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.7, 0.7, 0.0);
gluTessCallback(tobj, GLU_BEGIN, glBegin);
gluTessCallback(tobj, GLU_END, glEnd);
gluTessCallback(tobj, GLU_ERROR, my_error);
gluTessCallback(tobj, GLU_VERTEX, glVertex2iv);
gluBeginPolygon(tobj);
for (j = 0; j <= contour_cnt; j++) {
if ( tobj != NULL ) {
gluTessNormal( tobj, 0.0, 0.0, 1.0 );
gluTessCallback( tobj, GLU_TESS_BEGIN, glBegin );
gluTessCallback( tobj, GLU_TESS_VERTEX, glVertex2fv );
gluTessCallback( tobj, GLU_TESS_END, glEnd );
gluTessCallback( tobj, GLU_TESS_ERROR, error_callback );
gluTessCallback( tobj, GLU_TESS_COMBINE, combine_callback );
glNewList( list_start, GL_COMPILE );
gluBeginPolygon( tobj );
for ( j = 0 ; j <= contour_cnt ; j++ ) {
point_cnt = contours[j].point_cnt;
gluNextContour(tobj, GLU_UNKNOWN);
for (i = 0; i < point_cnt; i++) {
data[0] = (GLdouble) (contours[j].p[i][0]);
data[1] = (GLdouble) (contours[j].p[i][1]);
gluNextContour( tobj, GLU_UNKNOWN );
for ( i = 0 ; i < point_cnt ; i++ ) {
data[0] = (GLdouble)( contours[j].p[i][0] );
data[1] = (GLdouble)( contours[j].p[i][1] );
data[2] = 0.0;
gluTessVertex(tobj, data, contours[j].p[i]);
gluTessVertex( tobj, data, contours[j].p[i] );
}
}
gluEndPolygon(tobj);
glLineWidth(2.0);
gluTessCallback(tobj, GLU_BEGIN, begin_callback);
gluTessCallback(tobj, GLU_END, end_callback);
gluTessCallback(tobj, GLU_VERTEX, vertex_callback);
gluTessCallback(tobj, GLU_EDGE_FLAG, edge_callback);
gluBeginPolygon(tobj);
for (j = 0; j <= contour_cnt; j++) {
gluEndPolygon( tobj );
glEndList();
gluTessCallback( tobj, GLU_TESS_BEGIN, begin_callback );
gluTessCallback( tobj, GLU_TESS_VERTEX, vertex_callback );
gluTessCallback( tobj, GLU_TESS_END, end_callback );
gluTessCallback( tobj, GLU_TESS_EDGE_FLAG, edge_callback );
glNewList( list_start + 1, GL_COMPILE );
gluBeginPolygon( tobj );
for ( j = 0 ; j <= contour_cnt ; j++ ) {
point_cnt = contours[j].point_cnt;
gluNextContour(tobj, GLU_UNKNOWN);
for (i = 0; i < point_cnt; i++) {
data[0] = (GLdouble) (contours[j].p[i][0]);
data[1] = (GLdouble) (contours[j].p[i][1]);
gluNextContour( tobj, GLU_UNKNOWN );
for ( i = 0 ; i < point_cnt ; i++ ) {
data[0] = (GLdouble)( contours[j].p[i][0] );
data[1] = (GLdouble)( contours[j].p[i][1] );
data[2] = 0.0;
gluTessVertex(tobj, data, contours[j].p[i]);
gluTessVertex( tobj, data, contours[j].p[i] );
}
}
gluEndPolygon(tobj);
gluDeleteTess(tobj);
glutMouseFunc(NULL);
glColor3f(1.0, 1.0, 0.0);
glLineWidth(1.0);
gluEndPolygon( tobj );
glEndList();
gluDeleteTess( tobj );
glutMouseFunc( NULL );
mode = TESSELATED;
}
}
static void
left_down(int x1, int y1)
static void left_down( int x1, int y1 )
{
GLint P[2];
GLuint point_cnt;
GLfloat P[2];
GLuint point_cnt;
/* translate GLUT into GL coordinates */
P[0] = x1;
P[1] = height - y1;
point_cnt = contours[contour_cnt].point_cnt;
contours[contour_cnt].p[point_cnt][0] = P[0];
contours[contour_cnt].p[point_cnt][1] = P[1];
glBegin(GL_LINES);
if (point_cnt) {
glVertex2iv(contours[contour_cnt].p[point_cnt - 1]);
glVertex2iv(P);
}
else {
glVertex2iv(P);
glVertex2iv(P);
glBegin( GL_LINES );
if ( point_cnt ) {
glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
glVertex2fv( P );
} else {
glVertex2fv( P );
glVertex2fv( P );
}
glEnd();
glFinish();
++(contours[contour_cnt].point_cnt);
contours[contour_cnt].point_cnt++;
}
static void
middle_down(int x1, int y1)
static void middle_down( int x1, int y1 )
{
GLuint point_cnt;
GLuint point_cnt;
(void) x1;
(void) y1;
point_cnt = contours[contour_cnt].point_cnt;
if (point_cnt > 2) {
glBegin(GL_LINES);
glVertex2iv(contours[contour_cnt].p[0]);
glVertex2iv(contours[contour_cnt].p[point_cnt - 1]);
if ( point_cnt > 2 ) {
glBegin( GL_LINES );
glVertex2fv( contours[contour_cnt].p[0] );
glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
contours[contour_cnt].p[point_cnt][0] = -1;
glEnd();
glFinish();
contour_cnt++;
contours[contour_cnt].point_cnt = 0;
}
}
static void
mouse_clicked(int button, int state, int x, int y)
static void mouse_clicked( int button, int state, int x, int y )
{
x -= x % 10;
y -= y % 10;
switch (button) {
x -= x%10;
y -= y%10;
switch ( button ) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN)
left_down(x, y);
if ( state == GLUT_DOWN ) {
left_down( x, y );
}
break;
case GLUT_MIDDLE_BUTTON:
if (state == GLUT_DOWN)
middle_down(x, y);
if ( state == GLUT_DOWN ) {
middle_down( x, y );
}
break;
}
}
static void
display(void)
static void display( void )
{
GLuint i, j;
GLuint i,j;
GLuint point_cnt;
glClear(GL_COLOR_BUFFER_BIT);
switch (mode) {
glClear( GL_COLOR_BUFFER_BIT );
switch ( mode ) {
case DEFINE:
/* draw grid */
glColor3f(0.6, 0.5, 0.5);
glBegin(GL_LINES);
for (i = 0; i < width; i += 10)
for (j = 0; j < height; j += 10) {
glVertex2i(0, j);
glVertex2i(width, j);
glVertex2i(i, height);
glVertex2i(i, 0);
glColor3f( 0.6, 0.5, 0.5 );
glBegin( GL_LINES );
for ( i = 0 ; i < width ; i += 10 ) {
for ( j = 0 ; j < height ; j += 10 ) {
glVertex2i( 0, j );
glVertex2i( width, j );
glVertex2i( i, height );
glVertex2i( i, 0 );
}
}
glEnd();
glColor3f(1.0, 1.0, 0.0);
for (i = 0; i <= contour_cnt; i++) {
glColor3f( 1.0, 1.0, 0.0 );
for ( i = 0 ; i <= contour_cnt ; i++ ) {
point_cnt = contours[i].point_cnt;
glBegin(GL_LINES);
switch (point_cnt) {
glBegin( GL_LINES );
switch ( point_cnt ) {
case 0:
break;
case 1:
glVertex2iv(contours[i].p[0]);
glVertex2iv(contours[i].p[0]);
glVertex2fv( contours[i].p[0] );
glVertex2fv( contours[i].p[0] );
break;
case 2:
glVertex2iv(contours[i].p[0]);
glVertex2iv(contours[i].p[1]);
glVertex2fv( contours[i].p[0] );
glVertex2fv( contours[i].p[1] );
break;
default:
--point_cnt;
for (j = 0; j < point_cnt; j++) {
glVertex2iv(contours[i].p[j]);
glVertex2iv(contours[i].p[j + 1]);
for ( j = 0 ; j < point_cnt ; j++ ) {
glVertex2fv( contours[i].p[j] );
glVertex2fv( contours[i].p[j+1] );
}
if (contours[i].p[j + 1][0] == -1) {
glVertex2iv(contours[i].p[0]);
glVertex2iv(contours[i].p[j]);
if ( contours[i].p[j+1][0] == -1 ) {
glVertex2fv( contours[i].p[0] );
glVertex2fv( contours[i].p[j] );
}
break;
}
glEnd();
}
glFinish();
break;
case TESSELATED:
/* draw lines */
tesse();
/* draw triangles */
glColor3f( 0.7, 0.7, 0.0 );
glCallList( list_start );
glLineWidth( 2.0 );
glCallList( list_start + 1 );
glLineWidth( 1.0 );
glFlush();
break;
}
glColor3f(1.0, 1.0, 0.0);
glColor3f( 1.0, 1.0, 0.0 );
}
static void
clear(void)
static void clear( void )
{
contour_cnt = 0;
contours[0].point_cnt = 0;
glutMouseFunc(mouse_clicked);
triangle_cnt = 0;
glutMouseFunc( mouse_clicked );
mode = DEFINE;
display();
glDeleteLists( list_start, 2 );
list_start = 0;
}
static void
quit(void)
static void quit( void )
{
exit(0);
exit( 0 );
}
static void
menu_selected(int entry)
static void menu_selected( int entry )
{
switch (entry) {
switch ( entry ) {
case CLEAR:
clear();
break;
@@ -336,87 +415,107 @@ menu_selected(int entry)
quit();
break;
}
glutPostRedisplay();
}
static void
key_pressed(unsigned char key, int x, int y)
static void key_pressed( unsigned char key, int x, int y )
{
switch (key) {
case 't':
case 'T':
tesse();
glFinish();
break;
case 'q':
case 'Q':
quit();
break;
(void) x;
(void) y;
switch ( key ) {
case 'c':
case 'C':
clear();
break;
case 't':
case 'T':
tesse();
break;
case 27:
case 'q':
case 'Q':
quit();
break;
}
glutPostRedisplay();
}
static void
myinit(void)
static void myinit( void )
{
/* clear background to gray */
glClearColor(0.4, 0.4, 0.4, 0.0);
glShadeModel(GL_FLAT);
/* clear background to gray */
glClearColor( 0.4, 0.4, 0.4, 0.0 );
glShadeModel( GL_FLAT );
glPolygonMode( GL_FRONT, GL_FILL );
menu = glutCreateMenu( menu_selected );
glutAddMenuEntry( "clear", CLEAR );
glutAddMenuEntry( "tesselate", TESSELATE );
glutAddMenuEntry( "quit", QUIT );
glutAttachMenu( GLUT_RIGHT_BUTTON );
glutMouseFunc( mouse_clicked );
glutKeyboardFunc( key_pressed );
menu = glutCreateMenu(menu_selected);
glutAddMenuEntry("clear", CLEAR);
glutAddMenuEntry("tesselate", TESSELATE);
glutAddMenuEntry("quit", QUIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMouseFunc(mouse_clicked);
glutKeyboardFunc(key_pressed);
contour_cnt = 0;
glPolygonMode(GL_FRONT, GL_FILL);
mode = DEFINE;
}
static void
reshape(GLsizei w, GLsizei h)
static void reshape( GLsizei w, GLsizei h )
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glViewport( 0, 0, w, h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(0.0, (GLdouble) w, 0.0, (GLdouble) h, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glOrtho( 0.0, (GLdouble)w, 0.0, (GLdouble)h, -1.0, 1.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
set_screen_wh(w, h);
set_screen_wh( w, h );
}
#endif
static void usage( void )
{
printf( "Use left mouse button to place vertices.\n" );
printf( "Press middle mouse button when done.\n" );
printf( "Select tesselate from the pop-up menu.\n" );
}
static void
usage(void)
int main( int argc, char **argv )
{
printf("Use left mouse button to place vertices.\n");
printf("Press middle mouse button when done.\n");
printf("Select tesselate from the pop-up menu.\n");
}
const char *version = (const char *) gluGetString( GLU_VERSION );
printf( "GLU version string: %s\n", version );
if ( strstr( version, "1.0" ) || strstr( version, "1.1" ) ) {
fprintf( stderr, "Sorry, this demo reqiures GLU 1.2 or later.\n" );
exit( 1 );
}
/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, and handle input events.
*/
int
main(int argc, char **argv)
{
usage();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow(argv[0]);
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_SINGLE | GLUT_RGB );
glutInitWindowSize( 400, 400 );
glutCreateWindow( argv[0] );
/* GH: Bit of a hack...
*/
#ifdef GLU_VERSION_1_2
myinit();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutDisplayFunc( display );
glutReshapeFunc( reshape );
glutMainLoop();
#endif
return 0;
}

View File

@@ -1,4 +1,4 @@
/* $Id: texcyl.c,v 1.2 1999/10/21 16:39:06 brianp Exp $ */
/* $Id: texcyl.c,v 1.5 2001/03/27 17:35:26 brianp Exp $ */
/*
* Textured cylinder demo: lighting, texturing, reflection mapping.
@@ -12,6 +12,38 @@
/*
* $Log: texcyl.c,v $
* Revision 1.5 2001/03/27 17:35:26 brianp
* set initial window pos
*
* Revision 1.4 2000/12/24 22:53:54 pesco
* * demos/Makefile.am (INCLUDES): Added -I$(top_srcdir)/util.
* * demos/Makefile.X11, demos/Makefile.BeOS-R4, demos/Makefile.cygnus:
* Essentially the same.
* Program files updated to include "readtex.c", not "../util/readtex.c".
* * demos/reflect.c: Likewise for "showbuffer.c".
*
*
* * Makefile.am (EXTRA_DIST): Added top-level regular files.
*
* * include/GL/Makefile.am (INC_X11): Added glxext.h.
*
*
* * src/GGI/include/ggi/mesa/Makefile.am (EXTRA_HEADERS): Include
* Mesa GGI headers in dist even if HAVE_GGI is not given.
*
* * configure.in: Look for GLUT and demo source dirs in $srcdir.
*
* * src/swrast/Makefile.am (libMesaSwrast_la_SOURCES): Set to *.[ch].
* More source list updates in various Makefile.am's.
*
* * Makefile.am (dist-hook): Remove CVS directory from distribution.
* (DIST_SUBDIRS): List all possible subdirs here.
* (SUBDIRS): Only list subdirs selected for build again.
* The above two applied to all subdir Makefile.am's also.
*
* Revision 1.3 2000/09/29 23:09:39 brianp
* added fps output
*
* Revision 1.2 1999/10/21 16:39:06 brianp
* added -info command line option
*
@@ -38,7 +70,7 @@
#include <math.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#include "readtex.c" /* I know, this is a hack. */
#define TEXTURE_FILE "../images/reflect.rgb"
@@ -56,6 +88,10 @@ static GLboolean Animate = GL_TRUE;
static GLfloat Xrot = 0.0, Yrot = 0.0, Zrot = 0.0;
static GLfloat DXrot = 1.0, DYrot = 2.5;
/* performance info */
static GLint T0 = 0;
static GLint Frames = 0;
static void Idle( void )
{
@@ -81,6 +117,18 @@ static void Display( void )
glPopMatrix();
glutSwapBuffers();
if (Animate) {
GLint t = glutGet(GLUT_ELAPSED_TIME);
Frames++;
if (t - T0 >= 5000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
T0 = t;
Frames = 0;
}
}
}
@@ -248,6 +296,7 @@ int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowSize( 400, 400 );
glutInitWindowPosition( 0, 0 );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );

View File

@@ -1,18 +1,18 @@
/* $Id: texdown.c,v 1.3 2000/03/29 18:02:52 brianp Exp $ */
/* $Id: texdown.c,v 1.4 2001/02/07 03:04:58 gareth Exp $ */
/*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
@@ -148,6 +148,10 @@ MeasureDownloadRate(void)
glPixelTransferf(GL_BLUE_BIAS, 0.0);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
count = 0;
t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
do {
@@ -163,24 +167,20 @@ MeasureDownloadRate(void)
FormatTable[Format].Type, texImage);
}
if (count == 0) {
/* draw a tiny polygon to force texture into texram */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_TEXTURE_2D);
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 0); glVertex2f(1, 1);
glTexCoord2f(1, 0); glVertex2f(3, 1);
glTexCoord2f(0.5, 1); glVertex2f(2, 3);
glEnd();
glDisable(GL_TEXTURE_2D);
}
/* draw a tiny polygon to force texture into texram */
glBegin(GL_TRIANGLES);
glTexCoord2f(0, 0); glVertex2f(1, 1);
glTexCoord2f(1, 0); glVertex2f(3, 1);
glTexCoord2f(0.5, 1); glVertex2f(2, 3);
glEnd();
t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001;
time = t1 - t0;
count++;
} while (time < 3.0);
glDisable(GL_TEXTURE_2D);
printf("w*h=%d count=%d time=%f\n", w*h, count, time);
DownloadRate = w * h * count / time;

View File

@@ -65,7 +65,7 @@ GLfloat *labelInfoColor = labelColor0;
GLfloat labelLevelColor0[4] = { 0.8, 0.8, 0.1, 1.0 };
GLfloat labelLevelColor1[4] = { 0.0, 0.0, 0.0, 1.0 };
GLboolean doubleBuffered = GL_FALSE;
GLboolean doubleBuffered = GL_TRUE;
GLboolean drawBackground = GL_FALSE;
GLboolean drawBlended = GL_TRUE;
GLboolean drawSmooth = GL_FALSE;
@@ -141,7 +141,7 @@ struct formatInfo rgbFormats[] =
#define NUM_RGBA_FORMATS (sizeof(rgbaFormats) / sizeof(rgbaFormats[0]))
struct formatInfo rgbaFormats[] =
{
{ GL_RGBA, 4, "RGBA" },
{ GL_RGBA, GL_RGBA, "RGBA" },
{ GL_RGBA, GL_RGBA2, "RGBA2" },
{ GL_RGBA, GL_RGBA4, "RGBA4" },
{ GL_RGBA, GL_RGB5_A1, "RGB5_A1" },
@@ -208,7 +208,8 @@ static void checkErrors( void )
}
}
static void drawString( char *string, GLfloat x, GLfloat y, GLfloat color[4] )
static void drawString( const char *string, GLfloat x, GLfloat y,
const GLfloat color[4] )
{
glColor4fv( color );
glRasterPos2f( x, y );
@@ -219,8 +220,9 @@ static void drawString( char *string, GLfloat x, GLfloat y, GLfloat color[4] )
}
}
static void drawStringOutline( char *string, GLfloat x, GLfloat y,
GLfloat color[4], GLfloat outline[4] )
static void drawStringOutline( const char *string, GLfloat x, GLfloat y,
const GLfloat color[4],
const GLfloat outline[4] )
{
drawString( string, x - 1, y, outline );
drawString( string, x + 1, y, outline );
@@ -335,7 +337,8 @@ reshape( int w, int h )
/* No need to call glViewPort here since "draw" calls it! */
}
static void loadTexture( int width, int height, struct formatInfo *format )
static void loadTexture( int width, int height,
const struct formatInfo *format )
{
int luminanceSize = 0;
int alphaSize = 0;
@@ -497,7 +500,8 @@ static void loadTexture( int width, int height, struct formatInfo *format )
free( texImage );
}
static void drawCheck( int w, int h, GLfloat lightCheck[4], GLfloat darkCheck[4] )
static void drawCheck( int w, int h, const GLfloat lightCheck[4],
const GLfloat darkCheck[4] )
{
float dw = 2.0 / w;
float dh = 2.0 / h;
@@ -526,8 +530,35 @@ static void drawCheck( int w, int h, GLfloat lightCheck[4], GLfloat darkCheck[4]
}
}
static const char *lookupFormat( GLint format )
{
switch ( format ) {
case GL_RGBA:
return "GL_RGBA";
case GL_RGB:
return "GL_RGB";
case GL_ALPHA:
return "GL_ALPHA";
case GL_LUMINANCE:
return "GL_LUMINANCE";
case GL_LUMINANCE_ALPHA:
return "GL_LUMINANCE_ALPHA";
case GL_INTENSITY:
return "GL_INTENSITY";
case GL_COLOR_INDEX:
return "GL_COLOR_INDEX";
case GL_BGRA:
return "GL_BGRA";
case GL_BGR:
return "GL_BGR";
default:
return "unknown format";
}
}
static void drawSample( int x, int y, int w, int h,
struct formatInfo *format, struct envModeInfo *envMode )
const struct formatInfo *format,
const struct envModeInfo *envMode )
{
glViewport( x, y, w, h );
glScissor( x, y, w, h );
@@ -543,8 +574,8 @@ static void drawSample( int x, int y, int w, int h,
glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, envMode->mode );
glTexEnvfv( GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, envColors[envColor] );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
@@ -569,6 +600,10 @@ static void drawSample( int x, int y, int w, int h,
glEnable( GL_TEXTURE_2D );
}
/*
* if (drawSmooth) then draw quad which goes from purple at the
* bottom (100% alpha) to green at the top (50% alpha).
*/
glBegin( GL_QUADS );
if ( drawSmooth ) glColor4f( 1.0, 0.0, 1.0, 1.0 );
glTexCoord2f( 0.0, 0.0 );
@@ -578,11 +613,11 @@ static void drawSample( int x, int y, int w, int h,
glTexCoord2f( 1.0, 0.0 );
glVertex2f( 0.8, -0.8 );
if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 1.0 );
if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 0.5 );
glTexCoord2f( 1.0, 1.0 );
glVertex2f( 0.8, 0.8 );
if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 1.0 );
if ( drawSmooth ) glColor4f( 0.0, 1.0, 0.0, 0.5 );
glTexCoord2f( 0.0, 1.0 );
glVertex2f( -0.8, 0.8 );
glEnd();
@@ -603,7 +638,7 @@ static void drawSample( int x, int y, int w, int h,
end2D();
}
else if ( displayLevelInfo ) {
GLint width, height, border, components;
GLint width, height, border, format;
GLint redSize, greenSize, blueSize, alphaSize;
GLint luminanceSize, intensitySize;
char buf[255];
@@ -611,7 +646,7 @@ static void drawSample( int x, int y, int w, int h,
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_BORDER, &border );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_COMPONENTS, &components );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_RED_SIZE, &redSize );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_GREEN_SIZE, &greenSize );
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_BLUE_SIZE, &blueSize );
@@ -626,16 +661,19 @@ static void drawSample( int x, int y, int w, int h,
sprintf( buf, "border: %d", border );
drawStringOutline( buf, 15, h / 2 + 10, labelLevelColor0, labelLevelColor1 );
sprintf( buf, "components: 0x%04X", components );
sprintf( buf, "internal format:" );
drawStringOutline( buf, 15, h / 2, labelLevelColor0, labelLevelColor1 );
sprintf( buf, "sizes:" );
sprintf( buf, " %s", lookupFormat( format ) );
drawStringOutline( buf, 15, h / 2 - 10, labelLevelColor0, labelLevelColor1 );
sprintf( buf, "sizes:" );
drawStringOutline( buf, 15, h / 2 - 20, labelLevelColor0, labelLevelColor1 );
sprintf( buf, " %d / %d / %d / %d / %d / %d",
redSize, greenSize, blueSize, alphaSize,
luminanceSize, intensitySize );
drawStringOutline( buf, 15, h / 2 - 20, labelLevelColor0, labelLevelColor1 );
drawStringOutline( buf, 15, h / 2 - 30, labelLevelColor0, labelLevelColor1 );
end2D();
}
@@ -715,6 +753,8 @@ static void instructions( void )
fprintf( stderr, " [s] - toggle smooth shading\n" );
fprintf( stderr, " [t] - toggle texturing\n" );
fprintf( stderr, " [i] - toggle information display\n" );
fprintf( stderr, " up/down - select row\n" );
fprintf( stderr, " left/right - change row's internal format\n" );
}
int main( int argc, char *argv[] )
@@ -744,6 +784,7 @@ int main( int argc, char *argv[] )
}
glutInitWindowSize( winWidth, winHeight );
glutInitWindowPosition( 0, 0 );
glutCreateWindow( "Texture Environment Test" );
initialize();

View File

@@ -1,4 +1,4 @@
/* $Id: trispd.c,v 1.1.1.1.6.1 2000/10/26 15:26:27 brianp Exp $ */
/* $Id: trispd.c,v 1.2 2000/10/26 15:26:14 brianp Exp $ */
/*
* Simple GLUT program to measure triangle strip rendering speed.
@@ -7,7 +7,7 @@
/*
* $Log: trispd.c,v $
* Revision 1.1.1.1.6.1 2000/10/26 15:26:27 brianp
* Revision 1.2 2000/10/26 15:26:14 brianp
* added a glFinish() call
*
* Revision 1.1.1.1 1999/08/19 00:55:40 jtg

View File

@@ -16,8 +16,8 @@
#endif
#include <GL/glut.h>
#include "../util/readtex.c"
#include "tunneldat.c"
#include "readtex.c"
#include "tunneldat.h"
#ifdef XMESA
#include "GL/xmesa.h"
@@ -29,6 +29,7 @@ static int HEIGHT = 480;
static GLint T0 = 0;
static GLint Frames = 0;
static GLint NiceFog = 1;
#define NUMBLOC 5
@@ -36,6 +37,7 @@ static GLint Frames = 0;
#define M_PI 3.1415926535
#endif
/*
extern int striplength_skin_13[];
extern float stripdata_skin_13[];
@@ -47,7 +49,7 @@ extern float stripdata_skin_11[];
extern int striplength_skin_9[];
extern float stripdata_skin_9[];
*/
static int win = 0;
@@ -104,7 +106,7 @@ inittextures(void)
}
static void
drawobjs(int *l, float *f)
drawobjs(const int *l, const float *f)
{
int mend, j;
@@ -162,6 +164,13 @@ calcposobs(void)
dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[2] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
obs[0] += v * dir[0];
obs[1] += v * dir[1];
obs[2] += v * dir[2];
@@ -241,6 +250,10 @@ key(unsigned char k, int x, int y)
inittextures();
fprintf(stderr, "Done.\n");
break;
case 'n':
NiceFog = !NiceFog;
printf("NiceFog %d\n", NiceFog);
break;
}
glutPostRedisplay();
}
@@ -356,6 +369,11 @@ draw(void)
int i;
float base, offset;
if (NiceFog)
glHint(GL_FOG_HINT, GL_NICEST);
else
glHint(GL_FOG_HINT, GL_DONT_CARE);
dojoy();
glClear(GL_COLOR_BUFFER_BIT);

View File

@@ -19,8 +19,8 @@
#endif
#include <GL/glut.h>
#include "../util/readtex.c"
#include "tunneldat.c"
#include "readtex.c"
#include "tunneldat.h"
#ifdef FX
#endif
@@ -40,7 +40,8 @@ static int HEIGHTC0 = 480;
static int WIDTHC1 = 640;
static int HEIGHTC1 = 480;
#define FRAME 50
static GLint T0 = 0;
static GLint Frames = 0;
#define NUMBLOC 5
@@ -48,19 +49,6 @@ static int HEIGHTC1 = 480;
#define M_PI 3.1415926535
#endif
extern int striplength_skin_13[];
extern float stripdata_skin_13[];
extern int striplength_skin_12[];
extern float stripdata_skin_12[];
extern int striplength_skin_11[];
extern float stripdata_skin_11[];
extern int striplength_skin_9[];
extern float stripdata_skin_9[];
static float obs[3] = { 1000.0, 0.0, 2.0 };
static float dir[3];
static float v = 0.5;
@@ -116,7 +104,7 @@ inittextures(void)
}
static void
drawobjs(int *l, float *f)
drawobjs(const int *l, const float *f)
{
int mend, j;
@@ -167,21 +155,6 @@ drawobjs(int *l, float *f)
}
}
static float
gettime(void)
{
static clock_t told = 0;
clock_t tnew, ris;
tnew = clock();
ris = tnew - told;
told = tnew;
return (ris / (float) CLOCKS_PER_SEC);
}
static void
calcposobs(void)
{
@@ -189,6 +162,13 @@ calcposobs(void)
dir[1] = cos(alpha * M_PI / 180.0) * sin(beta * M_PI / 180.0);
dir[2] = cos(beta * M_PI / 180.0);
if (dir[0] < 1.0e-5 && dir[0] > -1.0e-5)
dir[0] = 0;
if (dir[1] < 1.0e-5 && dir[1] > -1.0e-5)
dir[1] = 0;
if (dir[2] < 1.0e-5 && dir[2] > -1.0e-5)
dir[2] = 0;
obs[0] += v * dir[0];
obs[1] += v * dir[1];
obs[2] += v * dir[2];
@@ -409,10 +389,9 @@ dojoy(void)
static void
draw(void)
{
static int count = 0;
static char frbuf[80];
static char frbuf[80] = "";
int i;
float fr, base, offset;
float base, offset;
dojoy();
@@ -461,11 +440,6 @@ draw(void)
glPopMatrix();
glPopMatrix();
if ((count % FRAME) == 0) {
fr = gettime();
sprintf(frbuf, "Frame rate: %f", FRAME / fr);
}
glDisable(GL_TEXTURE_2D);
glDisable(GL_FOG);
glShadeModel(GL_FLAT);
@@ -492,7 +466,17 @@ draw(void)
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
count++;
Frames++;
{
GLint t = glutGet(GLUT_ELAPSED_TIME);
if (t - T0 >= 2000) {
GLfloat seconds = (t - T0) / 1000.0;
GLfloat fps = Frames / seconds;
sprintf(frbuf, "Frame rate: %f", fps);
T0 = t;
Frames = 0;
}
}
}
static void
@@ -557,14 +541,12 @@ main(int ac, char **av)
{
fprintf(stderr,
"Tunnel2 V1.0\nWritten by David Bucciarelli (tech.hmw@plus.it)\n");
fprintf(stderr,
"You need TWO Voodoo Graphics boards in order to run this demo !\n");
glutInitWindowPosition(0, 0);
glutInitWindowSize(WIDTHC0, HEIGHTC0);
glutInit(&ac, av);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_ALPHA);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
#ifdef FX
if (!fxMesaSelectCurrentBoard(0)) {

View File

@@ -1,83 +0,0 @@
/* Object: skin_13 */
#if defined(_MSC_VER) && defined(_WIN32)
#pragma warning( disable : 4305 ) /* 'initializing' : truncation from 'const double' to 'float' */
#endif
int striplength_skin_13[]={
10,7,3,5,5,4,4,4,4,5,3,4,5,4,4,4,4,4,4,6,
6,3,6,3,3,3,3,0};
float stripdata_skin_13[]={
0.415686,0.415686,0.415686,1.000000,0.000000,1.500000,2.000000,4.000000,0.000000,0.341176,0.341176,0.341176,1.000000,-0.500000,1.500000,4.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.435294,0.435294,0.435294,1.000000,-0.500000,1.000000,4.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.450980,0.450980,0.450980,1.000000,-0.500000,0.500000,4.000000,4.000000,4.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.388235,0.388235,0.388235,1.000000,-0.500000,0.000000,4.000000,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,0.000000,-0.500000,2.000000,4.000000,8.000000,0.333333,0.333333,0.333333,1.000000,-0.500000,-0.500000,4.000000,4.000000,8.000000,
0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.415686,0.415686,0.415686,1.000000,1.000000,1.500000,-2.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.450980,0.450980,0.450980,1.000000,0.500000,1.500000,0.000000,4.000000,0.000000,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.415686,0.415686,0.415686,1.000000,0.000000,1.500000,2.000000,4.000000,0.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,
0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.341176,0.341176,0.341176,1.000000,1.500000,1.500000,-4.000000,4.000000,0.000000,0.415686,0.415686,0.415686,1.000000,1.000000,1.500000,-2.000000,4.000000,0.000000,
0.356863,0.356863,0.356863,1.000000,0.000000,-0.500000,2.000000,4.000000,8.000000,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.415686,0.415686,0.415686,1.000000,0.395020,-0.133318,0.420032,4.000000,6.533272,0.423529,0.423529,0.423529,1.000000,0.388550,-0.103582,0.445932,4.000000,6.414327,
0.423529,0.423529,0.423529,1.000000,0.388550,-0.103582,0.445932,4.000000,6.414327,0.427451,0.427451,0.427451,1.000000,0.383423,-0.069344,0.466541,4.000000,6.277375,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,0.435294,0.435294,0.435294,1.000000,0.380371,-0.034595,0.478689,4.000000,6.138380,0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000,
0.407843,0.407843,0.407843,1.000000,0.414673,-0.191394,0.341301,4.000000,6.765576,0.411765,0.411765,0.411765,1.000000,0.403687,-0.162957,0.385368,4.000000,6.651829,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.415686,0.415686,0.415686,1.000000,0.395020,-0.133318,0.420032,4.000000,6.533272,
0.400000,0.400000,0.400000,1.000000,0.438232,-0.232438,0.247284,4.000000,6.929754,0.403922,0.403922,0.403922,1.000000,0.425171,-0.212276,0.299425,4.000000,6.849104,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.407843,0.407843,0.407843,1.000000,0.414673,-0.191394,0.341301,4.000000,6.765576,
0.396078,0.396078,0.396078,1.000000,0.467285,-0.260554,0.130636,4.000000,7.042214,0.400000,0.400000,0.400000,1.000000,0.453857,-0.250068,0.184711,4.000000,7.000273,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.400000,0.400000,0.400000,1.000000,0.438232,-0.232438,0.247284,4.000000,6.929754,
0.396078,0.396078,0.396078,1.000000,0.500000,-0.270672,0.000000,4.000000,7.082688,0.396078,0.396078,0.396078,1.000000,0.482788,-0.267902,0.068730,4.000000,7.071609,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,0.396078,0.396078,0.396078,1.000000,0.467285,-0.260554,0.130636,4.000000,7.042214,
0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000,0.474510,0.474510,0.474510,1.000000,0.379272,0.180448,0.482673,4.000000,5.278208,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.513726,0.513726,0.513726,1.000000,0.379272,0.360896,0.482673,4.000000,4.556417,0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000,
0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,
0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.545098,0.545098,0.545098,1.000000,0.000000,1.000000,2.000000,4.000000,2.000000,0.552941,0.552941,0.552941,1.000000,0.379272,0.541344,0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,0.379272,0.500000,0.482673,4.000000,4.000000,
0.552941,0.552941,0.552941,1.000000,0.379272,0.541344,0.482673,4.000000,3.834625,0.556863,0.556863,0.556863,1.000000,0.459717,0.541344,0.160891,4.000000,3.834625,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000,0.556863,0.556863,0.556863,1.000000,0.500000,0.541344,0.000000,4.000000,3.834625,0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625,
0.396078,0.396078,0.396078,1.000000,0.517212,-0.267902,-0.068730,4.000000,7.071609,0.396078,0.396078,0.396078,1.000000,0.500000,-0.270672,0.000000,4.000000,7.082688,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.364706,0.364706,0.364706,1.000000,0.500000,-0.500000,0.000000,4.000000,8.000000,
0.400000,0.400000,0.400000,1.000000,0.546143,-0.250068,-0.184711,4.000000,7.000273,0.396078,0.396078,0.396078,1.000000,0.532715,-0.260554,-0.130636,4.000000,7.042214,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.396078,0.396078,0.396078,1.000000,0.517212,-0.267902,-0.068730,4.000000,7.071609,
0.403922,0.403922,0.403922,1.000000,0.574829,-0.212276,-0.299425,4.000000,6.849104,0.400000,0.400000,0.400000,1.000000,0.561768,-0.232438,-0.247284,4.000000,6.929754,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.400000,0.400000,0.400000,1.000000,0.546143,-0.250068,-0.184711,4.000000,7.000273,
0.411765,0.411765,0.411765,1.000000,0.596313,-0.162957,-0.385368,4.000000,6.651829,0.407843,0.407843,0.407843,1.000000,0.585327,-0.191394,-0.341301,4.000000,6.765576,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.403922,0.403922,0.403922,1.000000,0.574829,-0.212276,-0.299425,4.000000,6.849104,
0.423529,0.423529,0.423529,1.000000,0.611450,-0.103582,-0.445931,4.000000,6.414327,0.415686,0.415686,0.415686,1.000000,0.604980,-0.133318,-0.420033,4.000000,6.533272,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.411765,0.411765,0.411765,1.000000,0.596313,-0.162957,-0.385368,4.000000,6.651829,
0.435294,0.435294,0.435294,1.000000,0.619629,-0.034595,-0.478689,4.000000,6.138380,0.427451,0.427451,0.427451,1.000000,0.616577,-0.069344,-0.466541,4.000000,6.277375,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.423529,0.423529,0.423529,1.000000,0.611450,-0.103582,-0.445931,4.000000,6.414327,
0.513726,0.513726,0.513726,1.000000,0.620728,0.360896,-0.482673,4.000000,4.556417,0.474510,0.474510,0.474510,1.000000,0.620728,0.180448,-0.482673,4.000000,5.278208,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.439216,0.439216,0.439216,1.000000,0.620728,0.000000,-0.482673,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,0.435294,0.435294,0.435294,1.000000,0.619629,-0.034595,-0.478689,4.000000,6.138380,
0.333333,0.333333,0.333333,1.000000,1.500000,-0.500000,-4.000000,4.000000,8.000000,0.388235,0.388235,0.388235,1.000000,1.500000,0.000000,-4.000000,4.000000,6.000000,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.513726,0.513726,0.513726,1.000000,0.620728,0.360896,-0.482673,4.000000,4.556417,0.545098,0.545098,0.545098,1.000000,0.620728,0.500000,-0.482673,4.000000,4.000000,
0.333333,0.333333,0.333333,1.000000,1.500000,-0.500000,-4.000000,4.000000,8.000000,0.427451,0.427451,0.427451,1.000000,1.000000,0.000000,-2.000000,4.000000,6.000000,0.356863,0.356863,0.356863,1.000000,1.000000,-0.500000,-2.000000,4.000000,8.000000,
0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625,0.552941,0.552941,0.552941,1.000000,0.620728,0.541344,-0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.450980,0.450980,0.450980,1.000000,1.500000,0.500000,-4.000000,4.000000,4.000000,0.388235,0.388235,0.388235,1.000000,1.500000,0.000000,-4.000000,4.000000,6.000000,
0.517647,0.517647,0.517647,1.000000,1.000000,0.500000,-2.000000,4.000000,4.000000,0.552941,0.552941,0.552941,1.000000,0.620728,0.541344,-0.482673,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,0.620728,0.500000,-0.482673,4.000000,4.000000,
0.450980,0.450980,0.450980,1.000000,1.500000,0.500000,-4.000000,4.000000,4.000000,0.435294,0.435294,0.435294,1.000000,1.500000,1.000000,-4.000000,4.000000,2.000000,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,
0.439216,0.439216,0.439216,1.000000,0.379272,0.000000,0.482673,4.000000,6.000000,0.517647,0.517647,0.517647,1.000000,0.000000,0.500000,2.000000,4.000000,4.000000,0.427451,0.427451,0.427451,1.000000,0.000000,0.000000,2.000000,4.000000,6.000000,
0.556863,0.556863,0.556863,1.000000,0.540283,0.541344,-0.160891,4.000000,3.834625,0.545098,0.545098,0.545098,1.000000,1.000000,1.000000,-2.000000,4.000000,2.000000,0.600000,0.600000,0.600000,1.000000,0.500000,1.000000,0.000000,4.000000,2.000000
};
/* Object: skin_12 */
int striplength_skin_12[]={
12,12,12,12,12,0};
float stripdata_skin_12[]={
0.498039,0.498039,0.498039,1.000000,-0.099976,1.500000,-2.400000,-4.000000,-0.000002,0.337255,0.337255,0.337255,1.000000,-0.500000,1.500000,-4.000000,-4.000000,-0.000002,0.568627,0.568627,0.568627,1.000000,-0.099976,1.100000,-2.400000,-4.000000,1.599999,0.341176,0.341176,0.341176,1.000000,-0.500000,1.100000,-4.000000,-4.000000,1.599999,0.498039,0.498039,0.498039,1.000000,-0.099976,0.700000,-2.400000,-4.000000,3.200000,0.325490,0.325490,0.325490,1.000000,-0.500000,0.700000,-4.000000,-4.000000,3.199999,0.352941,0.352941,0.352941,1.000000,-0.099976,0.300000,-2.400000,-4.000000,4.800000,0.282353,0.282353,0.282353,1.000000,-0.500000,0.300000,-4.000000,-4.000000,4.800000,0.282353,0.282353,0.282353,1.000000,-0.099976,-0.100000,-2.400000,-4.000000,6.400001,0.254902,0.254902,0.254902,1.000000,-0.500000,-0.100000,-4.000000,-4.000000,6.400000,0.239216,0.239216,0.239216,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,8.000000,0.227451,0.227451,0.227451,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,8.000000,
0.239216,0.239216,0.239216,1.000000,1.099976,-0.500000,2.400001,-4.000000,8.000000,0.227451,0.227451,0.227451,1.000000,1.500000,-0.500000,4.000002,-4.000000,8.000000,0.282353,0.282353,0.282353,1.000000,1.099976,-0.100000,2.400001,-4.000000,6.400001,0.254902,0.254902,0.254902,1.000000,1.500000,-0.100000,4.000002,-4.000000,6.400001,0.352941,0.352941,0.352941,1.000000,1.099976,0.300000,2.400002,-4.000000,4.800001,0.282353,0.282353,0.282353,1.000000,1.500000,0.300000,4.000002,-4.000000,4.800001,0.498039,0.498039,0.498039,1.000000,1.099976,0.700000,2.400002,-4.000000,3.200000,0.321569,0.321569,0.321569,1.000000,1.500000,0.700000,4.000003,-4.000000,3.200000,0.568627,0.568627,0.568627,1.000000,1.099976,1.100000,2.400002,-4.000000,1.599999,0.341176,0.341176,0.341176,1.000000,1.500000,1.100000,4.000003,-4.000000,1.599999,0.494118,0.494118,0.494118,1.000000,1.099976,1.500000,2.400003,-4.000000,-0.000002,0.337255,0.337255,0.337255,1.000000,1.500000,1.500000,4.000004,-4.000000,-0.000002,
0.639216,0.639216,0.639216,1.000000,0.300049,1.500000,-0.799999,-4.000000,-0.000002,0.498039,0.498039,0.498039,1.000000,-0.099976,1.500000,-2.400000,-4.000000,-0.000002,0.858824,0.858824,0.858824,1.000000,0.300049,1.100000,-0.799999,-4.000000,1.599999,0.568627,0.568627,0.568627,1.000000,-0.099976,1.100000,-2.400000,-4.000000,1.599999,0.686275,0.686275,0.686275,1.000000,0.300049,0.700000,-0.799999,-4.000000,3.200000,0.498039,0.498039,0.498039,1.000000,-0.099976,0.700000,-2.400000,-4.000000,3.200000,0.419608,0.419608,0.419608,1.000000,0.300049,0.300000,-0.800000,-4.000000,4.800000,0.352941,0.352941,0.352941,1.000000,-0.099976,0.300000,-2.400000,-4.000000,4.800000,0.298039,0.298039,0.298039,1.000000,0.300049,-0.100000,-0.800000,-4.000000,6.400001,0.282353,0.282353,0.282353,1.000000,-0.099976,-0.100000,-2.400000,-4.000000,6.400001,0.247059,0.247059,0.247059,1.000000,0.300049,-0.500000,-0.800000,-4.000000,8.000000,0.239216,0.239216,0.239216,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,8.000000,
0.639216,0.639216,0.639216,1.000000,0.699951,1.500000,0.800002,-4.000000,-0.000002,0.639216,0.639216,0.639216,1.000000,0.300049,1.500000,-0.799999,-4.000000,-0.000002,0.858824,0.858824,0.858824,1.000000,0.699951,1.100000,0.800001,-4.000000,1.599999,0.858824,0.858824,0.858824,1.000000,0.300049,1.100000,-0.799999,-4.000000,1.599999,0.686275,0.686275,0.686275,1.000000,0.699951,0.700000,0.800001,-4.000000,3.200000,0.686275,0.686275,0.686275,1.000000,0.300049,0.700000,-0.799999,-4.000000,3.200000,0.419608,0.419608,0.419608,1.000000,0.699951,0.300000,0.800001,-4.000000,4.800001,0.419608,0.419608,0.419608,1.000000,0.300049,0.300000,-0.800000,-4.000000,4.800000,0.298039,0.298039,0.298039,1.000000,0.699951,-0.100000,0.800001,-4.000000,6.400001,0.298039,0.298039,0.298039,1.000000,0.300049,-0.100000,-0.800000,-4.000000,6.400001,0.247059,0.247059,0.247059,1.000000,0.699951,-0.500000,0.800000,-4.000000,8.000000,0.247059,0.247059,0.247059,1.000000,0.300049,-0.500000,-0.800000,-4.000000,8.000000,
0.494118,0.494118,0.494118,1.000000,1.099976,1.500000,2.400003,-4.000000,-0.000002,0.639216,0.639216,0.639216,1.000000,0.699951,1.500000,0.800002,-4.000000,-0.000002,0.568627,0.568627,0.568627,1.000000,1.099976,1.100000,2.400002,-4.000000,1.599999,0.858824,0.858824,0.858824,1.000000,0.699951,1.100000,0.800001,-4.000000,1.599999,0.498039,0.498039,0.498039,1.000000,1.099976,0.700000,2.400002,-4.000000,3.200000,0.686275,0.686275,0.686275,1.000000,0.699951,0.700000,0.800001,-4.000000,3.200000,0.352941,0.352941,0.352941,1.000000,1.099976,0.300000,2.400002,-4.000000,4.800001,0.419608,0.419608,0.419608,1.000000,0.699951,0.300000,0.800001,-4.000000,4.800001,0.282353,0.282353,0.282353,1.000000,1.099976,-0.100000,2.400001,-4.000000,6.400001,0.298039,0.298039,0.298039,1.000000,0.699951,-0.100000,0.800001,-4.000000,6.400001,0.239216,0.239216,0.239216,1.000000,1.099976,-0.500000,2.400001,-4.000000,8.000000,0.247059,0.247059,0.247059,1.000000,0.699951,-0.500000,0.800000,-4.000000,8.000000
};
/* Object: skin_11 */
int striplength_skin_11[]={
12,12,12,12,12,0};
float stripdata_skin_11[]={
0.145098,0.145098,0.145098,1.000000,-0.099976,1.500000,-2.400000,4.000002,0.000000,0.141176,0.141176,0.141176,1.000000,-0.500000,1.500000,-4.000000,4.000002,0.000000,0.176471,0.176471,0.176471,1.000000,-0.099976,1.100000,-2.400000,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,-0.500000,1.100000,-4.000000,2.400001,0.000000,0.341176,0.341176,0.341176,1.000000,-0.099976,0.700000,-2.400000,0.800000,0.000000,0.188235,0.188235,0.188235,1.000000,-0.500000,0.700000,-4.000000,0.800000,0.000000,0.450980,0.450980,0.450980,1.000000,-0.099976,0.300000,-2.400000,-0.800000,0.000000,0.247059,0.247059,0.247059,1.000000,-0.500000,0.300000,-4.000000,-0.800000,0.000000,0.439216,0.439216,0.439216,1.000000,-0.099976,-0.100000,-2.400000,-2.400000,0.000000,0.270588,0.270588,0.270588,1.000000,-0.500000,-0.100000,-4.000000,-2.400000,0.000000,0.364706,0.364706,0.364706,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,0.000000,0.258824,0.258824,0.258824,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,0.000000,
0.364706,0.364706,0.364706,1.000000,1.099976,-0.500000,2.400001,-4.000000,0.000000,0.258824,0.258824,0.258824,1.000000,1.500000,-0.500000,4.000002,-4.000000,0.000000,0.439216,0.439216,0.439216,1.000000,1.099976,-0.100000,2.400001,-2.400001,0.000000,0.270588,0.270588,0.270588,1.000000,1.500000,-0.100000,4.000002,-2.400001,0.000000,0.454902,0.454902,0.454902,1.000000,1.099976,0.300000,2.400002,-0.800000,0.000000,0.247059,0.247059,0.247059,1.000000,1.500000,0.300000,4.000002,-0.800000,0.000000,0.341176,0.341176,0.341176,1.000000,1.099976,0.700000,2.400002,0.800000,0.000000,0.184314,0.184314,0.184314,1.000000,1.500000,0.700000,4.000003,0.800000,0.000000,0.176471,0.176471,0.176471,1.000000,1.099976,1.100000,2.400002,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,1.500000,1.100000,4.000003,2.400001,0.000000,0.145098,0.145098,0.145098,1.000000,1.099976,1.500000,2.400003,4.000003,0.000000,0.141176,0.141176,0.141176,1.000000,1.500000,1.500000,4.000004,4.000002,0.000000,
0.145098,0.145098,0.145098,1.000000,0.300049,1.500000,-0.799999,4.000002,0.000000,0.145098,0.145098,0.145098,1.000000,-0.099976,1.500000,-2.400000,4.000002,0.000000,0.262745,0.262745,0.262745,1.000000,0.300049,1.100000,-0.799999,2.400001,0.000000,0.176471,0.176471,0.176471,1.000000,-0.099976,1.100000,-2.400000,2.400001,0.000000,0.580392,0.580392,0.580392,1.000000,0.300049,0.700000,-0.799999,0.800000,0.000000,0.341176,0.341176,0.341176,1.000000,-0.099976,0.700000,-2.400000,0.800000,0.000000,0.709804,0.709804,0.709804,1.000000,0.300049,0.300000,-0.800000,-0.800000,0.000000,0.450980,0.450980,0.450980,1.000000,-0.099976,0.300000,-2.400000,-0.800000,0.000000,0.627451,0.627451,0.627451,1.000000,0.300049,-0.100000,-0.800000,-2.400001,0.000000,0.439216,0.439216,0.439216,1.000000,-0.099976,-0.100000,-2.400000,-2.400000,0.000000,0.458824,0.458824,0.458824,1.000000,0.300049,-0.500000,-0.800000,-4.000000,0.000000,0.364706,0.364706,0.364706,1.000000,-0.099976,-0.500000,-2.400000,-4.000000,0.000000,
0.145098,0.145098,0.145098,1.000000,0.699951,1.500000,0.800002,4.000002,0.000000,0.145098,0.145098,0.145098,1.000000,0.300049,1.500000,-0.799999,4.000002,0.000000,0.262745,0.262745,0.262745,1.000000,0.699951,1.100000,0.800001,2.400001,0.000000,0.262745,0.262745,0.262745,1.000000,0.300049,1.100000,-0.799999,2.400001,0.000000,0.580392,0.580392,0.580392,1.000000,0.699951,0.700000,0.800001,0.800000,0.000000,0.580392,0.580392,0.580392,1.000000,0.300049,0.700000,-0.799999,0.800000,0.000000,0.713726,0.713726,0.713726,1.000000,0.699951,0.300000,0.800001,-0.800000,0.000000,0.709804,0.709804,0.709804,1.000000,0.300049,0.300000,-0.800000,-0.800000,0.000000,0.631373,0.631373,0.631373,1.000000,0.699951,-0.100000,0.800001,-2.400001,0.000000,0.627451,0.627451,0.627451,1.000000,0.300049,-0.100000,-0.800000,-2.400001,0.000000,0.458824,0.458824,0.458824,1.000000,0.699951,-0.500000,0.800000,-4.000000,0.000000,0.458824,0.458824,0.458824,1.000000,0.300049,-0.500000,-0.800000,-4.000000,0.000000,
0.145098,0.145098,0.145098,1.000000,1.099976,1.500000,2.400003,4.000003,0.000000,0.145098,0.145098,0.145098,1.000000,0.699951,1.500000,0.800002,4.000002,0.000000,0.176471,0.176471,0.176471,1.000000,1.099976,1.100000,2.400002,2.400001,0.000000,0.262745,0.262745,0.262745,1.000000,0.699951,1.100000,0.800001,2.400001,0.000000,0.341176,0.341176,0.341176,1.000000,1.099976,0.700000,2.400002,0.800000,0.000000,0.580392,0.580392,0.580392,1.000000,0.699951,0.700000,0.800001,0.800000,0.000000,0.454902,0.454902,0.454902,1.000000,1.099976,0.300000,2.400002,-0.800000,0.000000,0.713726,0.713726,0.713726,1.000000,0.699951,0.300000,0.800001,-0.800000,0.000000,0.439216,0.439216,0.439216,1.000000,1.099976,-0.100000,2.400001,-2.400001,0.000000,0.631373,0.631373,0.631373,1.000000,0.699951,-0.100000,0.800001,-2.400001,0.000000,0.364706,0.364706,0.364706,1.000000,1.099976,-0.500000,2.400001,-4.000000,0.000000,0.458824,0.458824,0.458824,1.000000,0.699951,-0.500000,0.800000,-4.000000,0.000000
};
/* Object: skin_9 */
int striplength_skin_9[]={
18,0};
float stripdata_skin_9[]={
0.384314,0.384314,0.384314,1.000000,-0.500000,1.500000,-4.000000,4.000000,8.000000,0.384314,0.384314,0.384314,1.000000,1.500000,1.500000,4.000000,4.000000,8.000000,0.376471,0.376471,0.376471,1.000000,-0.500000,1.250000,-4.000000,3.695518,9.530733,0.403922,0.403922,0.403922,1.000000,1.500000,1.250000,4.000000,3.695518,9.530733,0.415686,0.415686,0.415686,1.000000,-0.500000,1.000000,-4.000000,2.828427,10.828427,0.431373,0.431373,0.431373,1.000000,1.500000,1.000000,4.000000,2.828427,10.828427,0.435294,0.435294,0.435294,1.000000,-0.500000,0.750000,-4.000000,1.530734,11.695518,0.443137,0.443137,0.443137,1.000000,1.500000,0.750000,4.000000,1.530734,11.695518,0.439216,0.439216,0.439216,1.000000,-0.500000,0.500000,-4.000000,0.000000,12.000000,0.435294,0.435294,0.435294,1.000000,1.500000,0.500000,4.000000,0.000000,12.000000,0.427451,0.427451,0.427451,1.000000,-0.500000,0.250000,-4.000000,-1.530734,11.695518,0.411765,0.411765,0.411765,1.000000,1.500000,0.250000,4.000000,-1.530734,11.695518,0.396078,0.396078,0.396078,1.000000,-0.500000,0.000000,-4.000000,-2.828427,10.828427,0.368627,0.368627,0.368627,1.000000,1.500000,0.000000,4.000000,-2.828427,10.828427,0.341176,0.341176,0.341176,1.000000,-0.500000,-0.250000,-4.000000,-3.695518,9.530733,0.301961,0.301961,0.301961,1.000000,1.500000,-0.250000,4.000000,-3.695518,9.530733,0.294118,0.294118,0.294118,1.000000,-0.500000,-0.500000,-4.000000,-4.000000,8.000000,0.294118,0.294118,0.294118,1.000000,1.500000,-0.500000,4.000000,-4.000000,8.000000
};

395
progs/demos/tunneldat.h Normal file
View File

@@ -0,0 +1,395 @@
/* Object: skin_13 */
#if defined(_MSC_VER) && defined(_WIN32)
#pragma warning( disable : 4305 ) /* 'initializing' : truncation from 'const double' to 'float' */
#endif
static const int striplength_skin_13[] = {
10, 7, 3, 5, 5, 4, 4, 4, 4, 5, 3, 4, 5, 4, 4, 4, 4, 4, 4, 6,
6, 3, 6, 3, 3, 3, 3, 0
};
static const float stripdata_skin_13[] = {
0.415686, 0.415686, 0.415686, 1.000000, 0.000000, 1.500000, 2.000000,
4.000000, 0.000000, 0.341176, 0.341176, 0.341176, 1.000000, -0.500000,
1.500000, 4.000000, 4.000000, 0.000000, 0.545098, 0.545098, 0.545098,
1.000000, 0.000000, 1.000000, 2.000000, 4.000000, 2.000000, 0.435294,
0.435294, 0.435294, 1.000000, -0.500000, 1.000000, 4.000000, 4.000000,
2.000000, 0.517647, 0.517647, 0.517647, 1.000000, 0.000000, 0.500000,
2.000000, 4.000000, 4.000000, 0.450980, 0.450980, 0.450980, 1.000000,
-0.500000, 0.500000, 4.000000, 4.000000, 4.000000, 0.427451, 0.427451,
0.427451, 1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000,
0.388235, 0.388235, 0.388235, 1.000000, -0.500000, 0.000000, 4.000000,
4.000000, 6.000000, 0.356863, 0.356863, 0.356863, 1.000000, 0.000000,
-0.500000, 2.000000, 4.000000, 8.000000, 0.333333, 0.333333, 0.333333,
1.000000, -0.500000, -0.500000, 4.000000, 4.000000, 8.000000,
0.435294, 0.435294, 0.435294, 1.000000, 1.500000, 1.000000, -4.000000,
4.000000, 2.000000, 0.415686, 0.415686, 0.415686, 1.000000, 1.000000,
1.500000, -2.000000, 4.000000, 0.000000, 0.545098, 0.545098, 0.545098,
1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000, 0.450980,
0.450980, 0.450980, 1.000000, 0.500000, 1.500000, 0.000000, 4.000000,
0.000000, 0.600000, 0.600000, 0.600000, 1.000000, 0.500000, 1.000000,
0.000000, 4.000000, 2.000000, 0.415686, 0.415686, 0.415686, 1.000000,
0.000000, 1.500000, 2.000000, 4.000000, 0.000000, 0.545098, 0.545098,
0.545098, 1.000000, 0.000000, 1.000000, 2.000000, 4.000000, 2.000000,
0.435294, 0.435294, 0.435294, 1.000000, 1.500000, 1.000000, -4.000000,
4.000000, 2.000000, 0.341176, 0.341176, 0.341176, 1.000000, 1.500000,
1.500000, -4.000000, 4.000000, 0.000000, 0.415686, 0.415686, 0.415686,
1.000000, 1.000000, 1.500000, -2.000000, 4.000000, 0.000000,
0.356863, 0.356863, 0.356863, 1.000000, 0.000000, -0.500000, 2.000000,
4.000000, 8.000000, 0.364706, 0.364706, 0.364706, 1.000000, 0.500000,
-0.500000, 0.000000, 4.000000, 8.000000, 0.427451, 0.427451, 0.427451,
1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, 0.415686,
0.415686, 0.415686, 1.000000, 0.395020, -0.133318, 0.420032, 4.000000,
6.533272, 0.423529, 0.423529, 0.423529, 1.000000, 0.388550, -0.103582,
0.445932, 4.000000, 6.414327,
0.423529, 0.423529, 0.423529, 1.000000, 0.388550, -0.103582, 0.445932,
4.000000, 6.414327, 0.427451, 0.427451, 0.427451, 1.000000, 0.383423,
-0.069344, 0.466541, 4.000000, 6.277375, 0.427451, 0.427451, 0.427451,
1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000, 0.435294,
0.435294, 0.435294, 1.000000, 0.380371, -0.034595, 0.478689, 4.000000,
6.138380, 0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000,
0.482673, 4.000000, 6.000000,
0.407843, 0.407843, 0.407843, 1.000000, 0.414673, -0.191394, 0.341301,
4.000000, 6.765576, 0.411765, 0.411765, 0.411765, 1.000000, 0.403687,
-0.162957, 0.385368, 4.000000, 6.651829, 0.364706, 0.364706, 0.364706,
1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.415686,
0.415686, 0.415686, 1.000000, 0.395020, -0.133318, 0.420032, 4.000000,
6.533272,
0.400000, 0.400000, 0.400000, 1.000000, 0.438232, -0.232438, 0.247284,
4.000000, 6.929754, 0.403922, 0.403922, 0.403922, 1.000000, 0.425171,
-0.212276, 0.299425, 4.000000, 6.849104, 0.364706, 0.364706, 0.364706,
1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.407843,
0.407843, 0.407843, 1.000000, 0.414673, -0.191394, 0.341301, 4.000000,
6.765576,
0.396078, 0.396078, 0.396078, 1.000000, 0.467285, -0.260554, 0.130636,
4.000000, 7.042214, 0.400000, 0.400000, 0.400000, 1.000000, 0.453857,
-0.250068, 0.184711, 4.000000, 7.000273, 0.364706, 0.364706, 0.364706,
1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.400000,
0.400000, 0.400000, 1.000000, 0.438232, -0.232438, 0.247284, 4.000000,
6.929754,
0.396078, 0.396078, 0.396078, 1.000000, 0.500000, -0.270672, 0.000000,
4.000000, 7.082688, 0.396078, 0.396078, 0.396078, 1.000000, 0.482788,
-0.267902, 0.068730, 4.000000, 7.071609, 0.364706, 0.364706, 0.364706,
1.000000, 0.500000, -0.500000, 0.000000, 4.000000, 8.000000, 0.396078,
0.396078, 0.396078, 1.000000, 0.467285, -0.260554, 0.130636, 4.000000,
7.042214,
0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000, 0.482673,
4.000000, 6.000000, 0.474510, 0.474510, 0.474510, 1.000000, 0.379272,
0.180448, 0.482673, 4.000000, 5.278208, 0.517647, 0.517647, 0.517647,
1.000000, 0.000000, 0.500000, 2.000000, 4.000000, 4.000000, 0.513726,
0.513726, 0.513726, 1.000000, 0.379272, 0.360896, 0.482673, 4.000000,
4.556417, 0.545098, 0.545098, 0.545098, 1.000000, 0.379272, 0.500000,
0.482673, 4.000000, 4.000000,
0.545098, 0.545098, 0.545098, 1.000000, 0.379272, 0.500000, 0.482673,
4.000000, 4.000000, 0.545098, 0.545098, 0.545098, 1.000000, 0.000000,
1.000000, 2.000000, 4.000000, 2.000000, 0.517647, 0.517647, 0.517647,
1.000000, 0.000000, 0.500000, 2.000000, 4.000000, 4.000000,
0.600000, 0.600000, 0.600000, 1.000000, 0.500000, 1.000000, 0.000000,
4.000000, 2.000000, 0.545098, 0.545098, 0.545098, 1.000000, 0.000000,
1.000000, 2.000000, 4.000000, 2.000000, 0.552941, 0.552941, 0.552941,
1.000000, 0.379272, 0.541344, 0.482673, 4.000000, 3.834625, 0.545098,
0.545098, 0.545098, 1.000000, 0.379272, 0.500000, 0.482673, 4.000000,
4.000000,
0.552941, 0.552941, 0.552941, 1.000000, 0.379272, 0.541344, 0.482673,
4.000000, 3.834625, 0.556863, 0.556863, 0.556863, 1.000000, 0.459717,
0.541344, 0.160891, 4.000000, 3.834625, 0.600000, 0.600000, 0.600000,
1.000000, 0.500000, 1.000000, 0.000000, 4.000000, 2.000000, 0.556863,
0.556863, 0.556863, 1.000000, 0.500000, 0.541344, 0.000000, 4.000000,
3.834625, 0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344,
-0.160891, 4.000000, 3.834625,
0.396078, 0.396078, 0.396078, 1.000000, 0.517212, -0.267902, -0.068730,
4.000000, 7.071609, 0.396078, 0.396078, 0.396078, 1.000000, 0.500000,
-0.270672, 0.000000, 4.000000, 7.082688, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.364706,
0.364706, 0.364706, 1.000000, 0.500000, -0.500000, 0.000000, 4.000000,
8.000000,
0.400000, 0.400000, 0.400000, 1.000000, 0.546143, -0.250068, -0.184711,
4.000000, 7.000273, 0.396078, 0.396078, 0.396078, 1.000000, 0.532715,
-0.260554, -0.130636, 4.000000, 7.042214, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.396078,
0.396078, 0.396078, 1.000000, 0.517212, -0.267902, -0.068730, 4.000000,
7.071609,
0.403922, 0.403922, 0.403922, 1.000000, 0.574829, -0.212276, -0.299425,
4.000000, 6.849104, 0.400000, 0.400000, 0.400000, 1.000000, 0.561768,
-0.232438, -0.247284, 4.000000, 6.929754, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.400000,
0.400000, 0.400000, 1.000000, 0.546143, -0.250068, -0.184711, 4.000000,
7.000273,
0.411765, 0.411765, 0.411765, 1.000000, 0.596313, -0.162957, -0.385368,
4.000000, 6.651829, 0.407843, 0.407843, 0.407843, 1.000000, 0.585327,
-0.191394, -0.341301, 4.000000, 6.765576, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.403922,
0.403922, 0.403922, 1.000000, 0.574829, -0.212276, -0.299425, 4.000000,
6.849104,
0.423529, 0.423529, 0.423529, 1.000000, 0.611450, -0.103582, -0.445931,
4.000000, 6.414327, 0.415686, 0.415686, 0.415686, 1.000000, 0.604980,
-0.133318, -0.420033, 4.000000, 6.533272, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.411765,
0.411765, 0.411765, 1.000000, 0.596313, -0.162957, -0.385368, 4.000000,
6.651829,
0.435294, 0.435294, 0.435294, 1.000000, 0.619629, -0.034595, -0.478689,
4.000000, 6.138380, 0.427451, 0.427451, 0.427451, 1.000000, 0.616577,
-0.069344, -0.466541, 4.000000, 6.277375, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000, 0.423529,
0.423529, 0.423529, 1.000000, 0.611450, -0.103582, -0.445931, 4.000000,
6.414327,
0.513726, 0.513726, 0.513726, 1.000000, 0.620728, 0.360896, -0.482673,
4.000000, 4.556417, 0.474510, 0.474510, 0.474510, 1.000000, 0.620728,
0.180448, -0.482673, 4.000000, 5.278208, 0.427451, 0.427451, 0.427451,
1.000000, 1.000000, 0.000000, -2.000000, 4.000000, 6.000000, 0.439216,
0.439216, 0.439216, 1.000000, 0.620728, 0.000000, -0.482673, 4.000000,
6.000000, 0.356863, 0.356863, 0.356863, 1.000000, 1.000000, -0.500000,
-2.000000, 4.000000, 8.000000, 0.435294, 0.435294, 0.435294, 1.000000,
0.619629, -0.034595, -0.478689, 4.000000, 6.138380,
0.333333, 0.333333, 0.333333, 1.000000, 1.500000, -0.500000, -4.000000,
4.000000, 8.000000, 0.388235, 0.388235, 0.388235, 1.000000, 1.500000,
0.000000, -4.000000, 4.000000, 6.000000, 0.427451, 0.427451, 0.427451,
1.000000, 1.000000, 0.000000, -2.000000, 4.000000, 6.000000, 0.517647,
0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000, 4.000000,
4.000000, 0.513726, 0.513726, 0.513726, 1.000000, 0.620728, 0.360896,
-0.482673, 4.000000, 4.556417, 0.545098, 0.545098, 0.545098, 1.000000,
0.620728, 0.500000, -0.482673, 4.000000, 4.000000,
0.333333, 0.333333, 0.333333, 1.000000, 1.500000, -0.500000, -4.000000,
4.000000, 8.000000, 0.427451, 0.427451, 0.427451, 1.000000, 1.000000,
0.000000, -2.000000, 4.000000, 6.000000, 0.356863, 0.356863, 0.356863,
1.000000, 1.000000, -0.500000, -2.000000, 4.000000, 8.000000,
0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344, -0.160891,
4.000000, 3.834625, 0.552941, 0.552941, 0.552941, 1.000000, 0.620728,
0.541344, -0.482673, 4.000000, 3.834625, 0.545098, 0.545098, 0.545098,
1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000, 0.517647,
0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000, 4.000000,
4.000000, 0.450980, 0.450980, 0.450980, 1.000000, 1.500000, 0.500000,
-4.000000, 4.000000, 4.000000, 0.388235, 0.388235, 0.388235, 1.000000,
1.500000, 0.000000, -4.000000, 4.000000, 6.000000,
0.517647, 0.517647, 0.517647, 1.000000, 1.000000, 0.500000, -2.000000,
4.000000, 4.000000, 0.552941, 0.552941, 0.552941, 1.000000, 0.620728,
0.541344, -0.482673, 4.000000, 3.834625, 0.545098, 0.545098, 0.545098,
1.000000, 0.620728, 0.500000, -0.482673, 4.000000, 4.000000,
0.450980, 0.450980, 0.450980, 1.000000, 1.500000, 0.500000, -4.000000,
4.000000, 4.000000, 0.435294, 0.435294, 0.435294, 1.000000, 1.500000,
1.000000, -4.000000, 4.000000, 2.000000, 0.545098, 0.545098, 0.545098,
1.000000, 1.000000, 1.000000, -2.000000, 4.000000, 2.000000,
0.439216, 0.439216, 0.439216, 1.000000, 0.379272, 0.000000, 0.482673,
4.000000, 6.000000, 0.517647, 0.517647, 0.517647, 1.000000, 0.000000,
0.500000, 2.000000, 4.000000, 4.000000, 0.427451, 0.427451, 0.427451,
1.000000, 0.000000, 0.000000, 2.000000, 4.000000, 6.000000,
0.556863, 0.556863, 0.556863, 1.000000, 0.540283, 0.541344, -0.160891,
4.000000, 3.834625, 0.545098, 0.545098, 0.545098, 1.000000, 1.000000,
1.000000, -2.000000, 4.000000, 2.000000, 0.600000, 0.600000, 0.600000,
1.000000, 0.500000, 1.000000, 0.000000, 4.000000, 2.000000
};
/* Object: skin_12 */
static const int striplength_skin_12[] = {
12, 12, 12, 12, 12, 0
};
static const float stripdata_skin_12[] = {
0.498039, 0.498039, 0.498039, 1.000000, -0.099976, 1.500000, -2.400000,
-4.000000, -0.000002, 0.337255, 0.337255, 0.337255, 1.000000, -0.500000,
1.500000, -4.000000, -4.000000, -0.000002, 0.568627, 0.568627, 0.568627,
1.000000, -0.099976, 1.100000, -2.400000, -4.000000, 1.599999, 0.341176,
0.341176, 0.341176, 1.000000, -0.500000, 1.100000, -4.000000, -4.000000,
1.599999, 0.498039, 0.498039, 0.498039, 1.000000, -0.099976, 0.700000,
-2.400000, -4.000000, 3.200000, 0.325490, 0.325490, 0.325490, 1.000000,
-0.500000, 0.700000, -4.000000, -4.000000, 3.199999, 0.352941, 0.352941,
0.352941, 1.000000, -0.099976, 0.300000, -2.400000, -4.000000, 4.800000,
0.282353, 0.282353, 0.282353, 1.000000, -0.500000, 0.300000, -4.000000,
-4.000000, 4.800000, 0.282353, 0.282353, 0.282353, 1.000000, -0.099976,
-0.100000, -2.400000, -4.000000, 6.400001, 0.254902, 0.254902, 0.254902,
1.000000, -0.500000, -0.100000, -4.000000, -4.000000, 6.400000,
0.239216, 0.239216, 0.239216, 1.000000, -0.099976, -0.500000, -2.400000,
-4.000000, 8.000000, 0.227451, 0.227451, 0.227451, 1.000000, -0.500000,
-0.500000, -4.000000, -4.000000, 8.000000,
0.239216, 0.239216, 0.239216, 1.000000, 1.099976, -0.500000, 2.400001,
-4.000000, 8.000000, 0.227451, 0.227451, 0.227451, 1.000000, 1.500000,
-0.500000, 4.000002, -4.000000, 8.000000, 0.282353, 0.282353, 0.282353,
1.000000, 1.099976, -0.100000, 2.400001, -4.000000, 6.400001, 0.254902,
0.254902, 0.254902, 1.000000, 1.500000, -0.100000, 4.000002, -4.000000,
6.400001, 0.352941, 0.352941, 0.352941, 1.000000, 1.099976, 0.300000,
2.400002, -4.000000, 4.800001, 0.282353, 0.282353, 0.282353, 1.000000,
1.500000, 0.300000, 4.000002, -4.000000, 4.800001, 0.498039, 0.498039,
0.498039, 1.000000, 1.099976, 0.700000, 2.400002, -4.000000, 3.200000,
0.321569, 0.321569, 0.321569, 1.000000, 1.500000, 0.700000, 4.000003,
-4.000000, 3.200000, 0.568627, 0.568627, 0.568627, 1.000000, 1.099976,
1.100000, 2.400002, -4.000000, 1.599999, 0.341176, 0.341176, 0.341176,
1.000000, 1.500000, 1.100000, 4.000003, -4.000000, 1.599999, 0.494118,
0.494118, 0.494118, 1.000000, 1.099976, 1.500000, 2.400003, -4.000000,
-0.000002, 0.337255, 0.337255, 0.337255, 1.000000, 1.500000, 1.500000,
4.000004, -4.000000, -0.000002,
0.639216, 0.639216, 0.639216, 1.000000, 0.300049, 1.500000, -0.799999,
-4.000000, -0.000002, 0.498039, 0.498039, 0.498039, 1.000000, -0.099976,
1.500000, -2.400000, -4.000000, -0.000002, 0.858824, 0.858824, 0.858824,
1.000000, 0.300049, 1.100000, -0.799999, -4.000000, 1.599999, 0.568627,
0.568627, 0.568627, 1.000000, -0.099976, 1.100000, -2.400000, -4.000000,
1.599999, 0.686275, 0.686275, 0.686275, 1.000000, 0.300049, 0.700000,
-0.799999, -4.000000, 3.200000, 0.498039, 0.498039, 0.498039, 1.000000,
-0.099976, 0.700000, -2.400000, -4.000000, 3.200000, 0.419608, 0.419608,
0.419608, 1.000000, 0.300049, 0.300000, -0.800000, -4.000000, 4.800000,
0.352941, 0.352941, 0.352941, 1.000000, -0.099976, 0.300000, -2.400000,
-4.000000, 4.800000, 0.298039, 0.298039, 0.298039, 1.000000, 0.300049,
-0.100000, -0.800000, -4.000000, 6.400001, 0.282353, 0.282353, 0.282353,
1.000000, -0.099976, -0.100000, -2.400000, -4.000000, 6.400001,
0.247059, 0.247059, 0.247059, 1.000000, 0.300049, -0.500000, -0.800000,
-4.000000, 8.000000, 0.239216, 0.239216, 0.239216, 1.000000, -0.099976,
-0.500000, -2.400000, -4.000000, 8.000000,
0.639216, 0.639216, 0.639216, 1.000000, 0.699951, 1.500000, 0.800002,
-4.000000, -0.000002, 0.639216, 0.639216, 0.639216, 1.000000, 0.300049,
1.500000, -0.799999, -4.000000, -0.000002, 0.858824, 0.858824, 0.858824,
1.000000, 0.699951, 1.100000, 0.800001, -4.000000, 1.599999, 0.858824,
0.858824, 0.858824, 1.000000, 0.300049, 1.100000, -0.799999, -4.000000,
1.599999, 0.686275, 0.686275, 0.686275, 1.000000, 0.699951, 0.700000,
0.800001, -4.000000, 3.200000, 0.686275, 0.686275, 0.686275, 1.000000,
0.300049, 0.700000, -0.799999, -4.000000, 3.200000, 0.419608, 0.419608,
0.419608, 1.000000, 0.699951, 0.300000, 0.800001, -4.000000, 4.800001,
0.419608, 0.419608, 0.419608, 1.000000, 0.300049, 0.300000, -0.800000,
-4.000000, 4.800000, 0.298039, 0.298039, 0.298039, 1.000000, 0.699951,
-0.100000, 0.800001, -4.000000, 6.400001, 0.298039, 0.298039, 0.298039,
1.000000, 0.300049, -0.100000, -0.800000, -4.000000, 6.400001, 0.247059,
0.247059, 0.247059, 1.000000, 0.699951, -0.500000, 0.800000, -4.000000,
8.000000, 0.247059, 0.247059, 0.247059, 1.000000, 0.300049, -0.500000,
-0.800000, -4.000000, 8.000000,
0.494118, 0.494118, 0.494118, 1.000000, 1.099976, 1.500000, 2.400003,
-4.000000, -0.000002, 0.639216, 0.639216, 0.639216, 1.000000, 0.699951,
1.500000, 0.800002, -4.000000, -0.000002, 0.568627, 0.568627, 0.568627,
1.000000, 1.099976, 1.100000, 2.400002, -4.000000, 1.599999, 0.858824,
0.858824, 0.858824, 1.000000, 0.699951, 1.100000, 0.800001, -4.000000,
1.599999, 0.498039, 0.498039, 0.498039, 1.000000, 1.099976, 0.700000,
2.400002, -4.000000, 3.200000, 0.686275, 0.686275, 0.686275, 1.000000,
0.699951, 0.700000, 0.800001, -4.000000, 3.200000, 0.352941, 0.352941,
0.352941, 1.000000, 1.099976, 0.300000, 2.400002, -4.000000, 4.800001,
0.419608, 0.419608, 0.419608, 1.000000, 0.699951, 0.300000, 0.800001,
-4.000000, 4.800001, 0.282353, 0.282353, 0.282353, 1.000000, 1.099976,
-0.100000, 2.400001, -4.000000, 6.400001, 0.298039, 0.298039, 0.298039,
1.000000, 0.699951, -0.100000, 0.800001, -4.000000, 6.400001, 0.239216,
0.239216, 0.239216, 1.000000, 1.099976, -0.500000, 2.400001, -4.000000,
8.000000, 0.247059, 0.247059, 0.247059, 1.000000, 0.699951, -0.500000,
0.800000, -4.000000, 8.000000
};
/* Object: skin_11 */
static const int striplength_skin_11[] = {
12, 12, 12, 12, 12, 0
};
static const float stripdata_skin_11[] = {
0.145098, 0.145098, 0.145098, 1.000000, -0.099976, 1.500000, -2.400000,
4.000002, 0.000000, 0.141176, 0.141176, 0.141176, 1.000000, -0.500000,
1.500000, -4.000000, 4.000002, 0.000000, 0.176471, 0.176471, 0.176471,
1.000000, -0.099976, 1.100000, -2.400000, 2.400001, 0.000000, 0.145098,
0.145098, 0.145098, 1.000000, -0.500000, 1.100000, -4.000000, 2.400001,
0.000000, 0.341176, 0.341176, 0.341176, 1.000000, -0.099976, 0.700000,
-2.400000, 0.800000, 0.000000, 0.188235, 0.188235, 0.188235, 1.000000,
-0.500000, 0.700000, -4.000000, 0.800000, 0.000000, 0.450980, 0.450980,
0.450980, 1.000000, -0.099976, 0.300000, -2.400000, -0.800000, 0.000000,
0.247059, 0.247059, 0.247059, 1.000000, -0.500000, 0.300000, -4.000000,
-0.800000, 0.000000, 0.439216, 0.439216, 0.439216, 1.000000, -0.099976,
-0.100000, -2.400000, -2.400000, 0.000000, 0.270588, 0.270588, 0.270588,
1.000000, -0.500000, -0.100000, -4.000000, -2.400000, 0.000000,
0.364706, 0.364706, 0.364706, 1.000000, -0.099976, -0.500000, -2.400000,
-4.000000, 0.000000, 0.258824, 0.258824, 0.258824, 1.000000, -0.500000,
-0.500000, -4.000000, -4.000000, 0.000000,
0.364706, 0.364706, 0.364706, 1.000000, 1.099976, -0.500000, 2.400001,
-4.000000, 0.000000, 0.258824, 0.258824, 0.258824, 1.000000, 1.500000,
-0.500000, 4.000002, -4.000000, 0.000000, 0.439216, 0.439216, 0.439216,
1.000000, 1.099976, -0.100000, 2.400001, -2.400001, 0.000000, 0.270588,
0.270588, 0.270588, 1.000000, 1.500000, -0.100000, 4.000002, -2.400001,
0.000000, 0.454902, 0.454902, 0.454902, 1.000000, 1.099976, 0.300000,
2.400002, -0.800000, 0.000000, 0.247059, 0.247059, 0.247059, 1.000000,
1.500000, 0.300000, 4.000002, -0.800000, 0.000000, 0.341176, 0.341176,
0.341176, 1.000000, 1.099976, 0.700000, 2.400002, 0.800000, 0.000000,
0.184314, 0.184314, 0.184314, 1.000000, 1.500000, 0.700000, 4.000003,
0.800000, 0.000000, 0.176471, 0.176471, 0.176471, 1.000000, 1.099976,
1.100000, 2.400002, 2.400001, 0.000000, 0.145098, 0.145098, 0.145098,
1.000000, 1.500000, 1.100000, 4.000003, 2.400001, 0.000000, 0.145098,
0.145098, 0.145098, 1.000000, 1.099976, 1.500000, 2.400003, 4.000003,
0.000000, 0.141176, 0.141176, 0.141176, 1.000000, 1.500000, 1.500000,
4.000004, 4.000002, 0.000000,
0.145098, 0.145098, 0.145098, 1.000000, 0.300049, 1.500000, -0.799999,
4.000002, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, -0.099976,
1.500000, -2.400000, 4.000002, 0.000000, 0.262745, 0.262745, 0.262745,
1.000000, 0.300049, 1.100000, -0.799999, 2.400001, 0.000000, 0.176471,
0.176471, 0.176471, 1.000000, -0.099976, 1.100000, -2.400000, 2.400001,
0.000000, 0.580392, 0.580392, 0.580392, 1.000000, 0.300049, 0.700000,
-0.799999, 0.800000, 0.000000, 0.341176, 0.341176, 0.341176, 1.000000,
-0.099976, 0.700000, -2.400000, 0.800000, 0.000000, 0.709804, 0.709804,
0.709804, 1.000000, 0.300049, 0.300000, -0.800000, -0.800000, 0.000000,
0.450980, 0.450980, 0.450980, 1.000000, -0.099976, 0.300000, -2.400000,
-0.800000, 0.000000, 0.627451, 0.627451, 0.627451, 1.000000, 0.300049,
-0.100000, -0.800000, -2.400001, 0.000000, 0.439216, 0.439216, 0.439216,
1.000000, -0.099976, -0.100000, -2.400000, -2.400000, 0.000000,
0.458824, 0.458824, 0.458824, 1.000000, 0.300049, -0.500000, -0.800000,
-4.000000, 0.000000, 0.364706, 0.364706, 0.364706, 1.000000, -0.099976,
-0.500000, -2.400000, -4.000000, 0.000000,
0.145098, 0.145098, 0.145098, 1.000000, 0.699951, 1.500000, 0.800002,
4.000002, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, 0.300049,
1.500000, -0.799999, 4.000002, 0.000000, 0.262745, 0.262745, 0.262745,
1.000000, 0.699951, 1.100000, 0.800001, 2.400001, 0.000000, 0.262745,
0.262745, 0.262745, 1.000000, 0.300049, 1.100000, -0.799999, 2.400001,
0.000000, 0.580392, 0.580392, 0.580392, 1.000000, 0.699951, 0.700000,
0.800001, 0.800000, 0.000000, 0.580392, 0.580392, 0.580392, 1.000000,
0.300049, 0.700000, -0.799999, 0.800000, 0.000000, 0.713726, 0.713726,
0.713726, 1.000000, 0.699951, 0.300000, 0.800001, -0.800000, 0.000000,
0.709804, 0.709804, 0.709804, 1.000000, 0.300049, 0.300000, -0.800000,
-0.800000, 0.000000, 0.631373, 0.631373, 0.631373, 1.000000, 0.699951,
-0.100000, 0.800001, -2.400001, 0.000000, 0.627451, 0.627451, 0.627451,
1.000000, 0.300049, -0.100000, -0.800000, -2.400001, 0.000000, 0.458824,
0.458824, 0.458824, 1.000000, 0.699951, -0.500000, 0.800000, -4.000000,
0.000000, 0.458824, 0.458824, 0.458824, 1.000000, 0.300049, -0.500000,
-0.800000, -4.000000, 0.000000,
0.145098, 0.145098, 0.145098, 1.000000, 1.099976, 1.500000, 2.400003,
4.000003, 0.000000, 0.145098, 0.145098, 0.145098, 1.000000, 0.699951,
1.500000, 0.800002, 4.000002, 0.000000, 0.176471, 0.176471, 0.176471,
1.000000, 1.099976, 1.100000, 2.400002, 2.400001, 0.000000, 0.262745,
0.262745, 0.262745, 1.000000, 0.699951, 1.100000, 0.800001, 2.400001,
0.000000, 0.341176, 0.341176, 0.341176, 1.000000, 1.099976, 0.700000,
2.400002, 0.800000, 0.000000, 0.580392, 0.580392, 0.580392, 1.000000,
0.699951, 0.700000, 0.800001, 0.800000, 0.000000, 0.454902, 0.454902,
0.454902, 1.000000, 1.099976, 0.300000, 2.400002, -0.800000, 0.000000,
0.713726, 0.713726, 0.713726, 1.000000, 0.699951, 0.300000, 0.800001,
-0.800000, 0.000000, 0.439216, 0.439216, 0.439216, 1.000000, 1.099976,
-0.100000, 2.400001, -2.400001, 0.000000, 0.631373, 0.631373, 0.631373,
1.000000, 0.699951, -0.100000, 0.800001, -2.400001, 0.000000, 0.364706,
0.364706, 0.364706, 1.000000, 1.099976, -0.500000, 2.400001, -4.000000,
0.000000, 0.458824, 0.458824, 0.458824, 1.000000, 0.699951, -0.500000,
0.800000, -4.000000, 0.000000
};
/* Object: skin_9 */
static const int striplength_skin_9[] = {
18, 0
};
static const float stripdata_skin_9[] = {
0.384314, 0.384314, 0.384314, 1.000000, -0.500000, 1.500000, -4.000000,
4.000000, 8.000000, 0.384314, 0.384314, 0.384314, 1.000000, 1.500000,
1.500000, 4.000000, 4.000000, 8.000000, 0.376471, 0.376471, 0.376471,
1.000000, -0.500000, 1.250000, -4.000000, 3.695518, 9.530733, 0.403922,
0.403922, 0.403922, 1.000000, 1.500000, 1.250000, 4.000000, 3.695518,
9.530733, 0.415686, 0.415686, 0.415686, 1.000000, -0.500000, 1.000000,
-4.000000, 2.828427, 10.828427, 0.431373, 0.431373, 0.431373, 1.000000,
1.500000, 1.000000, 4.000000, 2.828427, 10.828427, 0.435294, 0.435294,
0.435294, 1.000000, -0.500000, 0.750000, -4.000000, 1.530734, 11.695518,
0.443137, 0.443137, 0.443137, 1.000000, 1.500000, 0.750000, 4.000000,
1.530734, 11.695518, 0.439216, 0.439216, 0.439216, 1.000000, -0.500000,
0.500000, -4.000000, 0.000000, 12.000000, 0.435294, 0.435294, 0.435294,
1.000000, 1.500000, 0.500000, 4.000000, 0.000000, 12.000000, 0.427451,
0.427451, 0.427451, 1.000000, -0.500000, 0.250000, -4.000000, -1.530734,
11.695518, 0.411765, 0.411765, 0.411765, 1.000000, 1.500000, 0.250000,
4.000000, -1.530734, 11.695518, 0.396078, 0.396078, 0.396078, 1.000000,
-0.500000, 0.000000, -4.000000, -2.828427, 10.828427, 0.368627,
0.368627, 0.368627, 1.000000, 1.500000, 0.000000, 4.000000, -2.828427,
10.828427, 0.341176, 0.341176, 0.341176, 1.000000, -0.500000, -0.250000,
-4.000000, -3.695518, 9.530733, 0.301961, 0.301961, 0.301961, 1.000000,
1.500000, -0.250000, 4.000000, -3.695518, 9.530733, 0.294118, 0.294118,
0.294118, 1.000000, -0.500000, -0.500000, -4.000000, -4.000000,
8.000000, 0.294118, 0.294118, 0.294118, 1.000000, 1.500000, -0.500000,
4.000000, -4.000000, 8.000000
};

View File

@@ -1,4 +1,4 @@
/* $Id: winpos.c,v 1.2 2000/06/27 17:04:43 brianp Exp $ */
/* $Id: winpos.c,v 1.3 2000/12/24 22:53:54 pesco Exp $ */
/*
* Example of how to use the GL_MESA_window_pos extension.
@@ -8,6 +8,32 @@
/*
* $Log: winpos.c,v $
* Revision 1.3 2000/12/24 22:53:54 pesco
* * demos/Makefile.am (INCLUDES): Added -I$(top_srcdir)/util.
* * demos/Makefile.X11, demos/Makefile.BeOS-R4, demos/Makefile.cygnus:
* Essentially the same.
* Program files updated to include "readtex.c", not "../util/readtex.c".
* * demos/reflect.c: Likewise for "showbuffer.c".
*
*
* * Makefile.am (EXTRA_DIST): Added top-level regular files.
*
* * include/GL/Makefile.am (INC_X11): Added glxext.h.
*
*
* * src/GGI/include/ggi/mesa/Makefile.am (EXTRA_HEADERS): Include
* Mesa GGI headers in dist even if HAVE_GGI is not given.
*
* * configure.in: Look for GLUT and demo source dirs in $srcdir.
*
* * src/swrast/Makefile.am (libMesaSwrast_la_SOURCES): Set to *.[ch].
* More source list updates in various Makefile.am's.
*
* * Makefile.am (dist-hook): Remove CVS directory from distribution.
* (DIST_SUBDIRS): List all possible subdirs here.
* (SUBDIRS): Only list subdirs selected for build again.
* The above two applied to all subdir Makefile.am's also.
*
* Revision 1.2 2000/06/27 17:04:43 brianp
* fixed compiler warnings
*
@@ -36,7 +62,7 @@
#define GL_GLEXT_LEGACY
#include "GL/glut.h"
#include "../util/readtex.c" /* a hack, I know */
#include "readtex.c" /* a hack, I know */
#define IMAGE_FILE "../images/girl.rgb"

View File

@@ -43,6 +43,21 @@
* of the scene. Within this mask, a different model
* (a sphere) is drawn in a different color.
*/
/*
* !!! NOTE !!!
*
* This demo is poorly written. The stencil buffer should be
* redrawn in display(), not in the myReshape() function.
* The reason is if the window gets "damaged" then the stencil buffer
* contents will be in an undefined state (myReshape is not called when
* a window is damaged and needs to be redrawn). If the stencil buffer
* contents are undefined, the results of display() are unpredictable.
*
* -Brian
*/
#include <stdlib.h>
#include <GL/glut.h>
@@ -90,6 +105,8 @@ void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
/* draw blue sphere where the stencil is 1 */
glStencilFunc (GL_EQUAL, 0x1, 0x1);
glCallList (BLUEMAT);
@@ -97,7 +114,6 @@ void display(void)
/* draw the tori where the stencil is not 1 */
glStencilFunc (GL_NOTEQUAL, 0x1, 0x1);
glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
glPushMatrix();
glRotatef (45.0, 0.0, 0.0, 1.0);
glRotatef (45.0, 0.0, 1.0, 0.0);
@@ -110,6 +126,7 @@ void display(void)
glPopMatrix();
glFlush();
glutSwapBuffers();
}
/* Whenever the window is reshaped, redefine the
@@ -164,7 +181,7 @@ key(unsigned char k, int x, int y)
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize (400, 400);
glutCreateWindow (argv[0]);
myinit ();

View File

@@ -29,28 +29,18 @@
#include <math.h>
#include <stdlib.h>
#include <GL/glut.h>
#include "../util/readtex.c"
#define FALSE 0
#define TRUE 1
#ifndef PI
#define PI 3.14159265358979323846
#endif
#include "loadppm.c"
int rgb; /* unused */
#include "tkmap.c"
GLenum doubleBuffer;
int W = 400, H = 400;
char *imageFileName = 0;
PPMImage *image;
int numComponents;
char *imageFileName = "../images/reflect.rgb";
float *minFilter, *magFilter, *sWrapMode, *tWrapMode;
float decal[] = {GL_DECAL};
@@ -66,18 +56,13 @@ float linear_mipmap_linear[] = {GL_LINEAR_MIPMAP_LINEAR};
GLint sphereMap[] = {GL_SPHERE_MAP};
float xRotation = 0.0, yRotation = 0.0;
float zTranslate = -4.0;
GLenum autoRotate = TRUE;
GLenum deepestColor = COLOR_GREEN;
GLenum isLit = TRUE;
GLenum isFogged = FALSE;
float zTranslate = -3.0;
GLenum autoRotate = GL_TRUE;
GLboolean isLit = GL_TRUE;
GLboolean isFogged = GL_FALSE;
GLboolean doTexture = GL_TRUE;
float *textureEnvironment = modulate;
struct MipMap {
int width, height;
unsigned char *data;
};
int cube, cage, cylinder, torus, genericObject;
float c[6][4][4][3] = {
@@ -661,18 +646,6 @@ void BuildLists(void)
genericObject = torus;
}
void SetDeepestColor(void)
{
GLint redBits, greenBits, blueBits;
glGetIntegerv(GL_RED_BITS, &redBits);
glGetIntegerv(GL_GREEN_BITS, &greenBits);
glGetIntegerv(GL_BLUE_BITS, &blueBits);
deepestColor = (redBits >= greenBits) ? COLOR_RED : COLOR_GREEN;
deepestColor = (deepestColor >= blueBits) ? deepestColor : COLOR_BLUE;
}
void SetDefaultSettings(void)
{
@@ -681,7 +654,7 @@ void SetDefaultSettings(void)
sWrapMode = repeat;
tWrapMode = repeat;
textureEnvironment = modulate;
autoRotate = TRUE;
autoRotate = GL_TRUE;
}
unsigned char *AlphaPadImage(int bufSize, unsigned char *inData, int alpha)
@@ -707,46 +680,46 @@ unsigned char *AlphaPadImage(int bufSize, unsigned char *inData, int alpha)
void Init(void)
{
float ambient[] = {0.0, 0.0, 0.0, 1.0};
float diffuse[] = {0.0, 1.0, 0.0, 1.0};
float diffuse[] = {1.0, 1.0, 1.0, 1.0};
float specular[] = {1.0, 1.0, 1.0, 1.0};
float position[] = {2.0, 2.0, 0.0, 1.0};
float position[] = {0.0, 0.0, 4.0, 0.0};
float fog_color[] = {0.0, 0.0, 0.0, 1.0};
float mat_ambient[] = {0.0, 0.0, 0.0, 1.0};
float mat_shininess[] = {90.0};
float mat_specular[] = {1.0, 1.0, 1.0, 1.0};
float mat_diffuse[] = {1.0, 1.0, 1.0, 1.0};
float lmodel_ambient[] = {0.0, 0.0, 0.0, 1.0};
float mat_diffuse[] = {0.8, 0.8, 0.8, 1.0};
float lmodel_ambient[] = {0.2, 0.2, 0.2, 1.0};
float lmodel_twoside[] = {GL_TRUE};
int w, h;
GLenum format;
GLubyte *image;
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
SetDeepestColor();
SetDefaultSettings();
if (numComponents == 4) {
image = LoadPPM(imageFileName);
image->data = AlphaPadImage(image->sizeX*image->sizeY,
image->data, 128);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents,
image->sizeX, image->sizeY,
GL_RGBA, GL_UNSIGNED_BYTE, image->data);
} else {
image = LoadPPM(imageFileName);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
gluBuild2DMipmaps(GL_TEXTURE_2D, numComponents,
image->sizeX, image->sizeY,
GL_RGB, GL_UNSIGNED_BYTE, image->data);
image = LoadRGBImage(imageFileName, &w, &h, &format);
if (!image) {
printf("Error: couldn't load %s\n", imageFileName);
exit(1);
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
gluBuild2DMipmaps(GL_TEXTURE_2D, format, w, h,
GL_RGB, GL_UNSIGNED_BYTE, image);
free(image);
glFogf(GL_FOG_DENSITY, 0.125);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_START, 4.0);
glFogf(GL_FOG_END, 9.0);
glFogf(GL_FOG_END, 8.5);
glFogfv(GL_FOG_COLOR, fog_color);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
glLightfv(GL_LIGHT0, GL_POSITION, position);
glEnable(GL_LIGHT0);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
@@ -757,18 +730,14 @@ void Init(void)
glLightModelfv(GL_LIGHT_MODEL_TWO_SIDE, lmodel_twoside);
glShadeModel(GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glClearColor(0.0, 0.0, 0.0, 0.0);
glViewport(0, 0, W, H);
glEnable(GL_DEPTH_TEST);
glFrontFace(GL_CW);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_TEXTURE_2D);
glTexGeniv(GL_S, GL_TEXTURE_GEN_MODE, sphereMap);
glTexGeniv(GL_T, GL_TEXTURE_GEN_MODE, sphereMap);
glEnable(GL_TEXTURE_GEN_S);
@@ -786,15 +755,18 @@ void Init(void)
void ReInit(void)
{
if (genericObject == torus) {
glEnable(GL_DEPTH_TEST);
} else {
glDisable(GL_DEPTH_TEST);
}
glEnable(GL_DEPTH_TEST);
#if 0
if (isFogged) {
textureEnvironment = modulate;
}
#endif
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter);
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter);
@@ -803,59 +775,54 @@ void ReInit(void)
void Draw(void)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-0.2, 0.2, -0.2, 0.2, 0.15, 9.0);
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if (isFogged) {
/* draw cage */
if (isFogged)
glEnable(GL_FOG);
glColor3fv(RGBMap[deepestColor]);
} else {
glColor3fv(RGBMap[COLOR_WHITE]);
}
else
glDisable(GL_FOG);
glColor3f(1, 1, 1);
glDisable(GL_LIGHTING);
glDisable(GL_LIGHT0);
glDisable(GL_TEXTURE_2D);
glCallList(cage);
glPushMatrix();
glTranslatef(0.0, 0.0, zTranslate);
glRotatef(xRotation, 1, 0, 0);
glRotatef(yRotation, 0, 1, 0);
if (isLit == TRUE) {
/* draw object */
if (isLit)
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
}
glEnable(GL_TEXTURE_2D);
if (isFogged) {
glDisable(GL_FOG);
}
glPolygonMode(GL_FRONT, GL_FILL);
glColor3fv(RGBMap[deepestColor]);
glCallList(genericObject);
else
glColor3f(1.0, 0.5, 0.2);
if (doTexture)
glEnable(GL_TEXTURE_2D);
glPushMatrix();
glTranslatef(0.0, 0.0, zTranslate);
glRotatef(xRotation, 1, 0, 0);
glRotatef(yRotation, 0, 1, 0);
glCallList(genericObject);
glPopMatrix();
glFlush();
if (autoRotate) {
xRotation += .75;
yRotation += .375;
}
glFlush();
glutSwapBuffers();
}
void Reshape(int width, int height)
{
W = width;
H = height;
ReInit();
glViewport( 0, 0, width, height ); /*new*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-0.2, 0.2, -0.2, 0.2, 0.15, 9.0);
glMatrixMode(GL_MODELVIEW);
}
void Idle(void)
{
xRotation += .75;
yRotation += .375;
glutPostRedisplay();
}
void Key2(int key, int x, int y)
@@ -864,27 +831,28 @@ void Key2(int key, int x, int y)
switch (key) {
case GLUT_KEY_LEFT:
yRotation -= 0.5;
autoRotate = FALSE;
autoRotate = GL_FALSE;
ReInit();
break;
case GLUT_KEY_RIGHT:
yRotation += 0.5;
autoRotate = FALSE;
autoRotate = GL_FALSE;
ReInit();
break;
case GLUT_KEY_UP:
xRotation -= 0.5;
autoRotate = FALSE;
autoRotate = GL_FALSE;
ReInit();
break;
case GLUT_KEY_DOWN:
xRotation += 0.5;
autoRotate = FALSE;
autoRotate = GL_FALSE;
ReInit();
break;
default:
return;
}
glutPostRedisplay();
}
void Key(unsigned char key, int x, int y)
@@ -892,15 +860,28 @@ void Key(unsigned char key, int x, int y)
switch (key) {
case 27:
free(image->data);
/* free(image->data);*/
exit(1);
case 'a':
autoRotate = !autoRotate;
if (autoRotate)
glutIdleFunc(Idle);
else
glutIdleFunc(NULL);
ReInit();
break;
case 'c':
genericObject = (genericObject == cube) ? cylinder : cube;
case 'o':
if (genericObject == cube) {
genericObject = cylinder;
}
else if (genericObject == cylinder) {
genericObject = torus;
}
else {
genericObject = cube;
}
ReInit();
break;
case 'd':
@@ -920,7 +901,7 @@ void Key(unsigned char key, int x, int y)
ReInit();
break;
case 't':
genericObject = torus;
doTexture = !doTexture;
ReInit();
break;
case '0':
@@ -958,6 +939,7 @@ void Key(unsigned char key, int x, int y)
default:
return;
}
glutPostRedisplay();
}
GLenum Args(int argc, char **argv)
@@ -965,7 +947,6 @@ GLenum Args(int argc, char **argv)
GLint i;
doubleBuffer = GL_TRUE;
numComponents = 4;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-sb") == 0) {
@@ -979,10 +960,6 @@ GLenum Args(int argc, char **argv)
} else {
imageFileName = argv[++i];
}
} else if (strcmp(argv[i], "-4") == 0) {
numComponents = 4;
} else if (strcmp(argv[i], "-3") == 0) {
numComponents = 3;
} else {
printf("%s (Bad option).\n", argv[i]);
return GL_FALSE;
@@ -991,11 +968,6 @@ GLenum Args(int argc, char **argv)
return GL_TRUE;
}
void GLUTCALLBACK glut_post_redisplay_p(void)
{
glutPostRedisplay();
}
int main(int argc, char **argv)
{
GLenum type;
@@ -1027,7 +999,7 @@ int main(int argc, char **argv)
glutKeyboardFunc(Key);
glutSpecialFunc(Key2);
glutDisplayFunc(Draw);
glutIdleFunc(glut_post_redisplay_p);
glutIdleFunc(Idle);
glutMainLoop();
return 0;

View File

@@ -129,6 +129,9 @@ void MoveStars(void)
if (stars[n].rotation > MAXANGLES) {
stars[n].rotation = 0.0;
}
else if (stars[n].rotation < 0.0) {
stars[n].rotation += 360.0;
}
}
}

38
progs/tests/Makefile Normal file
View File

@@ -0,0 +1,38 @@
# Simple makefile for compiling test programs on Linux
# These programs aren't intended to be included with the normal
# distro as they're not too interesting but good for testing during
# development.
CC = gcc
CFLAGS = -g -I../include
LIBS = -L../lib -lglut -lGLU -lGL -L/usr/X11R6/lib -lX11 -lXext -lm
PROGS = cva \
dinoshade \
fogcoord \
manytex \
multipal \
projtex \
seccolor \
sharedtex \
texline
##### RULES #####
.SUFFIXES:
.SUFFIXES: .c
.c:
$(CC) $(CFLAGS) $< $(LIBS) -o $@
##### TARGETS #####
default: $(PROGS)
clean:
rm -f $(PROGS)
rm -f *.o

154
progs/tests/cva.c Normal file
View File

@@ -0,0 +1,154 @@
/* $Id: cva.c,v 1.3 2000/11/30 03:06:56 gareth Exp $ */
/*
* Trivial CVA test, good for testing driver fastpaths (especially
* indexed vertex buffers if they are supported).
*
* Gareth Hughes
* November 2000
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define GL_GLEXT_LEGACY
#include <GL/glut.h>
GLfloat verts[][4] = {
{ -0.5, -0.5, -2.0, 0.0 },
{ 0.5, -0.5, -2.0, 0.0 },
{ -0.5, 0.5, -2.0, 0.0 },
{ 0.5, 0.5, -2.0, 0.0 },
};
GLubyte color[][4] = {
{ 0xff, 0x00, 0x00, 0x00 },
{ 0x00, 0xff, 0x00, 0x00 },
{ 0x00, 0x00, 0xff, 0x00 },
{ 0xff, 0xff, 0xff, 0x00 },
};
GLuint indices[] = { 0, 1, 2, 3 };
GLboolean compiled = GL_TRUE;
GLboolean doubleBuffer = GL_TRUE;
void init( void )
{
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glShadeModel( GL_SMOOTH );
glFrontFace( GL_CCW );
glCullFace( GL_BACK );
glEnable( GL_CULL_FACE );
glEnable( GL_DEPTH_TEST );
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_COLOR_ARRAY );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 2.0, 10.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glVertexPointer( 3, GL_FLOAT, sizeof(verts[0]), verts );
glColorPointer( 4, GL_UNSIGNED_BYTE, 0, color );
#ifdef GL_EXT_compiled_vertex_array
if ( compiled ) {
glLockArraysEXT( 0, 4 );
}
#endif
}
void display( void )
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glDrawElements( GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices );
glFlush();
if ( doubleBuffer ) {
glutSwapBuffers();
}
}
void keyboard( unsigned char key, int x, int y )
{
switch ( key ) {
case 27:
exit( 0 );
break;
}
glutPostRedisplay();
}
GLboolean args( int argc, char **argv )
{
GLint i;
doubleBuffer = GL_TRUE;
for ( i = 1 ; i < argc ; i++ ) {
if ( strcmp( argv[i], "-sb" ) == 0 ) {
doubleBuffer = GL_FALSE;
} else if ( strcmp( argv[i], "-db" ) == 0 ) {
doubleBuffer = GL_TRUE;
} else {
fprintf( stderr, "%s (Bad option).\n", argv[i] );
return GL_FALSE;
}
}
return GL_TRUE;
}
int main( int argc, char **argv )
{
GLenum type;
char *string;
glutInit( &argc, argv );
if ( args( argc, argv ) == GL_FALSE ) {
exit( 1 );
}
type = GLUT_RGB | GLUT_DEPTH;
type |= ( doubleBuffer ) ? GLUT_DOUBLE : GLUT_SINGLE;
glutInitDisplayMode( type );
glutInitWindowSize( 250, 250 );
glutInitWindowPosition( 100, 100 );
glutCreateWindow( "CVA Test" );
/* Make sure the server supports GL 1.2 vertex arrays.
*/
string = (char *) glGetString( GL_VERSION );
if ( !strstr( string, "1.2" ) ) {
fprintf( stderr, "This program requires OpenGL 1.2 vertex arrays.\n" );
exit( -1 );
}
/* See if the server supports compiled vertex arrays.
*/
string = (char *) glGetString( GL_EXTENSIONS );
if ( !strstr( string, "GL_EXT_compiled_vertex_array" ) ) {
fprintf( stderr, "Compiled vertex arrays not supported by this renderer.\n" );
compiled = GL_FALSE;
}
init();
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}

891
progs/tests/dinoshade.c Normal file
View File

@@ -0,0 +1,891 @@
/* Copyright (c) Mark J. Kilgard, 1994, 1997. */
/* This program is freely distributable without licensing fees
and is provided without guarantee or warrantee expressed or
implied. This program is -not- in the public domain. */
/* Example for PC game developers to show how to *combine* texturing,
reflections, and projected shadows all in real-time with OpenGL.
Robust reflections use stenciling. Robust projected shadows
use both stenciling and polygon offset. PC game programmers
should realize that neither stenciling nor polygon offset are
supported by Direct3D, so these real-time rendering algorithms
are only really viable with OpenGL.
The program has modes for disabling the stenciling and polygon
offset uses. It is worth running this example with these features
toggled off so you can see the sort of artifacts that result.
Notice that the floor texturing, reflections, and shadowing
all co-exist properly. */
/* When you run this program: Left mouse button controls the
view. Middle mouse button controls light position (left &
right rotates light around dino; up & down moves light
position up and down). Right mouse button pops up menu. */
/* Check out the comments in the "redraw" routine to see how the
reflection blending and surface stenciling is done. You can
also see in "redraw" how the projected shadows are rendered,
including the use of stenciling and polygon offset. */
/* This program is derived from glutdino.c */
/* Compile: cc -o dinoshade dinoshade.c -lglut -lGLU -lGL -lXmu -lXext -lX11 -lm */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> /* for cos(), sin(), and sqrt() */
#include <GL/glut.h> /* OpenGL Utility Toolkit header */
/* Some <math.h> files do not define M_PI... */
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
/* Variable controlling various rendering modes. */
static int stencilReflection = 1, stencilShadow = 1, offsetShadow = 1;
static int renderShadow = 1, renderDinosaur = 1, renderReflection = 1;
static int linearFiltering = 0, useMipmaps = 0, useTexture = 1;
static int reportSpeed = 0;
static int animation = 1;
static GLboolean lightSwitch = GL_TRUE;
static int directionalLight = 1;
static int forceExtension = 0;
/* Time varying or user-controled variables. */
static float jump = 0.0;
static float lightAngle = 0.0, lightHeight = 20;
GLfloat angle = -150; /* in degrees */
GLfloat angle2 = 30; /* in degrees */
int moving, startx, starty;
int lightMoving = 0, lightStartX, lightStartY;
enum {
MISSING, EXTENSION, ONE_DOT_ONE
};
int polygonOffsetVersion;
static GLdouble bodyWidth = 3.0;
/* *INDENT-OFF* */
static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5},
{11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16},
{8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2},
{1, 2} };
static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9},
{15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10},
{13, 9}, {11, 11}, {9, 11} };
static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0},
{12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} };
static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15},
{9.6, 15.25}, {9, 15.25} };
static GLfloat lightPosition[4];
static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */
static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0};
/* *INDENT-ON* */
/* Nice floor texture tiling pattern. */
static char *circles[] = {
"....xxxx........",
"..xxxxxxxx......",
".xxxxxxxxxx.....",
".xxx....xxx.....",
"xxx......xxx....",
"xxx......xxx....",
"xxx......xxx....",
"xxx......xxx....",
".xxx....xxx.....",
".xxxxxxxxxx.....",
"..xxxxxxxx......",
"....xxxx........",
"................",
"................",
"................",
"................",
};
static void
makeFloorTexture(void)
{
GLubyte floorTexture[16][16][3];
GLubyte *loc;
int s, t;
/* Setup RGB image for the texture. */
loc = (GLubyte*) floorTexture;
for (t = 0; t < 16; t++) {
for (s = 0; s < 16; s++) {
if (circles[t][s] == 'x') {
/* Nice green. */
loc[0] = 0x1f;
loc[1] = 0x8f;
loc[2] = 0x1f;
} else {
/* Light gray. */
loc[0] = 0xaa;
loc[1] = 0xaa;
loc[2] = 0xaa;
}
loc += 3;
}
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
if (useMipmaps) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, 16, 16,
GL_RGB, GL_UNSIGNED_BYTE, floorTexture);
} else {
if (linearFiltering) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
} else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
glTexImage2D(GL_TEXTURE_2D, 0, 3, 16, 16, 0,
GL_RGB, GL_UNSIGNED_BYTE, floorTexture);
}
}
enum {
X, Y, Z, W
};
enum {
A, B, C, D
};
/* Create a matrix that will project the desired shadow. */
void
shadowMatrix(GLfloat shadowMat[4][4],
GLfloat groundplane[4],
GLfloat lightpos[4])
{
GLfloat dot;
/* Find dot product between light position vector and ground plane normal. */
dot = groundplane[X] * lightpos[X] +
groundplane[Y] * lightpos[Y] +
groundplane[Z] * lightpos[Z] +
groundplane[W] * lightpos[W];
shadowMat[0][0] = dot - lightpos[X] * groundplane[X];
shadowMat[1][0] = 0.f - lightpos[X] * groundplane[Y];
shadowMat[2][0] = 0.f - lightpos[X] * groundplane[Z];
shadowMat[3][0] = 0.f - lightpos[X] * groundplane[W];
shadowMat[X][1] = 0.f - lightpos[Y] * groundplane[X];
shadowMat[1][1] = dot - lightpos[Y] * groundplane[Y];
shadowMat[2][1] = 0.f - lightpos[Y] * groundplane[Z];
shadowMat[3][1] = 0.f - lightpos[Y] * groundplane[W];
shadowMat[X][2] = 0.f - lightpos[Z] * groundplane[X];
shadowMat[1][2] = 0.f - lightpos[Z] * groundplane[Y];
shadowMat[2][2] = dot - lightpos[Z] * groundplane[Z];
shadowMat[3][2] = 0.f - lightpos[Z] * groundplane[W];
shadowMat[X][3] = 0.f - lightpos[W] * groundplane[X];
shadowMat[1][3] = 0.f - lightpos[W] * groundplane[Y];
shadowMat[2][3] = 0.f - lightpos[W] * groundplane[Z];
shadowMat[3][3] = dot - lightpos[W] * groundplane[W];
}
/* Find the plane equation given 3 points. */
void
findPlane(GLfloat plane[4],
GLfloat v0[3], GLfloat v1[3], GLfloat v2[3])
{
GLfloat vec0[3], vec1[3];
/* Need 2 vectors to find cross product. */
vec0[X] = v1[X] - v0[X];
vec0[Y] = v1[Y] - v0[Y];
vec0[Z] = v1[Z] - v0[Z];
vec1[X] = v2[X] - v0[X];
vec1[Y] = v2[Y] - v0[Y];
vec1[Z] = v2[Z] - v0[Z];
/* find cross product to get A, B, and C of plane equation */
plane[A] = vec0[Y] * vec1[Z] - vec0[Z] * vec1[Y];
plane[B] = -(vec0[X] * vec1[Z] - vec0[Z] * vec1[X]);
plane[C] = vec0[X] * vec1[Y] - vec0[Y] * vec1[X];
plane[D] = -(plane[A] * v0[X] + plane[B] * v0[Y] + plane[C] * v0[Z]);
}
void
extrudeSolidFromPolygon(GLfloat data[][2], unsigned int dataSize,
GLdouble thickness, GLuint side, GLuint edge, GLuint whole)
{
static GLUtriangulatorObj *tobj = NULL;
GLdouble vertex[3], dx, dy, len;
int i;
int count = (int) (dataSize / (2 * sizeof(GLfloat)));
if (tobj == NULL) {
tobj = gluNewTess(); /* create and initialize a GLU
polygon tesselation object */
gluTessCallback(tobj, GLU_BEGIN, glBegin);
gluTessCallback(tobj, GLU_VERTEX, glVertex2fv); /* semi-tricky */
gluTessCallback(tobj, GLU_END, glEnd);
}
glNewList(side, GL_COMPILE);
glShadeModel(GL_SMOOTH); /* smooth minimizes seeing
tessellation */
gluBeginPolygon(tobj);
for (i = 0; i < count; i++) {
vertex[0] = data[i][0];
vertex[1] = data[i][1];
vertex[2] = 0;
gluTessVertex(tobj, vertex, data[i]);
}
gluEndPolygon(tobj);
glEndList();
glNewList(edge, GL_COMPILE);
glShadeModel(GL_FLAT); /* flat shade keeps angular hands
from being "smoothed" */
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= count; i++) {
/* mod function handles closing the edge */
glVertex3f(data[i % count][0], data[i % count][1], 0.0);
glVertex3f(data[i % count][0], data[i % count][1], thickness);
/* Calculate a unit normal by dividing by Euclidean
distance. We * could be lazy and use
glEnable(GL_NORMALIZE) so we could pass in * arbitrary
normals for a very slight performance hit. */
dx = data[(i + 1) % count][1] - data[i % count][1];
dy = data[i % count][0] - data[(i + 1) % count][0];
len = sqrt(dx * dx + dy * dy);
glNormal3f(dx / len, dy / len, 0.0);
}
glEnd();
glEndList();
glNewList(whole, GL_COMPILE);
glFrontFace(GL_CW);
glCallList(edge);
glNormal3f(0.0, 0.0, -1.0); /* constant normal for side */
glCallList(side);
glPushMatrix();
glTranslatef(0.0, 0.0, thickness);
glFrontFace(GL_CCW);
glNormal3f(0.0, 0.0, 1.0); /* opposite normal for other side */
glCallList(side);
glPopMatrix();
glEndList();
}
/* Enumerants for refering to display lists. */
typedef enum {
RESERVED, BODY_SIDE, BODY_EDGE, BODY_WHOLE, ARM_SIDE, ARM_EDGE, ARM_WHOLE,
LEG_SIDE, LEG_EDGE, LEG_WHOLE, EYE_SIDE, EYE_EDGE, EYE_WHOLE
} displayLists;
static void
makeDinosaur(void)
{
extrudeSolidFromPolygon(body, sizeof(body), bodyWidth,
BODY_SIDE, BODY_EDGE, BODY_WHOLE);
extrudeSolidFromPolygon(arm, sizeof(arm), bodyWidth / 4,
ARM_SIDE, ARM_EDGE, ARM_WHOLE);
extrudeSolidFromPolygon(leg, sizeof(leg), bodyWidth / 2,
LEG_SIDE, LEG_EDGE, LEG_WHOLE);
extrudeSolidFromPolygon(eye, sizeof(eye), bodyWidth + 0.2,
EYE_SIDE, EYE_EDGE, EYE_WHOLE);
}
static void
drawDinosaur(void)
{
glPushMatrix();
/* Translate the dinosaur to be at (0,8,0). */
glTranslatef(-8, 0, -bodyWidth / 2);
glTranslatef(0.0, jump, 0.0);
glMaterialfv(GL_FRONT, GL_DIFFUSE, skinColor);
glCallList(BODY_WHOLE);
glTranslatef(0.0, 0.0, bodyWidth);
glCallList(ARM_WHOLE);
glCallList(LEG_WHOLE);
glTranslatef(0.0, 0.0, -bodyWidth - bodyWidth / 4);
glCallList(ARM_WHOLE);
glTranslatef(0.0, 0.0, -bodyWidth / 4);
glCallList(LEG_WHOLE);
glTranslatef(0.0, 0.0, bodyWidth / 2 - 0.1);
glMaterialfv(GL_FRONT, GL_DIFFUSE, eyeColor);
glCallList(EYE_WHOLE);
glPopMatrix();
}
static GLfloat floorVertices[4][3] = {
{ -20.0, 0.0, 20.0 },
{ 20.0, 0.0, 20.0 },
{ 20.0, 0.0, -20.0 },
{ -20.0, 0.0, -20.0 },
};
/* Draw a floor (possibly textured). */
static void
drawFloor(void)
{
glDisable(GL_LIGHTING);
if (useTexture) {
glEnable(GL_TEXTURE_2D);
}
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3fv(floorVertices[0]);
glTexCoord2f(0.0, 16.0);
glVertex3fv(floorVertices[1]);
glTexCoord2f(16.0, 16.0);
glVertex3fv(floorVertices[2]);
glTexCoord2f(16.0, 0.0);
glVertex3fv(floorVertices[3]);
glEnd();
if (useTexture) {
glDisable(GL_TEXTURE_2D);
}
glEnable(GL_LIGHTING);
}
static GLfloat floorPlane[4];
static GLfloat floorShadow[4][4];
static void
redraw(void)
{
int start, end;
if (reportSpeed) {
start = glutGet(GLUT_ELAPSED_TIME);
}
/* Clear; default stencil clears to zero. */
if ((stencilReflection && renderReflection) || (stencilShadow && renderShadow)) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
} else {
/* Avoid clearing stencil when not using it. */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
/* Reposition the light source. */
lightPosition[0] = 12*cos(lightAngle);
lightPosition[1] = lightHeight;
lightPosition[2] = 12*sin(lightAngle);
if (directionalLight) {
lightPosition[3] = 0.0;
} else {
lightPosition[3] = 1.0;
}
shadowMatrix(floorShadow, floorPlane, lightPosition);
glPushMatrix();
/* Perform scene rotations based on user mouse input. */
glRotatef(angle2, 1.0, 0.0, 0.0);
glRotatef(angle, 0.0, 1.0, 0.0);
/* Tell GL new light source position. */
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
if (renderReflection) {
if (stencilReflection) {
/* We can eliminate the visual "artifact" of seeing the "flipped"
dinosaur underneath the floor by using stencil. The idea is
draw the floor without color or depth update but so that
a stencil value of one is where the floor will be. Later when
rendering the dinosaur reflection, we will only update pixels
with a stencil value of 1 to make sure the reflection only
lives on the floor, not below the floor. */
/* Don't update color or depth. */
glDisable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
/* Draw 1 into the stencil buffer. */
glEnable(GL_STENCIL_TEST);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glStencilFunc(GL_ALWAYS, 1, 0xffffffff);
/* Now render floor; floor pixels just get their stencil set to 1. */
drawFloor();
/* Re-enable update of color and depth. */
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glEnable(GL_DEPTH_TEST);
/* Now, only render where stencil is set to 1. */
glStencilFunc(GL_EQUAL, 1, 0xffffffff); /* draw if ==1 */
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
}
glPushMatrix();
/* The critical reflection step: Reflect dinosaur through the floor
(the Y=0 plane) to make a relection. */
glScalef(1.0, -1.0, 1.0);
/* Reflect the light position. */
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
/* To avoid our normals getting reversed and hence botched lighting
on the reflection, turn on normalize. */
glEnable(GL_NORMALIZE);
glCullFace(GL_FRONT);
/* Draw the reflected dinosaur. */
drawDinosaur();
/* Disable noramlize again and re-enable back face culling. */
glDisable(GL_NORMALIZE);
glCullFace(GL_BACK);
glPopMatrix();
/* Switch back to the unreflected light position. */
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
if (stencilReflection) {
glDisable(GL_STENCIL_TEST);
}
}
/* Back face culling will get used to only draw either the top or the
bottom floor. This let's us get a floor with two distinct
appearances. The top floor surface is reflective and kind of red.
The bottom floor surface is not reflective and blue. */
/* Draw "bottom" of floor in blue. */
glFrontFace(GL_CW); /* Switch face orientation. */
glColor4f(0.1, 0.1, 0.7, 1.0);
drawFloor();
glFrontFace(GL_CCW);
if (renderShadow) {
if (stencilShadow) {
/* Draw the floor with stencil value 3. This helps us only
draw the shadow once per floor pixel (and only on the
floor pixels). */
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 3, 0xffffffff);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
}
}
/* Draw "top" of floor. Use blending to blend in reflection. */
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(0.7, 0.0, 0.0, 0.3);
glColor4f(1.0, 1.0, 1.0, 0.3);
drawFloor();
glDisable(GL_BLEND);
if (renderDinosaur) {
/* Draw "actual" dinosaur, not its reflection. */
drawDinosaur();
}
if (renderShadow) {
/* Render the projected shadow. */
if (stencilShadow) {
/* Now, only render where stencil is set above 2 (ie, 3 where
the top floor is). Update stencil with 2 where the shadow
gets drawn so we don't redraw (and accidently reblend) the
shadow). */
glStencilFunc(GL_LESS, 2, 0xffffffff); /* draw if ==1 */
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
}
/* To eliminate depth buffer artifacts, we use polygon offset
to raise the depth of the projected shadow slightly so
that it does not depth buffer alias with the floor. */
if (offsetShadow) {
switch (polygonOffsetVersion) {
case EXTENSION:
#ifdef GL_EXT_polygon_offset
glEnable(GL_POLYGON_OFFSET_EXT);
break;
#endif
#ifdef GL_VERSION_1_1
case ONE_DOT_ONE:
glEnable(GL_POLYGON_OFFSET_FILL);
break;
#endif
case MISSING:
/* Oh well. */
break;
}
}
/* Render 50% black shadow color on top of whatever the
floor appareance is. */
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_LIGHTING); /* Force the 50% black. */
glColor4f(0.0, 0.0, 0.0, 0.5);
glPushMatrix();
/* Project the shadow. */
glMultMatrixf((GLfloat *) floorShadow);
drawDinosaur();
glPopMatrix();
glDisable(GL_BLEND);
glEnable(GL_LIGHTING);
if (offsetShadow) {
switch (polygonOffsetVersion) {
#ifdef GL_EXT_polygon_offset
case EXTENSION:
glDisable(GL_POLYGON_OFFSET_EXT);
break;
#endif
#ifdef GL_VERSION_1_1
case ONE_DOT_ONE:
glDisable(GL_POLYGON_OFFSET_FILL);
break;
#endif
case MISSING:
/* Oh well. */
break;
}
}
if (stencilShadow) {
glDisable(GL_STENCIL_TEST);
}
}
glPushMatrix();
glDisable(GL_LIGHTING);
glColor3f(1.0, 1.0, 0.0);
if (directionalLight) {
/* Draw an arrowhead. */
glDisable(GL_CULL_FACE);
glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]);
glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0);
glRotatef(atan(lightHeight/12) * 180.0 / M_PI, 0, 0, 1);
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0, 0, 0);
glVertex3f(2, 1, 1);
glVertex3f(2, -1, 1);
glVertex3f(2, -1, -1);
glVertex3f(2, 1, -1);
glVertex3f(2, 1, 1);
glEnd();
/* Draw a white line from light direction. */
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
glVertex3f(0, 0, 0);
glVertex3f(5, 0, 0);
glEnd();
glEnable(GL_CULL_FACE);
} else {
/* Draw a yellow ball at the light source. */
glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]);
glutSolidSphere(1.0, 5, 5);
}
glEnable(GL_LIGHTING);
glPopMatrix();
glPopMatrix();
if (reportSpeed) {
glFinish();
end = glutGet(GLUT_ELAPSED_TIME);
printf("Speed %.3g frames/sec (%d ms)\n", 1000.0/(end-start), end-start);
}
glutSwapBuffers();
}
/* ARGSUSED2 */
static void
mouse(int button, int state, int x, int y)
{
if (button == GLUT_LEFT_BUTTON) {
if (state == GLUT_DOWN) {
moving = 1;
startx = x;
starty = y;
}
if (state == GLUT_UP) {
moving = 0;
}
}
if (button == GLUT_MIDDLE_BUTTON) {
if (state == GLUT_DOWN) {
lightMoving = 1;
lightStartX = x;
lightStartY = y;
}
if (state == GLUT_UP) {
lightMoving = 0;
}
}
}
/* ARGSUSED1 */
static void
motion(int x, int y)
{
if (moving) {
angle = angle + (x - startx);
angle2 = angle2 + (y - starty);
startx = x;
starty = y;
glutPostRedisplay();
}
if (lightMoving) {
lightAngle += (x - lightStartX)/40.0;
lightHeight += (lightStartY - y)/20.0;
lightStartX = x;
lightStartY = y;
glutPostRedisplay();
}
}
/* Advance time varying state when idle callback registered. */
static void
idle(void)
{
static float time = 0.0;
time = glutGet(GLUT_ELAPSED_TIME) / 500.0;
jump = 4.0 * fabs(sin(time)*0.5);
if (!lightMoving) {
lightAngle += 0.03;
}
glutPostRedisplay();
}
enum {
M_NONE, M_MOTION, M_LIGHT, M_TEXTURE, M_SHADOWS, M_REFLECTION, M_DINOSAUR,
M_STENCIL_REFLECTION, M_STENCIL_SHADOW, M_OFFSET_SHADOW,
M_POSITIONAL, M_DIRECTIONAL, M_PERFORMANCE
};
static void
controlLights(int value)
{
switch (value) {
case M_NONE:
return;
case M_MOTION:
animation = 1 - animation;
if (animation) {
glutIdleFunc(idle);
} else {
glutIdleFunc(NULL);
}
break;
case M_LIGHT:
lightSwitch = !lightSwitch;
if (lightSwitch) {
glEnable(GL_LIGHT0);
} else {
glDisable(GL_LIGHT0);
}
break;
case M_TEXTURE:
useTexture = !useTexture;
break;
case M_SHADOWS:
renderShadow = 1 - renderShadow;
break;
case M_REFLECTION:
renderReflection = 1 - renderReflection;
break;
case M_DINOSAUR:
renderDinosaur = 1 - renderDinosaur;
break;
case M_STENCIL_REFLECTION:
stencilReflection = 1 - stencilReflection;
break;
case M_STENCIL_SHADOW:
stencilShadow = 1 - stencilShadow;
break;
case M_OFFSET_SHADOW:
offsetShadow = 1 - offsetShadow;
break;
case M_POSITIONAL:
directionalLight = 0;
break;
case M_DIRECTIONAL:
directionalLight = 1;
break;
case M_PERFORMANCE:
reportSpeed = 1 - reportSpeed;
break;
}
glutPostRedisplay();
}
/* When not visible, stop animating. Restart when visible again. */
static void
visible(int vis)
{
if (vis == GLUT_VISIBLE) {
if (animation)
glutIdleFunc(idle);
} else {
if (!animation)
glutIdleFunc(NULL);
}
}
/* Press any key to redraw; good when motion stopped and
performance reporting on. */
/* ARGSUSED */
static void
key(unsigned char c, int x, int y)
{
if (c == 27) {
exit(0); /* IRIS GLism, Escape quits. */
}
glutPostRedisplay();
}
/* Press any key to redraw; good when motion stopped and
performance reporting on. */
/* ARGSUSED */
static void
special(int k, int x, int y)
{
glutPostRedisplay();
}
static int
supportsOneDotOne(void)
{
const char *version;
int major, minor;
version = (char *) glGetString(GL_VERSION);
if (sscanf(version, "%d.%d", &major, &minor) == 2)
return major >= 1 && minor >= 1;
return 0; /* OpenGL version string malformed! */
}
int
main(int argc, char **argv)
{
int i;
glutInit(&argc, argv);
for (i=1; i<argc; i++) {
if (!strcmp("-linear", argv[i])) {
linearFiltering = 1;
} else if (!strcmp("-mipmap", argv[i])) {
useMipmaps = 1;
} else if (!strcmp("-ext", argv[i])) {
forceExtension = 1;
}
}
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL);
#if 0
/* In GLUT 4.0, you'll be able to do this an be sure to
get 2 bits of stencil if the machine has it for you. */
glutInitDisplayString("samples stencil>=2 rgb double depth");
#endif
glutCreateWindow("Shadowy Leapin' Lizards");
if (glutGet(GLUT_WINDOW_STENCIL_SIZE) <= 1) {
printf("dinoshade: Sorry, I need at least 2 bits of stencil.\n");
exit(1);
}
/* Register GLUT callbacks. */
glutDisplayFunc(redraw);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutVisibilityFunc(visible);
glutKeyboardFunc(key);
glutSpecialFunc(special);
glutCreateMenu(controlLights);
glutAddMenuEntry("Toggle motion", M_MOTION);
glutAddMenuEntry("-----------------------", M_NONE);
glutAddMenuEntry("Toggle light", M_LIGHT);
glutAddMenuEntry("Toggle texture", M_TEXTURE);
glutAddMenuEntry("Toggle shadows", M_SHADOWS);
glutAddMenuEntry("Toggle reflection", M_REFLECTION);
glutAddMenuEntry("Toggle dinosaur", M_DINOSAUR);
glutAddMenuEntry("-----------------------", M_NONE);
glutAddMenuEntry("Toggle reflection stenciling", M_STENCIL_REFLECTION);
glutAddMenuEntry("Toggle shadow stenciling", M_STENCIL_SHADOW);
glutAddMenuEntry("Toggle shadow offset", M_OFFSET_SHADOW);
glutAddMenuEntry("----------------------", M_NONE);
glutAddMenuEntry("Positional light", M_POSITIONAL);
glutAddMenuEntry("Directional light", M_DIRECTIONAL);
glutAddMenuEntry("-----------------------", M_NONE);
glutAddMenuEntry("Toggle performance", M_PERFORMANCE);
glutAttachMenu(GLUT_RIGHT_BUTTON);
makeDinosaur();
#ifdef GL_VERSION_1_1
if (supportsOneDotOne() && !forceExtension) {
polygonOffsetVersion = ONE_DOT_ONE;
glPolygonOffset(-2.0, -9.0);
} else
#endif
{
#ifdef GL_EXT_polygon_offset
/* check for the polygon offset extension */
if (glutExtensionSupported("GL_EXT_polygon_offset")) {
polygonOffsetVersion = EXTENSION;
glPolygonOffsetEXT(-2.0, -0.002);
} else
#endif
{
polygonOffsetVersion = MISSING;
printf("\ndinoshine: Missing polygon offset.\n");
printf(" Expect shadow depth aliasing artifacts.\n\n");
}
}
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glLineWidth(3.0);
glMatrixMode(GL_PROJECTION);
gluPerspective( /* field of view in degree */ 40.0,
/* aspect ratio */ 1.0,
/* Z near */ 20.0, /* Z far */ 100.0);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0.0, 8.0, 60.0, /* eye is at (0,8,60) */
0.0, 8.0, 0.0, /* center is at (0,8,0) */
0.0, 1.0, 0.); /* up is in postivie Y direction */
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.05);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
makeFloorTexture();
/* Setup floor plane for projected shadow calculations. */
findPlane(floorPlane, floorVertices[1], floorVertices[2], floorVertices[3]);
glutMainLoop();
return 0; /* ANSI C requires main to return int. */
}

99
progs/tests/fogcoord.c Normal file
View File

@@ -0,0 +1,99 @@
/*
* Exercise GL_EXT_fog_coord
*/
#define GL_GLEXT_PROTOTYPES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
static int Width = 600;
static int Height = 200;
static GLfloat Near = 5.0, Far = 25.0;
static void Display( void )
{
GLfloat t;
glClearColor(0.2, 0.2, 0.8, 0);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
for (t = 0.0; t <= 1.0; t += 0.25) {
GLfloat f = -(Near + t * (Far - Near));
glFogCoordfEXT(f);
glPushMatrix();
glTranslatef(t * 10.0 - 5.0, 0, 0);
glBegin(GL_POLYGON);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glPopMatrix();
}
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
GLfloat ar = (float) width / (float) height;
Width = width;
Height = height;
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -ar, ar, -1.0, 1.0, Near, Far );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -15.0 );
}
static void Key( unsigned char key, int x, int y )
{
(void) x;
(void) y;
switch (key) {
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
static void Init( void )
{
/* setup lighting, etc */
if (!glutExtensionSupported("GL_EXT_fog_coord")) {
printf("Sorry, this program requires GL_EXT_fog_coord\n");
exit(1);
}
glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
glFogi(GL_FOG_MODE, GL_LINEAR);
glFogf(GL_FOG_START, Near);
glFogf(GL_FOG_END, Far);
glEnable(GL_FOG);
printf("Squares should be colored from white -> gray -> black.\n");
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( Width, Height );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
glutCreateWindow(argv[0]);
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutDisplayFunc( Display );
Init();
glutMainLoop();
return 0;
}

381
progs/tests/manytex.c Normal file
View File

@@ -0,0 +1,381 @@
/* $Id: manytex.c,v 1.3 2000/11/09 16:53:26 brianp Exp $ */
/*
* test handling of many texture maps
* Also tests texture priority and residency.
*
* Brian Paul
* August 2, 2000
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
static GLint NumTextures = 20;
static GLuint *TextureID = NULL;
static GLint *TextureWidth = NULL, *TextureHeight = NULL;
static GLboolean *TextureResidency = NULL;
static GLint TexWidth = 128, TexHeight = 128;
static GLfloat Zrot = 0;
static GLboolean Anim = GL_TRUE;
static GLint WinWidth = 500, WinHeight = 400;
static GLboolean MipMap = GL_FALSE;
static GLboolean LinearFilter = GL_FALSE;
static GLboolean RandomSize = GL_FALSE;
static GLint Rows, Columns;
static GLuint LowPriorityCount = 0;
static void Idle( void )
{
Zrot += 1.0;
glutPostRedisplay();
}
static void Display( void )
{
GLfloat spacing = WinWidth / Columns;
GLfloat size = spacing * 0.4;
GLint i;
/* test residency */
if (0)
{
GLboolean b;
GLint i, resident;
b = glAreTexturesResident(NumTextures, TextureID, TextureResidency);
if (b) {
printf("all resident\n");
}
else {
resident = 0;
for (i = 0; i < NumTextures; i++) {
if (TextureResidency[i]) {
resident++;
}
}
printf("%d of %d texture resident\n", resident, NumTextures);
}
}
/* render the textured quads */
glClear( GL_COLOR_BUFFER_BIT );
for (i = 0; i < NumTextures; i++) {
GLint row = i / Columns;
GLint col = i % Columns;
GLfloat x = col * spacing + spacing * 0.5;
GLfloat y = row * spacing + spacing * 0.5;
GLfloat maxDim = (TextureWidth[i] > TextureHeight[i])
? TextureWidth[i] : TextureHeight[i];
GLfloat w = TextureWidth[i] / maxDim;
GLfloat h = TextureHeight[i] / maxDim;
glPushMatrix();
glTranslatef(x, y, 0.0);
glRotatef(Zrot, 0, 0, 1);
glScalef(size, size, 1);
glBindTexture(GL_TEXTURE_2D, TextureID[i]);
glBegin(GL_POLYGON);
#if 0
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f( 1, -1);
glTexCoord2f(1, 1); glVertex2f( 1, 1);
glTexCoord2f(0, 1); glVertex2f(-1, 1);
#else
glTexCoord2f(0, 0); glVertex2f(-w, -h);
glTexCoord2f(1, 0); glVertex2f( w, -h);
glTexCoord2f(1, 1); glVertex2f( w, h);
glTexCoord2f(0, 1); glVertex2f(-w, h);
#endif
glEnd();
glPopMatrix();
}
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
WinWidth = width;
WinHeight = height;
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
/*
* Return a random int in [min, max].
*/
static int RandomInt(int min, int max)
{
int i = rand();
int j = i % (max - min + 1);
return min + j;
}
static void Init( void )
{
GLint i;
if (RandomSize) {
printf("Creating %d %s random-size textures, ", NumTextures,
MipMap ? "Mipmapped" : "non-Mipmapped");
}
else {
printf("Creating %d %s %d x %d textures, ", NumTextures,
MipMap ? "Mipmapped" : "non-Mipmapped",
TexWidth, TexHeight);
}
if (LinearFilter) {
printf("bilinear filtering\n");
}
else {
printf("nearest filtering\n");
}
/* compute number of rows and columns of rects */
{
GLfloat area = (GLfloat) (WinWidth * WinHeight) / (GLfloat) NumTextures;
GLfloat edgeLen = sqrt(area);
Columns = WinWidth / edgeLen;
Rows = (NumTextures + Columns - 1) / Columns;
printf("Rows: %d Cols: %d\n", Rows, Columns);
}
if (!TextureID) {
TextureID = (GLuint *) malloc(sizeof(GLuint) * NumTextures);
assert(TextureID);
glGenTextures(NumTextures, TextureID);
}
if (!TextureResidency) {
TextureResidency = (GLboolean *) malloc(sizeof(GLboolean) * NumTextures);
assert(TextureResidency);
}
if (!TextureWidth) {
TextureWidth = (GLint *) malloc(sizeof(GLint) * NumTextures);
assert(TextureWidth);
}
if (!TextureHeight) {
TextureHeight = (GLint *) malloc(sizeof(GLint) * NumTextures);
assert(TextureHeight);
}
for (i = 0; i < NumTextures; i++) {
GLubyte color[4];
GLubyte *texImage;
GLint j, row, col;
row = i / Columns;
col = i % Columns;
glBindTexture(GL_TEXTURE_2D, TextureID[i]);
if (i < LowPriorityCount)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 0.5F);
if (RandomSize) {
#if 0
int k = (glutGet(GLUT_ELAPSED_TIME) % 7) + 2;
TexWidth = 1 << k;
TexHeight = 1 << k;
#else
TexWidth = 1 << RandomInt(2, 7);
TexHeight = 1 << RandomInt(2, 7);
printf("Random size of %3d: %d x %d\n", i, TexWidth, TexHeight);
#endif
}
TextureWidth[i] = TexWidth;
TextureHeight[i] = TexHeight;
texImage = (GLubyte*) malloc(4 * TexWidth * TexHeight * sizeof(GLubyte));
assert(texImage);
/* determine texture color */
color[0] = (GLint) (255.0 * ((float) col / (Columns - 1)));
color[1] = 127;
color[2] = (GLint) (255.0 * ((float) row / (Rows - 1)));
color[3] = 255;
/* fill in solid-colored teximage */
for (j = 0; j < TexWidth * TexHeight; j++) {
texImage[j*4+0] = color[0];
texImage[j*4+1] = color[1];
texImage[j*4+2] = color[2];
texImage[j*4+3] = color[3];
}
if (MipMap) {
GLint level = 0;
GLint w = TexWidth, h = TexHeight;
while (1) {
glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, w, h, 0,
GL_RGBA, GL_UNSIGNED_BYTE, texImage);
if (w == 1 && h == 1)
break;
if (w > 1)
w /= 2;
if (h > 1)
h /= 2;
level++;
/*printf("%d: %d x %d\n", level, w, h);*/
}
if (LinearFilter) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
}
else {
/* Set corners to white */
int k = 0;
texImage[k+0] = texImage[k+1] = texImage[k+2] = texImage[k+3] = 255;
k = (TexWidth - 1) * 4;
texImage[k+0] = texImage[k+1] = texImage[k+2] = texImage[k+3] = 255;
k = (TexWidth * TexHeight - TexWidth) * 4;
texImage[k+0] = texImage[k+1] = texImage[k+2] = texImage[k+3] = 255;
k = (TexWidth * TexHeight - 1) * 4;
texImage[k+0] = texImage[k+1] = texImage[k+2] = texImage[k+3] = 255;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, TexWidth, TexHeight, 0,
GL_RGBA, GL_UNSIGNED_BYTE, texImage);
if (LinearFilter) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
}
free(texImage);
}
glEnable(GL_TEXTURE_2D);
}
static void Key( unsigned char key, int x, int y )
{
const GLfloat step = 3.0;
(void) x;
(void) y;
switch (key) {
case 'a':
Anim = !Anim;
if (Anim)
glutIdleFunc(Idle);
else
glutIdleFunc(NULL);
break;
case 's':
Idle();
break;
case 'z':
Zrot -= step;
break;
case 'Z':
Zrot += step;
break;
case ' ':
Init();
break;
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
int main( int argc, char *argv[] )
{
GLint i;
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( WinWidth, WinHeight );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutCreateWindow(argv[0]);
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutDisplayFunc( Display );
if (Anim)
glutIdleFunc(Idle);
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-n") == 0) {
NumTextures = atoi(argv[i+1]);
if (NumTextures <= 0) {
printf("Error, bad number of textures\n");
return 1;
}
i++;
}
else if (strcmp(argv[i], "-mipmap") == 0) {
MipMap = GL_TRUE;
}
else if (strcmp(argv[i], "-linear") == 0) {
LinearFilter = GL_TRUE;
}
else if (strcmp(argv[i], "-size") == 0) {
TexWidth = atoi(argv[i+1]);
TexHeight = atoi(argv[i+2]);
assert(TexWidth >= 1);
assert(TexHeight >= 1);
i += 2;
}
else if (strcmp(argv[i], "-randomsize") == 0) {
RandomSize = GL_TRUE;
}
else if (strcmp(argv[i], "-lowpri") == 0) {
LowPriorityCount = atoi(argv[i+1]);
i++;
}
else {
printf("Usage:\n");
printf(" manytex [options]\n");
printf("Options:\n");
printf(" -n <number of texture objects>\n");
printf(" -size <width> <height> - specify texture size\n");
printf(" -randomsize - use random size textures\n");
printf(" -mipmap - generate mipmaps\n");
printf(" -linear - use linear filtering instead of nearest\n");
printf(" -lowpri <n> - Set lower priority on <n> textures\n");
return 0;
}
}
Init();
glutMainLoop();
return 0;
}

408
progs/tests/multipal.c Normal file
View File

@@ -0,0 +1,408 @@
/* $Id: multipal.c,v 1.1 2000/11/18 17:12:33 brianp Exp $ */
/*
* GL_ARB_multitexture demo
*
* Command line options:
* -info print GL implementation information
*
*
* Brian Paul November 1998 This program is in the public domain.
*/
/*
* $Log: multipal.c,v $
* Revision 1.1 2000/11/18 17:12:33 brianp
* test texture palettes with multitexture
*
* Revision 1.7 2000/11/01 16:02:01 brianp
* print number of texture units
*
* Revision 1.6 2000/05/23 23:21:00 brianp
* set default window pos
*
* Revision 1.5 2000/02/02 17:31:45 brianp
* changed > to >=
*
* Revision 1.4 2000/02/02 01:07:21 brianp
* limit Drift to [0, 1]
*
* Revision 1.3 1999/10/21 16:40:32 brianp
* added -info command line option
*
* Revision 1.2 1999/10/13 12:02:13 brianp
* use texture objects now
*
* Revision 1.1.1.1 1999/08/19 00:55:40 jtg
* Imported sources
*
* Revision 1.3 1999/03/28 18:20:49 brianp
* minor clean-up
*
* Revision 1.2 1998/11/05 04:34:04 brianp
* moved image files to ../images/ directory
*
* Revision 1.1 1998/11/03 01:36:33 brianp
* Initial revision
*
*/
#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#define TEXTURE_1_FILE "../images/tile.rgb"
#define TEXTURE_2_FILE "../images/reflect.rgb"
#define TEX0 1
#define TEX1 2
#define TEXBOTH 3
#define ANIMATE 10
#define QUIT 100
static GLboolean Animate = GL_TRUE;
static GLfloat Drift = 0.0;
static GLfloat Xrot = 20.0, Yrot = 30.0, Zrot = 0.0;
static void Idle( void )
{
if (Animate) {
Drift += 0.05;
if (Drift >= 1.0)
Drift = 0.0;
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE0_ARB);
#endif
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(Drift, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE1_ARB);
#endif
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.0, Drift, 0.0);
glMatrixMode(GL_MODELVIEW);
glutPostRedisplay();
}
}
static void DrawObject(void)
{
glBegin(GL_QUADS);
#ifdef GL_ARB_multitexture
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 0.0);
glVertex2f(-1.0, -1.0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 2.0, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 0.0);
glVertex2f(1.0, -1.0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 2.0, 2.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, 1.0);
glVertex2f(1.0, 1.0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, 0.0, 2.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, 1.0);
glVertex2f(-1.0, 1.0);
#else
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, -1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f(1.0, -1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f(1.0, 1.0);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0, 1.0);
#endif
glEnd();
}
static void Display( void )
{
glClear( GL_COLOR_BUFFER_BIT );
glPushMatrix();
glRotatef(Xrot, 1.0, 0.0, 0.0);
glRotatef(Yrot, 0.0, 1.0, 0.0);
glRotatef(Zrot, 0.0, 0.0, 1.0);
glScalef(5.0, 5.0, 5.0);
DrawObject();
glPopMatrix();
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -1.0, 1.0, -1.0, 1.0, 10.0, 100.0 );
/*glOrtho( -6.0, 6.0, -6.0, 6.0, 10.0, 100.0 );*/
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -70.0 );
}
static void ModeMenu(int entry)
{
GLboolean enable0 = GL_FALSE, enable1 = GL_FALSE;
if (entry==TEX0) {
enable0 = GL_TRUE;
}
else if (entry==TEX1) {
enable1 = GL_TRUE;
}
else if (entry==TEXBOTH) {
enable0 = GL_TRUE;
enable1 = GL_TRUE;
}
else if (entry==ANIMATE) {
Animate = !Animate;
}
else if (entry==QUIT) {
exit(0);
}
if (entry != ANIMATE) {
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE0_ARB);
#endif
if (enable0) {
glEnable(GL_TEXTURE_2D);
}
else
glDisable(GL_TEXTURE_2D);
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE1_ARB);
#endif
if (enable1) {
glEnable(GL_TEXTURE_2D);
}
else
glDisable(GL_TEXTURE_2D);
}
glutPostRedisplay();
}
static void Key( unsigned char key, int x, int y )
{
(void) x;
(void) y;
switch (key) {
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
static void SpecialKey( int key, int x, int y )
{
float step = 3.0;
(void) x;
(void) y;
switch (key) {
case GLUT_KEY_UP:
Xrot += step;
break;
case GLUT_KEY_DOWN:
Xrot -= step;
break;
case GLUT_KEY_LEFT:
Yrot += step;
break;
case GLUT_KEY_RIGHT:
Yrot -= step;
break;
}
glutPostRedisplay();
}
static void load_tex(const char *fname, int channel)
{
GLubyte *image;
GLenum format, type;
GLint w, h;
GLubyte *grayImage;
int i;
GLubyte table[256][4];
image = LoadRGBImage(fname, &w, &h, &format);
if (!image)
exit(1);
printf("%s %d x %d\n", fname, w, h);
grayImage = malloc(w * h * 1);
assert(grayImage);
for (i = 0; i < w * h; i++) {
int g = (image[i*3+0] + image[i*3+1] + image[i*3+2]) / 3;
assert(g < 256);
grayImage[i] = g;
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_COLOR_INDEX, w, h, 0, GL_COLOR_INDEX,
GL_UNSIGNED_BYTE, grayImage);
for (i = 0; i < 256; i++) {
table[i][0] = channel ? i : 0;
table[i][1] = i;
table[i][2] = channel ? 0 : i;
table[i][3] = 255;
}
glColorTableEXT(GL_TEXTURE_2D, /* target */
GL_RGBA, /* internal format */
256, /* table size */
GL_RGBA, /* table format */
GL_UNSIGNED_BYTE, /* table type */
table); /* the color table */
free(grayImage);
free(image);
}
static void Init( int argc, char *argv[] )
{
GLuint texObj[2];
GLint units;
const char *exten = (const char *) glGetString(GL_EXTENSIONS);
if (!strstr(exten, "GL_ARB_multitexture")) {
printf("Sorry, GL_ARB_multitexture not supported by this renderer.\n");
exit(1);
}
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &units);
printf("%d texture units supported\n", units);
/* allocate two texture objects */
glGenTextures(2, texObj);
/* setup texture obj 0 */
glBindTexture(GL_TEXTURE_2D, texObj[0]);
#ifdef LINEAR_FILTER
/* linear filtering looks much nicer but is much slower for Mesa */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
foo
#else
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
#endif
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
load_tex(TEXTURE_1_FILE, 0);
#if 0
if (!LoadRGBMipmaps(TEXTURE_1_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
}
#endif
/* setup texture obj 1 */
glBindTexture(GL_TEXTURE_2D, texObj[1]);
#ifdef LINEAR_FILTER
/* linear filtering looks much nicer but is much slower for Mesa */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
foo
#else
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
#endif
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
load_tex(TEXTURE_2_FILE, 1);
#if 0
if (!LoadRGBMipmaps(TEXTURE_2_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
}
#endif
/* now bind the texture objects to the respective texture units */
#ifdef GL_ARB_multitexture
glActiveTextureARB(GL_TEXTURE0_ARB);
glBindTexture(GL_TEXTURE_2D, texObj[0]);
glActiveTextureARB(GL_TEXTURE1_ARB);
glBindTexture(GL_TEXTURE_2D, texObj[1]);
#endif
glShadeModel(GL_FLAT);
glClearColor(0.3, 0.3, 0.4, 1.0);
ModeMenu(TEXBOTH);
if (argc > 1 && strcmp(argv[1], "-info")==0) {
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
}
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowSize( 300, 300 );
glutInitWindowPosition( 0, 0 );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutCreateWindow(argv[0] );
Init( argc, argv );
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutSpecialFunc( SpecialKey );
glutDisplayFunc( Display );
glutIdleFunc( Idle );
glutCreateMenu(ModeMenu);
glutAddMenuEntry("Texture 0", TEX0);
glutAddMenuEntry("Texture 1", TEX1);
glutAddMenuEntry("Multi-texture", TEXBOTH);
glutAddMenuEntry("Toggle Animation", ANIMATE);
glutAddMenuEntry("Quit", QUIT);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}

291
progs/tests/osdemo16.c Normal file
View File

@@ -0,0 +1,291 @@
/* $Id: osdemo16.c,v 1.1 2001/03/08 15:24:18 brianp Exp $ */
/*
* Demo of off-screen Mesa rendering
*
* See Mesa/include/GL/osmesa.h for documentation of the OSMesa functions.
*
* If you want to render BIG images you'll probably have to increase
* MAX_WIDTH and MAX_HEIGHT in src/config.h.
*
* This program is in the public domain.
*
* Brian Paul
*
* PPM output provided by Joerg Schmalzl.
* ASCII PPM output added by Brian Paul.
*/
#include <stdio.h>
#include <stdlib.h>
#include "GL/osmesa.h"
#include "GL/glut.h"
#define SAVE_TARGA
#define WIDTH 400
#define HEIGHT 400
static void render_image( void )
{
GLfloat light_ambient[] = { 0.0, 0.0, 0.0, 1.0 };
GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 };
GLfloat red_mat[] = { 1.0, 0.2, 0.2, 1.0 };
GLfloat green_mat[] = { 0.2, 1.0, 0.2, 0.5 };
GLfloat blue_mat[] = { 0.2, 0.2, 1.0, 1.0 };
GLfloat white_mat[] = { 1.0, 1.0, 1.0, 1.0 };
GLfloat purple_mat[] = { 1.0, 0.2, 1.0, 1.0 };
GLUquadricObj *qobj = gluNewQuadric();
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.5, 2.5, -2.5, 2.5, -10.0, 10.0);
glMatrixMode(GL_MODELVIEW);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glPushMatrix();
glRotatef(20.0, 1.0, 0.0, 0.0);
#if 0
glPushMatrix();
glTranslatef(-0.75, 0.5, 0.0);
glRotatef(90.0, 1.0, 0.0, 0.0);
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, red_mat );
glutSolidTorus(0.275, 0.85, 20, 20);
glPopMatrix();
#endif
/* red square */
glPushMatrix();
glTranslatef(0.0, -0.5, 0.0);
glRotatef(90, 1, 0.5, 0);
glScalef(3, 3, 3);
glDisable(GL_LIGHTING);
glColor4f(1, 0, 0, 0.5);
glBegin(GL_POLYGON);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glEnable(GL_LIGHTING);
glPopMatrix();
#if 0
/* green square */
glPushMatrix();
glTranslatef(0.0, 0.5, 0.1);
glDisable(GL_LIGHTING);
glColor3f(0, 1, 0);
glBegin(GL_POLYGON);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glEnable(GL_LIGHTING);
glPopMatrix();
/* blue square */
glPushMatrix();
glTranslatef(0.75, 0.5, 0.3);
glDisable(GL_LIGHTING);
glColor3f(0, 0, 0.5);
glBegin(GL_POLYGON);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glEnable(GL_LIGHTING);
glPopMatrix();
#endif
glPushMatrix();
glTranslatef(-0.75, -0.5, 0.0);
glRotatef(270.0, 1.0, 0.0, 0.0);
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, green_mat );
glColor4f(0,1,0,0.5);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gluCylinder(qobj, 1.0, 0.0, 2.0, 16, 1);
glDisable(GL_BLEND);
glPopMatrix();
glPushMatrix();
glTranslatef(0.75, 1.0, 1.0);
glMaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, blue_mat );
gluSphere(qobj, 1.0, 20, 20);
glPopMatrix();
glPopMatrix();
gluDeleteQuadric(qobj);
{
GLint r, g, b, a;
glGetIntegerv(GL_RED_BITS, &r);
glGetIntegerv(GL_GREEN_BITS, &g);
glGetIntegerv(GL_BLUE_BITS, &b);
glGetIntegerv(GL_ALPHA_BITS, &a);
printf("channel sizes: %d %d %d %d\n", r, g, b, a);
}
}
static void
write_targa(const char *filename, const GLushort *buffer, int width, int height)
{
FILE *f = fopen( filename, "w" );
if (f) {
int i, x, y;
const GLushort *ptr = buffer;
printf ("osdemo, writing tga file \n");
fputc (0x00, f); /* ID Length, 0 => No ID */
fputc (0x00, f); /* Color Map Type, 0 => No color map included */
fputc (0x02, f); /* Image Type, 2 => Uncompressed, True-color Image */
fputc (0x00, f); /* Next five bytes are about the color map entries */
fputc (0x00, f); /* 2 bytes Index, 2 bytes length, 1 byte size */
fputc (0x00, f);
fputc (0x00, f);
fputc (0x00, f);
fputc (0x00, f); /* X-origin of Image */
fputc (0x00, f);
fputc (0x00, f); /* Y-origin of Image */
fputc (0x00, f);
fputc (WIDTH & 0xff, f); /* Image Width */
fputc ((WIDTH>>8) & 0xff, f);
fputc (HEIGHT & 0xff, f); /* Image Height */
fputc ((HEIGHT>>8) & 0xff, f);
fputc (0x18, f); /* Pixel Depth, 0x18 => 24 Bits */
fputc (0x20, f); /* Image Descriptor */
fclose(f);
f = fopen( filename, "ab" ); /* reopen in binary append mode */
for (y=height-1; y>=0; y--) {
for (x=0; x<width; x++) {
i = (y*width + x) * 4;
fputc(ptr[i+2] >> 8, f); /* write blue */
fputc(ptr[i+1] >> 8, f); /* write green */
fputc(ptr[i] >> 8, f); /* write red */
}
}
}
}
static void
write_ppm(const char *filename, const GLubyte *buffer, int width, int height)
{
const int binary = 0;
FILE *f = fopen( filename, "w" );
if (f) {
int i, x, y;
const GLubyte *ptr = buffer;
if (binary) {
fprintf(f,"P6\n");
fprintf(f,"# ppm-file created by osdemo.c\n");
fprintf(f,"%i %i\n", width,height);
fprintf(f,"255\n");
fclose(f);
f = fopen( filename, "ab" ); /* reopen in binary append mode */
for (y=height-1; y>=0; y--) {
for (x=0; x<width; x++) {
i = (y*width + x) * 4;
fputc(ptr[i], f); /* write red */
fputc(ptr[i+1], f); /* write green */
fputc(ptr[i+2], f); /* write blue */
}
}
}
else {
/*ASCII*/
int counter = 0;
fprintf(f,"P3\n");
fprintf(f,"# ascii ppm file created by osdemo.c\n");
fprintf(f,"%i %i\n", width, height);
fprintf(f,"255\n");
for (y=height-1; y>=0; y--) {
for (x=0; x<width; x++) {
i = (y*width + x) * 4;
fprintf(f, " %3d %3d %3d", ptr[i], ptr[i+1], ptr[i+2]);
counter++;
if (counter % 5 == 0)
fprintf(f, "\n");
}
}
}
fclose(f);
}
}
int main( int argc, char *argv[] )
{
void *buffer;
/* Create an RGBA-mode context */
#if OSMESA_MAJOR_VERSION * 100 + OSMESA_MINOR_VERSION >= 305
/* specify Z, stencil, accum sizes */
OSMesaContext ctx = OSMesaCreateContextExt( GL_RGBA, 16, 0, 0, NULL );
#else
OSMesaContext ctx = OSMesaCreateContext( GL_RGBA, NULL );
#endif
if (!ctx) {
printf("OSMesaCreateContext failed!\n");
return 0;
}
/* Allocate the image buffer */
buffer = malloc( WIDTH * HEIGHT * 4 * sizeof(GLushort));
if (!buffer) {
printf("Alloc image buffer failed!\n");
return 0;
}
/* Bind the buffer to the context and make it current */
if (!OSMesaMakeCurrent( ctx, buffer, GL_UNSIGNED_SHORT, WIDTH, HEIGHT )) {
printf("OSMesaMakeCurrent failed!\n");
return 0;
}
render_image();
if (argc>1) {
#ifdef SAVE_TARGA
write_targa(argv[1], buffer, WIDTH, HEIGHT);
#else
write_ppm(argv[1], buffer, WIDTH, HEIGHT);
#endif
}
else {
printf("Specify a filename if you want to make an image file\n");
}
printf("all done\n");
/* free the image buffer */
free( buffer );
/* destroy the context */
OSMesaDestroyContext( ctx );
return 0;
}

1028
progs/tests/projtex.c Normal file

File diff suppressed because it is too large Load Diff

145
progs/tests/seccolor.c Normal file
View File

@@ -0,0 +1,145 @@
/*
* Exercise GL_EXT_secondary_color
*/
#define GL_GLEXT_PROTOTYPES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
static int Width = 600;
static int Height = 200;
static GLfloat Near = 5.0, Far = 25.0;
static void Display( void )
{
GLfloat t;
glClearColor(0.2, 0.2, 0.8, 0);
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
for (t = 0.0; t <= 1.0; t += 0.25) {
GLfloat x = t * 10.0 - 5.0;
GLfloat g = t;
/* top row: untextured */
glColor3f(1, 0, 0);
glPushMatrix();
glTranslatef(x, 1.2, 0);
#if defined(GL_EXT_secondary_color)
glSecondaryColor3fEXT(0, g, 0);
#endif
glBegin(GL_POLYGON);
glVertex2f(-1, -1);
glVertex2f( 1, -1);
glVertex2f( 1, 1);
glVertex2f(-1, 1);
glEnd();
glPopMatrix();
/* bottom row: textured */
glColor3f(1, 1, 1);
glEnable(GL_TEXTURE_2D);
glPushMatrix();
glTranslatef(x, -1.2, 0);
#if defined(GL_EXT_secondary_color)
glSecondaryColor3fEXT(0, g, 0);
#endif
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f( 1, -1);
glTexCoord2f(1, 1); glVertex2f( 1, 1);
glTexCoord2f(0, 1); glVertex2f(-1, 1);
glEnd();
glPopMatrix();
glDisable(GL_TEXTURE_2D);
}
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
GLfloat ar = (float) width / (float) height;
Width = width;
Height = height;
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -ar, ar, -1.0, 1.0, Near, Far );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -15.0 );
}
static void Key( unsigned char key, int x, int y )
{
(void) x;
(void) y;
switch (key) {
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
static void Init( void )
{
GLubyte image[4*4][3];
GLint i;
if (!glutExtensionSupported("GL_EXT_secondary_color")) {
printf("Sorry, this program requires GL_EXT_secondary_color\n");
exit(1);
}
/* setup red texture with one back texel */
for (i = 0; i < 4*4; i++) {
if (i == 0) {
image[i][0] = 0;
image[i][1] = 0;
image[i][2] = 0;
}
else {
image[i][0] = 255;
image[i][1] = 0;
image[i][2] = 0;
}
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0,
GL_RGB, GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
#if defined(GL_EXT_secondary_color)
glEnable(GL_COLOR_SUM_EXT);
#endif
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
printf("Squares should be colored from red -> orange -> yellow.\n");
printf("Top row is untextured.\n");
printf("Bottom row is textured (red texture with one black texel).\n");
printf("Rows should be identical, except for lower-left texel.\n");
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( Width, Height );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutCreateWindow(argv[0]);
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutDisplayFunc( Display );
Init();
glutMainLoop();
return 0;
}

437
progs/tests/sharedtex.c Normal file
View File

@@ -0,0 +1,437 @@
/* $Id: sharedtex.c,v 1.1 2000/09/01 21:01:18 brianp Exp $ */
/*
* Test sharing of display lists and texture objects between GLX contests.
* Brian Paul
* Summer 2000
*
*
* Copyright (C) 2000 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include <GL/gl.h>
#include <GL/glx.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
struct window {
char DisplayName[1000];
Display *Dpy;
Window Win;
GLXContext Context;
float Angle;
int Id;
};
#define MAX_WINDOWS 20
static struct window Windows[MAX_WINDOWS];
static int NumWindows = 0;
static GLuint Textures[3];
static GLuint CubeList;
static void
Error(const char *display, const char *msg)
{
fprintf(stderr, "Error on display %s - %s\n", display, msg);
exit(1);
}
static struct window *
AddWindow(const char *displayName, int xpos, int ypos,
const struct window *shareWindow)
{
Display *dpy;
Window win;
GLXContext ctx;
int attrib[] = { GLX_RGBA,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DOUBLEBUFFER,
GLX_DEPTH_SIZE, 1,
None };
int scrnum;
XSetWindowAttributes attr;
unsigned long mask;
Window root;
XVisualInfo *visinfo;
int width = 300, height = 300;
if (NumWindows >= MAX_WINDOWS)
return NULL;
dpy = XOpenDisplay(displayName);
if (!dpy) {
Error(displayName, "Unable to open display");
return NULL;
}
scrnum = DefaultScreen(dpy);
root = RootWindow(dpy, scrnum);
visinfo = glXChooseVisual(dpy, scrnum, attrib);
if (!visinfo) {
Error(displayName, "Unable to find RGB, double-buffered visual");
return NULL;
}
/* window attributes */
attr.background_pixel = 0;
attr.border_pixel = 0;
attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
win = XCreateWindow(dpy, root, xpos, ypos, width, height,
0, visinfo->depth, InputOutput,
visinfo->visual, mask, &attr);
if (!win) {
Error(displayName, "Couldn't create window");
return NULL;
}
{
XSizeHints sizehints;
sizehints.x = xpos;
sizehints.y = ypos;
sizehints.width = width;
sizehints.height = height;
sizehints.flags = USSize | USPosition;
XSetNormalHints(dpy, win, &sizehints);
XSetStandardProperties(dpy, win, displayName, displayName,
None, (char **)NULL, 0, &sizehints);
}
ctx = glXCreateContext(dpy, visinfo,
shareWindow ? shareWindow->Context : NULL,
True);
if (!ctx) {
Error(displayName, "Couldn't create GLX context");
return NULL;
}
XMapWindow(dpy, win);
if (!glXMakeCurrent(dpy, win, ctx)) {
Error(displayName, "glXMakeCurrent failed");
printf("glXMakeCurrent failed in Redraw()\n");
return;
}
/* save the info for this window */
{
static int id = 0;
struct window *h = &Windows[NumWindows];
strcpy(h->DisplayName, displayName);
h->Dpy = dpy;
h->Win = win;
h->Context = ctx;
h->Angle = 0.0;
h->Id = id++;
NumWindows++;
return &Windows[NumWindows-1];
}
}
static void
InitGLstuff(struct window *h)
{
if (!glXMakeCurrent(h->Dpy, h->Win, h->Context)) {
Error(h->DisplayName, "glXMakeCurrent failed in InitGLstuff");
return;
}
glGenTextures(3, Textures);
/* setup first texture object */
{
GLubyte image[16][16][4];
GLint i, j;
glBindTexture(GL_TEXTURE_2D, Textures[0]);
/* red/white checkerboard */
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++) {
if ((i ^ j) & 1) {
image[i][j][0] = 255;
image[i][j][1] = 255;
image[i][j][2] = 255;
image[i][j][3] = 255;
}
else {
image[i][j][0] = 255;
image[i][j][1] = 0;
image[i][j][2] = 0;
image[i][j][3] = 255;
}
}
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA,
GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
/* setup second texture object */
{
GLubyte image[8][8][3];
GLint i, j;
glBindTexture(GL_TEXTURE_2D, Textures[1]);
/* green/yellow checkerboard */
for (i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
if ((i ^ j) & 1) {
image[i][j][0] = 0;
image[i][j][1] = 255;
image[i][j][2] = 0;
}
else {
image[i][j][0] = 255;
image[i][j][1] = 255;
image[i][j][2] = 0;
}
}
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 8, 8, 0, GL_RGB,
GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
/* setup second texture object */
{
GLubyte image[4][4][3];
GLint i, j;
glBindTexture(GL_TEXTURE_2D, Textures[2]);
/* blue/gray checkerboard */
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if ((i ^ j) & 1) {
image[i][j][0] = 0;
image[i][j][1] = 0;
image[i][j][2] = 255;
}
else {
image[i][j][0] = 200;
image[i][j][1] = 200;
image[i][j][2] = 200;
}
}
}
glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0, GL_RGB,
GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
/* Now make the cube object display list */
CubeList = glGenLists(1);
glNewList(CubeList, GL_COMPILE);
{
glBindTexture(GL_TEXTURE_2D, Textures[0]);
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
glTexCoord2f(1, 0); glVertex3f(-1, 1, -1);
glTexCoord2f(1, 1); glVertex3f(-1, 1, 1);
glTexCoord2f(0, 1); glVertex3f(-1, -1, 1);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(1, -1, -1);
glTexCoord2f(1, 0); glVertex3f(1, 1, -1);
glTexCoord2f(1, 1); glVertex3f(1, 1, 1);
glTexCoord2f(0, 1); glVertex3f(1, -1, 1);
glEnd();
glBindTexture(GL_TEXTURE_2D, Textures[1]);
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
glTexCoord2f(1, 0); glVertex3f( 1, -1, -1);
glTexCoord2f(1, 1); glVertex3f( 1, -1, 1);
glTexCoord2f(0, 1); glVertex3f(-1, -1, 1);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(-1, 1, -1);
glTexCoord2f(1, 0); glVertex3f( 1, 1, -1);
glTexCoord2f(1, 1); glVertex3f( 1, 1, 1);
glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);
glEnd();
glBindTexture(GL_TEXTURE_2D, Textures[2]);
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(-1, -1, -1);
glTexCoord2f(1, 0); glVertex3f( 1, -1, -1);
glTexCoord2f(1, 1); glVertex3f( 1, 1, -1);
glTexCoord2f(0, 1); glVertex3f(-1, 1, -1);
glEnd();
glBegin(GL_POLYGON);
glTexCoord2f(0, 0); glVertex3f(-1, -1, 1);
glTexCoord2f(1, 0); glVertex3f( 1, -1, 1);
glTexCoord2f(1, 1); glVertex3f( 1, 1, 1);
glTexCoord2f(0, 1); glVertex3f(-1, 1, 1);
glEnd();
}
glEndList();
printf("GL_RENDERER: %s\n", (char *) glGetString(GL_RENDERER));
printf("GL_VERSION: %s\n", (char *) glGetString(GL_VERSION));
printf("GL_VENDOR: %s\n", (char *) glGetString(GL_VENDOR));
}
static void
Redraw(struct window *h)
{
if (!glXMakeCurrent(h->Dpy, h->Win, h->Context)) {
Error(h->DisplayName, "glXMakeCurrent failed");
printf("glXMakeCurrent failed in Redraw()\n");
return;
}
h->Angle += 1.0;
glShadeModel(GL_FLAT);
glClearColor(0.25, 0.25, 0.25, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor3f(1, 1, 1);
glPushMatrix();
if (h->Id == 0)
glRotatef(h->Angle, 0, 1, -1);
else if (h->Id == 1)
glRotatef(-(h->Angle), 0, 1, -1);
else if (h->Id == 2)
glRotatef(h->Angle, 0, 1, 1);
else if (h->Id == 3)
glRotatef(-(h->Angle), 0, 1, 1);
glCallList(CubeList);
glPopMatrix();
glXSwapBuffers(h->Dpy, h->Win);
}
static void
Resize(const struct window *h, unsigned int width, unsigned int height)
{
if (!glXMakeCurrent(h->Dpy, h->Win, h->Context)) {
Error(h->DisplayName, "glXMakeCurrent failed in Resize()");
return;
}
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1, 1, -1, 1, 2, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -3.5);
}
static void
EventLoop(void)
{
while (1) {
int i;
for (i = 0; i < NumWindows; i++) {
struct window *h = &Windows[i];
while (XPending(h->Dpy) > 0) {
XEvent event;
XNextEvent(h->Dpy, &event);
if (event.xany.window == h->Win) {
switch (event.type) {
case Expose:
Redraw(h);
break;
case ConfigureNotify:
Resize(h, event.xconfigure.width, event.xconfigure.height);
break;
case KeyPress:
return;
default:
/*no-op*/ ;
}
}
else {
printf("window mismatch\n");
}
}
Redraw(h);
}
usleep(1);
}
}
static void
PrintInfo(const struct window *h)
{
printf("Name: %s\n", h->DisplayName);
printf(" Display: 0x%x\n", h->Dpy);
printf(" Window: 0x%x\n", h->Win);
printf(" Context: 0x%x\n", h->Context);
}
int
main(int argc, char *argv[])
{
int i;
struct window *h0, *h1, *h2, *h3;
/* four windows and contexts sharing display lists and texture objects */
h0 = AddWindow(":0", 10, 10, NULL);
h1 = AddWindow(":0", 330, 10, h0);
h2 = AddWindow(":0", 10, 350, h0);
h3 = AddWindow(":0", 330, 350, h0);
InitGLstuff(h0);
EventLoop();
return 0;
}

251
progs/tests/texline.c Normal file
View File

@@ -0,0 +1,251 @@
/* $Id: texline.c,v 1.3 2001/05/21 17:45:25 brianp Exp $ */
/*
* Test textured lines.
*
* Brian Paul
* September 2000
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#include "../util/readtex.c" /* I know, this is a hack. */
#define TEXTURE_FILE "../images/girl.rgb"
static GLboolean Antialias = GL_FALSE;
static GLboolean Animate = GL_FALSE;
static GLboolean Texture = GL_TRUE;
static GLfloat LineWidth = 1.0;
static GLboolean Multitex = GL_FALSE;
static GLfloat Xrot = -60.0, Yrot = 0.0, Zrot = 0.0;
static GLfloat DYrot = 1.0;
static GLboolean Points = GL_FALSE;
static void Idle( void )
{
if (Animate) {
Zrot += DYrot;
glutPostRedisplay();
}
}
static void Display( void )
{
GLfloat x, y, s, t;
glClear( GL_COLOR_BUFFER_BIT );
glPushMatrix();
glRotatef(Xrot, 1.0, 0.0, 0.0);
glRotatef(Yrot, 0.0, 1.0, 0.0);
glRotatef(Zrot, 0.0, 0.0, 1.0);
if (Texture)
glColor3f(1, 1, 1);
if (Points) {
glBegin(GL_POINTS);
for (t = 0.0; t <= 1.0; t += 0.025) {
for (s = 0.0; s <= 1.0; s += 0.025) {
x = s * 2.0 - 1.0;
y = t * 2.0 - 1.0;
if (!Texture)
glColor3f(1, 0, 1);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, t, s);
glTexCoord2f(s, t);
glVertex2f(x, y);
}
}
glEnd();
}
else {
glBegin(GL_LINES);
for (t = 0.0; t <= 1.0; t += 0.025) {
x = t * 2.0 - 1.0;
if (!Texture)
glColor3f(1, 0, 1);
glTexCoord2f(t, 0.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 0.0, t);
glVertex2f(x, -1.0);
if (!Texture)
glColor3f(0, 1, 0);
glTexCoord2f(t, 1.0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB, 1.0, t);
glVertex2f(x, 1.0);
}
glEnd();
}
glPopMatrix();
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
GLfloat ar = (float) width / height;
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum( -ar, ar, -1.0, 1.0, 10.0, 100.0 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glTranslatef( 0.0, 0.0, -12.0 );
}
static void Key( unsigned char key, int x, int y )
{
(void) x;
(void) y;
switch (key) {
case 'a':
Antialias = !Antialias;
if (Antialias) {
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POINT_SMOOTH);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
else {
glDisable(GL_LINE_SMOOTH);
glDisable(GL_POINT_SMOOTH);
glDisable(GL_BLEND);
}
break;
case 't':
Texture = !Texture;
if (Texture)
glEnable(GL_TEXTURE_2D);
else
glDisable(GL_TEXTURE_2D);
break;
case 'w':
LineWidth -= 0.25;
if (LineWidth < 0.25)
LineWidth = 0.25;
glLineWidth(LineWidth);
glPointSize(LineWidth);
break;
case 'W':
LineWidth += 0.25;
if (LineWidth > 8.0)
LineWidth = 8.0;
glLineWidth(LineWidth);
glPointSize(LineWidth);
break;
case 'm':
Multitex = !Multitex;
if (Multitex) {
glEnable(GL_TEXTURE_2D);
}
else {
glDisable(GL_TEXTURE_2D);
}
break;
case 'p':
Points = !Points;
break;
case ' ':
Animate = !Animate;
if (Animate)
glutIdleFunc(Idle);
else
glutIdleFunc(NULL);
break;
case 27:
exit(0);
break;
}
printf("LineWidth, PointSize = %f\n", LineWidth);
glutPostRedisplay();
}
static void SpecialKey( int key, int x, int y )
{
float step = 3.0;
(void) x;
(void) y;
switch (key) {
case GLUT_KEY_UP:
Xrot += step;
break;
case GLUT_KEY_DOWN:
Xrot -= step;
break;
case GLUT_KEY_LEFT:
Yrot += step;
break;
case GLUT_KEY_RIGHT:
Yrot -= step;
break;
}
glutPostRedisplay();
}
static void Init( int argc, char *argv[] )
{
GLuint u;
for (u = 0; u < 2; u++) {
glActiveTextureARB(GL_TEXTURE0_ARB + u);
glBindTexture(GL_TEXTURE_2D, 10+u);
if (u == 0 || Multitex)
glEnable(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
if (u == 0)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
else
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
if (!LoadRGBMipmaps(TEXTURE_FILE, GL_RGB)) {
printf("Error: couldn't load texture image\n");
exit(1);
}
}
if (argc > 1 && strcmp(argv[1], "-info")==0) {
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
}
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowSize( 400, 300 );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutCreateWindow(argv[0] );
Init(argc, argv);
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutSpecialFunc( SpecialKey );
glutDisplayFunc( Display );
if (Animate)
glutIdleFunc( Idle );
glutMainLoop();
return 0;
}

235
progs/tests/texwrap.c Normal file
View File

@@ -0,0 +1,235 @@
/* $Id: texwrap.c,v 1.2 2001/04/12 20:50:26 brianp Exp $ */
/*
* Test texture wrap modes.
* Press 'b' to toggle texture image borders. You should see the same
* rendering whether or not you're using borders.
*
* Brian Paul March 2001
*/
#define GL_GLEXT_PROTOTYPES
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <GL/glut.h>
#ifndef GL_CLAMP_TO_BORDER_ARB
#define GL_CLAMP_TO_BORDER_ARB 0x812D
#endif
#define BORDER_TEXTURE 1
#define NO_BORDER_TEXTURE 2
#define SIZE 8
static GLubyte BorderImage[SIZE+2][SIZE+2][4];
static GLubyte NoBorderImage[SIZE][SIZE][4];
static GLuint Border = 1;
static void
PrintString(const char *s)
{
while (*s) {
glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s);
s++;
}
}
static void Display( void )
{
static const GLenum modes[] = {
GL_REPEAT,
GL_CLAMP,
GL_CLAMP_TO_EDGE,
GL_CLAMP_TO_BORDER_ARB
};
static const char *names[] = {
"GL_REPEAT",
"GL_CLAMP",
"GL_CLAMP_TO_EDGE",
"GL_CLAMP_TO_BORDER_ARB"
};
GLint i, j;
GLint numModes;
numModes = glutExtensionSupported("GL_ARB_texture_border_clamp") ? 4 : 3;
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear( GL_COLOR_BUFFER_BIT );
#if 0
/* draw texture as image */
glDisable(GL_TEXTURE_2D);
glWindowPos2iMESA(1, 1);
glDrawPixels(6, 6, GL_RGBA, GL_UNSIGNED_BYTE, (void *) TexImage);
#endif
glBindTexture(GL_TEXTURE_2D, Border ? BORDER_TEXTURE : NO_BORDER_TEXTURE);
/* loop over min/mag filters */
for (i = 0; i < 2; i++) {
if (i) {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
}
/* loop over border modes */
for (j = 0; j < numModes; j++) {
const GLfloat x0 = 0, y0 = 0, x1 = 140, y1 = 140;
const GLfloat b = 0.2;
const GLfloat s0 = -b, t0 = -b, s1 = 1.0+b, t1 = 1.0+b;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, modes[j]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, modes[j]);
glPushMatrix();
glTranslatef(j * 150 + 10, i * 150 + 25, 0);
glEnable(GL_TEXTURE_2D);
glColor3f(1, 1, 1);
glBegin(GL_POLYGON);
glTexCoord2f(s0, t0); glVertex2f(x0, y0);
glTexCoord2f(s1, t0); glVertex2f(x1, y0);
glTexCoord2f(s1, t1); glVertex2f(x1, y1);
glTexCoord2f(s0, t1); glVertex2f(x0, y1);
glEnd();
/* draw red outline showing bounds of texture at s=0,1 and t=0,1 */
glDisable(GL_TEXTURE_2D);
glColor3f(1, 0, 0);
glBegin(GL_LINE_LOOP);
glVertex2f(x0 + b * (x1-x0) / (s1-s0), y0 + b * (y1-y0) / (t1-t0));
glVertex2f(x1 - b * (x1-x0) / (s1-s0), y0 + b * (y1-y0) / (t1-t0));
glVertex2f(x1 - b * (x1-x0) / (s1-s0), y1 - b * (y1-y0) / (t1-t0));
glVertex2f(x0 + b * (x1-x0) / (s1-s0), y1 - b * (y1-y0) / (t1-t0));
glEnd();
glPopMatrix();
}
}
glDisable(GL_TEXTURE_2D);
glColor3f(1, 1, 1);
for (i = 0; i < numModes; i++) {
glWindowPos2iMESA( i * 150 + 10, 5);
PrintString(names[i]);
}
glutSwapBuffers();
}
static void Reshape( int width, int height )
{
glViewport( 0, 0, width, height );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}
static void Key( unsigned char key, int x, int y )
{
(void) x;
(void) y;
switch (key) {
case 'b':
Border = !Border;
printf("Texture Border Size = %d\n", Border);
break;
case 27:
exit(0);
break;
}
glutPostRedisplay();
}
static void Init( void )
{
static const GLubyte border[4] = { 0, 255, 0, 255 };
static const GLfloat borderf[4] = { 0, 1.0, 0, 1.0 };
GLint i, j;
for (i = 0; i < SIZE+2; i++) {
for (j = 0; j < SIZE+2; j++) {
if (i == 0 || j == 0 || i == SIZE+1 || j == SIZE+1) {
/* border color */
BorderImage[i][j][0] = border[0];
BorderImage[i][j][1] = border[1];
BorderImage[i][j][2] = border[2];
BorderImage[i][j][3] = border[3];
}
else if ((i + j) & 1) {
/* white */
BorderImage[i][j][0] = 255;
BorderImage[i][j][1] = 255;
BorderImage[i][j][2] = 255;
BorderImage[i][j][3] = 255;
}
else {
/* black */
BorderImage[i][j][0] = 0;
BorderImage[i][j][1] = 0;
BorderImage[i][j][2] = 0;
BorderImage[i][j][3] = 0;
}
}
}
glBindTexture(GL_TEXTURE_2D, BORDER_TEXTURE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SIZE+2, SIZE+2, 1,
GL_RGBA, GL_UNSIGNED_BYTE, (void *) BorderImage);
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
if ((i + j) & 1) {
/* white */
NoBorderImage[i][j][0] = 255;
NoBorderImage[i][j][1] = 255;
NoBorderImage[i][j][2] = 255;
NoBorderImage[i][j][3] = 255;
}
else {
/* black */
NoBorderImage[i][j][0] = 0;
NoBorderImage[i][j][1] = 0;
NoBorderImage[i][j][2] = 0;
NoBorderImage[i][j][3] = 0;
}
}
}
glBindTexture(GL_TEXTURE_2D, NO_BORDER_TEXTURE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
GL_RGBA, GL_UNSIGNED_BYTE, (void *) NoBorderImage);
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderf);
}
int main( int argc, char *argv[] )
{
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( 650, 340 );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
glutCreateWindow(argv[0]);
glutReshapeFunc( Reshape );
glutKeyboardFunc( Key );
glutDisplayFunc( Display );
Init();
glutMainLoop();
return 0;
}

View File

@@ -1,8 +1,8 @@
# $Id: Makefile.X11,v 1.10 2000/07/20 20:12:17 brianp Exp $
# $Id: Makefile.X11,v 1.11 2001/03/23 22:48:35 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.3
# Copyright (C) 1995-2000 Brian Paul
# Version: 3.5
# Copyright (C) 1995-2001 Brian Paul
# Makefile for non-GLUT (X11, SVGA, etc) demo programs
@@ -18,6 +18,7 @@ LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB)
PROGS = glthreads \
glxdemo \
glxgears \
glxheads \
glxinfo \
glxpixmap \

497
progs/xdemos/glxgears.c Normal file
View File

@@ -0,0 +1,497 @@
/*
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* This is a port of the infamous "gears" demo to straight GLX (i.e. no GLUT)
* Port by Brian Paul 23 March 2001
*
* Command line options:
* -info print GL implementation information
*
*/
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <GL/gl.h>
#include <GL/glx.h>
#define BENCHMARK
#ifdef BENCHMARK
/* XXX this probably isn't very portable */
#include <sys/time.h>
#include <unistd.h>
/* return current time (in seconds) */
static int
current_time(void)
{
struct timeval tv;
struct timezone tz;
(void) gettimeofday(&tv, &tz);
return (int) tv.tv_sec;
}
#else /*BENCHMARK*/
/* dummy */
static int
current_time(void)
{
return 0;
}
#endif /*BENCHMARK*/
#ifndef M_PI
#define M_PI 3.14159265
#endif
static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
static GLint gear1, gear2, gear3;
static GLfloat angle = 0.0;
/*
*
* Draw a gear wheel. You'll probably want to call this function when
* building a display list since we do a lot of trig here.
*
* Input: inner_radius - radius of hole at center
* outer_radius - radius at center of teeth
* width - width of gear
* teeth - number of teeth
* tooth_depth - depth of tooth
*/
static void
gear(GLfloat inner_radius, GLfloat outer_radius, GLfloat width,
GLint teeth, GLfloat tooth_depth)
{
GLint i;
GLfloat r0, r1, r2;
GLfloat angle, da;
GLfloat u, v, len;
r0 = inner_radius;
r1 = outer_radius - tooth_depth / 2.0;
r2 = outer_radius + tooth_depth / 2.0;
da = 2.0 * M_PI / teeth / 4.0;
glShadeModel(GL_FLAT);
glNormal3f(0.0, 0.0, 1.0);
/* draw front face */
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
if (i < teeth) {
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
width * 0.5);
}
}
glEnd();
/* draw front sides of teeth */
glBegin(GL_QUADS);
da = 2.0 * M_PI / teeth / 4.0;
for (i = 0; i < teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
width * 0.5);
}
glEnd();
glNormal3f(0.0, 0.0, -1.0);
/* draw back face */
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
if (i < teeth) {
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
-width * 0.5);
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
}
}
glEnd();
/* draw back sides of teeth */
glBegin(GL_QUADS);
da = 2.0 * M_PI / teeth / 4.0;
for (i = 0; i < teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
-width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
-width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
}
glEnd();
/* draw outward faces of teeth */
glBegin(GL_QUAD_STRIP);
for (i = 0; i < teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glVertex3f(r1 * cos(angle), r1 * sin(angle), width * 0.5);
glVertex3f(r1 * cos(angle), r1 * sin(angle), -width * 0.5);
u = r2 * cos(angle + da) - r1 * cos(angle);
v = r2 * sin(angle + da) - r1 * sin(angle);
len = sqrt(u * u + v * v);
u /= len;
v /= len;
glNormal3f(v, -u, 0.0);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), width * 0.5);
glVertex3f(r2 * cos(angle + da), r2 * sin(angle + da), -width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
width * 0.5);
glVertex3f(r2 * cos(angle + 2 * da), r2 * sin(angle + 2 * da),
-width * 0.5);
u = r1 * cos(angle + 3 * da) - r2 * cos(angle + 2 * da);
v = r1 * sin(angle + 3 * da) - r2 * sin(angle + 2 * da);
glNormal3f(v, -u, 0.0);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
width * 0.5);
glVertex3f(r1 * cos(angle + 3 * da), r1 * sin(angle + 3 * da),
-width * 0.5);
glNormal3f(cos(angle), sin(angle), 0.0);
}
glVertex3f(r1 * cos(0), r1 * sin(0), width * 0.5);
glVertex3f(r1 * cos(0), r1 * sin(0), -width * 0.5);
glEnd();
glShadeModel(GL_SMOOTH);
/* draw inside radius cylinder */
glBegin(GL_QUAD_STRIP);
for (i = 0; i <= teeth; i++) {
angle = i * 2.0 * M_PI / teeth;
glNormal3f(-cos(angle), -sin(angle), 0.0);
glVertex3f(r0 * cos(angle), r0 * sin(angle), -width * 0.5);
glVertex3f(r0 * cos(angle), r0 * sin(angle), width * 0.5);
}
glEnd();
}
static void
draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(view_rotx, 1.0, 0.0, 0.0);
glRotatef(view_roty, 0.0, 1.0, 0.0);
glRotatef(view_rotz, 0.0, 0.0, 1.0);
glPushMatrix();
glTranslatef(-3.0, -2.0, 0.0);
glRotatef(angle, 0.0, 0.0, 1.0);
glCallList(gear1);
glPopMatrix();
glPushMatrix();
glTranslatef(3.1, -2.0, 0.0);
glRotatef(-2.0 * angle - 9.0, 0.0, 0.0, 1.0);
glCallList(gear2);
glPopMatrix();
glPushMatrix();
glTranslatef(-3.1, 4.2, 0.0);
glRotatef(-2.0 * angle - 25.0, 0.0, 0.0, 1.0);
glCallList(gear3);
glPopMatrix();
glPopMatrix();
}
/* new window size or exposure */
static void
reshape(int width, int height)
{
GLfloat h = (GLfloat) height / (GLfloat) width;
glViewport(0, 0, (GLint) width, (GLint) height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-1.0, 1.0, -h, h, 5.0, 60.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, -40.0);
}
static void
init(void)
{
static GLfloat pos[4] = { 5.0, 5.0, 10.0, 0.0 };
static GLfloat red[4] = { 0.8, 0.1, 0.0, 1.0 };
static GLfloat green[4] = { 0.0, 0.8, 0.2, 1.0 };
static GLfloat blue[4] = { 0.2, 0.2, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, pos);
glEnable(GL_CULL_FACE);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
/* make the gears */
gear1 = glGenLists(1);
glNewList(gear1, GL_COMPILE);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
gear(1.0, 4.0, 1.0, 20, 0.7);
glEndList();
gear2 = glGenLists(1);
glNewList(gear2, GL_COMPILE);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
gear(0.5, 2.0, 2.0, 10, 0.7);
glEndList();
gear3 = glGenLists(1);
glNewList(gear3, GL_COMPILE);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
gear(1.3, 2.0, 0.5, 10, 0.7);
glEndList();
glEnable(GL_NORMALIZE);
}
/*
* Create an RGB, double-buffered window.
* Return the window and context handles.
*/
static void
make_window( Display *dpy, const char *name,
int x, int y, int width, int height,
Window *winRet, GLXContext *ctxRet)
{
int attrib[] = { GLX_RGBA,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DOUBLEBUFFER,
GLX_DEPTH_SIZE, 1,
None };
int scrnum;
XSetWindowAttributes attr;
unsigned long mask;
Window root;
Window win;
GLXContext ctx;
XVisualInfo *visinfo;
scrnum = DefaultScreen( dpy );
root = RootWindow( dpy, scrnum );
visinfo = glXChooseVisual( dpy, scrnum, attrib );
if (!visinfo) {
printf("Error: couldn't get an RGB, Double-buffered visual\n");
exit(1);
}
/* window attributes */
attr.background_pixel = 0;
attr.border_pixel = 0;
attr.colormap = XCreateColormap( dpy, root, visinfo->visual, AllocNone);
attr.event_mask = StructureNotifyMask | ExposureMask | KeyPressMask;
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
win = XCreateWindow( dpy, root, 0, 0, width, height,
0, visinfo->depth, InputOutput,
visinfo->visual, mask, &attr );
/* set hints and properties */
{
XSizeHints sizehints;
sizehints.x = x;
sizehints.y = y;
sizehints.width = width;
sizehints.height = height;
sizehints.flags = USSize | USPosition;
XSetNormalHints(dpy, win, &sizehints);
XSetStandardProperties(dpy, win, name, name,
None, (char **)NULL, 0, &sizehints);
}
ctx = glXCreateContext( dpy, visinfo, NULL, True );
if (!ctx) {
printf("Error: glXCreateContext failed\n");
exit(1);
}
XFree(visinfo);
*winRet = win;
*ctxRet = ctx;
}
static void
event_loop(Display *dpy, Window win)
{
while (1) {
while (XPending(dpy) > 0) {
XEvent event;
XNextEvent(dpy, &event);
switch (event.type) {
case Expose:
/* we'll redraw below */
break;
case ConfigureNotify:
reshape(event.xconfigure.width, event.xconfigure.height);
break;
case KeyPress:
{
char buffer[10];
int r, code;
code = XLookupKeysym(&event.xkey, 0);
if (code == XK_Left) {
view_roty += 5.0;
}
else if (code == XK_Right) {
view_roty -= 5.0;
}
else if (code == XK_Up) {
view_rotx += 5.0;
}
else if (code == XK_Down) {
view_rotx -= 5.0;
}
else {
r = XLookupString(&event.xkey, buffer, sizeof(buffer),
NULL, NULL);
if (buffer[0] == 27) {
/* escape */
return;
}
}
}
}
}
/* next frame */
angle += 2.0;
draw();
glXSwapBuffers(dpy, win);
/* calc framerate */
{
static int t0 = -1;
static int frames = 0;
int t = current_time();
if (t0 < 0)
t0 = t;
frames++;
if (t - t0 >= 5.0) {
GLfloat seconds = t - t0;
GLfloat fps = frames / seconds;
printf("%d frames in %3.1f seconds = %6.3f FPS\n", frames, seconds,
fps);
t0 = t;
frames = 0;
}
}
}
}
int
main(int argc, char *argv[])
{
Display *dpy;
Window win;
GLXContext ctx;
char *dpyName = ":0";
GLboolean printInfo = GL_FALSE;
int i;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-display") == 0) {
dpyName = argv[i+1];
i++;
}
else if (strcmp(argv[i], "-info") == 0) {
printInfo = GL_TRUE;
}
}
dpy = XOpenDisplay(dpyName);
if (!dpy) {
printf("Error: couldn't open display %s\n", dpyName);
return -1;
}
make_window(dpy, "glxgears", 0, 0, 300, 300, &win, &ctx);
XMapWindow(dpy, win);
glXMakeCurrent(dpy, win, ctx);
if (printInfo) {
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
printf("GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
printf("GL_EXTENSIONS = %s\n", (char *) glGetString(GL_EXTENSIONS));
}
init();
event_loop(dpy, win);
glXDestroyContext(dpy, ctx);
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
return 0;
}

View File

@@ -1,4 +1,4 @@
/* $Id: glxheads.c,v 1.1.4.1 2000/11/10 17:17:23 brianp Exp $ */
/* $Id: glxheads.c,v 1.2 2000/11/10 17:23:07 brianp Exp $ */
/*
* Exercise multiple GLX connections on multiple X displays.

View File

@@ -1,7 +1,7 @@
/* $Id: glxinfo.c,v 1.10 2000/05/08 14:53:57 brianp Exp $ */
/* $Id: glxinfo.c,v 1.14 2001/04/24 20:57:36 brianp Exp $ */
/*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -28,18 +28,28 @@
* -t print wide table
* -v print verbose information
* -display DisplayName specify the X display to interogate
* -b only print ID of "best" visual on screen 0
*
* Brian Paul 26 January 2000
*/
#define DO_GLU /* may want to remove this for easier XFree86 building? */
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <GL/gl.h>
#ifdef DO_GLU
#include <GL/glu.h>
#endif
#include <GL/glx.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifndef GLX_NONE_EXT
#define GLX_NONE_EXT 0x8000
#endif
typedef enum
@@ -131,7 +141,14 @@ print_extension_list(const char *ext)
static void
print_screen_info(Display *dpy, int scrnum)
print_display_info(Display *dpy)
{
printf("name of display: %s\n", DisplayString(dpy));
}
static void
print_screen_info(Display *dpy, int scrnum, Bool allowDirect)
{
Window win;
int attribSingle[] = {
@@ -175,7 +192,7 @@ print_screen_info(Display *dpy, int scrnum)
0, visinfo->depth, InputOutput,
visinfo->visual, mask, &attr);
ctx = glXCreateContext( dpy, visinfo, NULL, True );
ctx = glXCreateContext( dpy, visinfo, NULL, allowDirect );
if (!ctx) {
fprintf(stderr, "Error: glXCreateContext failed\n");
XDestroyWindow(dpy, win);
@@ -194,9 +211,26 @@ print_screen_info(Display *dpy, int scrnum)
const char *glRenderer = (const char *) glGetString(GL_RENDERER);
const char *glVersion = (const char *) glGetString(GL_VERSION);
const char *glExtensions = (const char *) glGetString(GL_EXTENSIONS);
char *displayName = NULL;
char *colon = NULL, *period = NULL;
#ifdef DO_GLU
const char *gluVersion = (const char *) gluGetString(GLU_VERSION);
const char *gluExtensions = (const char *) gluGetString(GLU_EXTENSIONS);
printf("display: %s screen:%d\n", DisplayString(dpy), scrnum);
#endif
/* Strip the screen number from the display name, if present. */
if (!(displayName = malloc(strlen(DisplayString(dpy)) + 1))) {
fprintf(stderr, "Error: malloc() failed\n");
exit(1);
}
strcpy(displayName, DisplayString(dpy));
colon = strrchr(displayName, ':');
if (colon) {
period = strchr(colon, '.');
if (period)
*period = '\0';
}
printf("display: %s screen: %d\n", displayName, scrnum);
free(displayName);
printf("direct rendering: %s\n", glXIsDirect(dpy, ctx) ? "Yes" : "No");
printf("server glx vendor string: %s\n", serverVendor);
printf("server glx version string: %s\n", serverVersion);
@@ -213,9 +247,11 @@ print_screen_info(Display *dpy, int scrnum)
printf("OpenGL version string: %s\n", glVersion);
printf("OpenGL extensions:\n");
print_extension_list(glExtensions);
#ifdef DO_GLU
printf("glu version: %s\n", gluVersion);
printf("glu extensions:\n");
print_extension_list(gluExtensions);
#endif
}
else {
fprintf(stderr, "Error: glXMakeCurrent failed\n");
@@ -489,13 +525,120 @@ print_visual_info(Display *dpy, int scrnum, InfoMode mode)
}
/*
* Stand-alone Mesa doesn't really implement the GLX protocol so it
* doesn't really know the GLX attributes associated with an X visual.
* The first time a visual is presented to Mesa's pseudo-GLX it
* attaches ancilliary buffers to it (like depth and stencil).
* But that usually only works if glXChooseVisual is used.
* This function calls glXChooseVisual() to sort of "prime the pump"
* for Mesa's GLX so that the visuals that get reported actually
* reflect what applications will see.
* This has no effect when using true GLX.
*/
static void
mesa_hack(Display *dpy, int scrnum)
{
static int attribs[] = {
GLX_RGBA,
GLX_RED_SIZE, 1,
GLX_GREEN_SIZE, 1,
GLX_BLUE_SIZE, 1,
GLX_DEPTH_SIZE, 1,
GLX_STENCIL_SIZE, 1,
GLX_ACCUM_RED_SIZE, 1,
GLX_ACCUM_GREEN_SIZE, 1,
GLX_ACCUM_BLUE_SIZE, 1,
GLX_ACCUM_ALPHA_SIZE, 1,
GLX_DOUBLEBUFFER,
None
};
XVisualInfo *visinfo;
visinfo = glXChooseVisual(dpy, scrnum, attribs);
if (visinfo)
XFree(visinfo);
}
/*
* Examine all visuals to find the so-called best one.
* We prefer deepest RGBA buffer with depth, stencil and accum
* that has no caveats.
*/
static int
find_best_visual(Display *dpy, int scrnum)
{
XVisualInfo template;
XVisualInfo *visuals;
int numVisuals;
long mask;
int i;
struct visual_attribs bestVis;
/* get list of all visuals on this screen */
template.screen = scrnum;
mask = VisualScreenMask;
visuals = XGetVisualInfo(dpy, mask, &template, &numVisuals);
/* init bestVis with first visual info */
get_visual_attribs(dpy, &visuals[0], &bestVis);
/* try to find a "better" visual */
for (i = 1; i < numVisuals; i++) {
struct visual_attribs vis;
get_visual_attribs(dpy, &visuals[i], &vis);
/* always skip visuals with caveats */
if (vis.visualCaveat != GLX_NONE_EXT)
continue;
/* see if this vis is better than bestVis */
if ((!bestVis.supportsGL && vis.supportsGL) ||
(bestVis.visualCaveat != GLX_NONE_EXT) ||
(!bestVis.rgba && vis.rgba) ||
(!bestVis.doubleBuffer && vis.doubleBuffer) ||
(bestVis.redSize < vis.redSize) ||
(bestVis.greenSize < vis.greenSize) ||
(bestVis.blueSize < vis.blueSize) ||
(bestVis.alphaSize < vis.alphaSize) ||
(bestVis.depthSize < vis.depthSize) ||
(bestVis.stencilSize < vis.stencilSize) ||
(bestVis.accumRedSize < vis.accumRedSize)) {
/* found a better visual */
bestVis = vis;
}
}
XFree(visuals);
return bestVis.id;
}
static void
usage(void)
{
printf("Usage: glxinfo [-v] [-t] [-h] [-i] [-b] [-display <dname>]\n");
printf("\t-v: Print visuals info in verbose form.\n");
printf("\t-t: Print verbose table.\n");
printf("\t-display <dname>: Print GLX visuals on specified server.\n");
printf("\t-h: This information.\n");
printf("\t-i: Force an indirect rendering context.\n");
printf("\t-b: Find the 'best' visual and print it's number.\n");
}
int
main(int argc, char *argv[])
{
char *displayName = ":0";
char *displayName = NULL;
Display *dpy;
int numScreens, scrnum;
InfoMode mode = Normal;
GLboolean findBest = GL_FALSE;
Bool allowDirect = True;
int i;
for (i = 1; i < argc; i++) {
@@ -509,6 +652,21 @@ main(int argc, char *argv[])
else if (strcmp(argv[i], "-v") == 0) {
mode = Verbose;
}
else if (strcmp(argv[i], "-b") == 0) {
findBest = GL_TRUE;
}
else if (strcmp(argv[i], "-i") == 0) {
allowDirect = False;
}
else if (strcmp(argv[i], "-h") == 0) {
usage();
return 0;
}
else {
printf("Unknown option `%s'\n", argv[i]);
usage();
return 0;
}
}
dpy = XOpenDisplay(displayName);
@@ -517,13 +675,23 @@ main(int argc, char *argv[])
return -1;
}
numScreens = ScreenCount(dpy);
for (scrnum = 0; scrnum < numScreens; scrnum++) {
print_screen_info(dpy, scrnum);
printf("\n");
print_visual_info(dpy, scrnum, mode);
if (scrnum + 1 < numScreens)
printf("\n\n");
if (findBest) {
int b;
mesa_hack(dpy, 0);
b = find_best_visual(dpy, 0);
printf("%d\n", b);
}
else {
numScreens = ScreenCount(dpy);
print_display_info(dpy);
for (scrnum = 0; scrnum < numScreens; scrnum++) {
mesa_hack(dpy, scrnum);
print_screen_info(dpy, scrnum, allowDirect);
printf("\n");
print_visual_info(dpy, scrnum, mode);
if (scrnum + 1 < numScreens)
printf("\n\n");
}
}
XCloseDisplay(dpy);

View File

@@ -1,4 +1,4 @@
/* $Id: manywin.c,v 1.1 2000/06/13 19:41:30 brianp Exp $ */
/* $Id: manywin.c,v 1.4 2001/04/27 21:19:13 brianp Exp $ */
/*
* Create N GLX windows/contexts and render to them in round-robin
@@ -50,6 +50,8 @@ struct head {
#define MAX_HEADS 200
static struct head Heads[MAX_HEADS];
static int NumHeads = 0;
static GLboolean SwapSeparate = GL_TRUE;
static void
@@ -140,7 +142,7 @@ AddHead(const char *displayName, const char *name)
if (!glXMakeCurrent(dpy, win, ctx)) {
Error(displayName, "glXMakeCurrent failed");
printf("glXMakeCurrent failed in Redraw()\n");
return;
return NULL;
}
/* save the info for this head */
@@ -161,6 +163,18 @@ AddHead(const char *displayName, const char *name)
}
static void
DestroyHeads(void)
{
int i;
for (i = 0; i < NumHeads; i++) {
XDestroyWindow(Heads[i].Dpy, Heads[i].Win);
glXDestroyContext(Heads[i].Dpy, Heads[i].Context);
XCloseDisplay(Heads[i].Dpy);
}
}
static void
Redraw(struct head *h)
{
@@ -187,10 +201,17 @@ Redraw(struct head *h)
glEnd();
glPopMatrix();
glXSwapBuffers(h->Dpy, h->Win);
if (!SwapSeparate)
glXSwapBuffers(h->Dpy, h->Win);
}
static void
Swap(struct head *h)
{
glXSwapBuffers(h->Dpy, h->Win);
}
static void
Resize(const struct head *h, unsigned int width, unsigned int height)
@@ -222,6 +243,8 @@ EventLoop(void)
switch (event.type) {
case Expose:
Redraw(h);
if (SwapSeparate)
Swap(h);
break;
case ConfigureNotify:
Resize(h, event.xconfigure.width, event.xconfigure.height);
@@ -236,7 +259,17 @@ EventLoop(void)
printf("window mismatch\n");
}
}
Redraw(h);
}
/* redraw all windows */
for (i = 0; i < NumHeads; i++) {
Redraw(&Heads[i]);
}
/* swapbuffers on all windows, if not already done */
if (SwapSeparate) {
for (i = 0; i < NumHeads; i++) {
Swap(&Heads[i]);
}
}
usleep(1);
}
@@ -248,9 +281,9 @@ static void
PrintInfo(const struct head *h)
{
printf("Name: %s\n", h->DisplayName);
printf(" Display: 0x%x\n", h->Dpy);
printf(" Window: 0x%x\n", h->Win);
printf(" Context: 0x%x\n", h->Context);
printf(" Display: %p\n", h->Dpy);
printf(" Window: 0x%x\n", (int) h->Win);
printf(" Context: 0x%x\n", (int) h->Context);
printf(" GL_VERSION: %s\n", h->Version);
printf(" GL_VENDOR: %s\n", h->Vendor);
printf(" GL_RENDERER: %s\n", h->Renderer);
@@ -260,24 +293,42 @@ PrintInfo(const struct head *h)
int
main(int argc, char *argv[])
{
char *dpyName = NULL;
int i;
if (argc == 1) {
struct head *h;
printf("manywin: open N simultaneous glx windows\n");
printf("Usage:\n");
printf(" manywin numWindows\n");
printf(" manywin [-s] numWindows\n");
printf("Options:\n");
printf(" -s = swap immediately after drawing (see src code)\n");
printf("Example:\n");
printf(" manywin 10\n");
return 0;
}
else {
int n = atoi(argv[1]);
int n = 3;
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "-s") == 0) {
SwapSeparate = GL_FALSE;
}
else if (strcmp(argv[i], "-display") == 0 && i < argc) {
dpyName = argv[i+1];
i++;
}
else {
n = atoi(argv[i]);
}
}
if (n < 1)
n = 1;
printf("%d windows\n", n);
for (i = 0; i < n; i++) {
char name[100];
struct head *h;
sprintf(name, "%d", i);
h = AddHead(":0", name);
h = AddHead(dpyName, name);
if (h) {
PrintInfo(h);
}
@@ -285,5 +336,6 @@ main(int argc, char *argv[])
}
EventLoop();
DestroyHeads();
return 0;
}

View File

@@ -1,6 +1,5 @@
# Makefile for core library for VMS
# contributed by Jouk Jansen joukj@crys.chem.uva.nl
# Last revision : 3 May 1999
# Makefile for GLU for VMS
# contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl
.first
define gl [-.include.gl]
@@ -11,74 +10,25 @@
VPATH = RCS
INCDIR = [-.include]
INCDIR = $disk2:[-.include]
LIBDIR = [-.lib]
CFLAGS = /include=($(INCDIR),[])/define=(FBIND=1)/name=(as_is,short)
CFLAGS = /include=$(INCDIR)/define=(FBIND=1)/name=(as_is,short)
CORE_SOURCES = aatriangle.c accum.c alpha.c alphabuf.c attrib.c \
bitmap.c blend.c buffers.c clip.c colortab.c context.c copypix.c depth.c \
dispatch.c \
dlist.c drawpix.c enable.c eval.c feedback.c fog.c \
get.c hash.c hint.c image.c imaging.c light.c lines.c logic.c masking.c matrix.c \
mem.c glapi.c glapinoop.c \
mmath.c pb.c pixel.c points.c polygon.c \
quads.c rastpos.c readpix.c rect.c scissor.c shade.c span.c \
stencil.c teximage.c texobj.c texstate.c texture.c translate.c triangle.c \
varray.c winpos.c vb.c vbcull.c vbfill.c vbrender.c vbxform.c xform.c \
zoom.c bbox.c cva.c vector.c vbindirect.c config.c enums.c extensions.c \
pipeline.c stages.c state.c vertices.c [.x86]x86.c
SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \
polytest.c project.c quadric.c tess.c tesselat.c
DRIVER_SOURCES = [.x]glxapi.c [.x]fakeglx.c [.x]xfonts.c \
[.x]xmesa1.c [.x]xmesa2.c [.x]xmesa3.c [.x]xmesa4.c \
[.osmesa]osmesa.c \
[.svga]svgamesa.c \
[.fx]fxapi.c [.fx]fxdd.c [.fx]fxddtex.c [.fx]fxvsetup.c [.fx]fxsetup.c \
[.fx]fxtrifuncs.c [.fx]fxclip.c [.fx]fxfastpath.c [.fx]fxpipeline.c\
[.fx]fxrender.c [.fx]fxtexman.c [.fx]fxddspan.c [.fx]fxcva.c [.fx]fxsanity.c\
[.fx]fxglidew.c
OBJECTS =glu.obj,mipmap.obj,nurbs.obj,nurbscrv.obj,nurbssrf.obj,nurbsutl.obj,\
polytest.obj,project.obj,quadric.obj,tess.obj,tesselat.obj
ASM_SOURCES =
OBJECTS =aatriangle.obj,\
accum.obj,alpha.obj,alphabuf.obj,attrib.obj,\
bitmap.obj,blend.obj,buffers.obj,clip.obj,colortab.obj,context.obj,copypix.obj,depth.obj,\
dlist.obj,drawpix.obj,enable.obj,eval.obj,feedback.obj,fog.obj
OBJECTS3=get.obj,hash.obj,hint.obj,image.obj,light.obj,lines.obj,logic.obj,masking.obj,\
matrix.obj,glapi.obj,glapinoop.obj,dispatch.obj,imaging.obj,mem.obj,\
mmath.obj,pb.obj,pixel.obj,points.obj
OBJECTS7=polygon.obj,\
quads.obj,rastpos.obj,readpix.obj,rect.obj,scissor.obj,shade.obj,span.obj,\
pixeltex.obj
OBJECTS4=stencil.obj,teximage.obj,texobj.obj,texstate.obj,texture.obj,translate.obj,\
triangle.obj,varray.obj,winpos.obj,vb.obj,vbcull.obj,vbfill.obj,vbrender.obj
OBJECTS6=vbxform.obj,xform.obj,zoom.obj,bbox.obj,cva.obj,vector.obj,vbindirect.obj,\
config.obj,enums.obj,extensions.obj,pipeline.obj,stages.obj,state.obj,\
vertices.obj,[.x86]x86.obj
OBJECTS2=[.x]glxapi.obj,[.x]fakeglx.obj,[.x]xfonts.obj,\
[.x]xmesa1.obj,[.x]xmesa2.obj,[.x]xmesa3.obj,[.x]xmesa4.obj,\
[.osmesa]osmesa.obj,\
[.svga]svgamesa.obj
OBJECTS5=[.fx]fxapi.obj,[.fx]fxdd.obj,[.fx]fxddtex.obj,[.fx]fxvsetup.obj,\
[.fx]fxsetup.obj,[.fx]fxclip.obj,[.fx]fxfastpath.obj,[.fx]fxpipeline.obj
OBJECTS8=[.fx]fxtrifuncs.obj,[.fx]fxsanity.obj,[.fx]fxglidew.obj,\
[.fx]fxrender.obj,[.fx]fxtexman.obj,[.fx]fxddspan.obj,[.fx]fxcva.obj
##### RULES #####
VERSION=Mesa V3.1
VERSION=MesaGlu V3.2
##### TARGETS #####
# Make the library
$(LIBDIR)$(GL_LIB) : $(OBJECTS),$(OBJECTS2) $(OBJECTS3) $(OBJECTS4)\
$(OBJECTS5) $(OBJECTS8) $(OBJECTS7) $(OBJECTS6)
# Make the library:
$(LIBDIR)$(GLU_LIB) : $(OBJECTS)
.ifdef SHARE
@ WRITE_ SYS$OUTPUT " generating mesagl1.opt"
@ OPEN_/WRITE FILE mesagl1.opt
@@ -86,15 +36,9 @@ $(LIBDIR)$(GL_LIB) : $(OBJECTS),$(OBJECTS2) $(OBJECTS3) $(OBJECTS4)\
@ WRITE_ FILE "! mesagl1.opt generated by DESCRIP.$(MMS_EXT)"
@ WRITE_ FILE "!"
@ WRITE_ FILE "IDENTIFICATION=""$(VERSION)"""
@ WRITE_ FILE "GSMATCH=LEQUAL,3,1
@ WRITE_ FILE "GSMATCH=LEQUAL,3,2
@ WRITE_ FILE "$(OBJECTS)"
@ WRITE_ FILE "$(OBJECTS3)"
@ WRITE_ FILE "$(OBJECTS4)"
@ WRITE_ FILE "$(OBJECTS7)"
@ WRITE_ FILE "$(OBJECTS6)"
@ WRITE_ FILE "$(OBJECTS2)"
@ WRITE_ FILE "$(OBJECTS5)"
@ WRITE_ FILE "$(OBJECTS8)"
@ WRITE_ FILE "[-.lib]libmesagl.exe/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XEXTLIBSHR/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XLIBSHR/SHARE"
@ CLOSE_ FILE
@@ -102,79 +46,16 @@ $(LIBDIR)$(GL_LIB) : $(OBJECTS),$(OBJECTS2) $(OBJECTS3) $(OBJECTS4)\
@ LINK_/NODEB/NOSHARE/NOEXE/MAP=mesagl.map/FULL mesagl1.opt/OPT
@ WRITE_ SYS$OUTPUT " analyzing mesagl.map ..."
@ @[-.vms]ANALYZE_MAP.COM mesagl.map mesagl.opt
@ WRITE_ SYS$OUTPUT " linking $(GL_LIB) ..."
@ LINK_/NODEB/SHARE=$(GL_LIB)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesagl.opt/opt
@ WRITE_ SYS$OUTPUT " linking $(GLU_LIB) ..."
@ LINK_/noinform/NODEB/SHARE=$(GLU_LIB)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesagl.opt/opt
.else
@ $(MAKELIB) $(GL_LIB) $(OBJECTS)
@ library $(GL_LIB) $(OBJECTS2)
@ library $(GL_LIB) $(OBJECTS3)
@ library $(GL_LIB) $(OBJECTS4)
@ library $(GL_LIB) $(OBJECTS5)
@ library $(GL_LIB) $(OBJECTS8)
@ library $(GL_LIB) $(OBJECTS7)
@ library $(GL_LIB) $(OBJECTS6)
@ $(MAKELIB) $(GLU_LIB) $(OBJECTS)
.endif
@ rename $(GL_LIB)* $(LIBDIR)
@ rename $(GLU_LIB)* $(LIBDIR)
clean :
purge
delete *.obj;*
purge
aatriangle.obj : aatriangle.c
include mms_depend.
triangle.obj : triangle.c
pixeltex.obj : pixeltex.c
[.x86]x86.obj : [.x86]x86.c
$(CC) $(CFLAGS) /obj=[.x86]x86.obj [.x86]x86.c
[.x]glxapi.obj : [.x]glxapi.c
$(CC) $(CFLAGS) /obj=[.x]glxapi.obj [.x]glxapi.c
[.x]fakeglx.obj : [.x]fakeglx.c
$(CC) $(CFLAGS) /obj=[.x]fakeglx.obj [.x]fakeglx.c
[.x]xfonts.obj : [.x]xfonts.c
$(CC) $(CFLAGS) /obj=[.x]xfonts.obj [.x]xfonts.c
[.x]xmesa1.obj : [.x]xmesa1.c
$(CC) $(CFLAGS) /obj=[.x]xmesa1.obj [.x]xmesa1.c
[.x]xmesa2.obj : [.x]xmesa2.c
$(CC) $(CFLAGS) /obj=[.x]xmesa2.obj [.x]xmesa2.c
[.x]xmesa3.obj : [.x]xmesa3.c
$(CC) $(CFLAGS) /obj=[.x]xmesa3.obj [.x]xmesa3.c
[.x]xmesa4.obj : [.x]xmesa4.c
$(CC) $(CFLAGS) /obj=[.x]xmesa4.obj [.x]xmesa4.c
[.osmesa]osmesa.obj : [.osmesa]osmesa.c
$(CC) $(CFLAGS) /obj=[.osmesa]osmesa.obj [.osmesa]osmesa.c
[.svga]svgamesa.obj : [.svga]svgamesa.c
$(CC) $(CFLAGS) /obj=[.svga]svgamesa.obj [.svga]svgamesa.c
[.fx]fxapi.obj : [.fx]fxapi.c
$(CC) $(CFLAGS) /obj=[.fx]fxapi.obj [.fx]fxapi.c
[.fx]fxclip.obj : [.fx]fxclip.c
$(CC) $(CFLAGS) /obj=[.fx]fxclip.obj [.fx]fxclip.c
[.fx]fxcva.obj : [.fx]fxcva.c
$(CC) $(CFLAGS) /obj=[.fx]fxcva.obj [.fx]fxcva.c
[.fx]fxdd.obj : [.fx]fxdd.c
$(CC) $(CFLAGS) /obj=[.fx]fxdd.obj [.fx]fxdd.c
[.fx]fxddtex.obj : [.fx]fxddtex.c
$(CC) $(CFLAGS) /obj=[.fx]fxddtex.obj [.fx]fxddtex.c
[.fx]fxfastpath.obj : [.fx]fxfastpath.c
$(CC) $(CFLAGS) /obj=[.fx]fxfastpath.obj [.fx]fxfastpath.c
[.fx]fxpipeline.obj : [.fx]fxpipeline.c
$(CC) $(CFLAGS) /obj=[.fx]fxpipeline.obj [.fx]fxpipeline.c
[.fx]fxsanity.obj : [.fx]fxsanity.c
$(CC) $(CFLAGS) /obj=[.fx]fxsanity.obj [.fx]fxsanity.c
[.fx]fxvsetup.obj : [.fx]fxvsetup.c
$(CC) $(CFLAGS) /obj=[.fx]fxvsetup.obj [.fx]fxvsetup.c
[.fx]fxsetup.obj : [.fx]fxsetup.c
$(CC) $(CFLAGS) /obj=[.fx]fxsetup.obj [.fx]fxsetup.c
[.fx]fxtrifuncs.obj : [.fx]fxtrifuncs.c
$(CC) $(CFLAGS) /obj=[.fx]fxtrifuncs.obj [.fx]fxtrifuncs.c
[.fx]fxrender.obj : [.fx]fxrender.c
$(CC) $(CFLAGS) /obj=[.fx]fxrender.obj [.fx]fxrender.c
[.fx]fxtexman.obj : [.fx]fxtexman.c
$(CC) $(CFLAGS) /obj=[.fx]fxtexman.obj [.fx]fxtexman.c
[.fx]fxddspan.obj : [.fx]fxddspan.c
$(CC) $(CFLAGS) /obj=[.fx]fxddspan.obj [.fx]fxddspan.c
[.fx]fxglidew.obj : [.fx]fxglidew.c
$(CC) $(CFLAGS) /obj=[.fx]fxglidew.obj [.fx]fxglidew.c
.include mms_depend.

View File

@@ -1,9 +1,9 @@
/* $Id: glu.c,v 1.21.2.2 2001/01/24 04:49:27 brianp Exp $ */
/* $Id: glu.c,v 1.24 2001/03/20 17:56:10 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.4
* Copyright (C) 1995-2000 Brian Paul
* Version: 3.5
* Copyright (C) 1995-2001 Brian Paul
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -43,7 +43,9 @@
#endif
#define EPS 0.00001
#ifndef GLU_INCOMPATIBLE_GL_VERSION
#define GLU_INCOMPATIBLE_GL_VERSION 100903
#endif
void GLAPIENTRY
@@ -137,6 +139,32 @@ gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)
static void
frustum(GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top,
GLdouble nearval, GLdouble farval)
{
GLdouble x, y, a, b, c, d;
GLdouble m[16];
x = (2.0 * nearval) / (right - left);
y = (2.0 * nearval) / (top - bottom);
a = (right + left) / (right - left);
b = (top + bottom) / (top - bottom);
c = -(farval + nearval) / ( farval - nearval);
d = -(2.0 * farval * nearval) / (farval - nearval);
#define M(row,col) m[col*4+row]
M(0,0) = x; M(0,1) = 0.0F; M(0,2) = a; M(0,3) = 0.0F;
M(1,0) = 0.0F; M(1,1) = y; M(1,2) = b; M(1,3) = 0.0F;
M(2,0) = 0.0F; M(2,1) = 0.0F; M(2,2) = c; M(2,3) = d;
M(3,0) = 0.0F; M(3,1) = 0.0F; M(3,2) = -1.0F; M(3,3) = 0.0F;
#undef M
glMultMatrixd(m);
}
void GLAPIENTRY
gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
{
@@ -144,18 +172,18 @@ gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)
ymax = zNear * tan(fovy * M_PI / 360.0);
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
glFrustum(xmin, xmax, ymin, ymax, zNear, zFar);
/* don't call glFrustum() because of error semantics (covglu) */
frustum(xmin, xmax, ymin, ymax, zNear, zFar);
}
void GLAPIENTRY
gluPickMatrix(GLdouble x, GLdouble y,
GLdouble width, GLdouble height, const GLint viewport[4])
GLdouble width, GLdouble height, GLint viewport[4])
{
GLfloat m[16];
GLfloat sx, sy;
@@ -302,7 +330,7 @@ const GLubyte *GLAPIENTRY
gluGetString(GLenum name)
{
static char *extensions = "GL_EXT_abgr";
static char *version = "1.1 Mesa 3.4.1";
static char *version = "1.1 Mesa 3.5";
switch (name) {
case GLU_EXTENSIONS:
@@ -366,16 +394,16 @@ void (GLAPIENTRY * gluGetProcAddressEXT(const GLubyte * procName)) ()
*/
#ifdef GLU_VERSION_1_3
GLboolean GLAPIENTRY
gluCheckExtension(const char *extName, const GLubyte * extString)
gluCheckExtension(const GLubyte *extName, const GLubyte * extString)
{
assert(extName);
assert(extString);
{
const int len = strlen(extName);
const int len = strlen((const char *) extName);
const char *start = (const char *) extString;
while (1) {
const char *c = strstr(start, extName);
const char *c = strstr(start, (const char *) extName);
if (!c)
return GL_FALSE;

View File

@@ -1,4 +1,4 @@
/* $Id: mipmap.c,v 1.7.4.1 2000/10/26 21:48:37 brianp Exp $ */
/* $Id: mipmap.c,v 1.8 2000/10/26 21:48:18 brianp Exp $ */
/*
* Mesa 3-D graphics library

View File

@@ -1,4 +1,4 @@
/* $Id: nurbscrv.c,v 1.2.4.1 2000/11/10 17:17:22 brianp Exp $ */
/* $Id: nurbscrv.c,v 1.3 2000/11/10 17:23:04 brianp Exp $ */
/*
* Mesa 3-D graphics library

View File

@@ -1,4 +1,4 @@
/* $Id: nurbsutl.c,v 1.3.4.1 2000/11/10 17:17:22 brianp Exp $ */
/* $Id: nurbsutl.c,v 1.4 2000/11/10 17:23:04 brianp Exp $ */
/*
* Mesa 3-D graphics library

View File

@@ -1,4 +1,4 @@
/* $Id: polytest.c,v 1.3.4.1 2000/11/10 17:17:22 brianp Exp $ */
/* $Id: polytest.c,v 1.4 2000/11/10 17:23:04 brianp Exp $ */
/*
* Mesa 3-D graphics library

View File

@@ -1,4 +1,4 @@
/* $Id: quadric.c,v 1.8 2000/07/11 14:11:04 brianp Exp $ */
/* $Id: quadric.c,v 1.9 2001/01/15 20:04:28 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -401,7 +401,6 @@ gluSphere(GLUquadricObj * qobj, GLdouble radius, GLint slices, GLint stacks)
/* draw +Z end as a triangle fan */
glBegin(GL_TRIANGLE_FAN);
glNormal3f(0.0, 0.0, 1.0);
TXTR_COORD(0.5, 1.0);
glVertex3f(0.0, 0.0, nsign * radius);
for (j = 0; j <= slices; j++) {
theta = (j == slices) ? 0.0 : j * dtheta;
@@ -458,7 +457,6 @@ gluSphere(GLUquadricObj * qobj, GLdouble radius, GLint slices, GLint stacks)
/* draw -Z end as a triangle fan */
glBegin(GL_TRIANGLE_FAN);
glNormal3f(0.0, 0.0, -1.0);
TXTR_COORD(0.5, 0.0);
glVertex3f(0.0, 0.0, -radius * nsign);
rho = M_PI - drho;
s = 1.0;
@@ -470,7 +468,6 @@ gluSphere(GLUquadricObj * qobj, GLdouble radius, GLint slices, GLint stacks)
z = nsign * cos(rho);
if (normals)
glNormal3f(x * nsign, y * nsign, z * nsign);
TXTR_COORD(s, t);
s -= ds;
glVertex3f(x * radius, y * radius, z * radius);
}

View File

@@ -1,4 +1,4 @@
/* $Id: tess.c,v 1.25 2000/07/11 14:11:04 brianp Exp $ */
/* $Id: tess.c,v 1.26 2001/03/20 17:56:10 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -80,7 +80,7 @@ gluNewTess(void)
GLUtriangulatorObj *tobj;
if ((tobj = (GLUtriangulatorObj *)
malloc(sizeof(struct GLUtriangulatorObj))) == NULL)
malloc(sizeof(struct GLUtesselator))) == NULL)
return NULL;
tobj->contours = tobj->last_contour = NULL;
init_callbacks(&tobj->callbacks);

View File

@@ -1,4 +1,4 @@
/* $Id: tess.h,v 1.17 2000/07/11 14:11:04 brianp Exp $ */
/* $Id: tess.h,v 1.18 2001/03/20 17:56:10 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -85,7 +85,7 @@ typedef struct polygon_str
}
tess_polygon;
struct GLUtriangulatorObj
struct GLUtesselator
{
tess_contour *contours, *last_contour;
GLuint contour_cnt;

158
src/glu/sgi/Makefile.X11 Normal file
View File

@@ -0,0 +1,158 @@
# $Id: Makefile.X11,v 1.4 2001/03/28 20:17:55 gareth Exp $
# Mesa 3-D graphics library
# Version: 3.5
# Copyright (C) 1995-2001 Brian Paul
# Makefile for SGI SI GLU library
##### MACROS #####
GLU_MAJOR = 1
GLU_MINOR = 3
GLU_TINY = 0$(MESA_MAJOR)0$(MESA_MINOR)0$(MESA_TINY)
VPATH = RCS
INCDIRS = -I../include -Iinclude -Iinternals -Ilibnurbs/internals -Ilibnurbs/interface -Ilibnurbs/nurbtess
LIBDIR = ../lib
C_SOURCES = \
libutil/error.c \
libutil/glue.c \
libutil/mipmap.c \
libutil/project.c \
libutil/quad.c \
libutil/registry.c \
libtess/dict.c \
libtess/geom.c \
libtess/memalloc.c \
libtess/mesh.c \
libtess/normal.c \
libtess/priorityq.c \
libtess/render.c \
libtess/sweep.c \
libtess/tess.c \
libtess/tessmono.c
CC_SOURCES = \
libnurbs/interface/bezierEval.cc \
libnurbs/interface/bezierPatch.cc \
libnurbs/interface/bezierPatchMesh.cc \
libnurbs/interface/glcurveval.cc \
libnurbs/interface/glinterface.cc \
libnurbs/interface/glrenderer.cc \
libnurbs/interface/glsurfeval.cc \
libnurbs/interface/incurveeval.cc \
libnurbs/interface/insurfeval.cc \
libnurbs/internals/arc.cc \
libnurbs/internals/arcsorter.cc \
libnurbs/internals/arctess.cc \
libnurbs/internals/backend.cc \
libnurbs/internals/basiccrveval.cc \
libnurbs/internals/basicsurfeval.cc \
libnurbs/internals/bin.cc \
libnurbs/internals/bufpool.cc \
libnurbs/internals/cachingeval.cc \
libnurbs/internals/ccw.cc \
libnurbs/internals/coveandtiler.cc \
libnurbs/internals/curve.cc \
libnurbs/internals/curvelist.cc \
libnurbs/internals/curvesub.cc \
libnurbs/internals/dataTransform.cc \
libnurbs/internals/displaylist.cc \
libnurbs/internals/flist.cc \
libnurbs/internals/flistsorter.cc \
libnurbs/internals/hull.cc \
libnurbs/internals/intersect.cc \
libnurbs/internals/knotvector.cc \
libnurbs/internals/mapdesc.cc \
libnurbs/internals/mapdescv.cc \
libnurbs/internals/maplist.cc \
libnurbs/internals/mesher.cc \
libnurbs/internals/monoTriangulationBackend.cc \
libnurbs/internals/monotonizer.cc \
libnurbs/internals/mycode.cc \
libnurbs/internals/nurbsinterfac.cc \
libnurbs/internals/nurbstess.cc \
libnurbs/internals/patch.cc \
libnurbs/internals/patchlist.cc \
libnurbs/internals/quilt.cc \
libnurbs/internals/reader.cc \
libnurbs/internals/renderhints.cc \
libnurbs/internals/slicer.cc \
libnurbs/internals/sorter.cc \
libnurbs/internals/splitarcs.cc \
libnurbs/internals/subdivider.cc \
libnurbs/internals/tobezier.cc \
libnurbs/internals/trimline.cc \
libnurbs/internals/trimregion.cc \
libnurbs/internals/trimvertpool.cc \
libnurbs/internals/uarray.cc \
libnurbs/internals/varray.cc \
libnurbs/nurbtess/directedLine.cc \
libnurbs/nurbtess/gridWrap.cc \
libnurbs/nurbtess/monoChain.cc \
libnurbs/nurbtess/monoPolyPart.cc \
libnurbs/nurbtess/monoTriangulation.cc \
libnurbs/nurbtess/partitionX.cc \
libnurbs/nurbtess/partitionY.cc \
libnurbs/nurbtess/polyDBG.cc \
libnurbs/nurbtess/polyUtil.cc \
libnurbs/nurbtess/primitiveStream.cc \
libnurbs/nurbtess/quicksort.cc \
libnurbs/nurbtess/rectBlock.cc \
libnurbs/nurbtess/sampleComp.cc \
libnurbs/nurbtess/sampleCompBot.cc \
libnurbs/nurbtess/sampleCompRight.cc \
libnurbs/nurbtess/sampleCompTop.cc \
libnurbs/nurbtess/sampleMonoPoly.cc \
libnurbs/nurbtess/sampledLine.cc \
libnurbs/nurbtess/searchTree.cc
SOURCES = $(C_SOURCES) $(CC_SOURCES)
C_OBJECTS = $(C_SOURCES:.c=.o)
CC_OBJECTS = $(CC_SOURCES:.cc=.o)
OBJECTS = $(C_OBJECTS) $(CC_OBJECTS)
##### RULES #####
.c.o:
$(CC) -c $(INCDIRS) $(CFLAGS) -DLIBRARYBUILD $< -o $@
.cc.o:
$(CPLUSPLUS) -c $(INCDIRS) $(CCFLAGS) -DLIBRARYBUILD $< -o $@
##### TARGETS #####
default:
@echo "Specify a target configuration"
clean:
-rm *.o */*.o */*/*.o
targets: $(LIBDIR)/$(GLU_LIB)
# Make the library:
$(LIBDIR)/$(GLU_LIB): $(OBJECTS)
$(MAKELIB) $(GLU_LIB) $(GLU_MAJOR) $(GLU_MINOR) $(GLU_TINY) $(OBJECTS)
rm -f $(LIBDIR)/$(GLU_LIB)*
mv $(GLU_LIB)* $(LIBDIR)
include ../Make-config
include depend
#
# Run 'make depend' to update the dependencies if you change what's included
# by any source file.
#
dep: $(SOURCES)
makedepend -fdepend -Y -I../include $(SOURCES)

451
src/glu/sgi/descrip.mms Normal file
View File

@@ -0,0 +1,451 @@
# Makefile for GLU for VMS
# contributed by Jouk Jansen joukj@hrem.stm.tudelft.nl
.first
define gl [-.include.gl]
.include [-]mms-config.
##### MACROS #####
VPATH = RCS
INCDIR =([-.include],[.include],[.internals],[.libnurbs.internals],\
[.libnurbs.interface],[.libnurbs.nurbtess])
LIBDIR = [-.lib]
CFLAGS = /include=$(INCDIR)/name=(as_is,short)
LU_OBJECTS=\
[.libutil]error.obj, \
[.libutil]glue.obj, \
[.libutil]mipmap.obj,\
[.libutil]project.obj,\
[.libutil]quad.obj, \
[.libutil]registry.obj
LT_OBJECTS=[.libtess]dict.obj, \
[.libtess]geom.obj, \
[.libtess]memalloc.obj,\
[.libtess]mesh.obj, \
[.libtess]normal.obj,\
[.libtess]priorityq.obj,\
[.libtess]render.obj,\
[.libtess]sweep.obj, \
[.libtess]tess.obj, \
[.libtess]tessmono.obj
LI_OBJECTS=[.libnurbs.interface]bezierEval.obj, \
[.libnurbs.interface]bezierPatch.obj, \
[.libnurbs.interface]bezierPatchMesh.obj, \
[.libnurbs.interface]glcurveval.obj, \
[.libnurbs.interface]glinterface.obj
LI_OBJECTS1=[.libnurbs.interface]glrenderer.obj, \
[.libnurbs.interface]glsurfeval.obj, \
[.libnurbs.interface]incurveeval.obj, \
[.libnurbs.interface]insurfeval.obj
LI2_OBJECTS=[.libnurbs.internals]arc.obj, \
[.libnurbs.internals]arcsorter.obj, \
[.libnurbs.internals]arctess.obj, \
[.libnurbs.internals]backend.obj, \
[.libnurbs.internals]basiccrveval.obj, \
[.libnurbs.internals]basicsurfeval.obj
LI2_OBJECTS1=[.libnurbs.internals]bin.obj, \
[.libnurbs.internals]bufpool.obj, \
[.libnurbs.internals]cachingeval.obj, \
[.libnurbs.internals]ccw.obj, \
[.libnurbs.internals]coveandtiler.obj, \
[.libnurbs.internals]curve.obj, \
[.libnurbs.internals]curvelist.obj
LI2_OBJECTS2=[.libnurbs.internals]curvesub.obj, \
[.libnurbs.internals]dataTransform.obj, \
[.libnurbs.internals]displaylist.obj, \
[.libnurbs.internals]flist.obj, \
[.libnurbs.internals]flistsorter.obj
LI2_OBJECTS3=[.libnurbs.internals]hull.obj, \
[.libnurbs.internals]intersect.obj, \
[.libnurbs.internals]knotvector.obj, \
[.libnurbs.internals]mapdesc.obj
LI2_OBJECTS4=[.libnurbs.internals]mapdescv.obj, \
[.libnurbs.internals]maplist.obj, \
[.libnurbs.internals]mesher.obj, \
[.libnurbs.internals]monoTriangulationBackend.obj,\
[.libnurbs.internals]monotonizer.obj
LI2_OBJECTS5=[.libnurbs.internals]mycode.obj, \
[.libnurbs.internals]nurbsinterfac.obj, \
[.libnurbs.internals]nurbstess.obj, \
[.libnurbs.internals]patch.obj
LI2_OBJECTS6=[.libnurbs.internals]patchlist.obj, \
[.libnurbs.internals]quilt.obj, \
[.libnurbs.internals]reader.obj, \
[.libnurbs.internals]renderhints.obj, \
[.libnurbs.internals]slicer.obj
LI2_OBJECTS7=[.libnurbs.internals]sorter.obj, \
[.libnurbs.internals]splitarcs.obj, \
[.libnurbs.internals]subdivider.obj, \
[.libnurbs.internals]tobezier.obj
LI2_OBJECTS8=[.libnurbs.internals]trimline.obj, \
[.libnurbs.internals]trimregion.obj, \
[.libnurbs.internals]trimvertpool.obj, \
[.libnurbs.internals]uarray.obj, \
[.libnurbs.internals]varray.obj
LN_OBJECTS=[.libnurbs.nurbtess]directedLine.obj, \
[.libnurbs.nurbtess]gridWrap.obj, \
[.libnurbs.nurbtess]monoChain.obj, \
[.libnurbs.nurbtess]monoPolyPart.obj, \
[.libnurbs.nurbtess]monoTriangulation.obj
LN_OBJECTS1=[.libnurbs.nurbtess]partitionX.obj, \
[.libnurbs.nurbtess]partitionY.obj, \
[.libnurbs.nurbtess]polyDBG.obj
LN_OBJECTS2=[.libnurbs.nurbtess]polyUtil.obj, \
[.libnurbs.nurbtess]primitiveStream.obj, \
[.libnurbs.nurbtess]quicksort.obj, \
[.libnurbs.nurbtess]rectBlock.obj
LN_OBJECTS3=[.libnurbs.nurbtess]sampleComp.obj, \
[.libnurbs.nurbtess]sampleCompBot.obj, \
[.libnurbs.nurbtess]sampleCompRight.obj
LN_OBJECTS4=[.libnurbs.nurbtess]sampleCompTop.obj, \
[.libnurbs.nurbtess]sampleMonoPoly.obj,\
[.libnurbs.nurbtess]sampledLine.obj, \
[.libnurbs.nurbtess]searchTree.obj
##### RULES #####
VERSION=MesaGlu V3.5
##### TARGETS #####
# Make the library:
$(LIBDIR)$(GLU_LIB) : $(LU_OBJECTS) $(LT_OBJECTS) $(LI_OBJECTS) $(LI_OBJECTS1)\
$(LI2_OBJECTS) $(LI2_OBJECTS1) $(LI2_OBJECTS2)\
$(LI2_OBJECTS3) $(LI2_OBJECTS4) $(LI2_OBJECTS5)\
$(LI2_OBJECTS6) $(LI2_OBJECTS7) $(LI2_OBJECTS8)\
$(LN_OBJECTS) $(LN_OBJECTS1) $(LN_OBJECTS2)\
$(LN_OBJECTS3) $(LN_OBJECTS4)
.ifdef SHARE
@ WRITE_ SYS$OUTPUT " generating mesagl1.opt"
@ OPEN_/WRITE FILE mesagl1.opt
@ WRITE_ FILE "!"
@ WRITE_ FILE "! mesagl1.opt generated by DESCRIP.$(MMS_EXT)"
@ WRITE_ FILE "!"
@ WRITE_ FILE "IDENTIFICATION=""$(VERSION)"""
@ WRITE_ FILE "GSMATCH=LEQUAL,3,5
@ WRITE_ FILE "$(LU_OBJECTS)"
@ WRITE_ FILE "$(LT_OBJECTS)"
@ WRITE_ FILE "$(LI_OBJECTS)"
@ WRITE_ FILE "$(LI_OBJECTS1)"
@ WRITE_ FILE "$(LI2_OBJECTS)"
@ WRITE_ FILE "$(LI2_OBJECTS1)"
@ WRITE_ FILE "$(LI2_OBJECTS2)"
@ WRITE_ FILE "$(LI2_OBJECTS3)"
@ WRITE_ FILE "$(LI2_OBJECTS4)"
@ WRITE_ FILE "$(LI2_OBJECTS5)"
@ WRITE_ FILE "$(LI2_OBJECTS6)"
@ WRITE_ FILE "$(LI2_OBJECTS7)"
@ WRITE_ FILE "$(LI2_OBJECTS8)"
@ WRITE_ FILE "$(LN_OBJECTS)"
@ WRITE_ FILE "$(LN_OBJECTS1)"
@ WRITE_ FILE "$(LN_OBJECTS2)"
@ WRITE_ FILE "$(LN_OBJECTS3)"
@ WRITE_ FILE "$(LN_OBJECTS4)"
@ WRITE_ FILE "[-.lib]libmesagl.exe/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XEXTLIBSHR/SHARE"
@ WRITE_ FILE "SYS$SHARE:DECW$XLIBSHR/SHARE"
@ CLOSE_ FILE
# @ WRITE_ SYS$OUTPUT " generating mesagl.map ..."
# @ CXXLINK_/NODEB/NOSHARE/NOEXE/MAP=mesagl.map/FULL mesagl1.opt/OPT
# @ WRITE_ SYS$OUTPUT " analyzing mesagl.map ..."
# @ @[-.vms]ANALYZE_MAP.COM mesagl.map mesagl.opt
@ WRITE_ SYS$OUTPUT " linking $(GLU_LIB) ..."
# @ CXXLINK_/noinform/NODEB/SHARE=$(GLU_LIB)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesagl.opt/opt
@ CXXLINK_/noinform/NODEB/SHARE=$(GLU_LIB)/MAP=mesagl.map/FULL mesagl1.opt/opt,mesaglu.opt/opt
.else
@ $(MAKELIB) $(GLU_LIB) $(LU_OBJECTS),$(LT_OBJECTS),$(LI_OBJECTS),\
$(LI2_OBJECTS),$(LN_OBJECTS)
.endif
@ rename $(GLU_LIB)* $(LIBDIR)
clean :
delete [...]*.obj;*
purge
[.libutil]error.obj : [.libutil]error.c
$(CC) $(CFLAGS) /obj=[.libutil]error.obj [.libutil]error.c
[.libutil]glue.obj : [.libutil]glue.c
$(CC) $(CFLAGS) /obj=[.libutil]glue.obj [.libutil]glue.c
[.libutil]mipmap.obj : [.libutil]mipmap.c
$(CC) $(CFLAGS) /obj=[.libutil]mipmap.obj [.libutil]mipmap.c
[.libutil]project.obj : [.libutil]project.c
$(CC) $(CFLAGS) /obj=[.libutil]project.obj [.libutil]project.c
[.libutil]quad.obj : [.libutil]quad.c
$(CC) $(CFLAGS) /obj=[.libutil]quad.obj [.libutil]quad.c
[.libutil]registry.obj : [.libutil]registry.c
$(CC) $(CFLAGS) /obj=[.libutil]registry.obj [.libutil]registry.c
[.libtess]dict.obj : [.libtess]dict.c
$(CC) $(CFLAGS) /obj=[.libtess]dict.obj [.libtess]dict.c
[.libtess]geom.obj : [.libtess]geom.c
$(CC) $(CFLAGS) /obj=[.libtess]geom.obj [.libtess]geom.c
[.libtess]memalloc.obj : [.libtess]memalloc.c
$(CC) $(CFLAGS) /obj=[.libtess]memalloc.obj [.libtess]memalloc.c
[.libtess]mesh.obj : [.libtess]mesh.c
$(CC) $(CFLAGS) /obj=[.libtess]mesh.obj [.libtess]mesh.c
[.libtess]normal.obj : [.libtess]normal.c
$(CC) $(CFLAGS) /obj=[.libtess]normal.obj [.libtess]normal.c
[.libtess]priorityq.obj : [.libtess]priorityq.c
$(CC) $(CFLAGS) /obj=[.libtess]priorityq.obj [.libtess]priorityq.c
[.libtess]render.obj : [.libtess]render.c
$(CC) $(CFLAGS) /obj=[.libtess]render.obj [.libtess]render.c
[.libtess]sweep.obj : [.libtess]sweep.c
$(CC) $(CFLAGS) /obj=[.libtess]sweep.obj [.libtess]sweep.c
[.libtess]tess.obj : [.libtess]tess.c
$(CC) $(CFLAGS) /obj=[.libtess]tess.obj [.libtess]tess.c
[.libtess]tessmono.obj : [.libtess]tessmono.c
$(CC) $(CFLAGS) /obj=[.libtess]tessmono.obj [.libtess]tessmono.c
[.libnurbs.interface]bezierEval.obj : [.libnurbs.interface]bezierEval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]bezierEval.obj [.libnurbs.interface]bezierEval.cc
[.libnurbs.interface]bezierPatch.obj : [.libnurbs.interface]bezierPatch.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]bezierPatch.obj [.libnurbs.interface]bezierPatch.cc
[.libnurbs.interface]bezierPatchMesh.obj : [.libnurbs.interface]bezierPatchMesh.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]bezierPatchMesh.obj [.libnurbs.interface]bezierPatchMesh.cc
[.libnurbs.interface]glcurveval.obj : [.libnurbs.interface]glcurveval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]glcurveval.obj [.libnurbs.interface]glcurveval.cc
[.libnurbs.interface]glinterface.obj : [.libnurbs.interface]glinterface.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]glinterface.obj [.libnurbs.interface]glinterface.cc
[.libnurbs.interface]glrenderer.obj : [.libnurbs.interface]glrenderer.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]glrenderer.obj [.libnurbs.interface]glrenderer.cc
[.libnurbs.interface]glsurfeval.obj : [.libnurbs.interface]glsurfeval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]glsurfeval.obj [.libnurbs.interface]glsurfeval.cc
[.libnurbs.interface]incurveeval.obj : [.libnurbs.interface]incurveeval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]incurveeval.obj [.libnurbs.interface]incurveeval.cc
[.libnurbs.interface]insurfeval.obj : [.libnurbs.interface]insurfeval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.interface]insurfeval.obj [.libnurbs.interface]insurfeval.cc
[.libnurbs.internals]arc.obj : [.libnurbs.internals]arc.cc
$(CXX) $(CFLAGS)/list/show=all /obj=[.libnurbs.internals]arc.obj [.libnurbs.internals]arc.cc
[.libnurbs.internals]arcsorter.obj : [.libnurbs.internals]arcsorter.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]arcsorter.obj [.libnurbs.internals]arcsorter.cc
[.libnurbs.internals]arctess.obj : [.libnurbs.internals]arctess.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]arctess.obj [.libnurbs.internals]arctess.cc
[.libnurbs.internals]backend.obj : [.libnurbs.internals]backend.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]backend.obj [.libnurbs.internals]backend.cc
[.libnurbs.internals]basiccrveval.obj : [.libnurbs.internals]basiccrveval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]basiccrveval.obj [.libnurbs.internals]basiccrveval.cc
[.libnurbs.internals]basicsurfeval.obj : [.libnurbs.internals]basicsurfeval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]basicsurfeval.obj [.libnurbs.internals]basicsurfeval.cc
[.libnurbs.internals]bin.obj : [.libnurbs.internals]bin.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]bin.obj [.libnurbs.internals]bin.cc
[.libnurbs.internals]bufpool.obj : [.libnurbs.internals]bufpool.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]bufpool.obj [.libnurbs.internals]bufpool.cc
[.libnurbs.internals]cachingeval.obj : [.libnurbs.internals]cachingeval.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]cachingeval.obj [.libnurbs.internals]cachingeval.cc
[.libnurbs.internals]ccw.obj : [.libnurbs.internals]ccw.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]ccw.obj [.libnurbs.internals]ccw.cc
[.libnurbs.internals]coveandtiler.obj : [.libnurbs.internals]coveandtiler.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]coveandtiler.obj [.libnurbs.internals]coveandtiler.cc
[.libnurbs.internals]curve.obj : [.libnurbs.internals]curve.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]curve.obj [.libnurbs.internals]curve.cc
[.libnurbs.internals]curvelist.obj : [.libnurbs.internals]curvelist.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]curvelist.obj [.libnurbs.internals]curvelist.cc
[.libnurbs.internals]curvesub.obj : [.libnurbs.internals]curvesub.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]curvesub.obj [.libnurbs.internals]curvesub.cc
[.libnurbs.internals]dataTransform.obj : [.libnurbs.internals]dataTransform.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]dataTransform.obj [.libnurbs.internals]dataTransform.cc
[.libnurbs.internals]displaylist.obj : [.libnurbs.internals]displaylist.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]displaylist.obj [.libnurbs.internals]displaylist.cc
[.libnurbs.internals]flist.obj : [.libnurbs.internals]flist.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]flist.obj [.libnurbs.internals]flist.cc
[.libnurbs.internals]flistsorter.obj : [.libnurbs.internals]flistsorter.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]flistsorter.obj [.libnurbs.internals]flistsorter.cc
[.libnurbs.internals]hull.obj : [.libnurbs.internals]hull.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]hull.obj [.libnurbs.internals]hull.cc
[.libnurbs.internals]intersect.obj : [.libnurbs.internals]intersect.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]intersect.obj [.libnurbs.internals]intersect.cc
[.libnurbs.internals]knotvector.obj : [.libnurbs.internals]knotvector.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]knotvector.obj [.libnurbs.internals]knotvector.cc
[.libnurbs.internals]mapdesc.obj : [.libnurbs.internals]mapdesc.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]mapdesc.obj [.libnurbs.internals]mapdesc.cc
[.libnurbs.internals]mapdescv.obj : [.libnurbs.internals]mapdescv.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]mapdescv.obj [.libnurbs.internals]mapdescv.cc
[.libnurbs.internals]maplist.obj : [.libnurbs.internals]maplist.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]maplist.obj [.libnurbs.internals]maplist.cc
[.libnurbs.internals]mesher.obj : [.libnurbs.internals]mesher.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]mesher.obj [.libnurbs.internals]mesher.cc
[.libnurbs.internals]monoTriangulationBackend.obj : [.libnurbs.internals]monoTriangulationBackend.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]monoTriangulationBackend.obj [.libnurbs.internals]monoTriangulationBackend.cc
[.libnurbs.internals]monotonizer.obj : [.libnurbs.internals]monotonizer.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]monotonizer.obj [.libnurbs.internals]monotonizer.cc
[.libnurbs.internals]mycode.obj : [.libnurbs.internals]mycode.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]mycode.obj [.libnurbs.internals]mycode.cc
[.libnurbs.internals]nurbsinterfac.obj : [.libnurbs.internals]nurbsinterfac.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]nurbsinterfac.obj [.libnurbs.internals]nurbsinterfac.cc
[.libnurbs.internals]nurbstess.obj : [.libnurbs.internals]nurbstess.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]nurbstess.obj [.libnurbs.internals]nurbstess.cc
[.libnurbs.internals]patch.obj : [.libnurbs.internals]patch.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]patch.obj [.libnurbs.internals]patch.cc
[.libnurbs.internals]patchlist.obj : [.libnurbs.internals]patchlist.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]patchlist.obj [.libnurbs.internals]patchlist.cc
[.libnurbs.internals]quilt.obj : [.libnurbs.internals]quilt.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]quilt.obj [.libnurbs.internals]quilt.cc
[.libnurbs.internals]reader.obj : [.libnurbs.internals]reader.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]reader.obj [.libnurbs.internals]reader.cc
[.libnurbs.internals]renderhints.obj : [.libnurbs.internals]renderhints.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]renderhints.obj [.libnurbs.internals]renderhints.cc
[.libnurbs.internals]slicer.obj : [.libnurbs.internals]slicer.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]slicer.obj [.libnurbs.internals]slicer.cc
[.libnurbs.internals]sorter.obj : [.libnurbs.internals]sorter.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]sorter.obj [.libnurbs.internals]sorter.cc
[.libnurbs.internals]splitarcs.obj : [.libnurbs.internals]splitarcs.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]splitarcs.obj [.libnurbs.internals]splitarcs.cc
[.libnurbs.internals]subdivider.obj : [.libnurbs.internals]subdivider.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]subdivider.obj [.libnurbs.internals]subdivider.cc
[.libnurbs.internals]tobezier.obj : [.libnurbs.internals]tobezier.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]tobezier.obj [.libnurbs.internals]tobezier.cc
[.libnurbs.internals]trimline.obj : [.libnurbs.internals]trimline.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]trimline.obj [.libnurbs.internals]trimline.cc
[.libnurbs.internals]trimregion.obj : [.libnurbs.internals]trimregion.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]trimregion.obj [.libnurbs.internals]trimregion.cc
[.libnurbs.internals]trimvertpool.obj : [.libnurbs.internals]trimvertpool.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]trimvertpool.obj [.libnurbs.internals]trimvertpool.cc
[.libnurbs.internals]uarray.obj : [.libnurbs.internals]uarray.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]uarray.obj [.libnurbs.internals]uarray.cc
[.libnurbs.internals]varray.obj : [.libnurbs.internals]varray.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.internals]varray.obj [.libnurbs.internals]varray.cc
[.libnurbs.nurbtess]directedLine.obj : [.libnurbs.nurbtess]directedLine.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]directedLine.obj [.libnurbs.nurbtess]directedLine.cc
[.libnurbs.nurbtess]gridWrap.obj : [.libnurbs.nurbtess]gridWrap.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]gridWrap.obj [.libnurbs.nurbtess]gridWrap.cc
[.libnurbs.nurbtess]monoChain.obj : [.libnurbs.nurbtess]monoChain.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]monoChain.obj [.libnurbs.nurbtess]monoChain.cc
[.libnurbs.nurbtess]monoPolyPart.obj : [.libnurbs.nurbtess]monoPolyPart.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]monoPolyPart.obj [.libnurbs.nurbtess]monoPolyPart.cc
[.libnurbs.nurbtess]monoTriangulation.obj : [.libnurbs.nurbtess]monoTriangulation.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]monoTriangulation.obj [.libnurbs.nurbtess]monoTriangulation.cc
[.libnurbs.nurbtess]partitionX.obj : [.libnurbs.nurbtess]partitionX.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]partitionX.obj [.libnurbs.nurbtess]partitionX.cc
[.libnurbs.nurbtess]partitionY.obj : [.libnurbs.nurbtess]partitionY.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]partitionY.obj [.libnurbs.nurbtess]partitionY.cc
[.libnurbs.nurbtess]polyDBG.obj : [.libnurbs.nurbtess]polyDBG.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]polyDBG.obj [.libnurbs.nurbtess]polyDBG.cc
[.libnurbs.nurbtess]polyUtil.obj : [.libnurbs.nurbtess]polyUtil.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]polyUtil.obj [.libnurbs.nurbtess]polyUtil.cc
[.libnurbs.nurbtess]primitiveStream.obj : [.libnurbs.nurbtess]primitiveStream.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]primitiveStream.obj [.libnurbs.nurbtess]primitiveStream.cc
[.libnurbs.nurbtess]quicksort.obj : [.libnurbs.nurbtess]quicksort.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]quicksort.obj [.libnurbs.nurbtess]quicksort.cc
[.libnurbs.nurbtess]rectBlock.obj : [.libnurbs.nurbtess]rectBlock.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]rectBlock.obj [.libnurbs.nurbtess]rectBlock.cc
[.libnurbs.nurbtess]sampleComp.obj : [.libnurbs.nurbtess]sampleComp.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampleComp.obj [.libnurbs.nurbtess]sampleComp.cc
[.libnurbs.nurbtess]sampleCompBot.obj : [.libnurbs.nurbtess]sampleCompBot.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampleCompBot.obj [.libnurbs.nurbtess]sampleCompBot.cc
[.libnurbs.nurbtess]sampleCompRight.obj : [.libnurbs.nurbtess]sampleCompRight.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampleCompRight.obj [.libnurbs.nurbtess]sampleCompRight.cc
[.libnurbs.nurbtess]sampleCompTop.obj : [.libnurbs.nurbtess]sampleCompTop.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampleCompTop.obj [.libnurbs.nurbtess]sampleCompTop.cc
[.libnurbs.nurbtess]sampleMonoPoly.obj : [.libnurbs.nurbtess]sampleMonoPoly.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampleMonoPoly.obj [.libnurbs.nurbtess]sampleMonoPoly.cc
[.libnurbs.nurbtess]sampledLine.obj : [.libnurbs.nurbtess]sampledLine.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]sampledLine.obj [.libnurbs.nurbtess]sampledLine.cc
[.libnurbs.nurbtess]searchTree.obj : [.libnurbs.nurbtess]searchTree.cc
$(CXX) $(CFLAGS) /obj=[.libnurbs.nurbtess]searchTree.obj [.libnurbs.nurbtess]searchTree.cc

5
src/glu/sgi/dummy.cc Normal file
View File

@@ -0,0 +1,5 @@
/* $Id: dummy.cc,v 1.1 2001/03/18 13:06:19 pesco Exp $ */
/*
* This file contains nothing. It's just there so there's at least a single
* source file for libGLU.la in this directory.
*/

View File

@@ -0,0 +1,32 @@
/*
** gluos.h - operating system dependencies for GLU
**
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/include/gluos.h,v 1.2 2001/03/22 11:38:36 joukj Exp $
*/
#ifdef __VMS
#ifdef __cplusplus
#pragma message disable nocordel
#pragma message disable codeunreachable
#pragma message disable codcauunr
#endif
#endif
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define NOGDI
#define NOIME
#include <windows.h>
/* Disable warnings */
#pragma warning(disable : 4101)
#pragma warning(disable : 4244)
#pragma warning(disable : 4761)
#else
/* Disable Microsoft-specific keywords */
#define GLAPIENTRY
#define WINGDIAPI
#endif

View File

@@ -0,0 +1,256 @@
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
** $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $
*/
/*
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/interface/bezierEval.cc,v 1.1 2001/03/17 00:25:40 brianp Exp $
*/
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <math.h>
#include "bezierEval.h"
#define TOLERANCE 0.0001
#ifndef MAX_ORDER
#define MAX_ORDER 16
#endif
#ifndef MAX_DIMENSION
#define MAX_DIMENSION 4
#endif
static void normalize(float vec[3]);
static void crossProduct(float x[3], float y[3], float ret[3]);
static void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]);
static float binomialCoefficients[8][8] = {
{1,0,0,0,0,0,0,0},
{1,1,0,0,0,0,0,0},
{1,2,1,0,0,0,0,0},
{1,3,3,1,0,0,0,0},
{1,4,6,4,1,0,0,0},
{1,5,10,10,5,1,0,0},
{1,6,15,20,15,6,1,0},
{1,7,21,35,35,21,7,1}
};
void bezierCurveEval(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[])
{
float uprime = (u-u0)/(u1-u0);
float *ctlptr = ctlpoints;
float oneMinusX = 1.0-uprime;
float XPower = 1.0;
int i,k;
for(k=0; k<dimension; k++)
retpoint[k] = (*(ctlptr + k));
for(i=1; i<order; i++){
ctlptr += stride;
XPower *= uprime;
for(k=0; k<dimension; k++) {
retpoint[k] = retpoint[k]*oneMinusX + ctlptr[k]* binomialCoefficients[order-1][i] * XPower;
}
}
}
/*order = degree +1 >=1.
*/
void bezierCurveEvalfast(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[])
{
float uprime = (u-u0)/(u1-u0);
float buf[MAX_ORDER][MAX_ORDER][MAX_DIMENSION];
float* ctlptr = ctlpoints;
int r, i,j;
for(i=0; i<order; i++) {
for(j=0; j<dimension; j++)
buf[0][i][j] = ctlptr[j];
ctlptr += stride;
}
for(r=1; r<order; r++){
for(i=0; i<order-r; i++) {
for(j=0; j<dimension; j++)
buf[r][i][j] = (1-uprime)*buf[r-1][i][j] + uprime*buf[r-1][i+1][j];
}
}
for(j=0; j<dimension; j++)
retpoint[j] = buf[order-1][0][j];
}
/*order = degree +1 >=1.
*/
void bezierCurveEvalDer(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[])
{
int i,k;
float width = u1-u0;
float *ctlptr = ctlpoints;
float buf[MAX_ORDER][MAX_DIMENSION];
if(order == 1){
for(k=0; k<dimension; k++)
retDer[k]=0;
}
for(i=0; i<order-1; i++){
for(k=0; k<dimension; k++) {
buf[i][k] = (ctlptr[stride+k] - ctlptr[k])*(order-1)/width;
}
ctlptr += stride;
}
bezierCurveEval(u0, u1, order-1, (float*) buf, MAX_DIMENSION, dimension, u, retDer);
}
void bezierCurveEvalDerGen(int der, float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[])
{
int i,k,r;
float *ctlptr = ctlpoints;
float width=u1-u0;
float buf[MAX_ORDER][MAX_ORDER][MAX_DIMENSION];
if(der<0) der=0;
for(i=0; i<order; i++){
for(k=0; k<dimension; k++){
buf[0][i][k] = ctlptr[k];
}
ctlptr += stride;
}
for(r=1; r<=der; r++){
for(i=0; i<order-r; i++){
for(k=0; k<dimension; k++){
buf[r][i][k] = (buf[r-1][i+1][k] - buf[r-1][i][k])*(order-r)/width;
}
}
}
bezierCurveEval(u0, u1, order-der, (float *) (buf[der]), MAX_DIMENSION, dimension, u, retDer);
}
/*the Bezier bivarite polynomial is:
* sum[i:0,uorder-1][j:0,vorder-1] { ctlpoints[i*ustride+j*vstride] * B(i)*B(j)
* where B(i) and B(j) are basis functions
*/
void bezierSurfEvalDerGen(int uder, int vder, float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[])
{
int i,j,k;
float newPoints[MAX_ORDER][MAX_DIMENSION];
for(i=0; i<uorder; i++){
bezierCurveEvalDerGen(vder, v0, v1, vorder, ctlpoints+ustride*i, vstride, dimension, v, newPoints[i]);
}
bezierCurveEvalDerGen(uder, u0, u1, uorder, (float *) newPoints, MAX_DIMENSION, dimension, u, ret);
}
/*division by w is performed*/
void bezierSurfEval(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[])
{
bezierSurfEvalDerGen(0, 0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, ret);
if(dimension == 4) /*homogeneous*/{
ret[0] /= ret[3];
ret[1] /= ret[3];
ret[2] /= ret[3];
}
}
void bezierSurfEvalNormal(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float retNormal[])
{
float partialU[4];
float partialV[4];
assert(dimension>=3 && dimension <=4);
bezierSurfEvalDerGen(1,0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, partialU);
bezierSurfEvalDerGen(0,1, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, partialV);
if(dimension == 3){/*inhomogeneous*/
crossProduct(partialU, partialV, retNormal);
normalize(retNormal);
return;
}
else { /*homogeneous*/
float val[4]; /*the point coordinates (without derivative)*/
float newPartialU[MAX_DIMENSION];
float newPartialV[MAX_DIMENSION];
int i;
bezierSurfEvalDerGen(0,0, u0, u1, uorder, v0, v1, vorder, dimension, ctlpoints, ustride, vstride, u, v, val);
for(i=0; i<=2; i++){
newPartialU[i] = partialU[i] * val[3] - val[i] * partialU[3];
newPartialV[i] = partialV[i] * val[3] - val[i] * partialV[3];
}
crossProduct(newPartialU, newPartialV, retNormal);
normalize(retNormal);
}
}
/*if size is 0, then nothing is done*/
static void normalize(float vec[3])
{
float size = sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]);
if(size < TOLERANCE)
{
#ifdef DEBUG
fprintf(stderr, "Warning: in oglBSpline.c normal is 0\n");
#endif
return;
}
else {
vec[0] = vec[0]/size;
vec[1] = vec[1]/size;
vec[2] = vec[2]/size;
}
}
static void crossProduct(float x[3], float y[3], float ret[3])
{
ret[0] = x[1]*y[2] - y[1]*x[2];
ret[1] = x[2]*y[0] - y[2]*x[0];
ret[2] = x[0]*y[1] - y[0]*x[1];
}

View File

@@ -0,0 +1,55 @@
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
** $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $
*/
/*
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/interface/bezierEval.h,v 1.1 2001/03/17 00:25:40 brianp Exp $
*/
#ifndef _BEZIEREVAL_H
#define _BEZIEREVAL_H
void bezierCurveEval(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retpoint[]);
void bezierCurveEvalDer(float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[]);
void bezierCurveEvalDerGen(int der, float u0, float u1, int order, float *ctlpoints, int stride, int dimension, float u, float retDer[]);
void bezierSurfEvalDerGen(int uder, int vder, float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[]);
void bezierSurfEval(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float ret[]);
void bezierSurfEvalNormal(float u0, float u1, int uorder, float v0, float v1, int vorder, int dimension, float *ctlpoints, int ustride, int vstride, float u, float v, float retNormal[]);
#endif

View File

@@ -0,0 +1,205 @@
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
** $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $
*/
/*
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/interface/bezierPatch.cc,v 1.1 2001/03/17 00:25:40 brianp Exp $
*/
#include "gluos.h"
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <GL/glu.h> /*for drawing bzier patch*/
#include "bezierPatch.h"
#include "bezierEval.h"
/*
*allocate an instance of bezierPatch. The control points are unknown. But
*the space of this array is allocated with size of
* uorder*vorder*dimension
*
*/
bezierPatch* bezierPatchMake(float umin, float vmin, float umax, float vmax, int uorder, int vorder, int dimension)
{
bezierPatch* ret = (bezierPatch*) malloc(sizeof(bezierPatch));
assert(ret);
ret->umin = umin;
ret->vmin = vmin;
ret->umax = umax;
ret->vmax = vmax;
ret->uorder = uorder;
ret->vorder = vorder;
ret->dimension = dimension;
ret->ctlpoints = (float*) malloc(sizeof(float) * dimension * uorder * vorder);
assert(ret->ctlpoints);
ret->next = NULL;
return ret;
}
bezierPatch* bezierPatchMake2(float umin, float vmin, float umax, float vmax, int uorder, int vorder, int dimension, int ustride, int vstride, float* ctlpoints)
{
bezierPatch* ret = (bezierPatch*) malloc(sizeof(bezierPatch));
assert(ret);
ret->umin = umin;
ret->vmin = vmin;
ret->umax = umax;
ret->vmax = vmax;
ret->uorder = uorder;
ret->vorder = vorder;
ret->dimension = dimension;
ret->ctlpoints = (float*) malloc(sizeof(float) * dimension * uorder * vorder);
assert(ret->ctlpoints);
/*copy the control points there*/
int the_ustride = vorder * dimension;
int the_vstride = dimension;
for(int i=0; i<uorder; i++)
for(int j=0; j<vorder; j++)
for(int k=0; k<dimension; k++)
ret->ctlpoints[i * the_ustride + j*the_vstride+k] = ctlpoints[i*ustride+j*vstride+k];
ret->next = NULL;
return ret;
}
/*
*deallocate the space as allocated by Make
*/
void bezierPatchDelete(bezierPatch *b)
{
free(b->ctlpoints);
free(b);
}
/*delete the whole linked list
*/
void bezierPatchDeleteList(bezierPatch *b)
{
bezierPatch *temp;
for(temp = b; temp != NULL; temp = temp->next)
bezierPatchDelete(temp);
}
bezierPatch* bezierPatchInsert(bezierPatch *list, bezierPatch *b)
{
b->next = list;
return b;
}
/*print the data stored in this patch*/
void bezierPatchPrint(bezierPatch *b)
{
printf("bezierPatch:\n");
printf("umin,umax=(%f,%f), (vmin, vmax)=(%f,%f)\n", b->umin, b->umax, b->vmin, b->vmax);
printf("uorder=%i, vorder=%i\n", b->uorder, b->vorder);
printf("idmension = %i\n", b->dimension);
}
/*print the whole list*/
void bezierPatchPrintList(bezierPatch *list)
{
bezierPatch* temp;
for(temp=list; temp != NULL; temp = temp->next)
bezierPatchPrint(temp);
}
void bezierPatchEval(bezierPatch *b, float u, float v, float ret[])
{
if( u >= b->umin && u<= b->umax
&& v >= b->vmin && v<= b->vmax)
{
bezierSurfEval(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
}
else if(b->next != NULL)
bezierPatchEval(b->next, u,v, ret);
else
bezierSurfEval(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
}
/*the returned normal is normlized
*/
void bezierPatchEvalNormal(bezierPatch *b, float u, float v, float ret[])
{
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
if( u >= b->umin && u<= b->umax
&& v >= b->vmin && v<= b->vmax)
{
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
}
else if(b->next != NULL)
bezierPatchEvalNormal(b->next, u,v, ret);
else
bezierSurfEvalNormal(b->umin, b->umax, b->uorder, b->vmin, b->vmax, b->vorder, b->dimension, b->ctlpoints, b->dimension * b->vorder, b->dimension, u, v, ret);
}
void bezierPatchDraw(bezierPatch *bpatch, int u_reso, int v_reso)
{
if(bpatch->dimension == 3)
glMap2f(GL_MAP2_VERTEX_3, bpatch->umin, bpatch->umax, 3*bpatch->vorder, bpatch->uorder, bpatch->vmin, bpatch->vmax,3, bpatch->vorder, (GLfloat*) bpatch->ctlpoints);
else
glMap2f(GL_MAP2_VERTEX_4, bpatch->umin, bpatch->umax, 4*bpatch->vorder, bpatch->uorder, bpatch->vmin, bpatch->vmax,3, bpatch->vorder, (GLfloat*) bpatch->ctlpoints);
glMapGrid2f(u_reso, bpatch->umin, bpatch->umax,
v_reso, bpatch->vmin, bpatch->vmax);
glEvalMesh2(GL_LINE, 0, u_reso, 0, v_reso);
}
void bezierPatchListDraw(bezierPatch *list, int u_reso, int v_reso)
{
bezierPatch *temp;
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_MAP2_VERTEX_3);
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
glColor3f(1,0,0);
#ifdef DEBUG
printf("mapmap\n");
#endif
for(temp = list; temp != NULL; temp = temp->next)
bezierPatchDraw(temp, u_reso, v_reso);
}

View File

@@ -0,0 +1,111 @@
/*
** License Applicability. Except to the extent portions of this file are
** made subject to an alternative license as permitted in the SGI Free
** Software License B, Version 1.1 (the "License"), the contents of this
** file are subject only to the provisions of the License. You may not use
** this file except in compliance with the License. You may obtain a copy
** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
**
** http://oss.sgi.com/projects/FreeB
**
** Note that, as provided in the License, the Software is distributed on an
** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
**
** Original Code. The Original Code is: OpenGL Sample Implementation,
** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
** Copyright in any portions created by third parties is as indicated
** elsewhere herein. All Rights Reserved.
**
** Additional Notice Provisions: The application programming interfaces
** established by SGI in conjunction with the Original Code are The
** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
** Window System(R) (Version 1.3), released October 19, 1998. This software
** was created using the OpenGL(R) version 1.2.1 Sample Implementation
** published by SGI, but has not been independently verified as being
** compliant with the OpenGL(R) version 1.2.1 Specification.
**
** $Date: 2001/03/17 00:25:40 $ $Revision: 1.1 $
*/
/*
** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libnurbs/interface/bezierPatch.h,v 1.1 2001/03/17 00:25:40 brianp Exp $
*/
#ifndef _BEZIERPATCH_H
#define _BEZIERPATCH_H
typedef struct bezierPatch{
float umin, vmin, umax, vmax;
int uorder; /*order= degree + 1*/
int vorder;
/*
*the control points are stored in a one dimensional array.
*the surface is defined as:
* s(u,v) = sum_{i,j} P(i,j) * B_i(u) * B_j(v).
*where P(i,j) are the control points, B_i(.) are Bezier
*basis functions.
*Each control point can have dimension 3 or 4: (x,y,z,w).
*The components of P(i,j) are stored in a one dimensional
*array:
* ctlpoints[]
*in the order of:
* P[0,0], P[0,1], ..., P[0,vorder-1],
* P[1,0], P[1,1], ..., P[1,vorder-1],
* ...
* P[uorder-1,0], P[uorder-1,1], ..., P[uorder-1,vorder-1].
*/
int dimension;
float* ctlpoints;
/*
*in case we have to manage multiple bezierPatches.
*/
struct bezierPatch *next;
} bezierPatch;
#ifdef __cplusplus
extern "C" {
#endif
bezierPatch* bezierPatchMake(float umin, float vmin, float umax, float vmax, int urder, int vorder, int dimension);
bezierPatch* bezierPatchMake2(float umin, float vmin, float umax, float vmax, int urder, int vorder, int dimension, int ustride, int vstride, float *ctlpoints);
bezierPatch* bezierPatchInsert(bezierPatch *list, bezierPatch *b);
void bezierPatchDelete(bezierPatch *b);
void bezierPatchDeleteList(bezierPatch *b);
void bezierPatchPrint(bezierPatch *b);
void bezierPatchPrintList(bezierPatch *list);
void bezierPatchEval(bezierPatch *b, float u, float v, float ret[]);
void bezierPatchEvalNormal(bezierPatch *b, float u, float v, float retNormal[]);
void bezierPatchEval(bezierPatch *b, float u, float v, float ret[]);
void bezierPatchEvalNormal(bezierPatch *b, float u, float v, float ret[]);
void bezierPatchDraw(bezierPatch *bpatch, int u_reso, int v_reso);
void bezierPatchListDraw(bezierPatch *list, int u_reso, int v_reso);
#ifdef __cplusplus
}
#endif
#endif

Some files were not shown because too many files have changed in this diff Show More