Compare commits

...

85 Commits

Author SHA1 Message Date
Brian Paul
b0294cbbfe added Win32 and MacOS files to tar file list 1999-12-14 20:54:24 +00:00
Brian Paul
e2ff9be0b6 disable diagnostic printf 1999-12-14 20:51:33 +00:00
Brian Paul
16283fea40 removed bad call to fxMultipassBlend 1999-12-14 19:47:25 +00:00
Brian Paul
82ba9449e1 print messages with new message() function 1999-12-14 16:23:57 +00:00
Brian Paul
2377ea9c66 added reference to INSTALL file 1999-12-14 15:12:52 +00:00
Brian Paul
ac3593ada5 changes for 3.1 1999-12-14 07:18:57 +00:00
Brian Paul
d6dd996e56 minor 3.1 changes 1999-12-14 07:17:42 +00:00
Brian Paul
cee556daea updates for 3.1 final release 1999-12-14 07:15:38 +00:00
Brian Paul
313f225a2e removed beta from version string 1999-12-13 21:58:42 +00:00
Brian Paul
95d565b64c removed beta designation 1999-12-13 21:56:18 +00:00
Brian Paul
32ea1fdc7e applied Daryll's patches 1999-12-13 21:53:01 +00:00
Keith Whitwell
8d52ee9ae1 Added logicOp driver callback 1999-12-12 18:30:47 +00:00
Brian Paul
9a07202f5e added glXUseXFont() bugfix 1999-12-12 17:55:45 +00:00
Brian Paul
0f953d69e5 removed unneeded code in gluBuild1DMipmaps() 1999-12-12 17:23:33 +00:00
Brian Paul
b3a1034c05 bitmaps were vertically shifted by one pixel 1999-12-12 17:03:07 +00:00
Brian Paul
8956d5131d added default cases to switches to silence compiler warnings 1999-12-12 15:50:44 +00:00
Brian Paul
428cf99956 added GLX_ARB_get_proc_address to extension list 1999-12-11 09:20:03 +00:00
Brian Paul
1e5dab20fd applied patch from Ralph Giles 1999-12-10 15:54:09 +00:00
Brian Paul
aa5251d170 removed GLX_EXT_get_proc_address 1999-12-10 14:55:38 +00:00
Brian Paul
607add71d9 patches from Daryll 1999-12-10 14:21:08 +00:00
Brian Paul
074710629d added GLX_ARB_get_proc_address 1999-12-10 14:10:02 +00:00
Brian Paul
7f0b5dd69c added glXGetProcAddressARB() 1999-12-10 13:45:39 +00:00
Brian Paul
09b83c889b many functions added to gl_get_proc_address() 1999-12-10 13:45:08 +00:00
Brian Paul
9c416c235b added GLX_ARB_get_proc_address 1999-12-10 13:44:31 +00:00
Jouk Jansen
6ce3f22ae9 Committing in .
Updating compilation on VMS

 Modified Files:
  Tag: mesa_3_2_dev
 	Mesa/src-glu/descrip.mms Mesa/src-glu/gluP.h
 ----------------------------------------------------------------------
1999-12-06 05:24:36 +00:00
Gareth Hughes
32093ccc86 Removed axis-aligned plane projection stuff. I received a patch that
did this a while ago and was playing around with it, but I think it's
better to have a robust plane projection mechanism - after all, we can
be given a non-axis-aligned plane normal through gluTessNormal().
1999-12-05 17:01:17 +00:00
Gareth Hughes
d5ff1d782b Fixed contour orientation issues, so clockwise input contours will be
tessellated correctly.  Fixed text3d screensaver bugs associated with
contour orientation.

There is still a bug in the contour stacking calculations, which
causes letters like 'B' to have the inner loops oriented the wrong way
due to them being classified as outside the outer loop.  This should
be relatively straight forward to fix (see O'Rourke 1992).
1999-12-05 02:04:30 +00:00
Brian Paul
2ed8894aca Clearing stencil buffer now observes the stencil write mask
Optimized gl_depth_stencil_span/pixels() functions
1999-12-04 21:15:31 +00:00
Brian Paul
33cd8a5490 minor stencil-related changes 1999-12-04 21:13:44 +00:00
Brian Paul
dd25e9852a added glCopyPixels bug fix 1999-12-03 18:49:05 +00:00
Brian Paul
05df9bb6e0 added WM_SYSKEYDOWN case in __wglMonitor() (Eero Pajarre) 1999-12-02 15:21:04 +00:00
Gareth Hughes
a335bf404f Fixed bug in tessellatin for xlockmore's text3d screensaver. The
external maximums weren't being handled correctly.

Output contours seem to be oriented incorrectly, as they appear as
solidly-filled areas.
1999-12-02 06:18:25 +00:00
Brian Paul
783a67260a gl_BindTexture was broken when target==GL_TEXTURE_3D 1999-12-01 21:07:26 +00:00
Keith Whitwell
e99e126479 check ctx before dereferencing it 1999-12-01 12:45:42 +00:00
Keith Whitwell
98fce32683 Normal, stipple and varray bug fixes 1999-12-01 12:18:47 +00:00
Brian Paul
9493e540f9 fxInitPixelTables() change for Voodoo 1/2 vs 3 1999-12-01 01:10:42 +00:00
Brian Paul
7138d38cc1 print debug info in gl_make_current() if MESA_INFO env var set 1999-11-30 20:31:57 +00:00
Gareth Hughes
9e7f0e1f7c Fixed errors associated with Win32 build warnings. 1999-11-29 18:16:11 +00:00
Brian Paul
52345bfa1e removed Mesa-isms 1999-11-27 01:40:09 +00:00
Brian Paul
93070bceca updated for 3.1 1999-11-27 01:39:50 +00:00
Brian Paul
5b90676fc7 added a few prototypes for BeOS/g++ 1999-11-27 01:37:17 +00:00
Brian Paul
92ad030cb7 added a cast to silence a g++ warning 1999-11-27 01:35:42 +00:00
Brian Paul
9afe0e4278 generate Z values when fog enabled (Andree Borrmann) 1999-11-26 16:28:03 +00:00
Keith Whitwell
3e63be01d1 allow drivers to request fog coordinates 1999-11-25 16:51:24 +00:00
Brian Paul
c73eedbe96 bumped version to 3.1 1999-11-24 18:39:17 +00:00
Brian Paul
8c54c4d9f7 bumped version to 3.1, updated copyright 1999-11-24 18:38:52 +00:00
Keith Whitwell
33817940c4 another typo 1999-11-23 21:13:55 +00:00
Miklos Fazekas
7ec2e161ac Glide3 now uses the same layout as Glide2. 1999-11-23 18:29:53 +00:00
Brian Paul
fc2e8cd0d0 fixed new cut/paste error in FX_grSstWinOpen() call 1999-11-23 13:30:15 +00:00
Brian Paul
a3ea9edfda removed GL_EXT_get_proc_address from ext strings 1999-11-22 22:19:50 +00:00
Brian Paul
7fa9891de2 removed GLU_EXT_get_proc_address from ext string 1999-11-22 22:18:13 +00:00
Brian Paul
ddd9410a67 potential bug fix and clean-up in gl_ShadeModel() 1999-11-22 19:01:39 +00:00
Brian Paul
532dde3e99 fixed shade model bug (A.Borrmann) 1999-11-22 18:26:51 +00:00
Brian Paul
2a6f393fa7 added pragma 4615 (Eero), added copyright 1999-11-22 14:05:15 +00:00
Brian Paul
2d1b9e0402 removed redundant fxCloseHardware() decl 1999-11-22 14:01:35 +00:00
Brian Paul
19c878467f removed reference to GL_EXT_texture_env_add 1999-11-22 13:54:02 +00:00
Miklos Fazekas
1041d573ff Fixed FXMESA_USE_ARGB. 1999-11-21 05:52:10 +00:00
Miklos Fazekas
fda834160b Created the correct pixel table with:FXMESA_USE_ARGB. 1999-11-21 05:38:26 +00:00
Miklos Fazekas
7d35435bb6 Added gl_extension_is_enabled. 1999-11-20 13:13:50 +00:00
Gareth Hughes
5c191a62bc Fixed exterior intersection point insertion. Removed flag from vertex
left over from previous clipping algorithms.  Self-intersecting
contours are now tessellated correctly.
1999-11-20 02:37:20 +00:00
Brian Paul
eca3b6e47e replace encounteed with encountered 1999-11-19 21:22:07 +00:00
Miklos Fazekas
aa0a8624fb Removed #ifdef form inside a macro call. 1999-11-19 15:40:47 +00:00
Miklos Fazekas
f16a627115 Added GL_ADD. 1999-11-19 15:31:05 +00:00
Miklos Fazekas
1d39975c4e Added gl_extension_is_enabled. 1999-11-19 15:29:51 +00:00
Keith Whitwell
62d5f4c73e fixes for andree's drawarrays problems 1999-11-19 00:00:09 +00:00
Brian Paul
d42cd99c66 two fixes in gl_DrawArrays (Andree Borrman) 1999-11-18 23:54:25 +00:00
Brian Paul
03ef882735 fixed FX_grSstControl(), now returns FxBool 1999-11-18 19:31:08 +00:00
Brian Paul
19d0fcafb3 removed unused fxTMNewTMFreeNode decl 1999-11-18 19:30:27 +00:00
Brian Paul
cc6e92ff49 merge from 3.3 branch of Daryll's X server changes 1999-11-18 19:18:44 +00:00
Brian Paul
463c2b6b77 test visinfo, not vishandle in save_glx_visual (Wolfram Gloger) 1999-11-18 15:16:03 +00:00
Brian Paul
09c133e16f fixed some glitches (Eero Pajarre) 1999-11-17 21:21:29 +00:00
Brian Paul
bb1d3c1ad1 new PixelTo[RGB] lookup tables for pixel readback 1999-11-16 19:47:47 +00:00
Brian Paul
cabb6a91cd also remove .lo .la and .libs/ 1999-11-16 15:25:50 +00:00
Gareth Hughes
c76ac6b644 Added combine callback. Converted vertices from ints to floats. 1999-11-16 11:09:09 +00:00
Gareth Hughes
6842075a09 Fixed some vertex insertion bugs. Added boundary intersection
handling, although it is still slightly broken.  Horizontal edges need
to make it into the AET table, I think.  This will fix book/tess at
least, and possibly book/tesswind as well.
1999-11-16 11:07:22 +00:00
Brian Paul
b1da189fe5 removed unused finished: label 1999-11-15 22:21:18 +00:00
Brian Paul
9b635315be fixed several texture state update bugs found with objbug.c program 1999-11-15 22:17:44 +00:00
Gareth Hughes
702baf4cd3 Added scanbeam polygon clipping for intersection handling and boolean
operations.  Lots of other bug fixes and code cleanups.
1999-11-15 21:21:31 +00:00
Gareth Hughes
b27ee886e4 Added new tessellation polygon clipping file tess_clip.c 1999-11-15 21:15:43 +00:00
Josh Vanderhoof
276465cec6 fixed SSE bugs 1999-11-13 02:34:02 +00:00
Brian Paul
5428538d65 added 3.1 final section 1999-11-12 15:45:45 +00:00
Brian Paul
ab5d4d6233 added glxdpyinfo 1999-11-12 15:43:25 +00:00
Brian Paul
2450ce124b initial check-in 1999-11-12 15:43:12 +00:00
Brian Paul
cf22eb77a7 added some braces to silence gcc warnings 1999-11-12 00:13:33 +00:00
Brian Paul
569802cdb1 added missing braces in array initializations 1999-11-11 15:05:27 +00:00
66 changed files with 6416 additions and 3227 deletions

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.X11,v 1.12 1999/11/04 03:57:28 gareth Exp $
# $Id: Makefile.X11,v 1.12.2.2 1999/12/14 20:54:24 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.1
@@ -315,102 +315,102 @@ realclean: clean
DIRECTORY = Mesa-3.1
LIB_NAME = MesaLib-3.1beta3
DEMO_NAME = MesaDemos-3.1beta3
LIB_NAME = MesaLib-3.1
DEMO_NAME = MesaDemos-3.1
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)/configure \
$(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)/*.dja \
$(DIRECTORY)/include/GL/Makefile.in \
$(DIRECTORY)/include/GL/Makefile.am \
$(DIRECTORY)/include/GL/dosmesa.h \
$(DIRECTORY)/include/GL/foomesa.h \
$(DIRECTORY)/include/GL/fxmesa.h \
$(DIRECTORY)/include/GL/ggimesa.h \
$(DIRECTORY)/include/GL/gl.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/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)/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)/configure \
$(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)/*.dja \
$(DIRECTORY)/include/GL/Makefile.in \
$(DIRECTORY)/include/GL/Makefile.am \
$(DIRECTORY)/include/GL/dosmesa.h \
$(DIRECTORY)/include/GL/foomesa.h \
$(DIRECTORY)/include/GL/fxmesa.h \
$(DIRECTORY)/include/GL/ggimesa.h \
$(DIRECTORY)/include/GL/gl.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/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] \
@@ -430,55 +430,67 @@ LIB_FILES = \
$(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/MGL/*.[ch] \
$(DIRECTORY)/src/MGL/*.txt \
$(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/*.m4 \
$(DIRECTORY)/src/X86/*.S \
$(DIRECTORY)/src/*.dja \
$(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/*.dja \
$(DIRECTORY)/src-glu/depend \
$(DIRECTORY)/src-glu/*.[ch] \
$(DIRECTORY)/widgets-mesa \
$(DIRECTORY)/widgets-sgi \
$(DIRECTORY)/util/README \
$(DIRECTORY)/util/Makefile.am \
$(DIRECTORY)/util/Makefile.in \
$(DIRECTORY)/util/*.[ch] \
$(DIRECTORY)/util/sampleMakefile \
$(DIRECTORY)/BeOS/Makefile \
$(DIRECTORY)/BeOS/*.cpp
# old stuff
# $(DIRECTORY)/Win32 \
# $(DIRECTORY)/win32
# $(DIRECTORY)/OpenStep \
#
#
$(DIRECTORY)/src/KNOWN_BUGS \
$(DIRECTORY)/src/MGL/*.[ch] \
$(DIRECTORY)/src/MGL/*.txt \
$(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/*.m4 \
$(DIRECTORY)/src/X86/*.S \
$(DIRECTORY)/src/*.dja \
$(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/*.dja \
$(DIRECTORY)/src-glu/depend \
$(DIRECTORY)/src-glu/*.[ch] \
$(DIRECTORY)/widgets-mesa \
$(DIRECTORY)/widgets-sgi \
$(DIRECTORY)/util/README \
$(DIRECTORY)/util/Makefile.am \
$(DIRECTORY)/util/Makefile.in \
$(DIRECTORY)/util/*.[ch] \
$(DIRECTORY)/util/sampleMakefile \
$(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/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]
DEMO_FILES = \

View File

@@ -28,7 +28,7 @@ working. No optimizations have been made at this time.
Compiling
Simply cd to the Mesa-3.x directory and type "make beos-r4".
In the Mesa-3.x directory type "make -f Makefile.X11 beos-r4".
When it finishes the libMesaGL.so and libMesaGLU.so libraries for
BeOS will be in the Mesa-3.x/lib/ directory.
@@ -99,4 +99,4 @@ of February, 1999.
----------------------------------------------------------------------
$Id: README.BEOS,v 1.5 1999/03/03 02:34:04 brianp Exp $
$Id: README.BEOS,v 1.5.6.1 1999/11/27 01:39:50 brianp Exp $

View File

@@ -1,9 +1,7 @@
Mesa 3.0 MITS Information
This software is distributed under the terms of the GNU Library
General Public License, see the LICENSE file for details.
[The MITS code hasn't been update for Mesa 3.1 and may no longer work]
This document is a preliminary introduction to help you get

View File

@@ -1,28 +1,35 @@
Mesa 3.0 Unix/X11 Information
Mesa 3.1 Unix/X11 Information
Installation
============
To compile the library, first type 'make' alone to see the list of system
configurations currently supported. If you see your configuration on the
list, type 'make <config>'. Most popular Unix/X workstations are currently
supported.
There are two ways to compile Mesa on Unix/X11 systems:
1. The old way:
First type 'make' alone to see the list of system
configurations currently supported. If you see your configuration on the
list, type 'make <config>'. Most popular Unix/X workstations are currently
supported.
If your system configuration is not listed by 'make', you'll have to modify
the top-level Makefile and Make-config files. There are instructions in
each file.
2. The new way:
Type './configure' and then 'make'. This uses GNU autoconfig.
See docs/INSTALL for more details.
The top-level makefile will execute the makefiles in a number of sub-
directories. When finished, the Mesa libraries will be in the Mesa-2.6/lib/
directories. When finished, the Mesa libraries will be in the Mesa-3.1/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
in the "xdemos/", "samples/", and "book/" directories for you to try out.
If you only want to compile the contents of one subdirectory you can 'cd'
to that directory and type 'make <config>' there.
If your system configuration is not listed by 'make', you'll have to modify
the top-level Makefile and Make-config files. There are instructions in
each file.
If you have compilation problems you should try to fix them and return the
patches to the author.
@@ -301,4 +308,4 @@ Summary of X-related environment variables:
----------------------------------------------------------------------
$Id: README.X11,v 3.3 1999/09/15 16:39:01 brianp Exp $
$Id: README.X11,v 3.3.2.2 1999/12/14 15:12:52 brianp Exp $

View File

@@ -1,4 +1,4 @@
$Id: VERSIONS,v 1.13 1999/09/19 20:09:00 tanner Exp $
$Id: VERSIONS,v 1.13.2.5 1999/12/14 07:17:42 brianp Exp $
Mesa Version History
@@ -659,3 +659,14 @@ Mesa Version History
- New library numbering: libGL.so.1.2.310
- New subdirectories: docs/ and bin/
- New Makefile-system (autoconf,automake,libtool)
3.1 final December 14, 1999
New:
- added demos/gloss.c
- added xdemos/glxdpyinfo.c
- added GLX_ARB_get_proc_address extension
Bug fixes:
- several vertex array bug fixes
- overlapping glCopyPixels with pixel zooming now works
- glXUseXFont() bitmaps were vertically shifted by one pixel

View File

@@ -1,40 +1,27 @@
/* $Id: fxmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
/* $Id: fxmesa.h,v 1.1.1.1.2.1 1999/11/24 18:38:52 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.1
* Copyright (C) 1995-1999 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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:
*
* 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.
*/
/*
* $Log: fxmesa.h,v $
* Revision 1.1 1999/08/19 00:55:40 jtg
* Initial revision
*
* Revision 3.2 1999/01/03 02:46:31 brianp
* now using GLAPI and GLAPIENTRY keywords (Ted Jump)
*
* Revision 3.1 1998/04/01 03:00:28 brianp
* updated for v0.24 of 3Dfx/Glide driver
*
* Revision 3.0 1998/02/20 05:04:45 brianp
* initial rev
* 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.
*/
@@ -58,7 +45,7 @@ extern "C" {
#define FXMESA_MAJOR_VERSION 3
#define FXMESA_MINOR_VERSION 0
#define FXMESA_MINOR_VERSION 1
/*

View File

@@ -152,7 +152,7 @@ typedef unsigned long COLORREF;
# define wglUseFontOutlines wglUseFontOutlinesA
# endif /* !UNICODE */
typedef struct tagLAYERPLANEDESCRIPTOR LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT
typedef struct _GLYPHMETRICSFLOAT GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
# pragma warning( push )
# pragma warning( disable : 4273 ) /* 'function' : inconsistent DLL linkage. dllexport assumed. */
# define WGLAPI __declspec(dllimport)
@@ -183,7 +183,7 @@ WGLAPI int GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, u
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 long,LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY DescribePixelFormat(HDC,int,unsigned int,LPPIXELFORMATDESCRIPTOR);
WGLAPI int GLAPIENTRY GetPixelFormat(HDC);
WGLAPI int GLAPIENTRY SetPixelFormat(HDC,int,const PIXELFORMATDESCRIPTOR *);
# undef WGLAPI
@@ -739,7 +739,6 @@ GLUTAPI int GLUTAPIENTRY glutGameModeGet(GLenum mode);
#ifdef __cplusplus
}
#endif
#if 0

View File

@@ -1,8 +1,8 @@
/* $Id: glx.h,v 1.6 1999/11/11 01:27:17 brianp Exp $ */
/* $Id: glx.h,v 1.5.2.2 1999/12/10 14:55:38 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -50,41 +50,38 @@ extern "C" {
#define GLX_VERSION_1_1 1
#define GLX_EXTENSION_NAME "GLX"
/*
* Tokens for glXChooseVisual and glXGetConfig:
*/
#define GLX_USE_GL 1
#define GLX_BUFFER_SIZE 2
#define GLX_LEVEL 3
#define GLX_RGBA 4
#define GLX_DOUBLEBUFFER 5
#define GLX_STEREO 6
#define GLX_AUX_BUFFERS 7
#define GLX_RED_SIZE 8
#define GLX_GREEN_SIZE 9
#define GLX_BLUE_SIZE 10
#define GLX_ALPHA_SIZE 11
#define GLX_DEPTH_SIZE 12
#define GLX_STENCIL_SIZE 13
#define GLX_ACCUM_RED_SIZE 14
#define GLX_ACCUM_GREEN_SIZE 15
#define GLX_ACCUM_BLUE_SIZE 16
#define GLX_ACCUM_ALPHA_SIZE 17
/* GLX_EXT_visual_info extension */
#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
enum _GLX_CONFIGS {
GLX_USE_GL = 1,
GLX_BUFFER_SIZE = 2,
GLX_LEVEL = 3,
GLX_RGBA = 4,
GLX_DOUBLEBUFFER = 5,
GLX_STEREO = 6,
GLX_AUX_BUFFERS = 7,
GLX_RED_SIZE = 8,
GLX_GREEN_SIZE = 9,
GLX_BLUE_SIZE = 10,
GLX_ALPHA_SIZE = 11,
GLX_DEPTH_SIZE = 12,
GLX_STENCIL_SIZE = 13,
GLX_ACCUM_RED_SIZE = 14,
GLX_ACCUM_GREEN_SIZE = 15,
GLX_ACCUM_BLUE_SIZE = 16,
GLX_ACCUM_ALPHA_SIZE = 17,
/* GLX_EXT_visual_info extension */
GLX_X_VISUAL_TYPE_EXT = 0x22,
GLX_TRANSPARENT_TYPE_EXT = 0x23,
GLX_TRANSPARENT_INDEX_VALUE_EXT = 0x24,
GLX_TRANSPARENT_RED_VALUE_EXT = 0x25,
GLX_TRANSPARENT_GREEN_VALUE_EXT = 0x26,
GLX_TRANSPARENT_BLUE_VALUE_EXT = 0x27,
GLX_TRANSPARENT_ALPHA_VALUE_EXT = 0x28
};
/*
@@ -125,12 +122,12 @@ extern "C" {
* Compile-time extension tests
*/
#define GLX_EXT_visual_info 1
#define GLX_EXT_get_proc_address 1
#define GLX_MESA_pixmap_colormap 1
#define GLX_MESA_release_buffers 1
#define GLX_MESA_copy_sub_buffer 1
#define GLX_MESA_set_3dfx_mode 1
#define GLX_SGI_video_sync 1
#define GLX_ARB_get_proc_address 1
@@ -222,6 +219,10 @@ extern int glXWaitVideoSyncSGI(int divisor, int remainder,
unsigned int *count);
/* GLX_ARB_get_proc_address */
extern void (*glXGetProcAddressARB(const GLubyte *procName))();
#ifdef __cplusplus
}

View File

@@ -1,11 +1,46 @@
/* $Id: mesa_wgl.h,v 1.2.2.2 1999/11/22 14:05:15 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 GL_H
# include <gl/gl.h>
#ifndef _mesa_wgl_h_
#define _mesa_wgl_h_
#include <gl/gl.h>
#ifdef __cplusplus
extern "C" {
#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
@@ -37,10 +72,17 @@ WGLAPI int GLAPIENTRY wglUseFontOutlinesA(HDC, unsigned long, unsigned long, u
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,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,4 +1,4 @@
/* $Id: osmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
/* $Id: osmesa.h,v 1.1.1.1.2.1 1999/11/24 18:39:17 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -27,8 +27,11 @@
/*
* $Log: osmesa.h,v $
* Revision 1.1 1999/08/19 00:55:40 jtg
* Initial revision
* Revision 1.1.1.1.2.1 1999/11/24 18:39:17 brianp
* bumped version to 3.1
*
* Revision 1.1.1.1 1999/08/19 00:55:40 jtg
* Imported sources
*
* Revision 1.4 1999/02/14 03:39:09 brianp
* new copyright
@@ -86,7 +89,7 @@ extern "C" {
#define OSMESA_MAJOR_VERSION 3
#define OSMESA_MINOR_VERSION 0
#define OSMESA_MINOR_VERSION 1

View File

@@ -1,8 +1,8 @@
/* $Id: svgamesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
/* $Id: svgamesa.h,v 1.1.1.1.2.1 1999/11/24 18:40:45 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.0
* Version: 3.1
* Copyright (C) 1995-1998 Brian Paul
*
* This library is free software; you can redistribute it and/or
@@ -23,8 +23,11 @@
/*
* $Log: svgamesa.h,v $
* Revision 1.1 1999/08/19 00:55:40 jtg
* Initial revision
* Revision 1.1.1.1.2.1 1999/11/24 18:40:45 brianp
* bumped version to 3.1
*
* Revision 1.1.1.1 1999/08/19 00:55:40 jtg
* Imported sources
*
* Revision 3.0 1998/02/20 05:07:24 brianp
* initial rev
@@ -65,7 +68,7 @@
#define SVGAMESA_MAJOR_VERSION 3
#define SVGAMESA_MINOR_VERSION 0
#define SVGAMESA_MINOR_VERSION 1
#ifdef __cplusplus

View File

@@ -1,4 +1,4 @@
/* $Id: xmesa.h,v 1.1 1999/08/19 00:55:40 jtg Exp $ */
/* $Id: xmesa.h,v 1.1.1.1.2.2 1999/12/13 21:54:19 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -27,8 +27,14 @@
/*
* $Log: xmesa.h,v $
* Revision 1.1 1999/08/19 00:55:40 jtg
* Initial revision
* Revision 1.1.1.1.2.2 1999/12/13 21:54:19 brianp
* applied Daryll's patches
*
* Revision 1.1.1.1.2.1 1999/11/24 18:41:37 brianp
* bumped version to 3.1
*
* Revision 1.1.1.1 1999/08/19 00:55:40 jtg
* Imported sources
*
* Revision 1.3 1999/02/24 22:43:27 jens
* Name changes to get XMesa to compile standalone inside XFree86
@@ -96,6 +102,9 @@ extern "C" {
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "xmesa_x.h"
#ifdef GLX_DIRECT_RENDERING
#include "dri_mesa.h"
#endif
#endif
#include "GL/gl.h"
@@ -106,7 +115,7 @@ extern struct Library *XLibBase;
#define XMESA_MAJOR_VERSION 3
#define XMESA_MINOR_VERSION 0
#define XMESA_MINOR_VERSION 1
@@ -131,7 +140,17 @@ typedef struct xmesa_visual *XMesaVisual;
typedef struct xmesa_buffer *XMesaBuffer;
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server)
/*
* Initialize the XMesa driver.
*/
extern GLboolean XMesaInitDriver( __DRIscreenPrivate *driScrnPriv );
/*
* Reset the XMesa driver when the X server resets.
*/
extern void XMesaResetDriver( __DRIscreenPrivate *driScrnPriv );
#endif
/*
@@ -179,7 +198,11 @@ extern void XMesaDestroyVisual( XMesaVisual v );
* Return: an XMesaContext or NULL if error.
*/
extern XMesaContext XMesaCreateContext( XMesaVisual v,
XMesaContext share_list );
XMesaContext share_list
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server)
, __DRIcontextPrivate *driContextPriv
#endif
);
/*
@@ -192,7 +215,12 @@ extern void XMesaDestroyContext( XMesaContext c );
* Create an XMesaBuffer from an X window.
*/
extern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v,
XMesaWindow w );
XMesaWindow w
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server)
, __DRIdrawablePrivate *driDrawPriv
#endif
);
/*
@@ -200,7 +228,12 @@ extern XMesaBuffer XMesaCreateWindowBuffer( XMesaVisual v,
*/
extern XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
XMesaPixmap p,
XMesaColormap cmap );
XMesaColormap cmap
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server)
, __DRIdrawablePrivate *driDrawPriv
#endif
);
/*

View File

@@ -30,7 +30,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* Authors:
* Kevin E. Martin <kevin@precisioninsight.com>
*
* $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/include/GL/xmesa_xf86.h,v 1.1 1999/08/19 00:55:40 jtg Exp $
* $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/include/GL/xmesa_xf86.h,v 1.1.1.1.2.1 1999/12/13 21:54:19 brianp Exp $
*/
#ifndef _XMESA_XF86_H_
@@ -52,29 +52,29 @@ typedef DDXPointRec XMesaPoint;
typedef xColorItem XMesaColor;
#define XMesaSetGeneric(__d,__gc,__val,__mask) \
{ \
do { \
CARD32 __v[1]; \
(void) __d; \
__v[0] = __val; \
dixChangeGC(NullClient, __gc, __mask, __v, NULL); \
}
} while (0)
#define XMesaSetGenericPtr(__d,__gc,__pval,__mask) \
{ \
do { \
ChangeGCVal __v[1]; \
(void) __d; \
__v[0].ptr = __pval; \
dixChangeGC(NullClient, __gc, __mask, NULL, __v); \
}
} while (0)
#define XMesaSetDashes(__d,__gc,__do,__dl,__n) \
{ \
do { \
(void) __d; \
SetDashes(__gc, __do, __n, (unsigned char *)__dl); \
}
} while (0)
#define XMesaSetLineAttributes(__d,__gc,__lw,__ls,__cs,__js) \
{ \
do { \
CARD32 __v[4]; \
(void) __d; \
__v[0] = __lw; \
@@ -84,7 +84,7 @@ typedef xColorItem XMesaColor;
dixChangeGC(NullClient, __gc, \
GCLineWidth|GCLineStyle|GCCapStyle|GCJoinStyle, \
__v, NULL); \
}
} while (0)
#define XMesaSetForeground(d,gc,v) XMesaSetGeneric(d,gc,v,GCForeground)
#define XMesaSetBackground(d,gc,v) XMesaSetGeneric(d,gc,v,GCBackground)
@@ -96,24 +96,24 @@ typedef xColorItem XMesaColor;
#define XMesaSetStipple(d,gc,v) XMesaSetGenericPtr(d,gc,v,GCStipple)
#define XMesaDrawPoint(__d,__b,__gc,__x,__y) \
{ \
do { \
XMesaPoint __p[1]; \
(void) __d; \
__p[0].x = __x; \
__p[0].y = __y; \
ValidateGC(__b, __gc); \
(*gc->ops->PolyPoint)(__b, __gc, CoordModeOrigin, 1, __p); \
}
} while (0)
#define XMesaDrawPoints(__d,__b,__gc,__p,__n,__m) \
{ \
do { \
(void) __d; \
ValidateGC(__b, __gc); \
(*gc->ops->PolyPoint)(__b, __gc, __m, __n, __p); \
}
} while (0)
#define XMesaDrawLine(__d,__b,__gc,__x0,__y0,__x1,__y1) \
{ \
do { \
XMesaPoint __p[2]; \
(void) __d; \
ValidateGC(__b, __gc); \
@@ -122,10 +122,10 @@ typedef xColorItem XMesaColor;
__p[1].x = __x1; \
__p[1].y = __y1; \
(*__gc->ops->Polylines)(__b, __gc, CoordModeOrigin, 2, __p); \
}
} while (0)
#define XMesaFillRectangle(__d,__b,__gc,__x,__y,__w,__h) \
{ \
do { \
xRectangle __r[1]; \
(void) __d; \
ValidateGC(__b, __gc); \
@@ -134,10 +134,10 @@ typedef xColorItem XMesaColor;
__r[0].width = __w; \
__r[0].height = __h; \
(*__gc->ops->PolyFillRect)(__b, __gc, 1, __r); \
}
} while (0)
#define XMesaPutImage(__d,__b,__gc,__i,__sx,__sy,__x,__y,__w,__h) \
{ \
do { \
/* Assumes: Images are always in ZPixmap format */ \
(void) __d; \
if (__sx || __sy) /* The non-trivial case */ \
@@ -146,22 +146,22 @@ typedef xColorItem XMesaColor;
(*__gc->ops->PutImage)(__b, __gc, ((XMesaDrawable)(__b))->depth, \
__x, __y, __w, __h, 0, ZPixmap, \
((XMesaImage *)(__i))->data); \
}
} while (0)
#define XMesaCopyArea(__d,__sb,__db,__gc,__sx,__sy,__w,__h,__x,__y) \
{ \
do { \
(void) __d; \
ValidateGC(__db, __gc); \
(*__gc->ops->CopyArea)((DrawablePtr)__sb, __db, __gc, \
__sx, __sy, __w, __h, __x, __y); \
}
} while (0)
#define XMesaFillPolygon(__d,__b,__gc,__p,__n,__s,__m) \
{ \
do { \
(void) __d; \
ValidateGC(__b, __gc); \
(*__gc->ops->FillPolygon)(__b, __gc, __s, __m, __n, __p); \
}
} while (0)
/* CreatePixmap returns a PixmapPtr; so, it cannot be inside braces */
#define XMesaCreatePixmap(__d,__b,__w,__h,__depth) \
@@ -170,10 +170,10 @@ typedef xColorItem XMesaColor;
(*__d->DestroyPixmap)(__b)
#define XMesaFreeGC(__d,__gc) \
{ \
do { \
(void) __d; \
FreeScratchGC(__gc); \
}
} while (0)
#define GET_COLORMAP_SIZE(__v) __v->visinfo->ColormapEntries
#define GET_REDMASK(__v) __v->visinfo->redMask

View File

@@ -1,4 +1,4 @@
/* $Id: tessdemo.c,v 1.3 1999/11/04 04:00:42 gareth Exp $ */
/* $Id: tessdemo.c,v 1.3.2.1 1999/11/16 11:09:09 gareth Exp $ */
/*
* A demo of the GLU polygon tesselation functions written by Bogdan Sikorski.
@@ -14,6 +14,9 @@
/*
* $Log: tessdemo.c,v $
* Revision 1.3.2.1 1999/11/16 11:09:09 gareth
* Added combine callback. Converted vertices from ints to floats.
*
* Revision 1.3 1999/11/04 04:00:42 gareth
* Updated demo for new GLU 1.3 tessellation. Added optimized rendering
* by saving the output of the tessellation into display lists.
@@ -79,20 +82,20 @@ static GLfloat edge_color[3];
static struct
{
GLint p[MAX_POINTS][2];
GLfloat p[MAX_POINTS][2];
GLuint point_cnt;
} contours[MAX_CONTOURS];
static struct
{
GLsizei no;
GLint p[3][2];
GLfloat p[3][2];
GLclampf color[3][3];
} triangles[MAX_TRIANGLES];
void GLCALLBACK my_error( GLenum err )
void GLCALLBACK error_callback( GLenum err )
{
int len, i;
char const *str;
@@ -146,22 +149,22 @@ void GLCALLBACK end_callback()
triangles[i].color[0][1],
triangles[i].color[0][2] );
glVertex2i( triangles[i].p[0][0], triangles[i].p[0][1] );
glVertex2i( triangles[i].p[1][0], triangles[i].p[1][1] );
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] );
glVertex2i( triangles[i].p[1][0], triangles[i].p[1][1] );
glVertex2i( triangles[i].p[2][0], triangles[i].p[2][1] );
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] );
glVertex2i( triangles[i].p[2][0], triangles[i].p[2][1] );
glVertex2i( triangles[i].p[0][0], triangles[i].p[0][1] );
glVertex2f( triangles[i].p[2][0], triangles[i].p[2][1] );
glVertex2f( triangles[i].p[0][0], triangles[i].p[0][1] );
}
glEnd();
@@ -170,9 +173,9 @@ void GLCALLBACK end_callback()
void GLCALLBACK vertex_callback( void *data )
{
GLsizei no;
GLint *p;
GLfloat *p;
p = (GLint *) data;
p = (GLfloat *) data;
no = triangles[triangle_cnt].no;
triangles[triangle_cnt].p[no][0] = p[0];
@@ -190,6 +193,22 @@ void GLCALLBACK vertex_callback( void *data )
}
}
void GLCALLBACK combine_callback( GLdouble coords[3],
GLdouble *vertex_data[4],
GLfloat weight[4], void **data )
{
GLfloat *vertex;
int i;
vertex = (GLfloat *) malloc( 2 * sizeof(GLfloat) );
vertex[0] = (GLfloat) coords[0];
vertex[1] = (GLfloat) coords[1];
*data = vertex;
}
void set_screen_wh( GLsizei w, GLsizei h )
{
width = w;
@@ -208,10 +227,11 @@ void tesse( void )
if ( tobj != NULL )
{
gluTessCallback( tobj, GLU_BEGIN, glBegin );
gluTessCallback( tobj, GLU_VERTEX, glVertex2iv );
gluTessCallback( tobj, GLU_END, glEnd );
gluTessCallback( tobj, GLU_ERROR, my_error );
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 );
@@ -233,10 +253,10 @@ void tesse( void )
gluEndPolygon( tobj );
glEndList();
gluTessCallback( tobj, GLU_BEGIN, begin_callback );
gluTessCallback( tobj, GLU_VERTEX, vertex_callback );
gluTessCallback( tobj, GLU_END, end_callback );
gluTessCallback( tobj, GLU_EDGE_FLAG, edge_callback );
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 );
@@ -267,7 +287,7 @@ void tesse( void )
void left_down( int x1, int y1 )
{
GLint P[2];
GLfloat P[2];
GLuint point_cnt;
/* translate GLUT into GL coordinates */
@@ -284,13 +304,13 @@ void left_down( int x1, int y1 )
if ( point_cnt )
{
glVertex2iv( contours[contour_cnt].p[point_cnt-1] );
glVertex2iv( P );
glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
glVertex2fv( P );
}
else
{
glVertex2iv( P );
glVertex2iv( P );
glVertex2fv( P );
glVertex2fv( P );
}
glEnd();
@@ -311,8 +331,8 @@ void middle_down( int x1, int y1 )
{
glBegin( GL_LINES );
glVertex2iv( contours[contour_cnt].p[0] );
glVertex2iv( contours[contour_cnt].p[point_cnt-1] );
glVertex2fv( contours[contour_cnt].p[0] );
glVertex2fv( contours[contour_cnt].p[point_cnt-1] );
contours[contour_cnt].p[point_cnt][0] = -1;
@@ -383,24 +403,24 @@ void display( void )
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] );
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] );
glVertex2fv( contours[i].p[0] );
glVertex2fv( contours[i].p[j] );
}
break;
}

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.X11,v 1.4 1999/11/05 08:01:17 brianp Exp $
# $Id: Makefile.X11,v 1.4.2.1 1999/11/12 15:43:25 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.1
@@ -16,7 +16,7 @@ GL_LIBS = -L$(LIBDIR) -lglut -lGLU -lGL $(XLIBS)
LIB_DEP = $(LIBDIR)/$(GL_LIB) $(LIBDIR)/$(GLU_LIB) $(LIBDIR)/$(GLUT_LIB)
PROGS = glxdemo glxpixmap offset xdemo glxinfo xfont
PROGS = glxdemo glxpixmap offset xdemo glxinfo xfont glxdpyinfo

1073
progs/xdemos/glxdpyinfo.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@ LIBDIR = ../lib
SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \
project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \
tess_winding.c
tess_winding.c tess_clip.c
OBJECTS = $(SOURCES:.c=.o)

View File

@@ -19,9 +19,12 @@
# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# $Id: Makefile.BeOS-R4,v 1.5 1999/10/03 00:53:38 gareth Exp $
# $Id: Makefile.BeOS-R4,v 1.5.2.1 1999/11/15 21:15:43 gareth Exp $
# $Log: Makefile.BeOS-R4,v $
# Revision 1.5.2.1 1999/11/15 21:15:43 gareth
# Added new tessellation polygon clipping file tess_clip.c
#
# Revision 1.5 1999/10/03 00:53:38 gareth
# Added tessellation winding rule files.
#
@@ -59,7 +62,7 @@ LIBDIR = ../lib
SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \
project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \
tess_winding.c
tess_winding.c tess_clip.c
OBJECTS = $(SOURCES:.c=.o)

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.X11,v 1.6 1999/10/03 00:53:38 gareth Exp $
# $Id: Makefile.X11,v 1.6.2.1 1999/11/15 21:15:43 gareth Exp $
# Mesa 3-D graphics library
# Version: 3.1
@@ -20,7 +20,7 @@ LIBDIR = ../lib
SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \
project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \
tess_winding.c
tess_winding.c tess_clip.c
OBJECTS = $(SOURCES:.c=.o)

View File

@@ -16,11 +16,11 @@ CFLAGS = /include=$(INCDIR)/define=(FBIND=1)
SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \
project.c quadric.c tess.c tess_fist.c tess_hash.c tess_heap.c \
tess_winding.c
tess_winding.c tess_clip.c
OBJECTS =glu.obj,mipmap.obj,nurbs.obj,nurbscrv.obj,nurbssrf.obj,nurbsutl.obj,\
project.obj,quadric.obj,tess.obj,tess_fist.obj,tess_hash.obj,\
tess_heap.obj,tess_winding.obj
tess_heap.obj,tess_winding.obj,tess_clip.obj

View File

@@ -1,4 +1,4 @@
/* $Id: glu.c,v 1.16 1999/10/27 09:47:41 brianp Exp $ */
/* $Id: glu.c,v 1.16.2.2 1999/11/22 22:18:13 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -23,6 +23,12 @@
/*
* $Log: glu.c,v $
* Revision 1.16.2.2 1999/11/22 22:18:13 brianp
* removed GLU_EXT_get_proc_address from ext string
*
* Revision 1.16.2.1 1999/11/19 21:22:07 brianp
* replace encounteed with encountered
*
* Revision 1.16 1999/10/27 09:47:41 brianp
* disabled gluGetProcAddressEXT
*
@@ -304,7 +310,7 @@ const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode )
"unconnected trim curves",
"unknown knot error",
"negative vertex count encountered",
"negative byte-stride encounteed",
"negative byte-stride encountered",
"unknown type descriptor",
"null control array or knot vector",
"duplicate point on pwlcurve"
@@ -367,7 +373,7 @@ const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode )
const GLubyte* GLAPIENTRY gluGetString( GLenum name )
{
static char *extensions = "GL_EXT_abgr GLU_EXT_get_proc_address";
static char *extensions = "GL_EXT_abgr";
static char *version = "1.2 Mesa 3.1";
switch (name) {

View File

@@ -1,4 +1,4 @@
/* $Id: gluP.h,v 1.1 1999/08/19 00:55:42 jtg Exp $ */
/* $Id: gluP.h,v 1.1.1.1.2.1 1999/12/06 05:24:36 joukj Exp $ */
/*
* Mesa 3-D graphics library
@@ -23,8 +23,19 @@
/*
* $Log: gluP.h,v $
* Revision 1.1 1999/08/19 00:55:42 jtg
* Initial revision
* Revision 1.1.1.1.2.1 1999/12/06 05:24:36 joukj
*
* Committing in .
*
* Updating compilation on VMS
*
* Modified Files:
* Tag: mesa_3_2_dev
* Mesa/src-glu/descrip.mms Mesa/src-glu/gluP.h
* ----------------------------------------------------------------------
*
* Revision 1.1.1.1 1999/08/19 00:55:42 jtg
* Imported sources
*
* Revision 1.4 1999/01/03 03:23:15 brianp
* now using GLAPIENTRY and GLCALLBACK keywords (Ted Jump)
@@ -55,6 +66,7 @@
#include "GL/gl.h"
#include "GL/glu.h"
#include <string.h>
#ifndef MESA
/* If we're using the real OpenGL header files... */

View File

@@ -1,4 +1,4 @@
/* $Id: mipmap.c,v 1.3 1999/11/09 06:16:59 brianp Exp $ */
/* $Id: mipmap.c,v 1.3.2.1 1999/12/12 17:23:33 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -23,6 +23,9 @@
/*
* $Log: mipmap.c,v $
* Revision 1.3.2.1 1999/12/12 17:23:33 brianp
* removed unneeded code in gluBuild1DMipmaps()
*
* Revision 1.3 1999/11/09 06:16:59 brianp
* replace GLint with GLsizei in a gluScaleImage, gluBuild1/2DMipmaps()
*
@@ -702,12 +705,6 @@ GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
free( texture );
/* make sure remaining mipmap levels are removed */
for (l=levels;l<max_levels;l++) {
glTexImage1D( GL_TEXTURE_1D, l, components, 0, 0,
format, GL_UNSIGNED_BYTE, NULL );
}
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
/* $Id: tess.h,v 1.15 1999/11/05 20:37:14 gareth Exp $ */
/* $Id: tess.h,v 1.15.2.6 1999/12/05 17:01:17 gareth Exp $ */
/*
* Mesa 3-D graphics library
@@ -56,33 +56,39 @@ extern "C" {
struct GLUtesselator
{
tess_callbacks_t callbacks;
GLboolean boundary_only;
GLenum winding_rule;
GLboolean boundary_only;
GLdouble tolerance;
tess_plane_t plane;
GLuint contour_count;
GLenum orientation;
void *data;
GLint num_contours;
tess_contour_t *contours, *last_contour;
tess_contour_t *current_contour;
GLdouble mins[2], maxs[2];
GLuint vertex_count;
GLint num_vertices;
tess_vertex_t **sorted_vertices;
#if 0
tess_grid_t *grid; /* Not currently used... */
#endif
heap_t *ears;
hashtable_t *cvc_lists;
void *data;
GLboolean edge_flag;
GLuint label;
tess_plane_t plane;
GLenum error;
};
/*****************************************************************************
* Tessellation error handler:
* Common tessellation functions:
*****************************************************************************/
extern void tess_error_callback( GLUtesselator *, GLenum );
extern GLdouble twice_contour_area( tess_contour_t *contour );
extern void reverse_contour( tess_contour_t *contour );
extern void delete_contour( tess_contour_t **contour );
extern void contour_dump( tess_contour_t *contour );
/*****************************************************************************
* Debugging output:
@@ -115,8 +121,8 @@ extern int tess_dbg_level;
#define MSG tess_msg
#endif /* DEBUG */
extern INLINE void tess_msg( int level, char *format, ... );
extern INLINE void tess_info( char *file, char *line );
extern INLINE void tess_msg( GLint level, char *format, ... );
extern INLINE void tess_info( char *file, GLint line );
#ifdef __cplusplus
}

View File

@@ -1,6 +1,5 @@
## BeOS Generic Makefile v2.0 ##
## Modified by Brian Paul to work with Mesa 3.1
## Fill in this file to specify the project being created, and the referenced
@@ -48,9 +47,8 @@ RSRCS=
# naming scheme you need to specify the path to the library
# and it's name
# library: my_lib.a entry: my_lib.a or path/my_lib.a
#LIBS= MesaGL MesaGLU be
LIBS= GL GLU be
# specify additional paths to directories following the standard
# libXXX.so or libXXX.a naming scheme. You can specify full paths
# or paths relative to the makefile. The paths included may not

View File

@@ -129,26 +129,29 @@ __glutXGetLayerVisualInfo(Display * dpy, long lvinfo_mask,
break;
}
}
if (lvinfo_mask & VisualLayerMask)
if (lvinfo_mask & VisualLayerMask) {
if (overlayInfo == NULL) {
if (lvinfo_template->layer != 0)
continue;
} else if (lvinfo_template->layer != overlayInfo->layer)
continue;
if (lvinfo_mask & VisualTransparentType)
}
if (lvinfo_mask & VisualTransparentType) {
if (overlayInfo == NULL) {
if (lvinfo_template->type != None)
continue;
} else if (lvinfo_template->type !=
overlayInfo->transparent_type)
continue;
if (lvinfo_mask & VisualTransparentValue)
}
if (lvinfo_mask & VisualTransparentValue) {
if (overlayInfo == NULL)
/* Non-overlay visuals have no sense of
TransparentValue. */
continue;
else if (lvinfo_template->value != overlayInfo->value)
continue;
}
layerInfo[count].vinfo = *pVinfo;
if (overlayInfo == NULL) {
layerInfo[count].layer = 0;

View File

@@ -1,7 +1,7 @@
# $Id: Makefile.X11,v 1.7 1999/11/11 01:22:28 brianp Exp $
# $Id: Makefile.X11,v 1.6.2.1 1999/11/16 15:25:50 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.3
# Version: 3.1
# Copyright (C) 1995-1999 Brian Paul
# Makefile for core library
@@ -18,13 +18,13 @@ VPATH = RCS
INCDIR = ../include
LIBDIR = ../lib
CORE_SOURCES = \
glapi.c \
glapinoop.c \
accum.c \
alpha.c \
alphabuf.c \
api1.c \
api2.c \
apiext.c \
attrib.c \
bbox.c \
bitmap.c \
@@ -37,7 +37,6 @@ CORE_SOURCES = \
cva.c \
debug_xform.c \
depth.c \
dispatch.c \
dlist.c \
drawpix.c \
enable.c \
@@ -50,19 +49,18 @@ CORE_SOURCES = \
glmisc.c \
hash.c \
image.c \
imaging.c \
light.c \
lines.c \
logic.c \
masking.c \
matrix.c \
mem.c \
mmath.c \
mthreads.c \
pb.c \
pixel.c \
pipeline.c \
points.c \
pointers.c \
polygon.c \
quads.c \
rastpos.c \
@@ -222,7 +220,8 @@ X86/3dnow.o: X86/3dnow.c
# @echo "Specify a target configuration"
clean:
-rm *.o *~ */*.o */*~
-rm *.o *~ */*.o */*~ *.lo *.la
-rm -rf .libs
targets: $(LIBDIR)/$(GL_LIB)

View File

@@ -0,0 +1,8 @@
genkgi.conf
.deps
.libs
Makefile
Makefile.in
*.lo
*.o
*.la

View File

@@ -0,0 +1,8 @@
fbdev.conf
.deps
.libs
Makefile
Makefile.in
*.lo
*.o
*.la

View File

@@ -0,0 +1,7 @@
.deps
.libs
Makefile
Makefile.in
*.lo
*.o
*.la

View File

@@ -0,0 +1,7 @@
.deps
.libs
Makefile
Makefile.in
*.lo
*.o
*.la

View File

@@ -0,0 +1,7 @@
.deps
.libs
Makefile
Makefile.in
*.lo
*.o
*.la

View File

@@ -1,24 +1,52 @@
/* -*- mode: C; tab-width:8; -*-
fxapi.c - 3Dfx VooDoo/Mesa interface
*/
/* -*- mode: C; tab-width:8; -*- */
/*
* 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.
* Mesa 3-D graphics library
* Version: 3.1
*
* 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
/* fxapi.c - 3Dfx VooDoo/Mesa interface */
/********************************************************************
*
* Function names:
* fxMesa.... (The driver API)
@@ -820,9 +848,10 @@ void fxsignals()
/*
* Create a new FX/Mesa context and return a handle to it.
*/
fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res,
GrScreenRefresh_t ref,
const GLint attribList[])
fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,
GrScreenResolution_t res,
GrScreenRefresh_t ref,
const GLint attribList[])
{
fxMesaContext fxMesa = NULL;
int i,type;
@@ -835,7 +864,7 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res
GLint accumSize=0;
GLcontext *shareCtx = NULL;
GLcontext *ctx = 0;
FX_GrContext_t glideContext = 0;
/*FX_GrContext_t glideContext = 0;*/
char *errorstr;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
@@ -928,24 +957,61 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,GrScreenResolution_t res
fxMesa->verbose=verbose;
fxMesa->board=glbCurrentBoard;
fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref,
#if FXMESA_USE_ARGB
GR_COLORFORMAT_ARGB,
fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref,
GR_COLORFORMAT_ARGB,
GR_ORIGIN_LOWER_LEFT,
2,aux);
#else
GR_COLORFORMAT_ABGR,
fxMesa->glideContext = FX_grSstWinOpen((FxU32)win,res,ref,
GR_COLORFORMAT_ABGR,
GR_ORIGIN_LOWER_LEFT,
2,aux);
#endif
GR_ORIGIN_LOWER_LEFT,
2,aux);
if (!fxMesa->glideContext){
errorstr = "grSstWinOpen";
goto errorhandler;
}
/* Pixel tables are use during pixel read-back */
#if FXMESA_USE_ARGB
fxInitPixelTables(GL_FALSE); /* Force RGB pixel order */
#else
if (glbHWConfig.SSTs[glbCurrentBoard].type == GR_SSTTYPE_VOODOO) {
/* jk991130 - GROSS HACK!!! - Voodoo 3s don't use BGR!!
* the only way to tell if it's a Voodoo 3 at this stage of the
* ballgame (no Glide 3.x for linux *yet*) is to query the # of TMUs
* as Voodoo3s have 2 TMUs on board, Banshee has only 1
* Thanks to Joseph Kain for that one
*/
if (glbHWConfig.SSTs[glbCurrentBoard].sstBoard.VoodooConfig.nTexelfx == 2) {
fxInitPixelTables(GL_FALSE); /* use RGB pixel order (Voodoo3) */
}
else {
fxInitPixelTables(GL_TRUE); /* use BGR pixel order on Voodoo1/2 */
}
}
else {
fxInitPixelTables(GL_FALSE); /* use RGB pixel order otherwise */
}
#endif
fxMesa->width=FX_grSstScreenWidth();
fxMesa->height=FX_grSstScreenHeight();
fxMesa->clipMinX = 0;
fxMesa->clipMaxX = fxMesa->width;
fxMesa->clipMinY = 0;
fxMesa->clipMaxY = fxMesa->height;
fxMesa->screen_width = fxMesa->width;
fxMesa->screen_height = fxMesa->height;
fxMesa->x_offset = 0;
fxMesa->y_offset = 0;
fxMesa->y_delta = 0;
fxMesa->needClip = 0;
if(verbose)
fprintf(stderr,"Glide screen size: %dx%d\n",
(int)FX_grSstScreenWidth(),(int)FX_grSstScreenHeight());
@@ -1204,7 +1270,7 @@ int GLAPIENTRY fxQueryHardware(void)
char buf[80];
FX_grGlideGetVersion(buf);
fprintf(stderr,"Using Glide V%s\n",0);
fprintf(stderr,"Using Glide V%s\n","");
fprintf(stderr,"Number of boards: %d\n",glbHWConfig.num_sst);
if(glbHWConfig.SSTs[glbCurrentBoard].type==GR_SSTTYPE_VOODOO) {

View File

@@ -1,28 +1,51 @@
/* -*- mode: C; tab-width:8; -*-
fxdd.c - 3Dfx VooDoo Mesa device driver functions
*/
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
* Mesa 3-D graphics library
* Version: 3.1
*
* 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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:
*
* See the file fxapi.c for more informations about authors
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
/* fxdd.c - 3Dfx VooDoo Mesa device driver functions */
#ifdef HAVE_CONFIG_H
#include "conf.h"
#endif
@@ -34,6 +57,44 @@
#include "enums.h"
#include "extensions.h"
/* These lookup table are used to extract RGB values in [0,255] from
* 16-bit pixel values.
*/
GLubyte FX_PixelToR[0x10000];
GLubyte FX_PixelToG[0x10000];
GLubyte FX_PixelToB[0x10000];
/*
* Initialize the FX_PixelTo{RGB} arrays.
* Input: bgrOrder - if TRUE, pixels are in BGR order, else RGB order.
*/
void fxInitPixelTables(GLboolean bgrOrder)
{
GLuint pixel;
for (pixel = 0; pixel <= 0xffff; pixel++) {
GLuint r, g, b;
if (bgrOrder) {
r = (pixel & 0x001F) << 3;
g = (pixel & 0x07E0) >> 3;
b = (pixel & 0xF800) >> 8;
}
else {
r = (pixel & 0xF800) >> 8;
g = (pixel & 0x07E0) >> 3;
b = (pixel & 0x001F) << 3;
}
r = r * 255 / 0xF8; /* fill in low-order bits */
g = g * 255 / 0xFC;
b = b * 255 / 0xF8;
FX_PixelToR[pixel] = r;
FX_PixelToG[pixel] = g;
FX_PixelToB[pixel] = b;
}
}
/**********************************************************************/
/***** Miscellaneous functions *****/
/**********************************************************************/
@@ -45,10 +106,11 @@ void fxDDDither(GLcontext *ctx, GLboolean enable)
fprintf(stderr,"fxmesa: fxDDDither()\n");
}
if(enable)
grDitherMode(GR_DITHER_4x4);
else
grDitherMode(GR_DITHER_DISABLE);
if (enable) {
FX_grDitherMode(GR_DITHER_4x4);
} else {
FX_grDitherMode(GR_DITHER_DISABLE);
}
}
@@ -121,14 +183,14 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
/* clear color and depth buffer */
if (ctx->Color.DrawDestMask & BACK_LEFT_BIT) {
grRenderBuffer(GR_BUFFER_BACKBUFFER);
grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
}
if (ctx->Color.DrawDestMask & FRONT_LEFT_BIT) {
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
}
newmask=mask & (~(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT));
@@ -137,19 +199,20 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
/* clear color buffer */
if(ctx->Color.ColorMask) {
grDepthMask(FXFALSE);
FX_grDepthMask(FXFALSE);
if (ctx->Color.DrawDestMask & BACK_LEFT_BIT) {
grRenderBuffer(GR_BUFFER_BACKBUFFER);
grBufferClear(fxMesa->clearC, fxMesa->clearA, 0);
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, 0);
}
if (ctx->Color.DrawDestMask & FRONT_LEFT_BIT) {
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
grBufferClear(fxMesa->clearC, fxMesa->clearA, 0);
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA, 0);
}
if(ctx->Depth.Mask)
grDepthMask(FXTRUE);
if(ctx->Depth.Mask) {
FX_grDepthMask(FXTRUE);
}
}
newmask=mask & (~(GL_COLOR_BUFFER_BIT));
@@ -158,14 +221,14 @@ static GLbitfield fxDDClear(GLcontext *ctx, GLbitfield mask, GLboolean all,
/* clear depth buffer */
if(ctx->Depth.Mask) {
grColorMask(FXFALSE,FXFALSE);
grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
FX_grColorMask(FXFALSE,FXFALSE);
FX_grBufferClear(fxMesa->clearC, fxMesa->clearA,
(FxU16)(ctx->Depth.Clear*0xffff));
grColorMask(ctx->Color.ColorMask[RCOMP] ||
ctx->Color.ColorMask[GCOMP] ||
ctx->Color.ColorMask[BCOMP],
ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
FX_grColorMask(ctx->Color.ColorMask[RCOMP] ||
ctx->Color.ColorMask[GCOMP] ||
ctx->Color.ColorMask[BCOMP],
ctx->Color.ColorMask[ACOMP] && fxMesa->haveAlphaBuffer);
}
newmask=mask & (~(GL_DEPTH_BUFFER_BIT));
@@ -190,12 +253,12 @@ static GLboolean fxDDSetBuffer(GLcontext *ctx, GLenum mode )
if (mode == GL_FRONT_LEFT) {
fxMesa->currentFB = GR_BUFFER_FRONTBUFFER;
grRenderBuffer(fxMesa->currentFB);
FX_grRenderBuffer(fxMesa->currentFB);
return GL_TRUE;
}
else if (mode == GL_BACK_LEFT) {
fxMesa->currentFB = GR_BUFFER_BACKBUFFER;
grRenderBuffer(fxMesa->currentFB);
FX_grRenderBuffer(fxMesa->currentFB);
return GL_TRUE;
}
else {
@@ -204,6 +267,22 @@ static GLboolean fxDDSetBuffer(GLcontext *ctx, GLenum mode )
}
#ifdef XF86DRI
static GLboolean inClipRects(fxMesaContext fxMesa, int px, int py)
{
int i;
py=fxMesa->height+fxMesa->y_offset-py;
for (i=0; i<fxMesa->numClipRects; i++) {
if ((px>=fxMesa->pClipRects[i].x1) &&
(px<fxMesa->pClipRects[i].x2) &&
(py>=fxMesa->pClipRects[i].y1) &&
(py<fxMesa->pClipRects[i].y2)) return GL_TRUE;
}
return GL_FALSE;
}
#endif
static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
GLsizei width, GLsizei height,
@@ -241,10 +320,16 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
ymax=fxMesa->height;
}
xmin+=fxMesa->x_offset;
xmax+=fxMesa->x_offset;
#define ISCLIPPED(rx) ( ((rx)<xmin) || ((rx)>=xmax) )
#ifdef XF86DRI
#define ISCLIPPED(rx, ry) ( ((rx)<xmin) || ((rx)>=xmax) || !inClipRects(fxMesa, rx, ry))
#else
#define ISCLIPPED(rx, ry) ( ((rx)<xmin) || ((rx)>=xmax) )
#endif
#define DRAWBIT(i) { \
if(!ISCLIPPED(x+px)) \
if(!ISCLIPPED(x+px, y)) \
if( (*pb) & (1<<(i)) ) \
(*p)=color; \
p++; \
@@ -258,7 +343,7 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
scrwidth=fxMesa->width;
scrheight=fxMesa->height;
if((px>=scrwidth) || (px+width<=0) || (py>=scrheight) || (py+height<=0))
if ((px>=scrwidth) || (px+width<=0) || (py>=scrheight) || (py+height<=0))
return GL_TRUE;
pb=bitmap;
@@ -269,16 +354,16 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
py=0;
}
if(py+height>=scrheight)
if (py+height>=scrheight)
height-=(py+height)-scrheight;
info.size=sizeof(info);
if(!grLfbLock(GR_LFB_WRITE_ONLY,
fxMesa->currentFB,
GR_LFBWRITEMODE_565,
GR_ORIGIN_UPPER_LEFT,
FXFALSE,
&info)) {
if(!FX_grLfbLock(GR_LFB_WRITE_ONLY,
fxMesa->currentFB,
GR_LFBWRITEMODE_565,
GR_ORIGIN_UPPER_LEFT,
FXFALSE,
&info)) {
#ifndef FX_SILENT
fprintf(stderr,"fx Driver: error locking the linear frame buffer\n");
#endif
@@ -298,13 +383,13 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
/* This code is a bit slow... */
for(y=py;y<(py+height);y++) {
if (py>ymin) ymin=py;
if (py+height<ymax) ymax=py+height;
if (y>=ymax)
break;
px+=fxMesa->x_offset;
scrheight=fxMesa->height+fxMesa->y_offset;
if (y<=ymin)
continue;
for(y=ymin; y<ymax; y++) {
p=((FxU16 *)info.lfbPtr)+px+((scrheight-y)*stride);
@@ -315,7 +400,7 @@ static GLboolean fxDDDrawBitMap(GLcontext *ctx, GLint px, GLint py,
}
}
grLfbUnlock(GR_LFB_WRITE_ONLY,fxMesa->currentFB);
FX_grLfbUnlock(GR_LFB_WRITE_ONLY,fxMesa->currentFB);
#undef ISCLIPPED
#undef DRAWBIT
@@ -347,8 +432,6 @@ void fxDDSetNearFar(GLcontext *ctx, GLfloat n, GLfloat f)
{
FX_CONTEXT(ctx)->new_state |= FX_NEW_FOG;
ctx->Driver.RenderStart = fxSetupFXUnits;
FX_CONTEXT(ctx)->wscale = fabs(f)/65535.0f;
}
/* KW: Put the word Mesa in the render string because quakeworld
@@ -459,13 +542,13 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa )
fxMesa->unitsState.depthMask =GL_TRUE;
fxMesa->unitsState.depthTestFunc =GR_CMP_LESS;
grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE);
FX_grColorMask(FXTRUE, fxMesa->haveAlphaBuffer ? FXTRUE : FXFALSE);
if(fxMesa->haveDoubleBuffer) {
fxMesa->currentFB=GR_BUFFER_BACKBUFFER;
grRenderBuffer(GR_BUFFER_BACKBUFFER);
FX_grRenderBuffer(GR_BUFFER_BACKBUFFER);
} else {
fxMesa->currentFB=GR_BUFFER_FRONTBUFFER;
grRenderBuffer(GR_BUFFER_FRONTBUFFER);
FX_grRenderBuffer(GR_BUFFER_FRONTBUFFER);
}
fxMesa->state = NULL;
@@ -481,10 +564,10 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa )
}
if(fxMesa->haveZBuffer)
grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
FX_grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
#if (!FXMESA_USE_ARGB)
grLfbWriteColorFormat(GR_COLORFORMAT_ABGR); /* Not every Glide has this */
FX_grLfbWriteColorFormat(GR_COLORFORMAT_ABGR); /* Not every Glide has this */
#endif
fxMesa->glCtx->Const.MaxTextureLevels=9;
@@ -505,7 +588,7 @@ int fxDDInitFxMesaContext( fxMesaContext fxMesa )
fxDDSetNearFar(fxMesa->glCtx,1.0,100.0);
grGlideGetState((GrState*)fxMesa->state);
FX_grGlideGetState((GrState*)fxMesa->state);
/* XXX Fix me: callback not registered when main VB is created.
*/
@@ -546,6 +629,12 @@ void fxDDInitExtensions( GLcontext *ctx )
gl_extensions_disable( ctx, "GL_ARB_multitexture" );
}
/*
This driver may need to move the drawing operations to a different sub
window. This modifies the viewport command to add our X,Y offset to all
drawn objects that go through the viewport transformation.
*/
/************************************************************************/
/************************************************************************/
/************************************************************************/
@@ -591,16 +680,19 @@ static GLboolean fxIsInHardware(GLcontext *ctx)
/* Not very well written ... */
((ctx->Enabled & (TEXTURE0_1D | TEXTURE1_1D)) &&
((ctx->Enabled & (TEXTURE0_2D | TEXTURE1_2D))!=(TEXTURE0_2D | TEXTURE1_2D)))
)
) {
return GL_FALSE;
}
if((ctx->Texture.ReallyEnabled & TEXTURE0_2D) &&
(ctx->Texture.Unit[0].EnvMode==GL_BLEND))
(ctx->Texture.Unit[0].EnvMode==GL_BLEND)) {
return GL_FALSE;
}
if((ctx->Texture.ReallyEnabled & TEXTURE1_2D) &&
(ctx->Texture.Unit[1].EnvMode==GL_BLEND))
(ctx->Texture.Unit[1].EnvMode==GL_BLEND)) {
return GL_FALSE;
}
if (MESA_VERBOSE & (VERBOSE_DRIVER|VERBOSE_TEXTURE))
@@ -617,8 +709,9 @@ static GLboolean fxIsInHardware(GLcontext *ctx)
/* Can't use multipass to blend a multitextured triangle - fall
* back to software.
*/
if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled)
if (!fxMesa->haveTwoTMUs && ctx->Color.BlendEnabled) {
return GL_FALSE;
}
if ((ctx->Texture.Unit[0].EnvMode!=ctx->Texture.Unit[1].EnvMode) &&
(ctx->Texture.Unit[0].EnvMode!=GL_MODULATE) &&
@@ -626,7 +719,6 @@ static GLboolean fxIsInHardware(GLcontext *ctx)
{
if (MESA_VERBOSE&VERBOSE_DRIVER)
fprintf(stderr, "fxMesa: unsupported multitex env mode\n");
return GL_FALSE;
}
}
@@ -635,13 +727,15 @@ static GLboolean fxIsInHardware(GLcontext *ctx)
/* Not very well written ... */
((ctx->Enabled & TEXTURE0_1D) &&
(!(ctx->Enabled & TEXTURE0_2D)))
)
) {
return GL_FALSE;
}
if((ctx->Texture.ReallyEnabled & TEXTURE0_2D) &&
(ctx->Texture.Unit[0].EnvMode==GL_BLEND))
(ctx->Texture.Unit[0].EnvMode==GL_BLEND)) {
return GL_FALSE;
}
}
return GL_TRUE;
@@ -680,11 +774,11 @@ static void fxDDUpdateDDPointers(GLcontext *ctx)
ctx->Driver.LineFunc=fxMesa->LineFunc;
ctx->Driver.TriangleFunc=fxMesa->TriangleFunc;
ctx->Driver.QuadFunc=fxMesa->QuadFunc;
} else
} else {
fxMesa->render_index = FX_FALLBACK;
}
}
void fxSetupDDPointers(GLcontext *ctx)
{
if (MESA_VERBOSE&VERBOSE_DRIVER) {
@@ -748,7 +842,6 @@ void fxSetupDDPointers(GLcontext *ctx)
ctx->Driver.CullFace=fxDDCullFace;
ctx->Driver.ShadeModel=fxDDShadeModel;
ctx->Driver.Enable=fxDDEnable;
ctx->Driver.RegisterVB=fxDDRegisterVB;
ctx->Driver.UnregisterVB=fxDDUnregisterVB;
@@ -786,3 +879,4 @@ int gl_fx_dummy_function_dd(void)
}
#endif /* FX */

View File

@@ -1,27 +1,51 @@
/* -*- mode: C; tab-width:8; -*-
fxdd.c - 3Dfx VooDoo Mesa span and pixel functions
*/
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
* Mesa 3-D graphics library
* Version: 3.1
*
* 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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:
*
* See the file fxapi.c for more informations about authors
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
/* fxdd.c - 3Dfx VooDoo Mesa span and pixel functions */
#ifdef HAVE_CONFIG_H
#include "conf.h"
#endif
@@ -42,6 +66,66 @@
#if !defined(FXMESA_USE_ARGB)
#if defined(FX_GLIDE3) && defined(XF86DRI)
static FxBool writeRegionClipped(fxMesaContext fxMesa, GrBuffer_t dst_buffer,
FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format,
FxU32 src_width, FxU32 src_height, FxI32 src_stride,
void *src_data);
FxBool writeRegionClipped(fxMesaContext fxMesa, GrBuffer_t dst_buffer,
FxU32 dst_x, FxU32 dst_y, GrLfbSrcFmt_t src_format,
FxU32 src_width, FxU32 src_height, FxI32 src_stride,
void *src_data)
{
int i, x, w;
void *data;
if (src_width==1 && src_height==1) { /* Easy case writing a point */
for (i=0; i<fxMesa->numClipRects; i++) {
if ((dst_x>=fxMesa->pClipRects[i].x1) &&
(dst_x<fxMesa->pClipRects[i].x2) &&
(dst_y>=fxMesa->pClipRects[i].y1) &&
(dst_y<fxMesa->pClipRects[i].y2)) {
FX_grLfbWriteRegion(dst_buffer, dst_x, dst_y, src_format,
src_width, src_height, src_stride, src_data);
return GL_TRUE;
}
}
} else if (src_height==1) { /* Writing a span */
for (i=0; i<fxMesa->numClipRects; i++) {
if (dst_y>=fxMesa->pClipRects[i].y1 && dst_y<fxMesa->pClipRects[i].y2) {
if (dst_x<fxMesa->pClipRects[i].x1) {
x=fxMesa->pClipRects[i].x1;
data=((char*)src_data)+2*(dst_x-x);
w=src_width-(x-dst_x);
} else {
x=dst_x;
data=src_data;
w=src_width;
}
if (x+w>fxMesa->pClipRects[i].x2) {
w=fxMesa->pClipRects[i].x2-x;
}
FX_grLfbWriteRegion(dst_buffer, x, dst_y, src_format, w, src_height,
src_stride, data);
}
}
} else { /* Punt on the case of arbitrary rectangles */
return GL_FALSE;
}
return GL_TRUE;
}
#else
#define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
#endif
/* KW: Rearranged the args in the call to grLfbWriteRegion().
*/
#define LFB_WRITE_SPAN_MESA(dst_buffer, \
@@ -50,7 +134,7 @@
src_width, \
src_stride, \
src_data) \
grLfbWriteRegion(dst_buffer, \
writeRegionClipped(fxMesa, dst_buffer, \
dst_x, \
dst_y, \
GR_LFB_SRC_FMT_8888, \
@@ -60,7 +144,11 @@
src_data) \
#else /* defined(FXMESA_USE_RGBA) */
#else /* !defined(FXMESA_USE_RGBA) */
#define writeRegionClipped(fxm,dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
#define MESACOLOR_TO_ARGB(c) ( \
( ((unsigned int)(c[ACOMP]))<<24 ) | \
@@ -68,7 +156,7 @@
( ((unsigned int)(c[GCOMP]))<<8 ) | \
( (unsigned int)(c[BCOMP])) )
void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
inline void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
FxU32 dst_x,
FxU32 dst_y,
FxU32 src_width,
@@ -84,7 +172,7 @@ void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
{
argb[i] = MESACOLOR_TO_ARGB(rgba[i]);
}
FX_grLfbWriteRegion(dst_buffer,
writeRegionClipped( /*fxMesa,*/ NULL, dst_buffer,
dst_x,
dst_y,
GR_LFB_SRC_FMT_8888,
@@ -93,8 +181,9 @@ void LFB_WRITE_SPAN_MESA(GrBuffer_t dst_buffer,
src_stride,
(void*)argb);
}
#endif /* !defined(FXMESA_USE_RGBA) */
#endif
/************************************************************************/
/***** Span functions *****/
@@ -107,12 +196,13 @@ static void fxDDWriteRGBASpan(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDWriteRGBASpan(...)\n");
}
x+=fxMesa->x_offset;
if (mask) {
int span=0;
@@ -143,13 +233,14 @@ static void fxDDWriteRGBSpan(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
GLubyte rgba[MAX_WIDTH][4];
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDWriteRGBSpan()\n");
}
x+=fxMesa->x_offset;
if (mask) {
int span=0;
@@ -192,13 +283,14 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
GLuint data[MAX_WIDTH];
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDWriteMonoRGBASpan(...)\n");
}
x+=fxMesa->x_offset;
if (mask) {
int span=0;
@@ -208,7 +300,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx,
++span;
} else {
if (span > 0) {
FX_grLfbWriteRegion( fxMesa->currentFB, x+i-span, bottom-y,
writeRegionClipped(fxMesa, fxMesa->currentFB, x+i-span, bottom-y,
GR_LFB_SRC_FMT_8888, span, 1, 0,
(void *) data );
span = 0;
@@ -217,7 +309,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx,
}
if (span > 0)
FX_grLfbWriteRegion( fxMesa->currentFB, x+n-span, bottom-y,
writeRegionClipped(fxMesa, fxMesa->currentFB, x+n-span, bottom-y,
GR_LFB_SRC_FMT_8888, span, 1, 0,
(void *) data );
} else {
@@ -225,7 +317,7 @@ static void fxDDWriteMonoRGBASpan(const GLcontext *ctx,
data[i]=(GLuint) fxMesa->color;
}
FX_grLfbWriteRegion( fxMesa->currentFB, x, bottom-y, GR_LFB_SRC_FMT_8888,
writeRegionClipped(fxMesa, fxMesa->currentFB, x, bottom-y, GR_LFB_SRC_FMT_8888,
n, 1, 0, (void *) data );
}
}
@@ -237,7 +329,7 @@ static void fxDDReadRGBASpan(const GLcontext *ctx,
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLushort data[MAX_WIDTH];
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDReadRGBASpan(...)\n");
@@ -245,20 +337,16 @@ static void fxDDReadRGBASpan(const GLcontext *ctx,
assert(n < MAX_WIDTH);
grLfbReadRegion( fxMesa->currentFB, x, bottom-y, n, 1, 0, data);
for (i=0;i<n;i++) {
#if FXMESA_USE_ARGB
rgba[i][RCOMP]=(data[i] & 0xF800) >> 8;
rgba[i][GCOMP]=(data[i] & 0x07E0) >> 3;
rgba[i][BCOMP]=(data[i] & 0x001F) << 3;
#else
rgba[i][RCOMP]=(data[i] & 0x001f) << 3;
rgba[i][GCOMP]=(data[i] & 0x07e0) >> 3;
rgba[i][BCOMP]=(data[i] & 0xf800) >> 8;
#endif
rgba[i][ACOMP]=255;
}
x+=fxMesa->x_offset;
FX_grLfbReadRegion( fxMesa->currentFB, x, bottom-y, n, 1, 0, data);
for (i=0;i<n;i++) {
GLushort pixel = data[i];
rgba[i][RCOMP] = FX_PixelToR[pixel];
rgba[i][GCOMP] = FX_PixelToG[pixel];
rgba[i][BCOMP] = FX_PixelToB[pixel];
rgba[i][ACOMP] = 255;
}
}
/************************************************************************/
@@ -271,7 +359,7 @@ static void fxDDWriteRGBAPixels(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDWriteRGBAPixels(...)\n");
@@ -279,8 +367,8 @@ static void fxDDWriteRGBAPixels(const GLcontext *ctx,
for(i=0;i<n;i++)
if(mask[i])
LFB_WRITE_SPAN_MESA(fxMesa->currentFB,x[i],bottom-y[i],
/*GR_LFB_SRC_FMT_8888,*/1,/*1,*/0,(void *)rgba[i]);
LFB_WRITE_SPAN_MESA(fxMesa->currentFB, x[i]+fxMesa->x_offset, bottom-y[i],
1, 1, (void *)rgba[i]);
}
static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx,
@@ -289,7 +377,7 @@ static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDWriteMonoRGBAPixels(...)\n");
@@ -297,7 +385,7 @@ static void fxDDWriteMonoRGBAPixels(const GLcontext *ctx,
for(i=0;i<n;i++)
if(mask[i])
FX_grLfbWriteRegion(fxMesa->currentFB,x[i],bottom-y[i],
writeRegionClipped(fxMesa, fxMesa->currentFB,x[i]+fxMesa->x_offset,bottom-y[i],
GR_LFB_SRC_FMT_8888,1,1,0,(void *) &fxMesa->color);
}
@@ -307,31 +395,25 @@ static void fxDDReadRGBAPixels(const GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLushort data;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDReadRGBAPixels(...)\n");
}
for(i=0;i<n;i++)
for(i=0;i<n;i++) {
if(mask[i]) {
grLfbReadRegion(fxMesa->currentFB,x[i],bottom-y[i],1,1,0,&data);
#if FXMESA_USE_ARGB
rgba[i][RCOMP]=(data & 0xF800) >> 8;
rgba[i][GCOMP]=(data & 0x07E0) >> 3;
rgba[i][BCOMP]=(data & 0x001F) >> 8;
#else
rgba[i][RCOMP]=(data & 0x001f) << 3;
rgba[i][GCOMP]=(data & 0x07e0) >> 3;
rgba[i][BCOMP]=(data & 0xf800) >> 8;
#endif
/* the alpha value should be read from the auxiliary buffer when required */
rgba[i][ACOMP]=255;
GLushort pixel;
FX_grLfbReadRegion(fxMesa->currentFB,x[i],bottom-y[i],1,1,0,&pixel);
rgba[i][RCOMP] = FX_PixelToR[pixel];
rgba[i][GCOMP] = FX_PixelToG[pixel];
rgba[i][BCOMP] = FX_PixelToB[pixel];
rgba[i][ACOMP] = 255;
}
}
}
/************************************************************************/
/***** Depth functions *****/
/************************************************************************/
@@ -341,14 +423,15 @@ void fxDDReadDepthSpanFloat(GLcontext *ctx,
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
GLushort data[MAX_WIDTH];
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDReadDepthSpanFloat(...)\n");
}
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,data);
x+=fxMesa->x_offset;
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,data);
/*
convert the read values to float values [0.0 .. 1.0].
@@ -361,13 +444,14 @@ void fxDDReadDepthSpanInt(GLcontext *ctx,
GLuint n, GLint x, GLint y, GLdepth depth[])
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDReadDepthSpanInt(...)\n");
}
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth);
x+=fxMesa->x_offset;
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depth);
}
GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx,
@@ -380,13 +464,14 @@ GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx,
GLubyte *m=mask;
GLuint i;
GLuint passed=0;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDDepthTestSpanGeneric(...)\n");
}
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depthdata);
x+=fxMesa->x_offset;
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,n,1,0,depthdata);
/* switch cases ordered from most frequent to less frequent */
switch (ctx->Depth.Func) {
@@ -578,7 +663,7 @@ GLuint fxDDDepthTestSpanGeneric(GLcontext *ctx,
} /*switch*/
if(passed)
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x,bottom-y,GR_LFB_SRC_FMT_ZA16,n,1,0,depthdata);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x,bottom-y,GR_LFB_SRC_FMT_ZA16,n,1,0,depthdata);
return passed;
}
@@ -590,7 +675,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
GLdepth zval;
GLuint i;
GLint bottom=fxMesa->height-1;
GLint bottom=fxMesa->height+fxMesa->y_offset-1;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDDepthTestPixelsGeneric(...)\n");
@@ -603,10 +688,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] < zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -617,7 +702,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] < zval) {
/* pass */
}
@@ -634,10 +719,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] <= zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -648,7 +733,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] <= zval) {
/* pass */
} else {
@@ -664,10 +749,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] >= zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -678,7 +763,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] >= zval) {
/* pass */
} else {
@@ -694,10 +779,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] > zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -708,7 +793,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] > zval) {
/* pass */
} else {
@@ -724,10 +809,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] != zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -738,7 +823,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] != zval) {
/* pass */
}
@@ -755,10 +840,10 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] == zval) {
/* pass */
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
} else {
/* fail */
mask[i] = 0;
@@ -769,7 +854,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Don't update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],1,1,0,&zval);
FX_grLfbReadRegion(GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],1,1,0,&zval);
if (z[i] == zval) {
/* pass */
} else {
@@ -785,7 +870,7 @@ void fxDDDepthTestPixelsGeneric(GLcontext* ctx,
/* Update Z buffer */
for (i=0; i<n; i++) {
if (mask[i]) {
FX_grLfbWriteRegion(GR_BUFFER_AUXBUFFER,x[i],bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
writeRegionClipped(fxMesa, GR_BUFFER_AUXBUFFER,x[i]+fxMesa->x_offset,bottom-y[i],GR_LFB_SRC_FMT_ZA16,1,1,0,(void*)&z[i]);
}
}
} else {

View File

@@ -1,27 +1,48 @@
/* -*- mode: C; tab-width:8; -*-
fxddtex.c - 3Dfx VooDoo Texture mapping functions
*/
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
* Mesa 3-D graphics library
* Version: 3.1
*
* 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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:
*
* See the file fxapi.c for more informations about authors
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
#ifdef HAVE_CONFIG_H
#include "conf.h"
#endif
@@ -30,6 +51,37 @@
#include "fxdrv.h"
void fxPrintTextureData(tfxTexInfo *ti)
{
fprintf(stderr, "Texture Data:\n");
if (ti->tObj) {
fprintf(stderr, "\tName: %d\n", ti->tObj->Name);
fprintf(stderr, "\tBaseLevel: %d\n", ti->tObj->BaseLevel);
fprintf(stderr, "\tSize: %d x %d\n",
ti->tObj->Image[ti->tObj->BaseLevel]->Width,
ti->tObj->Image[ti->tObj->BaseLevel]->Height);
} else
fprintf(stderr, "\tName: UNNAMED\n");
fprintf(stderr, "\tLast used: %d\n", ti->lastTimeUsed);
fprintf(stderr, "\tTMU: %d\n", ti->whichTMU);
fprintf(stderr, "\t%s\n", (ti->isInTM)?"In TMU":"Not in TMU");
if (ti->tm[0])
fprintf(stderr, "\tMem0: %x-%x\n", ti->tm[0]->startAddr,
ti->tm[0]->endAddr);
if (ti->tm[1])
fprintf(stderr, "\tMem1: %x-%x\n", ti->tm[1]->startAddr,
ti->tm[1]->endAddr);
fprintf(stderr, "\tMipmaps: %d-%d\n", ti->minLevel, ti->maxLevel);
fprintf(stderr, "\tFilters: min %d min %d\n", ti->minFilt, ti->maxFilt);
fprintf(stderr, "\tClamps: s %d t %d\n", ti->sClamp, ti->tClamp);
fprintf(stderr, "\tScales: s %f t %f\n", ti->sScale, ti->tScale);
fprintf(stderr, "\tInt Scales: s %d t %d\n",
ti->int_sScale/0x800000, ti->int_tScale/0x800000);
fprintf(stderr, "\t%s\n", (ti->fixedPalette)?"Fixed palette":"Non fixed palette");
fprintf(stderr, "\t%s\n", (ti->validated)?"Validated":"Not validated");
}
/************************************************************************/
/*************************** Texture Mapping ****************************/
/************************************************************************/
@@ -41,7 +93,7 @@ void fxTexInvalidate(GLcontext *ctx, struct gl_texture_object *tObj)
fxTMMoveOutTM(fxMesa,tObj); /* TO DO: SLOW but easy to write */
ti=(tfxTexInfo *)tObj->DriverData;
ti=fxTMGetTexInfo(tObj);
ti->validated=GL_FALSE;
fxMesa->new_state|=FX_NEW_TEXTURING;
ctx->Driver.RenderStart = fxSetupFXUnits;
@@ -59,12 +111,12 @@ static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa)
}
ti->validated=GL_FALSE;
ti->tmi.isInTM=GL_FALSE;
ti->isInTM=GL_FALSE;
ti->tmi.whichTMU=FX_TMU_NONE;
ti->whichTMU=FX_TMU_NONE;
ti->tmi.tm[FX_TMU0]=NULL;
ti->tmi.tm[FX_TMU1]=NULL;
ti->tm[FX_TMU0]=NULL;
ti->tm[FX_TMU1]=NULL;
ti->minFilt=GR_TEXTUREFILTER_POINT_SAMPLED;
ti->maxFilt=GR_TEXTUREFILTER_BILINEAR;
@@ -72,17 +124,12 @@ static tfxTexInfo *fxAllocTexObjData(fxMesaContext fxMesa)
ti->sClamp=GR_TEXTURECLAMP_WRAP;
ti->tClamp=GR_TEXTURECLAMP_WRAP;
if(fxMesa->haveTwoTMUs) {
ti->mmMode=GR_MIPMAP_NEAREST;
ti->LODblend=FXTRUE;
} else {
ti->mmMode=GR_MIPMAP_NEAREST_DITHER;
ti->LODblend=FXFALSE;
}
ti->mmMode=GR_MIPMAP_NEAREST;
ti->LODblend=FXFALSE;
for(i=0;i<MAX_TEXTURE_LEVELS;i++) {
ti->tmi.mipmapLevel[i].used=GL_FALSE;
ti->tmi.mipmapLevel[i].data=NULL;
ti->mipmapLevel[i].used=GL_FALSE;
ti->mipmapLevel[i].data=NULL;
}
return ti;
@@ -100,13 +147,14 @@ void fxDDTexBind(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj)
if(target!=GL_TEXTURE_2D)
return;
if(!tObj->DriverData)
if (!tObj->DriverData) {
tObj->DriverData=fxAllocTexObjData(fxMesa);
}
ti=(tfxTexInfo *)tObj->DriverData;
ti=fxTMGetTexInfo(tObj);
fxMesa->texBindNumber++;
ti->tmi.lastTimeUsed=fxMesa->texBindNumber;
ti->lastTimeUsed=fxMesa->texBindNumber;
fxMesa->new_state|=FX_NEW_TEXTURING;
ctx->Driver.RenderStart = fxSetupFXUnits;
@@ -141,10 +189,10 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj,
if(target!=GL_TEXTURE_2D)
return;
if(!tObj->DriverData)
if (!tObj->DriverData)
tObj->DriverData=fxAllocTexObjData(fxMesa);
ti=(tfxTexInfo *)tObj->DriverData;
ti=fxTMGetTexInfo(tObj);
switch(pname) {
@@ -219,7 +267,6 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj,
ti->sClamp=GR_TEXTURECLAMP_WRAP;
break;
default:
fprintf(stderr, "BAD CLAMP\n");
break;
}
fxMesa->new_state|=FX_NEW_TEXTURING;
@@ -266,7 +313,7 @@ void fxDDTexParam(GLcontext *ctx, GLenum target, struct gl_texture_object *tObj,
void fxDDTexDel(GLcontext *ctx, struct gl_texture_object *tObj)
{
fxMesaContext fxMesa=(fxMesaContext)ctx->DriverCtx;
tfxTexInfo *ti=(tfxTexInfo *)tObj->DriverData;
tfxTexInfo *ti=fxTMGetTexInfo(tObj);
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: fxDDTexDel(%d,%x)\n",tObj->Name,(GLuint)ti);
@@ -309,10 +356,10 @@ void fxDDTexPalette(GLcontext *ctx, struct gl_texture_object *tObj)
return;
}
if(!tObj->DriverData)
if (!tObj->DriverData)
tObj->DriverData=fxAllocTexObjData(fxMesa);
ti=(tfxTexInfo *)tObj->DriverData;
ti=fxTMGetTexInfo(tObj);
for(i=0;i<tObj->PaletteSize;i++) {
r=tObj->Palette[i*4];
@@ -374,13 +421,10 @@ void fxDDTexUseGlbPalette(GLcontext *ctx, GLboolean state)
if((ctx->Texture.Unit[0].Current==ctx->Texture.Unit[0].CurrentD[2]) &&
(ctx->Texture.Unit[0].Current!=NULL)) {
struct gl_texture_object *tObj=ctx->Texture.Unit[0].Current;
tfxTexInfo *ti;
if(!tObj->DriverData)
if (!tObj->DriverData)
tObj->DriverData=fxAllocTexObjData(fxMesa);
ti=(tfxTexInfo *)tObj->DriverData;
fxTexInvalidate(ctx,tObj);
}
}
@@ -872,10 +916,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image,
if(wscale==hscale==1) {
int i=0;
int lenght=h*w;
int length=h*w;
unsigned short a,l;
while(i++<lenght) {
while(i++<length) {
l=*data++;
a=*data++;
@@ -916,10 +960,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image,
if(wscale==hscale==1) {
int i=0;
int lenght=h*w;
int length=h*w;
unsigned short r,g,b;
while(i++<lenght) {
while(i++<length) {
r=*data++;
g=*data++;
b=*data++;
@@ -966,10 +1010,10 @@ static void fxTexBuildImageMap(const struct gl_texture_image *image,
if(wscale==hscale==1) {
int i=0;
int lenght=h*w;
int length=h*w;
unsigned short r,g,b,a;
while(i++<lenght) {
while(i++<length) {
r=*data++;
g=*data++;
b=*data++;
@@ -1014,21 +1058,23 @@ void fxDDTexImg(GLcontext *ctx, GLenum target,
tfxTexInfo *ti;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: (%d) fxDDTexImg(...,%d,%x,%d,%d...)\n",tObj->Name,
target,internalFormat,image->Width,image->Height);
fprintf(stderr,
"fxmesa: (%d) fxDDTexImg(...,level=%d,target=%d,format=%x,width=%d,height=%d...)\n",
tObj->Name, level, target, internalFormat, image->Width,
image->Height);
}
if(target!=GL_TEXTURE_2D)
return;
if(!tObj->DriverData)
if (!tObj->DriverData)
tObj->DriverData=fxAllocTexObjData(fxMesa);
ti=(tfxTexInfo *)tObj->DriverData;
ti=fxTMGetTexInfo(tObj);
if(fxIsTexSupported(target,internalFormat,image)) {
GrTextureFormat_t gldformat;
tfxMipMapLevel *mml=&ti->tmi.mipmapLevel[level];
tfxMipMapLevel *mml=&ti->mipmapLevel[level];
fxTexGetFormat(internalFormat,&gldformat,NULL);
@@ -1039,7 +1085,7 @@ void fxDDTexImg(GLcontext *ctx, GLenum target,
fxTexBuildImageMap(image,internalFormat,&(mml->data),
&(mml->translated));
if(ti->validated && ti->tmi.isInTM)
if(ti->validated && ti->isInTM)
fxTMReloadMipMapLevel(fxMesa,tObj,level);
else
fxTexInvalidate(ctx,tObj);
@@ -1239,18 +1285,20 @@ void fxDDTexSubImg(GLcontext *ctx, GLenum target,
tfxMipMapLevel *mml;
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"fxmesa: (%d) fxDDTexSubImg(...,%d,%x,%d,%d...)\n",tObj->Name,
target,internalFormat,image->Width,image->Height);
fprintf(stderr,
"fxmesa: (%d) fxDDTexSubImg(level=%d,target=%d,format=%x,width=%d,height=%d)\n",
tObj->Name, level, target, internalFormat, image->Width,
image->Height);
}
if(target!=GL_TEXTURE_2D)
return;
if(!tObj->DriverData)
if (!tObj->DriverData)
return;
ti=(tfxTexInfo *)tObj->DriverData;
mml=&ti->tmi.mipmapLevel[level];
ti=fxTMGetTexInfo(tObj);
mml=&ti->mipmapLevel[level];
fxTexGetFormat(internalFormat,&gldformat,NULL);
@@ -1278,7 +1326,7 @@ void fxDDTexSubImg(GLcontext *ctx, GLenum target,
fxTexBuildSubImageMap(image,internalFormat,xoffset,yoffset,
width,height,mml->data);
if(ti->validated && ti->tmi.isInTM)
if(ti->validated && ti->isInTM)
fxTMReloadSubMipMapLevel(fxMesa,tObj,level,yoffset,height);
else
fxTexInvalidate(ctx,tObj);

View File

@@ -1,27 +1,48 @@
/* -*- mode: C; tab-width:8; -*-
fxdrv.h - 3Dfx VooDoo driver types
*/
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
* Mesa 3-D graphics library
* Version: 3.1
*
* 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.
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
* 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.
* 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:
*
* See the file fxapi.c for more informations about authors
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
#ifndef FXDRV_H
#define FXDRV_H
@@ -54,14 +75,18 @@
#include "clip.h"
#include "vbrender.h"
#ifdef XF86DRI
typedef struct tfxMesaContext *fxMesaContext;
#else
#include "GL/fxmesa.h"
#endif
#include "fxglidew.h"
/* use gl/gl.h GLAPI/GLAPIENTRY/GLCALLBACK in place of WINGDIAPI/APIENTRY/CALLBACK, */
/* these are defined in mesa gl/gl.h - tjump@spgs.com */
#if 0
#if defined(MESA_DEBUG) && 0
extern void fx_sanity_triangle( GrVertex *, GrVertex *, GrVertex * );
#define grDrawTriangle fx_sanity_triangle
#endif
@@ -140,17 +165,17 @@ typedef struct {
#endif
#endif
#define FX_VB_COLOR(fxm, color) \
do { \
if (sizeof(GLint) == 4*sizeof(GLubyte)) { \
if (fxm->constColor != *(GLuint*)color) { \
fxm->constColor = *(GLuint*)color; \
grConstantColorValue(FXCOLOR4(color)); \
} \
} else { \
grConstantColorValue(FXCOLOR4(color)); \
} \
} while (0)
#define FX_VB_COLOR(fxm, color) \
do { \
if (sizeof(GLint) == 4*sizeof(GLubyte)) { \
if (fxm->constColor != *(GLuint*)color) { \
fxm->constColor = *(GLuint*)color; \
FX_grConstantColorValue(FXCOLOR4(color)); \
} \
} else { \
FX_grConstantColorValue(FXCOLOR4(color)); \
} \
} while (0)
#define GOURAUD(x) { \
GLubyte *col = VB->ColorPtr->data[(x)]; \
@@ -237,16 +262,13 @@ do { \
typedef void (*tfxRenderVBFunc)(GLcontext *);
typedef struct tfxTMFreeListNode {
struct tfxTMFreeListNode *next;
FxU32 startAddress, endAddress;
} tfxTMFreeNode;
typedef struct tfxTMAllocListNode {
struct tfxTMAllocListNode *next;
FxU32 startAddress, endAddress;
struct gl_texture_object *tObj;
} tfxTMAllocNode;
/*
Memory range from startAddr to endAddr-1
*/
typedef struct MemRange_t {
struct MemRange_t *next;
FxU32 startAddr, endAddr;
} MemRange;
typedef struct {
GLsizei width, height;
@@ -256,19 +278,17 @@ typedef struct {
GLboolean translated, used;
} tfxMipMapLevel;
typedef struct {
typedef struct tfxTexInfo_t {
struct tfxTexInfo *next;
struct gl_texture_object *tObj;
GLuint lastTimeUsed;
FxU32 whichTMU;
tfxTMAllocNode *tm[FX_NUM_TMU];
GLboolean isInTM;
tfxMipMapLevel mipmapLevel[MAX_TEXTURE_LEVELS];
GLboolean isInTM;
} tfxTMInfo;
typedef struct {
tfxTMInfo tmi;
MemRange *tm[FX_NUM_TMU];
GLint minLevel, maxLevel;
GLint baseLevelInternalFormat;
@@ -384,14 +404,27 @@ struct tfxMesaVertexBuffer {
#define FX_DRIVER_DATA(vb) ((struct tfxMesaVertexBuffer *)((vb)->driver_data))
#define FX_CONTEXT(ctx) ((fxMesaContext)((ctx)->DriverCtx))
#define FX_TEXTURE_DATA(t) ((tfxTexInfo *) ((t)->Current->DriverData))
#define FX_TEXTURE_DATA(t) fxTMGetTexInfo((t)->Current)
#if defined(XFree86Server) || defined(GLX_DIRECT_RENDERING)
#include "tdfx_init.h"
#else
#define DRI_FX_CONTEXT
#define BEGIN_BOARD_LOCK()
#define END_BOARD_LOCK()
#define BEGIN_CLIP_LOOP()
#define END_CLIP_LOOP()
#endif
/* These lookup table are used to extract RGB values in [0,255] from
* 16-bit pixel values.
*/
extern GLubyte FX_PixelToR[0x10000];
extern GLubyte FX_PixelToG[0x10000];
extern GLubyte FX_PixelToB[0x10000];
struct tfxMesaContext {
GuTexPalette glbPalette;
@@ -412,7 +445,6 @@ struct tfxMesaContext {
tfxUnitsState unitsState;
tfxUnitsState restoreUnitsState; /* saved during multipass */
GLuint tmu_source[FX_NUM_TMU];
GLuint tex_dest[MAX_TEXTURE_UNITS];
GLuint setupindex;
@@ -438,8 +470,8 @@ struct tfxMesaContext {
GLint tmuSrc;
GLuint lastUnitsMode;
GLuint freeTexMem[FX_NUM_TMU];
tfxTMFreeNode *tmFree[FX_NUM_TMU];
tfxTMAllocNode *tmAlloc[FX_NUM_TMU];
MemRange *tmPool;
MemRange *tmFree[FX_NUM_TMU];
GLenum fogTableMode;
GLfloat fogDensity;
@@ -477,10 +509,19 @@ struct tfxMesaContext {
FX_GrContext_t glideContext;
GLfloat wscale;
int x_offset;
int y_offset;
int y_delta;
int screen_width;
int screen_height;
int initDone;
int clipMinX;
int clipMaxX;
int clipMinY;
int clipMaxY;
int needClip;
DRI_FX_CONTEXT
};
typedef void (*tfxSetupFunc)(struct vertex_buffer *, GLuint, GLuint);
@@ -522,6 +563,7 @@ extern void fxSetupDDSpanPointers(GLcontext *);
extern void fxDDBufferSize(GLcontext *, GLuint *, GLuint *);
extern void fxPrintTextureData(tfxTexInfo *ti);
extern void fxDDTexEnv(GLcontext *, GLenum, const GLfloat *);
extern void fxDDTexImg(GLcontext *, GLenum, struct gl_texture_object *,
GLint, GLint, const struct gl_texture_image *);
@@ -571,6 +613,7 @@ extern void fxDDRenderVBIndirectDirect( struct vertex_buffer *VB );
extern void fxDDInitExtensions( GLcontext *ctx );
#define fxTMGetTexInfo(o) ((tfxTexInfo*)((o)->DriverData))
extern void fxTMInit(fxMesaContext ctx);
extern void fxTMClose(fxMesaContext ctx);
extern void fxTMMoveInTM(fxMesaContext, struct gl_texture_object *, GLint);
@@ -622,4 +665,14 @@ extern void fxDDDoRenderVB( struct vertex_buffer *VB );
extern int fxDDInitFxMesaContext( fxMesaContext fxMesa );
extern void fxSetScissorValues(GLcontext *ctx);
extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,
struct gl_texture_object *tObj,
GLint where);
extern void fxSetupTexture_NoLock(GLcontext *ctx);
extern void fxSetupTexture(GLcontext *ctx);
extern void fxInitPixelTables(GLboolean bgrOrder);
#endif

View File

@@ -1,28 +1,47 @@
/* $Id: fxglidew.c,v 1.3 1999/10/05 19:26:54 miklos Exp $ */
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
#ifdef HAVE_CONFIG_H
#include "conf.h"
@@ -36,8 +55,7 @@
#include <stdlib.h>
#include <string.h>
FxI32 FX_grGetInteger(FxU32 pname)
static FxI32 FX_grGetInteger_NoLock(FxU32 pname)
{
#if !defined(FX_GLIDE3)
switch (pname)
@@ -49,7 +67,7 @@ FxI32 FX_grGetInteger(FxU32 pname)
case FX_LFB_PIXEL_PIPE:
return FXFALSE;
case FX_PENDING_BUFFERSWAPS:
return grBufferNumPending();
return grBufferNumPending();
default:
if (MESA_VERBOSE&VERBOSE_DRIVER) {
fprintf(stderr,"Wrong parameter in FX_grGetInteger!\n");
@@ -74,12 +92,74 @@ FxI32 FX_grGetInteger(FxU32 pname)
}
return -1;
}
grGet(grname,4,&result);
return result;
#endif
}
FxI32 FX_grGetInteger(FxU32 pname)
{
int result;
BEGIN_BOARD_LOCK();
result=FX_grGetInteger_NoLock(pname);
END_BOARD_LOCK();
return result;
}
FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,
GrLfbWriteMode_t writeMode, GrOriginLocation_t origin,
FxBool pixelPipeline, GrLfbInfo_t *info ) {
FxBool result;
BEGIN_BOARD_LOCK();
result=grLfbLock(type, buffer, writeMode, origin, pixelPipeline, info);
END_BOARD_LOCK();
return result;
}
FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo *info) {
FxU32 result;
BEGIN_BOARD_LOCK();
result=grTexTextureMemRequired(evenOdd, info);
END_BOARD_LOCK();
return result;
}
FxU32 FX_grTexMinAddress(GrChipID_t tmu) {
FxU32 result;
BEGIN_BOARD_LOCK();
result=grTexMinAddress(tmu);
END_BOARD_LOCK();
return result;
}
extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu) {
FxU32 result;
BEGIN_BOARD_LOCK();
result=grTexMaxAddress(tmu);
END_BOARD_LOCK();
return result;
}
FxBool FX_grSstControl(FxU32 code)
{
#if defined(FX_GLIDE3)
(void) code;
return 1; /* OK? */
#else
FxU32 result;
BEGIN_BOARD_LOCK();
result = grSstControl(code);
END_BOARD_LOCK();
return result;
#endif
}
#if defined(FX_GLIDE3)
@@ -90,39 +170,33 @@ void FX_grGammaCorrectionValue(float val)
/* ToDo */
}
void FX_grSstControl(int par)
{
(void)par;
/* ToDo */
}
int FX_getFogTableSize(void)
{
int result;
BEGIN_BOARD_LOCK();
grGet(GR_FOG_TABLE_ENTRIES,sizeof(int),(void*)&result);
END_BOARD_LOCK();
return result;
}
int FX_getGrStateSize(void)
{
int result;
BEGIN_BOARD_LOCK();
grGet(GR_GLIDE_STATE_SIZE,sizeof(int),(void*)&result);
END_BOARD_LOCK();
return result;
}
int FX_grBufferNumPending()
{
int result;
grGet(GR_PENDING_BUFFERSWAPS,sizeof(int),(void*)&result);
return result;
}
int FX_grSstScreenWidth()
{
FxI32 result[4];
BEGIN_BOARD_LOCK();
grGet(GR_VIEWPORT,sizeof(FxI32)*4,result);
END_BOARD_LOCK();
return result[2];
}
@@ -130,15 +204,19 @@ int FX_grSstScreenWidth()
int FX_grSstScreenHeight()
{
FxI32 result[4];
BEGIN_BOARD_LOCK();
grGet(GR_VIEWPORT,sizeof(FxI32)*4,result);
END_BOARD_LOCK();
return result[3];
}
void FX_grGlideGetVersion(char *buf)
{
strcpy(buf,grGetString(GR_VERSION));
BEGIN_BOARD_LOCK();
strcpy(buf,grGetString(GR_VERSION));
END_BOARD_LOCK();
}
void FX_grSstPerfStats(GrSstPerfStats_t *st)
@@ -154,74 +232,91 @@ void FX_grSstPerfStats(GrSstPerfStats_t *st)
void FX_grAADrawLine(GrVertex *a,GrVertex *b)
{
/* ToDo */
BEGIN_CLIP_LOOP();
grDrawLine(a,b);
END_CLIP_LOOP();
}
void FX_grAADrawPoint(GrVertex *a)
{
BEGIN_CLIP_LOOP();
grDrawPoint(a);
END_CLIP_LOOP();
}
#if FX_USE_PARGB
void FX_setupGrVertexLayout(void)
{
grReset(GR_VERTEX_PARAMETER);
BEGIN_BOARD_LOCK();
grReset(GR_VERTEX_PARAMETER);
grCoordinateSpace(GR_WINDOW_COORDS);
grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grCoordinateSpace(GR_WINDOW_COORDS);
grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_PARGB, GR_VERTEX_PARGB_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
END_BOARD_LOCK();
}
#else /* FX_USE_PARGB */
void FX_setupGrVertexLayout(void)
{
grReset(GR_VERTEX_PARAMETER);
BEGIN_BOARD_LOCK();
grReset(GR_VERTEX_PARAMETER);
grCoordinateSpace(GR_WINDOW_COORDS);
grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_RGB, GR_VERTEX_R_OFFSET << 2, GR_PARAM_ENABLE);
/* grVertexLayout(GR_PARAM_Z, GR_VERTEX_Z_OFFSET << 2, GR_PARAM_ENABLE); */
grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grCoordinateSpace(GR_WINDOW_COORDS);
grVertexLayout(GR_PARAM_XY, GR_VERTEX_X_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_RGB, GR_VERTEX_R_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_A, GR_VERTEX_A_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q, GR_VERTEX_OOW_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Z, GR_VERTEX_OOZ_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_ST0, GR_VERTEX_SOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_ST1, GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
grVertexLayout(GR_PARAM_Q1, GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
END_BOARD_LOCK();
}
#endif
void FX_grHints(GrHint_t hintType, FxU32 hintMask)
void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask)
{
switch(hintType) {
case GR_HINT_STWHINT:
{
if (hintMask & GR_STWHINT_W_DIFF_TMU0)
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_Q0,GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
if (hintMask & GR_STWHINT_ST_DIFF_TMU1)
grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
switch(hintType) {
case GR_HINT_STWHINT:
{
if (hintMask & GR_STWHINT_W_DIFF_TMU0)
grVertexLayout(GR_PARAM_Q0, GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_Q0,GR_VERTEX_OOW_TMU0_OFFSET << 2, GR_PARAM_DISABLE);
if (hintMask & GR_STWHINT_ST_DIFF_TMU1)
grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_ST1,GR_VERTEX_SOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
if (hintMask & GR_STWHINT_W_DIFF_TMU1)
grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
}
}
if (hintMask & GR_STWHINT_W_DIFF_TMU1)
grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_ENABLE);
else
grVertexLayout(GR_PARAM_Q1,GR_VERTEX_OOW_TMU1_OFFSET << 2, GR_PARAM_DISABLE);
}
}
}
void FX_grHints(GrHint_t hintType, FxU32 hintMask) {
BEGIN_BOARD_LOCK();
FX_grHints_NoLock(hintType, hintMask);
END_BOARD_LOCK();
}
int FX_grSstQueryHardware(GrHwConfiguration *config)
{
int i,j;
int numFB;
BEGIN_BOARD_LOCK();
grGet(GR_NUM_BOARDS,4,(void*)&(config->num_sst));
if (config->num_sst == 0)
return 0;
@@ -246,9 +341,76 @@ int FX_grSstQueryHardware(GrHwConfiguration *config)
config->SSTs[i].sstBoard.VoodooConfig.tmuConfig[j].tmuRam /= 1024*1024;
}
}
END_BOARD_LOCK();
return 1;
}
#else
int FX_grSstScreenWidth()
{
int i;
BEGIN_BOARD_LOCK();
i = grSstScreenWidth();
END_BOARD_LOCK();
return i;
}
int FX_grSstScreenHeight()
{
int i;
BEGIN_BOARD_LOCK();
i = grSstScreenHeight();
END_BOARD_LOCK();
return i;
}
int FX_grSstQueryHardware(GrHwConfiguration *c)
{
int i;
BEGIN_BOARD_LOCK();
i = grSstQueryHardware(c);
END_BOARD_LOCK();
return i;
}
FX_GrContext_t FX_grSstWinOpen( FxU32 hWnd,
GrScreenResolution_t screen_resolution,
GrScreenRefresh_t refresh_rate,
GrColorFormat_t color_format,
GrOriginLocation_t origin_location,
int nColBuffers,
int nAuxBuffers)
{
FX_GrContext_t i;
BEGIN_BOARD_LOCK();
i = grSstWinOpen( hWnd,
screen_resolution,
refresh_rate,
color_format,
origin_location,
nColBuffers,
nAuxBuffers );
#if 0
fprintf(stderr,
"grSstWinOpen( win %d res %d ref %d fmt %d\n"
" org %d ncol %d naux %d )\n"
" ==> %d\n",
hWnd,
screen_resolution,
refresh_rate,
color_format,
origin_location,
nColBuffers,
nAuxBuffers,
i);
#endif
END_BOARD_LOCK();
return i;
}
#endif
#else

View File

@@ -1,26 +1,48 @@
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
#ifndef __FX_GLIDE_WARPER__
#define __FX_GLIDE_WARPER__
@@ -201,23 +223,23 @@ typedef struct
typedef struct
{
float x, y; /* X and Y in screen space */
float ooz; /* 65535/Z (used for Z-buffering) */
float oow; /* 1/W (used for W-buffering, texturing) */
float r, g, b, a; /* R, G, B, A [0..255.0] */
float z; /* Z is ignored */
float x, y, z; /* X, Y, and Z of scrn space -- Z is ignored */
float r, g, b; /* R, G, B, ([0..255.0]) */
float ooz; /* 65535/Z (used for Z-buffering) */
float a; /* Alpha [0..255.0] */
float oow; /* 1/W (used for W-buffering, texturing) */
GrTmuVertex tmuvtx[GLIDE_NUM_TMU];
} GrVertex;
#define GR_VERTEX_X_OFFSET 0
#define GR_VERTEX_Y_OFFSET 1
#define GR_VERTEX_OOZ_OFFSET 2
#define GR_VERTEX_OOW_OFFSET 3
#define GR_VERTEX_R_OFFSET 4
#define GR_VERTEX_G_OFFSET 5
#define GR_VERTEX_B_OFFSET 6
#define GR_VERTEX_Z_OFFSET 2
#define GR_VERTEX_R_OFFSET 3
#define GR_VERTEX_G_OFFSET 4
#define GR_VERTEX_B_OFFSET 5
#define GR_VERTEX_OOZ_OFFSET 6
#define GR_VERTEX_A_OFFSET 7
#define GR_VERTEX_Z_OFFSET 8
#define GR_VERTEX_OOW_OFFSET 8
#define GR_VERTEX_SOW_TMU0_OFFSET 9
#define GR_VERTEX_TOW_TMU0_OFFSET 10
#define GR_VERTEX_OOW_TMU0_OFFSET 11
@@ -233,29 +255,89 @@ typedef struct
* Glide2 functions for Glide3
*/
#if defined(FX_GLIDE3)
#define FX_grTexDownloadTable(TMU,type,data) grTexDownloadTable(type,data)
#define FX_grTexDownloadTable(TMU,type,data) \
do { \
BEGIN_BOARD_LOCK(); \
grTexDownloadTable(type,data); \
END_BOARD_LOCK(); \
} while (0);
#define FX_grTexDownloadTable_NoLock(TMU,type,data) \
grTexDownloadTable(type, data)
#else
#define FX_grTexDownloadTable(TMU,type,data) grTexDownloadTable(TMU,type,data)
#define FX_grTexDownloadTable(TMU,type,data) \
do { \
BEGIN_BOARD_LOCK(); \
grTexDownloadTable(TMU,type,data); \
END_BOARD_LOCK(); \
} while (0);
#define FX_grTexDownloadTable_NoLock grTexDownloadTable
#endif
/*
* Flush
*/
#if defined(FX_GLIDE3)
#define FX_grFlush grFlush
#define FX_grFlush() \
do { \
BEGIN_BOARD_LOCK(); \
grFlush(); \
END_BOARD_LOCK(); \
} while (0)
#else
#define FX_grFlush grSstIdle
#define FX_grFlush() \
do { \
BEGIN_BOARD_LOCK(); \
grSstIdle(); \
END_BOARD_LOCK(); \
} while (0)
#endif
#define FX_grFinish() \
do { \
BEGIN_BOARD_LOCK(); \
grFinish(); \
END_BOARD_LOCK(); \
} while (0)
/*
* Write region: ToDo possible exploit the PixelPipe parameter.
*/
#if defined(FX_GLIDE3)
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data)
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
do { \
BEGIN_BOARD_LOCK(); \
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,FXFALSE,src_stride,src_data); \
END_BOARD_LOCK(); \
} while(0)
#else
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data)
#define FX_grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data) \
do { \
BEGIN_BOARD_LOCK(); \
grLfbWriteRegion(dst_buffer,dst_x,dst_y,src_format,src_width,src_height,src_stride,src_data); \
END_BOARD_LOCK(); \
} while (0)
#endif
/*
* Read region
*/
#define FX_grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data) \
do { \
BEGIN_BOARD_LOCK(); \
grLfbReadRegion(src_buffer,src_x,src_y,src_width,src_height,dst_stride,dst_data); \
END_BOARD_LOCK(); \
} while (0);
/*
* Draw triangle
*/
#define FX_grDrawTriangle(a,b,c) \
do { \
BEGIN_CLIP_LOOP(); \
grDrawTriangle(a,b,c); \
END_CLIP_LOOP(); \
} while (0)
/*
* For Lod/LodLog2 conversion.
*/
@@ -288,12 +370,14 @@ typedef struct
#else
#define FX_largeLodValue(info) ((int)(info).largeLod)
#endif
#define FX_largeLodValue_NoLock FX_largeLodValue
#if defined(FX_GLIDE3)
#define FX_smallLodValue(info) ((int)(GR_LOD_256-(info).smallLodLog2))
#else
#define FX_smallLodValue(info) ((int)(info).smallLod)
#endif
#define FX_smallLodValue_NoLock FX_smallLodValue
#if defined(FX_GLIDE3)
#define FX_valueToLod(val) ((GrLOD_t)(GR_LOD_256-val))
@@ -304,13 +388,9 @@ typedef struct
/*
* ScreenWidth/Height stuff.
*/
#if defined(FX_GLIDE3)
extern int FX_grSstScreenWidth();
extern int FX_grSstScreenHeight();
#else
#define FX_grSstScreenWidth() grSstScreenWidth()
#define FX_grSstScreenHeight() grSstScreenHeight()
#endif
extern int FX_grSstScreenWidth(void);
extern int FX_grSstScreenHeight(void);
/*
@@ -319,7 +399,12 @@ typedef struct
#if defined(FX_GLIDE3)
extern void FX_grGlideGetVersion(char *buf);
#else
#define FX_grGlideGetVersion grGlideGetVersion
#define FX_grGlideGetVersion(b) \
do { \
BEGIN_BOARD_LOCK(); \
grGlideGetVersion(b); \
END_BOARD_LOCK(); \
} while (0)
#endif
/*
* Performance statistics
@@ -327,25 +412,33 @@ typedef struct
#if defined(FX_GLIDE3)
extern void FX_grSstPerfStats(GrSstPerfStats_t *st);
#else
#define FX_grSstPerfStats grSstPerfStats
#define FX_grSstPerfStats(s) \
do { \
BEGIN_BOARD_LOCK(); \
grSstPerfStats(s); \
END_BOARD_LOCK(); \
} while (0)
#endif
/*
* Hardware Query
*/
#if defined(FX_GLIDE3)
extern int FX_grSstQueryHardware(GrHwConfiguration *config);
#else
#define FX_grSstQueryHardware grSstQueryHardware
#endif
/*
* GrHints
*/
#if defined(FX_GLIDE3)
extern void FX_grHints_NoLock(GrHint_t hintType, FxU32 hintMask);
extern void FX_grHints(GrHint_t hintType, FxU32 hintMask);
#else
#define FX_grHints grHints
#define FX_grHints(t,m) \
do { \
BEGIN_BOARD_LOCK(); \
grHints(t, m); \
END_BOARD_LOCK(); \
} while(0)
#define FX_grHints_NoLock grHints
#endif
/*
* Antialiashed line+point drawing.
@@ -353,13 +446,23 @@ typedef struct
#if defined(FX_GLIDE3)
extern void FX_grAADrawLine(GrVertex *a,GrVertex *b);
#else
#define FX_grAADrawLine grAADrawLine
#define FX_grAADrawLine(a,b) \
do { \
BEGIN_CLIP_LOOP(); \
grAADrawLine(a,b); \
END_CLIP_LOOP(); \
} while (0)
#endif
#if defined(FX_GLIDE3)
extern void FX_grAADrawPoint(GrVertex *a);
#else
#define FX_grAADrawPoint grAADrawPoint
#define FX_grAADrawPoint(a) \
do { \
BEGIN_CLIP_LOOP(); \
grAADrawPoint(a); \
END_CLIP_LOOP(); \
} while (0)
#endif
/*
@@ -373,31 +476,345 @@ typedef struct
/*
* grSstControl stuff
*/
#if defined(FX_GLIDE3)
extern void FX_grSstControl(int par);
#else
#define FX_grSstControl grSstControl
#endif
extern FxBool FX_grSstControl(FxU32 code);
/*
* grGammaCorrectionValue
*/
#if defined(FX_GLIDE3)
extern void FX_grGammaCorrectionValue(float val);
#else
#define FX_grGammaCorrectionValue grGammaCorrectionValue
#define FX_grGammaCorrectionValue(v) \
do { \
BEGIN_BOARD_LOCK(); \
grGammaCorrectionValue(v) \
END_BOARD_LOCK(); \
} while (0)
#endif
/*
* WinOpen/Close.
*/
#if defined(FX_GLIDE3)
#define FX_grSstWinOpen(hWnd,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers) \
grSstWinOpen(-1,screen_resolution,refresh_rate,color_format,origin_location,nColBuffers,nAuxBuffers)
#define FX_grSstWinClose grSstWinClose
#define FX_grSstWinClose(w) \
do { \
BEGIN_BOARD_LOCK(); \
grSstWinClose(w); \
END_BOARD_LOCK(); \
} while (0)
#else
#define FX_grSstWinOpen grSstWinOpen
#define FX_grSstWinClose(win) grSstWinClose()
#define FX_grSstWinClose(w) \
do { \
BEGIN_BOARD_LOCK(); \
grSstWinClose(); \
END_BOARD_LOCK(); \
} while (0)
#endif
extern FX_GrContext_t FX_grSstWinOpen( FxU32 hWnd,
GrScreenResolution_t screen_resolution,
GrScreenRefresh_t refresh_rate,
GrColorFormat_t color_format,
GrOriginLocation_t origin_location,
int nColBuffers,
int nAuxBuffers);
#define FX_grDrawLine(v1, v2) \
do { \
BEGIN_CLIP_LOOP(); \
grDrawLine(v1, v2); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grDrawPoint(p) \
do { \
BEGIN_CLIP_LOOP(); \
grDrawPoint(p); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grDitherMode(m) \
do { \
BEGIN_BOARD_LOCK(); \
grDitherMode(m); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grRenderBuffer(b) \
do { \
BEGIN_BOARD_LOCK(); \
grRenderBuffer(b); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grBufferClear(c, a, d) \
do { \
BEGIN_CLIP_LOOP(); \
grBufferClear(c, a, d); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grDepthMask(m) \
do { \
BEGIN_BOARD_LOCK(); \
grDepthMask(m); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grColorMask(c, a) \
do { \
BEGIN_BOARD_LOCK(); \
grColorMask(c, a); \
END_BOARD_LOCK(); \
} while (0)
extern FxBool FX_grLfbLock(GrLock_t type, GrBuffer_t buffer,
GrLfbWriteMode_t writeMode,
GrOriginLocation_t origin, FxBool pixelPipeline,
GrLfbInfo_t *info );
#define FX_grLfbUnlock(t, b) \
do { \
BEGIN_BOARD_LOCK(); \
grLfbUnlock(t, b); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grConstantColorValue(v) \
do { \
BEGIN_BOARD_LOCK(); \
grConstantColorValue(v); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grConstantColorValue_NoLock grConstantColorValue
#define FX_grAADrawTriangle(a, b, c, ab, bc, ca) \
do { \
BEGIN_CLIP_LOOP(); \
grAADrawTriangle(a, b, c, ab, bc, ca); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grAlphaBlendFunction(rs, rd, as, ad) \
do { \
BEGIN_BOARD_LOCK(); \
grAlphaBlendFunction(rs, rd, as, ad); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grAlphaCombine(func, fact, loc, oth, inv) \
do { \
BEGIN_BOARD_LOCK(); \
grAlphaCombine(func, fact, loc, oth, inv); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grAlphaCombine_NoLock grAlphaCombine
#define FX_grAlphaTestFunction(f) \
do { \
BEGIN_BOARD_LOCK(); \
grAlphaTestFunction(f); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grAlphaTestReferenceValue(v) \
do { \
BEGIN_BOARD_LOCK(); \
grAlphaTestReferenceValue(v); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grClipWindow(minx, miny, maxx, maxy) \
do { \
BEGIN_BOARD_LOCK(); \
grClipWindow(minx, miny, maxx, maxy); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grClipWindow_NoLock grClipWindow
#define FX_grColorCombine(func, fact, loc, oth, inv) \
do { \
BEGIN_BOARD_LOCK(); \
grColorCombine(func, fact, loc, oth, inv); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grColorCombine_NoLock grColorCombine
#define FX_grCullMode(m) \
do { \
BEGIN_BOARD_LOCK(); \
grCullMode(m); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grDepthBiasLevel(lev) \
do { \
BEGIN_BOARD_LOCK(); \
grDepthBiasLevel(lev); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grDepthBufferFunction(func) \
do { \
BEGIN_BOARD_LOCK(); \
grDepthBufferFunction(func); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grFogColorValue(c) \
do { \
BEGIN_BOARD_LOCK(); \
grFogColorValue(c); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grFogMode(m) \
do { \
BEGIN_BOARD_LOCK(); \
grFogMode(m); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grFogTable(t) \
do { \
BEGIN_BOARD_LOCK(); \
grFogTable(t); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexClampMode(t, sc, tc) \
do { \
BEGIN_BOARD_LOCK(); \
grTexClampMode(t, sc, tc); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexClampMode_NoLock grTexClampMode
#define FX_grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv) \
do { \
BEGIN_BOARD_LOCK(); \
grTexCombine(t, rfunc, rfact, afunc, afact, rinv, ainv); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexCombine_NoLock grTexCombine
#define FX_grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d) \
do { \
BEGIN_BOARD_LOCK(); \
grTexDownloadMipMapLevel(t, sa, tlod, llod, ar, f, eo, d); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexDownloadMipMapLevel_NoLock grTexDownloadMipMapLevel
#define FX_grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \
do { \
BEGIN_BOARD_LOCK(); \
grTexDownloadMipMapLevelPartial(t, sa, tlod, llod, ar, f, eo, d, s, e); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexFilterMode(t, minf, magf) \
do { \
BEGIN_BOARD_LOCK(); \
grTexFilterMode(t, minf, magf); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexFilterMode_NoLock grTexFilterMode
extern FxU32 FX_grTexMinAddress(GrChipID_t tmu);
extern FxU32 FX_grTexMaxAddress(GrChipID_t tmu);
#define FX_grTexMipMapMode(t, m, lod) \
do { \
BEGIN_BOARD_LOCK(); \
grTexMipMapMode(t, m, lod); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexMipMapMode_NoLock grTexMipMapMode
#define FX_grTexSource(t, sa, eo, i) \
do { \
BEGIN_BOARD_LOCK(); \
grTexSource(t, sa, eo, i); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grTexSource_NoLock grTexSource
extern FxU32 FX_grTexTextureMemRequired(FxU32 evenOdd, GrTexInfo *info);
#define FX_grTexTextureMemRequired_NoLock grTexTextureMemRequired
#define FX_grGlideGetState(s) \
do { \
BEGIN_BOARD_LOCK(); \
grGlideGetState(s); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grDRIBufferSwap(i) \
do { \
BEGIN_BOARD_LOCK(); \
grDRIBufferSwap(i); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grSstSelect(b) \
do { \
BEGIN_BOARD_LOCK(); \
grSstSelect(b); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grSstSelect_NoLock grSstSelect
#define FX_grGlideSetState(s) \
do { \
BEGIN_BOARD_LOCK(); \
grGlideSetState(s); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grDepthBufferMode(m) \
do { \
BEGIN_BOARD_LOCK(); \
grDepthBufferMode(m); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grLfbWriteColorFormat(f) \
do { \
BEGIN_BOARD_LOCK(); \
grLfbWriteColorFormat(f); \
END_BOARD_LOCK(); \
} while (0)
#define FX_grDrawVertexArray(m, c, p) \
do { \
BEGIN_CLIP_LOOP(); \
grDrawVertexArray(m, c, p); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grGlideShutdown() \
do { \
BEGIN_CLIP_LOOP(); \
grGlideShutdown(); \
END_CLIP_LOOP(); \
} while (0)
#define FX_grGlideInit_NoLock grGlideInit
#define FX_grSstWinOpen_NoLock grSstWinOpen
extern int FX_getFogTableSize(void);
extern int FX_getGrStateSize(void);
#endif /* __FX_GLIDE_WARPER__ */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,25 +1,53 @@
/* -*- mode: C; tab-width:8; c-basic-offset:2 -*- */
/*
* 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.
*
*
* Original Mesa / 3Dfx device driver (C) 1999 David Bucciarelli, by the
* terms stated above.
*
* Thank you for your contribution, David!
*
* Please make note of the above copyright/license statement. If you
* contributed code or bug fixes to this code under the previous (GNU
* Library) license and object to the new license, your code will be
* removed at your request. Please see the Mesa docs/COPYRIGHT file
* for more information.
*
* Additional Mesa/3Dfx driver developers:
* Daryll Strauss <daryll@precisioninsight.com>
* Keith Whitwell <keith@precisioninsight.com>
*
* See fxapi.h for more revision/author details.
*/
/* fxwgl.c - Microsoft wgl functions emulation for
* 3Dfx VooDoo/Mesa interface
*/
/*
* 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.
*
* See the file fxapi.c for more informations about authors
*
*/
#ifdef __WIN32__
@@ -243,11 +271,11 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam)
static int moving = 0;
if (!moving) {
if(fxQueryHardware()!=GR_SSTTYPE_VOODOO) {
if(!grSstControl(GR_CONTROL_RESIZE)) {
if(!FX_grSstControl(GR_CONTROL_RESIZE)) {
moving = 1;
SetWindowPos(hwnd, 0, 0, 0, 300, 300, SWP_NOMOVE|SWP_NOZORDER);
moving = 0;
if(!grSstControl(GR_CONTROL_RESIZE)) {
if(!FX_grSstControl(GR_CONTROL_RESIZE)) {
/*MessageBox(0,_T("Error changing windowsize"),_T("fxMESA"),MB_OK);*/
PostMessage(hWND,WM_CLOSE,0,0);
}
@@ -255,7 +283,7 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam)
}
/* Do the clipping in the glide library */
grClipWindow(0,0,grSstScreenWidth(),grSstScreenHeight());
FX_grClipWindow(0,0,FX_grSstScreenWidth(),FX_grSstScreenHeight());
/* And let the new size set in the context */
fxMesaUpdateScreenSize(ctx);
}
@@ -269,21 +297,22 @@ LONG GLAPIENTRY __wglMonitor(HWND hwnd,UINT message,UINT wParam,LONG lParam)
BOOL fMinimized = (BOOL) HIWORD(wParam);
if((fActive == WA_INACTIVE) || fMinimized)
grSstControl(GR_CONTROL_DEACTIVATE);
FX_grSstControl(GR_CONTROL_DEACTIVATE);
else
grSstControl(GR_CONTROL_ACTIVATE);
FX_grSstControl(GR_CONTROL_ACTIVATE);
}
break;
case WM_SHOWWINDOW:
break;
case WM_SYSKEYDOWN:
case WM_SYSCHAR:
if(gdiWindowHackEna && (VK_RETURN == wParam)) {
if(gdiWindowHack) {
gdiWindowHack = GL_FALSE;
grSstControl(GR_CONTROL_ACTIVATE);
FX_grSstControl(GR_CONTROL_ACTIVATE);
} else {
gdiWindowHack = GL_TRUE;
grSstControl(GR_CONTROL_DEACTIVATE);
FX_grSstControl(GR_CONTROL_DEACTIVATE);
}
}
break;
@@ -382,7 +411,7 @@ HGLRC GLAPIENTRY wglCreateContext(HDC hdc)
gdiWindowHack = GL_FALSE;
else {
gdiWindowHack = GL_TRUE;
grSstControl(GR_CONTROL_DEACTIVATE);
FX_grSstControl(GR_CONTROL_DEACTIVATE);
}
}
} else {
@@ -779,7 +808,7 @@ BOOL GLAPIENTRY wglSwapBuffers(HDC hdc)
HDC hdcDIBSection = CreateCompatibleDC(hdcScreen);
HBITMAP holdBitmap = (HBITMAP) SelectObject(hdcDIBSection, dibHBM);
grLfbReadRegion(GR_BUFFER_FRONTBUFFER, 0, 0,
FX_grLfbReadRegion(GR_BUFFER_FRONTBUFFER, 0, 0,
width, height,
width * 2,
dibSurfacePtr);

View File

@@ -1,4 +1,4 @@
/* $Id: fakeglx.c,v 1.13 1999/11/11 01:29:28 brianp Exp $ */
/* $Id: fakeglx.c,v 1.12.2.4 1999/12/11 09:20:03 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -45,7 +45,16 @@
#include "glxheader.h"
#ifdef HAVE_CONFIG_H
#include "conf.h"
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include "GL/gl.h"
#include "GL/xmesa.h"
#include "context.h"
#include "config.h"
@@ -258,7 +267,7 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
&& (v->gl_visual->StencilBits >= stencil_size || stencil_size == 0)
&& (v->gl_visual->AccumBits >= accum_size || accum_size == 0)) {
/* now either compare XVisualInfo pointers or visual IDs */
if ((!comparePointers && v->vishandle->visualid == vinfo->visualid)
if ((!comparePointers && v->visinfo->visualid == vinfo->visualid)
|| (comparePointers && v->vishandle == vinfo)) {
return v;
}
@@ -1047,7 +1056,6 @@ Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
{
if (ctx && drawable) {
XMesaBuffer buffer;
XMesaContext xmctx = (XMesaContext) ctx;
if (drawable==MakeCurrent_PrevDrawable && ctx==MakeCurrent_PrevContext) {
buffer = MakeCurrent_PrevBuffer;
@@ -1057,7 +1065,7 @@ Bool Fake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx )
}
if (!buffer) {
/* drawable must be a new window! */
buffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, drawable, ctx );
buffer = XMesaCreateWindowBuffer2( ctx->xm_visual, drawable, ctx );
if (!buffer) {
/* Out of memory, or context/drawable depth mismatch */
return False;
@@ -1422,10 +1430,10 @@ static const char *get_extensions( void )
#ifdef FX
const char *fx = getenv("MESA_GLX_FX");
if (fx && fx[0] != 'd') {
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_EXT_get_proc_address GLX_MESA_set_3dfx_mode";
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_MESA_set_3dfx_mode GLX_ARB_get_proc_address";
}
#endif
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GL_EXT_get_proc_address";
return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_ARB_get_proc_address";
}
@@ -1510,37 +1518,62 @@ GLboolean Fake_glXSet3DfxModeMESA( GLint mode )
#if 0
/*GLfunction Fake_glXGetProcAddress( const GLubyte *procName )*/
void (*Fake_glXGetProcAddress( const GLubyte *procName ))()
{
typedef void (*GLfunction)();
typedef void (*gl_function)();
struct proc {
const char *name;
GLfunction address;
gl_function address;
};
static struct proc procTable[] = {
{ "glXGetProcAddressEXT", (GLfunction) glXGetProcAddressEXT },
{ "glXCreateGLXPixmapMESA", (GLfunction) glXCreateGLXPixmapMESA },
{ "glXReleaseBuffersMESA", (GLfunction) glXReleaseBuffersMESA },
{ "glXCopySubBufferMESA", (GLfunction) glXCopySubBufferMESA },
{ "glXSet3DfxModeMESA", (GLfunction) glXSet3DfxModeMESA },
/* NOTE: GLX_SGI_video_sync not implemented in Mesa */
/* GLX 1.0 functions */
{ "glXChooseVisual", (gl_function) glXChooseVisual },
{ "glXCopyContext", (gl_function) glXCopyContext },
{ "glXCreateContext", (gl_function) glXCreateContext },
{ "glXCreateGLXPixmap", (gl_function) glXCreateGLXPixmap },
{ "glXDestroyContext", (gl_function) glXDestroyContext },
{ "glXDestroyGLXPixmap", (gl_function) glXDestroyGLXPixmap },
{ "glXGetConfig", (gl_function) glXGetConfig },
{ "glXGetCurrentContext", (gl_function) glXGetCurrentContext },
{ "glXGetCurrentDrawable", (gl_function) glXGetCurrentDrawable },
{ "glXIsDirect", (gl_function) glXIsDirect },
{ "glXMakeCurrent", (gl_function) glXMakeCurrent },
{ "glXQueryExtension", (gl_function) glXQueryExtension },
{ "glXQueryVersion", (gl_function) glXQueryVersion },
{ "glXSwapBuffers", (gl_function) glXSwapBuffers },
{ "glXUseXFont", (gl_function) glXUseXFont },
{ "glXWaitGL", (gl_function) glXWaitGL },
{ "glXWaitX", (gl_function) glXWaitX },
/* GLX 1.1 functions */
{ "glXGetClientString", (gl_function) glXGetClientString },
{ "glXQueryExtensionsString", (gl_function) glXQueryExtensionsString },
{ "glXQueryServerString", (gl_function) glXQueryServerString },
/* Extensions */
{ "glXGetProcAddressARB", (gl_function) glXGetProcAddressARB },
{ "glXCreateGLXPixmapMESA", (gl_function) glXCreateGLXPixmapMESA },
{ "glXReleaseBuffersMESA", (gl_function) glXReleaseBuffersMESA },
{ "glXCopySubBufferMESA", (gl_function) glXCopySubBufferMESA },
{ "glXSet3DfxModeMESA", (gl_function) glXSet3DfxModeMESA },
{ "glXGetVideoSyncSGI", (gl_function) glXGetVideoSyncSGI },
{ "glXWaitVideoSyncSGI", (gl_function) glXWaitVideoSyncSGI },
{ NULL, NULL } /* end of list token */
};
GLuint i;
/* First, look for core library functions */
GLfunction f = (GLfunction) gl_get_proc_address(procName);
gl_function f = (gl_function) gl_get_proc_address(procName);
if (f)
return f;
/* Second, look for GLX funtion */
for (i = 0; procTable[i].address; i++) {
if (strcmp((const char *) procName, procTable[i].name) == 0)
return (GLfunction) procTable[i].address;
return procTable[i].address;
}
return NULL;
}
#endif

View File

@@ -1,4 +1,4 @@
/* $Id: glxapi.c,v 1.4 1999/10/27 09:50:10 brianp Exp $ */
/* $Id: glxapi.c,v 1.4.2.1 1999/12/10 13:45:39 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -419,8 +419,7 @@ GLboolean glXSet3DfxModeMESA( GLint mode )
#if 0 /* spec for this not finalized yet */
void (*glXGetProcAddressEXT( const GLubyte *procName ))()
void (*glXGetProcAddressARB( const GLubyte *procName ))()
{
#ifdef REALGLX
return NULL;
@@ -428,4 +427,4 @@ void (*glXGetProcAddressEXT( const GLubyte *procName ))()
return Fake_glXGetProcAddress( procName );
#endif
}
#endif

View File

@@ -1,8 +1,8 @@
/* $Id: xfonts.c,v 1.3 1999/11/11 01:29:28 brianp Exp $ */
/* $Id: xfonts.c,v 1.2.2.1 1999/12/12 17:03:07 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -44,7 +44,7 @@
#include "GL/xmesa.h"
#include "context.h"
#include "fakeglx.h"
#include "mem.h"
#include "macros.h"
#include "xmesaP.h"
/* Some debugging info. */
@@ -338,7 +338,8 @@ void Fake_glXUseXFont( Font font, int first, int count, int listbase )
width = ch->rbearing - ch->lbearing;
height = ch->ascent + ch->descent;
x0 = - ch->lbearing;
y0 = ch->descent - 1;
y0 = ch->descent - 0; /* XXX used to subtract 1 here */
/* but that caused a conformace failure */
dx = ch->width;
dy = 0;

View File

@@ -1,7 +1,7 @@
# $Id: Makefile.X11,v 1.7 1999/11/11 01:22:28 brianp Exp $
# $Id: Makefile.X11,v 1.6.2.1 1999/11/16 15:25:50 brianp Exp $
# Mesa 3-D graphics library
# Version: 3.3
# Version: 3.1
# Copyright (C) 1995-1999 Brian Paul
# Makefile for core library
@@ -18,13 +18,13 @@ VPATH = RCS
INCDIR = ../include
LIBDIR = ../lib
CORE_SOURCES = \
glapi.c \
glapinoop.c \
accum.c \
alpha.c \
alphabuf.c \
api1.c \
api2.c \
apiext.c \
attrib.c \
bbox.c \
bitmap.c \
@@ -37,7 +37,6 @@ CORE_SOURCES = \
cva.c \
debug_xform.c \
depth.c \
dispatch.c \
dlist.c \
drawpix.c \
enable.c \
@@ -50,19 +49,18 @@ CORE_SOURCES = \
glmisc.c \
hash.c \
image.c \
imaging.c \
light.c \
lines.c \
logic.c \
masking.c \
matrix.c \
mem.c \
mmath.c \
mthreads.c \
pb.c \
pixel.c \
pipeline.c \
points.c \
pointers.c \
polygon.c \
quads.c \
rastpos.c \
@@ -222,7 +220,8 @@ X86/3dnow.o: X86/3dnow.c
# @echo "Specify a target configuration"
clean:
-rm *.o *~ */*.o */*~
-rm *.o *~ */*.o */*~ *.lo *.la
-rm -rf .libs
targets: $(LIBDIR)/$(GL_LIB)

View File

@@ -1,4 +1,4 @@
/* $Id: accum.c,v 1.11 1999/11/11 01:22:25 brianp Exp $ */
/* $Id: accum.c,v 1.10.2.1 1999/11/27 01:35:42 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -25,13 +25,22 @@
*/
/* $XFree86: xc/lib/GL/mesa/src/accum.c,v 1.3 1999/04/04 00:20:17 dawes Exp $ */
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "accum.h"
#include "context.h"
#include "mem.h"
#include "macros.h"
#include "masking.h"
#include "span.h"
#include "types.h"
@@ -92,10 +101,9 @@ void gl_alloc_accum_buffer( GLcontext *ctx )
void
_mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
void gl_ClearAccum( GLcontext *ctx,
GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glAccum");
ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
@@ -131,10 +139,8 @@ static void rescale_accum( GLcontext *ctx )
void
_mesa_Accum( GLenum op, GLfloat value )
void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
{
GET_CURRENT_CONTEXT(ctx);
GLuint xpos, ypos, width, height, width4;
GLfloat acc_scale;
GLubyte rgba[MAX_WIDTH][4];
@@ -338,7 +344,7 @@ _mesa_Accum( GLenum op, GLfloat value )
static GLchan multTable[32768];
static GLfloat prevMult = 0.0;
GLuint j;
const GLint max = 256 / mult;
const GLint max = (GLint) (256 / mult);
if (mult != prevMult) {
assert(max <= 32768);
for (j = 0; j < max; j++)

View File

@@ -1,4 +1,4 @@
/* $Id: attrib.c,v 1.11 1999/11/11 01:22:25 brianp Exp $ */
/* $Id: attrib.c,v 1.10.2.3 1999/12/12 18:30:47 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -25,16 +25,23 @@
*/
#include <stdlib.h>
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <stdio.h>
#else
#include "GL/xf86glx.h"
#endif
#include "attrib.h"
#include "context.h"
#include "glmisc.h"
#include "enable.h"
#include "enums.h"
#include "mem.h"
#include "macros.h"
#include "simple_list.h"
#include "texstate.h"
#include "types.h"
@@ -85,7 +92,11 @@ static void copy_texobj_state( struct gl_texture_object *dest,
dest->P = src->P;
dest->M = src->M;
dest->MinMagThresh = src->MinMagThresh;
dest->Palette = src->Palette;
memcpy( dest->Palette, src->Palette,
sizeof(GLubyte) * MAX_TEXTURE_PALETTE_SIZE * 4 );
dest->PaletteSize = src->PaletteSize;
dest->PaletteIntFormat = src->PaletteIntFormat;
dest->PaletteFormat = src->PaletteFormat;
dest->Complete = src->Complete;
dest->SampleFunc = src->SampleFunc;
}
@@ -417,10 +428,11 @@ void gl_PopAttrib( GLcontext* ctx )
GLubyte oldAlphaRef = ctx->Color.AlphaRef;
GLenum oldBlendSrc = ctx->Color.BlendSrcRGB;
GLenum oldBlendDst = ctx->Color.BlendDstRGB;
GLenum oldLogicOp = ctx->Color.LogicOp;
MEMCPY( &ctx->Color, attr->data,
sizeof(struct gl_colorbuffer_attrib) );
if (ctx->Color.DrawBuffer != oldDrawBuffer) {
_mesa_DrawBuffer( ctx->Color.DrawBuffer);
gl_DrawBuffer(ctx, ctx->Color.DrawBuffer);
}
if ((ctx->Color.AlphaFunc != oldAlphaFunc ||
ctx->Color.AlphaRef != oldAlphaRef) &&
@@ -432,6 +444,9 @@ void gl_PopAttrib( GLcontext* ctx )
ctx->Driver.BlendFunc)
(*ctx->Driver.BlendFunc)( ctx, ctx->Color.BlendSrcRGB,
ctx->Color.BlendDstRGB);
if (ctx->Color.LogicOp != oldLogicOp &&
ctx->Driver.LogicOpcode)
ctx->Driver.LogicOpcode( ctx, ctx->Color.LogicOp );
}
break;
case GL_CURRENT_BIT:
@@ -460,7 +475,7 @@ void gl_PopAttrib( GLcontext* ctx )
#define TEST_AND_UPDATE(VALUE, NEWVALUE, ENUM) \
if ((VALUE) != (NEWVALUE)) { \
_mesa_set_enable( ctx, ENUM, (NEWVALUE) ); \
gl_set_enable( ctx, ENUM, (NEWVALUE) ); \
}
TEST_AND_UPDATE(ctx->Color.AlphaEnabled, enable->AlphaTest, GL_ALPHA_TEST);
@@ -470,7 +485,7 @@ void gl_PopAttrib( GLcontext* ctx )
GLuint i;
for (i=0;i<MAX_CLIP_PLANES;i++) {
if (ctx->Transform.ClipEnabled[i] != enable->ClipPlane[i])
_mesa_set_enable( ctx, (GLenum) (GL_CLIP_PLANE0 + i), enable->ClipPlane[i] );
gl_set_enable( ctx, (GLenum) (GL_CLIP_PLANE0 + i), enable->ClipPlane[i] );
}
}
TEST_AND_UPDATE(ctx->Light.ColorMaterialEnabled, enable->ColorMaterial, GL_COLOR_MATERIAL);
@@ -585,7 +600,7 @@ void gl_PopAttrib( GLcontext* ctx )
(*ctx->Driver.Fogfv)( ctx, GL_FOG_INDEX, &index );
(*ctx->Driver.Fogfv)( ctx, GL_FOG_COLOR, ctx->Fog.Color );
}
ctx->Enabled &= ENABLE_FOG;
ctx->Enabled &= ~ENABLE_FOG;
if (ctx->Fog.Enabled) ctx->Enabled |= ENABLE_FOG;
}
break;
@@ -613,7 +628,13 @@ void gl_PopAttrib( GLcontext* ctx )
}
(*ctx->Driver.Enable)( ctx, GL_LIGHTING, ctx->Light.Enabled );
}
ctx->Enabled &= ENABLE_LIGHT;
if (ctx->Light.ShadeModel == GL_FLAT)
ctx->TriangleCaps |= DD_FLATSHADE;
else
ctx->TriangleCaps &= ~DD_FLATSHADE;
if (ctx->Driver.ShadeModel)
(*ctx->Driver.ShadeModel)(ctx, ctx->Light.ShadeModel);
ctx->Enabled &= ~ENABLE_LIGHT;
if (ctx->Light.Enabled && !is_empty_list(&ctx->Light.EnabledList))
ctx->Enabled |= ENABLE_LIGHT;
break;
@@ -731,8 +752,8 @@ void gl_PopAttrib( GLcontext* ctx )
struct gl_viewport_attrib *v =
(struct gl_viewport_attrib *)attr->data;
_mesa_Viewport( v->X, v->Y, v->Width, v->Height );
_mesa_DepthRange( v->Near, v->Far );
gl_Viewport( ctx, v->X, v->Y, v->Width, v->Height );
gl_DepthRange( ctx, v->Near, v->Far );
break;
}
default:
@@ -846,37 +867,3 @@ void gl_PopClientAttrib( GLcontext *ctx )
ctx->NewState = NEW_ALL;
}
void
_mesa_PushAttrib( GLbitfield mask )
{
GET_CURRENT_CONTEXT(ctx);
gl_PushAttrib(ctx, mask);
}
void
_mesa_PopAttrib( void )
{
GET_CURRENT_CONTEXT(ctx);
gl_PopAttrib(ctx);
}
void
_mesa_PushClientAttrib( GLbitfield mask )
{
GET_CURRENT_CONTEXT(ctx);
gl_PushClientAttrib(ctx, mask);
}
void
_mesa_PopClientAttrib( void )
{
GET_CURRENT_CONTEXT(ctx);
gl_PopClientAttrib(ctx);
}

View File

@@ -1,8 +1,8 @@
/* $Id: clip.c,v 1.5 1999/11/11 01:22:25 brianp Exp $ */
/* $Id: clip.c,v 1.4.2.1 1999/11/25 16:51:24 keithw Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,10 +25,19 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#else
#include "GL/xf86glx.h"
#endif
#include "clip.h"
#include "context.h"
#include "macros.h"
@@ -42,6 +51,15 @@
#define CLIP_RGBA0 0x1
#define CLIP_RGBA1 0x2
#define CLIP_TEX0 0x4
#define CLIP_TEX1 0x8
#define CLIP_INDEX0 0x10
#define CLIP_INDEX1 0x20
#define CLIP_FOG_COORD 0x40
/* Linear interpolation between A and B: */
#define LINTERP( T, A, B ) ( (A) + (T) * ( (B) - (A) ) )
@@ -58,16 +76,7 @@ do { \
} while(0)
#define CLIP_RGBA0 0x1
#define CLIP_RGBA1 0x2
#define CLIP_TEX0 0x4
#define CLIP_TEX1 0x8
#define CLIP_INDEX0 0x10
#define CLIP_INDEX1 0x20
static clip_interp_func clip_interp_tab[0x40];
static clip_interp_func clip_interp_tab[0x80];
#define IND 0
#define NAME clip_nil
@@ -113,6 +122,50 @@ static clip_interp_func clip_interp_tab[0x40];
#define NAME clipINDEX0_INDEX1
#include "interp_tmp.h"
#define IND (CLIP_FOG_COORD)
#define NAME clip_FOG
#include "interp_tmp.h"
#define IND (CLIP_RGBA0|CLIP_FOG_COORD)
#define NAME clipRGBA0_FOG
#include "interp_tmp.h"
#define IND (CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
#define NAME clipRGBA0_RGBA1_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD)
#define NAME clipTEX0_RGBA0_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
#define NAME clipTEX0_RGBA0_RGBA1_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD)
#define NAME clipTEX1_TEX0_RGBA0_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX0|CLIP_FOG_COORD)
#define NAME clipTEX0_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_FOG_COORD)
#define NAME clipTEX1_TEX0_FOG
#include "interp_tmp.h"
#define IND (CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD)
#define NAME clipTEX1_TEX0_RGBA0_RGBA1_FOG
#include "interp_tmp.h"
#define IND (CLIP_INDEX0|CLIP_FOG_COORD)
#define NAME clipINDEX0_FOG
#include "interp_tmp.h"
#define IND (CLIP_INDEX0|CLIP_INDEX1|CLIP_FOG_COORD)
#define NAME clipINDEX0_INDEX1_FOG
#include "interp_tmp.h"
@@ -122,17 +175,9 @@ static clip_interp_func clip_interp_tab[0x40];
void
_mesa_ClipPlane( GLenum plane, const GLdouble *eq )
void gl_ClipPlane( GLcontext* ctx, GLenum plane, const GLfloat *equation )
{
GET_CURRENT_CONTEXT(ctx);
GLint p;
GLfloat equation[4];
equation[0] = eq[0];
equation[1] = eq[1];
equation[2] = eq[2];
equation[3] = eq[3];
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glClipPlane");
@@ -183,10 +228,8 @@ void gl_update_userclip( GLcontext *ctx )
}
}
void
_mesa_GetClipPlane( GLenum plane, GLdouble *equation )
void gl_GetClipPlane( GLcontext* ctx, GLenum plane, GLdouble *equation )
{
GET_CURRENT_CONTEXT(ctx);
GLint p;
ASSERT_OUTSIDE_BEGIN_END(ctx, "glGetClipPlane");
@@ -353,6 +396,8 @@ void gl_update_clipmask( GLcontext *ctx )
mask |= CLIP_INDEX1;
}
if (ctx->FogMode == FOG_FRAGMENT && (ctx->TriangleCaps & DD_CLIP_FOG_COORD))
mask |= CLIP_FOG_COORD;
ctx->ClipInterpFunc = clip_interp_tab[mask];
ctx->poly_clip_tab = gl_poly_clip_tab[0];
@@ -448,11 +493,22 @@ void gl_init_clip(void)
clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0] = clipTEX1_TEX0_RGBA0;
clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1] =
clipTEX1_TEX0_RGBA0_RGBA1;
clip_interp_tab[CLIP_TEX0] = clipTEX0;
clip_interp_tab[CLIP_TEX1|CLIP_TEX0] = clipTEX1_TEX0;
clip_interp_tab[CLIP_INDEX0] = clipINDEX0;
clip_interp_tab[CLIP_INDEX0|CLIP_INDEX1] = clipINDEX0_INDEX1;
clip_interp_tab[CLIP_FOG_COORD] = clip_FOG;
clip_interp_tab[CLIP_RGBA0|CLIP_FOG_COORD] = clipRGBA0_FOG;
clip_interp_tab[CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] = clipRGBA0_RGBA1_FOG;
clip_interp_tab[CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD] = clipTEX0_RGBA0_FOG;
clip_interp_tab[CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] = clipTEX0_RGBA0_RGBA1_FOG;
clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_FOG_COORD] = clipTEX1_TEX0_RGBA0_FOG;
clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_RGBA0|CLIP_RGBA1|CLIP_FOG_COORD] =
clipTEX1_TEX0_RGBA0_RGBA1_FOG;
clip_interp_tab[CLIP_TEX0|CLIP_FOG_COORD] = clipTEX0_FOG;
clip_interp_tab[CLIP_TEX1|CLIP_TEX0|CLIP_FOG_COORD] = clipTEX1_TEX0_FOG;
clip_interp_tab[CLIP_INDEX0|CLIP_FOG_COORD] = clipINDEX0_FOG;
clip_interp_tab[CLIP_INDEX0|CLIP_INDEX1|CLIP_FOG_COORD] = clipINDEX0_INDEX1_FOG;
}

View File

@@ -1,8 +1,8 @@
/* $Id: context.c,v 1.19 1999/11/11 01:22:25 brianp Exp $ */
/* $Id: context.c,v 1.18.2.6 1999/12/04 21:13:44 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,6 +25,8 @@
*/
/* $XFree86: xc/lib/GL/mesa/src/context.c,v 1.4 1999/04/04 00:20:21 dawes Exp $ */
/*
* If multi-threading is enabled (-DTHREADS) then each thread has it's
* own rendering context. A thread obtains the pointer to its GLcontext
@@ -34,34 +36,43 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "accum.h"
#include "alphabuf.h"
#include "api.h"
#include "clip.h"
#include "context.h"
#include "cva.h"
#include "depth.h"
#include "dispatch.h"
#include "dlist.h"
#include "eval.h"
#include "enums.h"
#include "extensions.h"
#include "fog.h"
#include "glapi.h"
#include "get.h"
#include "hash.h"
#include "light.h"
#include "lines.h"
#include "dlist.h"
#include "macros.h"
#include "matrix.h"
#include "mem.h"
#include "mmath.h"
#include "pb.h"
#include "pipeline.h"
#include "points.h"
#include "pointers.h"
#include "quads.h"
#include "shade.h"
#include "simple_list.h"
@@ -85,6 +96,40 @@
#endif
/*
* Memory allocation functions. Called via the MALLOC, CALLOC and
* FREE macros when DEBUG symbol is defined.
* You might want to set breakpoints on these functions or plug in
* other memory allocation functions. The Mesa sources should only
* use the MALLOC and FREE macros (which could also be overriden).
*
* XXX these functions should probably go into a new glmemory.c file.
*/
/*
* Allocate memory (uninitialized)
*/
void *gl_malloc(size_t bytes)
{
return malloc(bytes);
}
/*
* Allocate memory and initialize to zero.
*/
void *gl_calloc(size_t bytes)
{
return calloc(1, bytes);
}
/*
* Free memory
*/
void gl_free(void *ptr)
{
free(ptr);
}
/**********************************************************************/
/***** Context and Thread management *****/
@@ -113,7 +158,7 @@ static void set_thread_context( GLcontext *ctx ) {
#else
/* One Current Context pointer for all threads in the address space */
GLcontext *_mesa_current_context = NULL;
GLcontext *CC = NULL;
struct immediate *CURRENT_INPUT = NULL;
#endif /*THREADS*/
@@ -534,6 +579,7 @@ static void init_1d_map( struct gl_1d_map *map, int n, const float *initial )
for (i=0;i<n;i++)
map->Points[i] = initial[i];
}
map->Retain = GL_FALSE;
}
@@ -552,20 +598,10 @@ static void init_2d_map( struct gl_2d_map *map, int n, const float *initial )
for (i=0;i<n;i++)
map->Points[i] = initial[i];
}
map->Retain = GL_FALSE;
}
static void init_palette( struct gl_palette *p )
{
p->Table[0] = 255;
p->Table[1] = 255;
p->Table[2] = 255;
p->Table[3] = 255;
p->Size = 1;
p->IntFormat = GL_RGBA;
p->Format = GL_RGBA;
}
/*
* Initialize a gl_context structure to default values.
@@ -882,9 +918,9 @@ static void initialize_context( GLcontext *ctx )
ctx->Stencil.ZPassFunc = GL_KEEP;
ctx->Stencil.ZFailFunc = GL_KEEP;
ctx->Stencil.Ref = 0;
ctx->Stencil.ValueMask = 0xff;
ctx->Stencil.ValueMask = STENCIL_MAX;
ctx->Stencil.Clear = 0;
ctx->Stencil.WriteMask = 0xff;
ctx->Stencil.WriteMask = STENCIL_MAX;
/* Texture group */
ctx->Texture.CurrentUnit = 0; /* multitexture */
@@ -894,7 +930,14 @@ static void initialize_context( GLcontext *ctx )
for (i=0; i<MAX_TEXTURE_UNITS; i++)
init_texture_unit( ctx, i );
init_palette(&ctx->Texture.Palette);
ctx->Texture.SharedPalette = GL_FALSE;
ctx->Texture.Palette[0] = 255;
ctx->Texture.Palette[1] = 255;
ctx->Texture.Palette[2] = 255;
ctx->Texture.Palette[3] = 255;
ctx->Texture.PaletteSize = 1;
ctx->Texture.PaletteIntFormat = GL_RGBA;
ctx->Texture.PaletteFormat = GL_RGBA;
/* Transformation group */
ctx->Transform.MatrixMode = GL_MODELVIEW;
@@ -1028,6 +1071,7 @@ static void initialize_context( GLcontext *ctx )
/* For debug/development only */
ctx->NoRaster = getenv("MESA_NO_RASTER") ? GL_TRUE : GL_FALSE;
ctx->FirstTimeCurrent = GL_TRUE;
/* Dither disable */
ctx->NoDither = getenv("MESA_NO_DITHER") ? GL_TRUE : GL_FALSE;
@@ -1289,10 +1333,12 @@ GLcontext *gl_create_context( GLvisual *visual,
ctx->Driver.ReadDepthSpanFloat = gl_read_depth_span_float;
ctx->Driver.ReadDepthSpanInt = gl_read_depth_span_int;
#ifdef PROFILE
init_timings( ctx );
#endif
#ifdef GL_VERSION_1_1
if (!alloc_proxy_textures(ctx)) {
free_shared_state(ctx, ctx->Shared);
FREE(ctx->VB);
@@ -1300,11 +1346,10 @@ GLcontext *gl_create_context( GLvisual *visual,
FREE(ctx);
return NULL;
}
#endif
/* setup API dispatch tables */
_mesa_init_exec_table( &ctx->Exec );
_mesa_init_dlist_table( &ctx->Save );
ctx->CurrentDispatch = &ctx->Exec;
gl_init_api_function_pointers( ctx );
ctx->API = ctx->Exec; /* GL_EXECUTE is default */
return ctx;
}
@@ -1418,8 +1463,8 @@ void gl_destroy_context( GLcontext *ctx )
FREE( (void *) ctx );
#ifndef THREADS
if (ctx == _mesa_current_context) {
_mesa_current_context = NULL;
if (ctx==CC) {
CC = NULL;
CURRENT_INPUT = NULL;
}
#endif
@@ -1488,42 +1533,52 @@ void gl_destroy_framebuffer( GLframebuffer *buffer )
/*
* Set the current context, binding the given frame buffer to the context.
*/
void gl_make_current( GLcontext *newCtx, GLframebuffer *buffer )
void gl_make_current( GLcontext *ctx, GLframebuffer *buffer )
{
GET_CURRENT_CONTEXT(oldCtx);
GET_CONTEXT;
/* Flush the old context
*/
if (oldCtx) {
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(oldCtx, "gl_make_current");
if (CC) {
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(CC, "gl_make_current");
}
#ifdef THREADS
/* TODO: unbind old buffer from context? */
set_thread_context( newCtx );
set_thread_context( ctx );
#else
if (oldCtx && oldCtx->Buffer) {
if (CC && CC->Buffer) {
/* unbind frame buffer from context */
oldCtx->Buffer = NULL;
CC->Buffer = NULL;
}
_mesa_current_context = newCtx;
if (newCtx) {
SET_IMMEDIATE(newCtx, newCtx->input);
CC = ctx;
if (ctx) {
SET_IMMEDIATE(ctx, ctx->input);
}
#endif
if (newCtx)
_glapi_set_dispatch(newCtx->CurrentDispatch);
else
_glapi_set_dispatch(NULL); /* none current */
if (MESA_VERBOSE) fprintf(stderr, "gl_make_current()\n");
if (newCtx && buffer) {
/* TODO: check if newCtx and buffer's visual match??? */
newCtx->Buffer = buffer; /* Bind the frame buffer to the context */
newCtx->NewState = NEW_ALL; /* just to be safe */
gl_update_state( newCtx );
if (ctx && buffer) {
/* TODO: check if ctx and buffer's visual match??? */
ctx->Buffer = buffer; /* Bind the frame buffer to the context */
ctx->NewState = NEW_ALL; /* just to be safe */
gl_update_state( ctx );
}
/* We can use this to help debug user's problems. Tell the to set
* the MESA_INFO env variable before running their app. Then the
* first time each context is made current we'll print some useful
* information.
*/
if (ctx && ctx->FirstTimeCurrent) {
if (getenv("MESA_INFO")) {
fprintf(stderr, "Mesa GL_VERSION = %s\n", (char *) gl_GetString(ctx, GL_VERSION));
fprintf(stderr, "Mesa GL_RENDERER = %s\n", (char *) gl_GetString(ctx, GL_RENDERER));
fprintf(stderr, "Mesa GL_VENDOR = %s\n", (char *) gl_GetString(ctx, GL_VENDOR));
fprintf(stderr, "Mesa GL_EXTENSIONS = %s\n", (char *) gl_GetString(ctx, GL_EXTENSIONS));
}
ctx->FirstTimeCurrent = GL_FALSE;
}
}
@@ -1536,7 +1591,7 @@ GLcontext *gl_get_current_context( void )
#ifdef THREADS
return gl_get_thread_context();
#else
return _mesa_current_context;
return CC;
#endif
}
@@ -1620,73 +1675,26 @@ void gl_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
}
/*
* This should be called by device drivers just before they do a
* swapbuffers. Any pending rendering commands will be executed.
*/
void
_mesa_swapbuffers(GLcontext *ctx)
{
FLUSH_VB( ctx, "swap buffers" );
}
/*
* Return pointer to this context's current API dispatch table.
* It'll either be the immediate-mode execute dispatcher or the
* display list compile dispatcher.
* Someday a GLS library or OpenGL-like debugger may call this function
* to register it's own set of API entry points.
* Input: ctx - the context to set API pointers for
* api - if NULL, restore original API pointers
* else, set API function table to this table.
*/
struct _glapi_table *
_mesa_get_dispatch(GLcontext *ctx)
void gl_set_api_table( GLcontext *ctx, const struct gl_api_table *api )
{
return ctx->CurrentDispatch;
if (api) {
MEMCPY( &ctx->API, api, sizeof(struct gl_api_table) );
}
else {
MEMCPY( &ctx->API, &ctx->Exec, sizeof(struct gl_api_table) );
}
}
void
_mesa_ResizeBuffersMESA( void )
{
GET_CURRENT_CONTEXT(ctx);
GLuint buf_width, buf_height;
if (MESA_VERBOSE & VERBOSE_API)
fprintf(stderr, "glResizeBuffersMESA\n");
/* ask device driver for size of output buffer */
(*ctx->Driver.GetBufferSize)( ctx, &buf_width, &buf_height );
/* see if size of device driver's color buffer (window) has changed */
if (ctx->Buffer->Width == (GLint) buf_width &&
ctx->Buffer->Height == (GLint) buf_height)
return;
ctx->NewState |= NEW_RASTER_OPS; /* to update scissor / window bounds */
/* save buffer size */
ctx->Buffer->Width = buf_width;
ctx->Buffer->Height = buf_height;
/* Reallocate other buffers if needed. */
if (ctx->Visual->DepthBits>0) {
/* reallocate depth buffer */
(*ctx->Driver.AllocDepthBuffer)( ctx );
}
if (ctx->Visual->StencilBits>0) {
/* reallocate stencil buffer */
gl_alloc_stencil_buffer( ctx );
}
if (ctx->Visual->AccumBits>0) {
/* reallocate accum buffer */
gl_alloc_accum_buffer( ctx );
}
if (ctx->Visual->SoftwareAlpha) {
gl_alloc_alpha_buffers( ctx );
}
}
/**********************************************************************/
/***** Miscellaneous functions *****/
@@ -1809,6 +1817,66 @@ void gl_error( GLcontext *ctx, GLenum error, const char *s )
/*
* Execute a glGetError command
*/
GLenum gl_GetError( GLcontext *ctx )
{
GLenum e = ctx->ErrorValue;
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL( ctx, "glGetError", (GLenum) 0);
if (MESA_VERBOSE & VERBOSE_API)
fprintf(stderr, "glGetError <-- %s\n", gl_lookup_enum_by_nr(e));
ctx->ErrorValue = (GLenum) GL_NO_ERROR;
return e;
}
void gl_ResizeBuffersMESA( GLcontext *ctx )
{
GLuint buf_width, buf_height;
if (MESA_VERBOSE & VERBOSE_API)
fprintf(stderr, "glResizeBuffersMESA\n");
/* ask device driver for size of output buffer */
(*ctx->Driver.GetBufferSize)( ctx, &buf_width, &buf_height );
/* see if size of device driver's color buffer (window) has changed */
if (ctx->Buffer->Width == (GLint) buf_width &&
ctx->Buffer->Height == (GLint) buf_height)
return;
ctx->NewState |= NEW_RASTER_OPS; /* to update scissor / window bounds */
/* save buffer size */
ctx->Buffer->Width = buf_width;
ctx->Buffer->Height = buf_height;
/* Reallocate other buffers if needed. */
if (ctx->Visual->DepthBits>0) {
/* reallocate depth buffer */
(*ctx->Driver.AllocDepthBuffer)( ctx );
}
if (ctx->Visual->StencilBits>0) {
/* reallocate stencil buffer */
gl_alloc_stencil_buffer( ctx );
}
if (ctx->Visual->AccumBits>0) {
/* reallocate accum buffer */
gl_alloc_accum_buffer( ctx );
}
if (ctx->Visual->SoftwareAlpha) {
gl_alloc_alpha_buffers( ctx );
}
}
/**********************************************************************/
/***** State update logic *****/
/**********************************************************************/
@@ -1925,21 +1993,17 @@ static void update_pixel_masking( GLcontext *ctx )
static void update_fog_mode( GLcontext *ctx )
{
int old_mode = ctx->FogMode;
ctx->FogMode = FOG_NONE;
if (ctx->Fog.Enabled) {
if (ctx->Texture.Enabled)
ctx->FogMode = FOG_FRAGMENT;
else if (ctx->Hint.Fog == GL_NICEST)
ctx->FogMode = FOG_FRAGMENT;
else
ctx->FogMode = FOG_VERTEX;
ctx->FogMode = FOG_VERTEX;
if (ctx->Driver.GetParameteri)
if ((ctx->Driver.GetParameteri)( ctx, DD_HAVE_HARDWARE_FOG ))
ctx->FogMode = FOG_FRAGMENT;
}
else {
ctx->FogMode = FOG_NONE;
if (ctx->Texture.Enabled || ctx->Hint.Fog == GL_NICEST)
ctx->FogMode = FOG_FRAGMENT;
if ( ctx->Driver.GetParameteri &&
ctx->Driver.GetParameteri( ctx, DD_HAVE_HARDWARE_FOG ) )
ctx->FogMode = FOG_FRAGMENT;
}
if (old_mode != ctx->FogMode)
@@ -2078,14 +2142,6 @@ void gl_update_state( GLcontext *ctx )
ctx->Texture.Unit[1].LastEnvMode = ctx->Texture.Unit[1].EnvMode;
}
if ((ctx->NewState & ~(NEW_CLIENT_STATE|NEW_TEXTURE_ENABLE)) == 0) {
if (MESA_VERBOSE&VERBOSE_STATE)
fprintf(stderr, "update_state: goto finished\n");
goto finished;
}
if (ctx->NewState & NEW_TEXTURE_MATRIX) {
ctx->Enabled &= ~(ENABLE_TEXMAT0|ENABLE_TEXMAT1);
@@ -2102,7 +2158,7 @@ void gl_update_state( GLcontext *ctx )
}
}
if (ctx->NewState & NEW_TEXTURING) {
if (ctx->NewState & (NEW_TEXTURING | NEW_TEXTURE_ENABLE)) {
ctx->Texture.NeedNormals = GL_FALSE;
gl_update_dirty_texobjs(ctx);
ctx->Enabled &= ~(ENABLE_TEXGEN0|ENABLE_TEXGEN1);
@@ -2264,7 +2320,7 @@ void gl_update_state( GLcontext *ctx )
}
}
if (ctx->NewState & ~(NEW_CLIENT_STATE|NEW_TEXTURE_ENABLE|
if (ctx->NewState & ~(NEW_CLIENT_STATE|
NEW_DRIVER_STATE|NEW_USER_CLIP|
NEW_POLYGON))
gl_update_clipmask(ctx);
@@ -2272,6 +2328,7 @@ void gl_update_state( GLcontext *ctx )
if (ctx->NewState & (NEW_LIGHTING|
NEW_RASTER_OPS|
NEW_TEXTURING|
NEW_TEXTURE_ENABLE|
NEW_TEXTURE_ENV|
NEW_POLYGON|
NEW_DRVSTATE0|
@@ -2367,7 +2424,7 @@ void gl_update_state( GLcontext *ctx )
oldnorm = ctx->NeedEyeNormals;
ctx->NeedNormals = (ctx->Light.Enabled || ctx->Texture.NeedNormals);
ctx->NeedEyeCoords = ((ctx->Fog.Enabled && ctx->Hint.Fog != GL_NICEST) ||
ctx->NeedEyeCoords = (ctx->FogMode == FOG_VERTEX ||
ctx->Point.Attenuated);
ctx->NeedEyeNormals = GL_FALSE;
@@ -2423,7 +2480,6 @@ void gl_update_state( GLcontext *ctx )
gl_update_normal_transform( ctx );
}
finished:
gl_update_pipelines(ctx);
ctx->NewState = 0;
}

View File

@@ -1,4 +1,4 @@
/* $Id: dd.h,v 1.4 1999/10/21 12:46:27 brianp Exp $ */
/* $Id: dd.h,v 1.4.2.1 1999/12/12 18:30:47 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -659,6 +659,7 @@ struct dd_function_table {
void (*Lightfv)(GLcontext *ctx, GLenum light,
GLenum pname, const GLfloat *params, GLint nparams );
void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params);
void (*LogicOpcode)(GLcontext *ctx, GLenum opcode);
void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode);
void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h);
void (*ShadeModel)(GLcontext *ctx, GLenum mode);

View File

@@ -1,8 +1,8 @@
/* $Id: drawpix.c,v 1.6 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: drawpix.c,v 1.5.2.1 1999/11/26 16:28:03 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,10 +25,19 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "drawpix.h"
#include "feedback.h"
@@ -44,16 +53,23 @@
/* TODO: apply texture mapping to fragments */
/*
* Try to do a fast and simple RGB(a) glDrawPixels.
* Try to do a fast glDrawPixels. Conditions include:
* not using a display list
* simple pixel unpacking
* no raster ops
* etc....
* Return: GL_TRUE if success, GL_FALSE if slow path must be used instead
*/
static GLboolean
simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height, GLenum format, GLenum type,
const GLvoid *pixels )
GLboolean gl_direct_DrawPixels( GLcontext *ctx,
const struct gl_pixelstore_attrib *unpack,
GLsizei width, GLsizei height,
GLenum format, GLenum type,
const GLvoid *pixels )
{
const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
GLubyte rgb[MAX_WIDTH][3];
GLubyte rgba[MAX_WIDTH][4];
@@ -71,10 +87,12 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
}
/* see if device driver can do the drawpix */
if (ctx->Driver.DrawPixels
&& (*ctx->Driver.DrawPixels)(ctx, x, y, width, height, format, type,
unpack, pixels)) {
return GL_TRUE;
if (ctx->Driver.DrawPixels) {
GLint x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
GLint y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
if ((*ctx->Driver.DrawPixels)(ctx, x, y, width, height, format, type,
unpack, pixels))
return GL_TRUE;
}
if ((ctx->RasterMask&(~(SCISSOR_BIT|WINCLIP_BIT)))==0
@@ -88,8 +106,8 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
&& !unpack->SwapBytes
&& !unpack->LsbFirst) {
GLint destX = x;
GLint destY = y;
GLint destX = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
GLint destY = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
GLint drawWidth = width; /* actual width drawn */
GLint drawHeight = height; /* actual height drawn */
GLint skipPixels = unpack->SkipPixels;
@@ -346,9 +364,10 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
return GL_FALSE;
}
}
/* can't do a simple draw, have to use slow path */
return GL_FALSE;
else {
/* can't do direct render, have to use slow path */
return GL_FALSE;
}
}
@@ -356,43 +375,99 @@ simple_DrawPixels( GLcontext *ctx, GLint x, GLint y,
/*
* Do glDrawPixels of index pixels.
*/
static void
draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height,
GLenum type, const GLvoid *pixels )
static void draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
const struct gl_image *image )
{
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
GLint width, height, widthInBytes;
const GLint desty = y;
GLint row, drawWidth;
GLint i, j;
GLdepth zspan[MAX_WIDTH];
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
assert(image);
assert(image->Format == GL_COLOR_INDEX);
width = image->Width;
height = image->Height;
if (image->Type == GL_BITMAP)
widthInBytes = (width + 7) / 8;
else
widthInBytes = width;
/* Fragment depth values */
if (ctx->Depth.Test) {
if (ctx->Depth.Test || ctx->Fog.Enabled) {
GLdepth zval = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH_SCALE);
GLint i;
for (i = 0; i < drawWidth; i++) {
for (i=0;i<width;i++) {
zspan[i] = zval;
}
}
/*
* General solution
*/
for (row = 0; row < height; row++, y++) {
GLuint indexes[MAX_WIDTH];
const GLvoid *source = gl_pixel_addr_in_image(&ctx->Unpack,
pixels, width, height, GL_COLOR_INDEX, type, 0, row, 0);
_mesa_unpack_index_span(ctx, drawWidth, GL_UNSIGNED_INT, indexes,
type, source, &ctx->Unpack, GL_TRUE);
if (zoom) {
gl_write_zoomed_index_span(ctx, drawWidth, x, y, zspan, indexes, desty);
/* process the image row by row */
for (i=0;i<height;i++,y++) {
GLuint ispan[MAX_WIDTH];
/* convert to uints */
switch (image->Type) {
case GL_UNSIGNED_BYTE:
{
GLubyte *src = (GLubyte *) image->Data + i * width;
for (j=0;j<width;j++) {
ispan[j] = (GLuint) *src++;
}
}
break;
case GL_FLOAT:
{
GLfloat *src = (GLfloat *) image->Data + i * width;
for (j=0;j<width;j++) {
ispan[j] = (GLuint) (GLint) *src++;
}
}
break;
case GL_BITMAP:
{
GLubyte *src = (GLubyte *) image->Data + i * widthInBytes;
for (j=0;j<width;j++) {
ispan[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
}
}
break;
default:
gl_problem( ctx, "draw_index_pixels type" );
return;
}
/* apply shift and offset */
if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) {
gl_shift_and_offset_ci( ctx, width, ispan );
}
if (ctx->Visual->RGBAflag) {
/* Convert index to RGBA and write to frame buffer */
GLubyte rgba[MAX_WIDTH][4];
gl_map_ci_to_rgba( ctx, width, ispan, rgba );
if (zoom) {
gl_write_zoomed_rgba_span( ctx, width, x, y, zspan,
(const GLubyte (*)[4])rgba, desty );
}
else {
gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITMAP );
}
}
else {
gl_write_index_span(ctx, drawWidth, x, y, zspan, indexes, GL_BITMAP);
/* optionally apply index map then write to frame buffer */
if (ctx->Pixel.MapColorFlag) {
gl_map_ci(ctx, width, ispan);
}
if (zoom) {
gl_write_zoomed_index_span( ctx, width, x, y, zspan, ispan, desty );
}
else {
gl_write_index_span( ctx, width, x, y, zspan, ispan, GL_BITMAP );
}
}
}
}
@@ -401,44 +476,83 @@ draw_index_pixels( GLcontext *ctx, GLint x, GLint y,
* Do glDrawPixels of stencil image. The image datatype may either
* be GLubyte or GLbitmap.
*/
static void
draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height,
GLenum type, const GLvoid *pixels )
static void draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
const struct gl_image *image )
{
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
GLint widthInBytes, width, height;
const GLint desty = y;
GLint row, drawWidth;
GLint i;
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
if (type != GL_BYTE &&
type != GL_UNSIGNED_BYTE &&
type != GL_SHORT &&
type != GL_UNSIGNED_SHORT &&
type != GL_INT &&
type != GL_UNSIGNED_INT &&
type != GL_FLOAT &&
type != GL_BITMAP) {
gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels(stencil type)");
if (image->Type != GL_BYTE &&
image->Type != GL_UNSIGNED_BYTE &&
image->Type != GL_SHORT &&
image->Type != GL_UNSIGNED_SHORT &&
image->Type != GL_INT &&
image->Type != GL_UNSIGNED_INT &&
image->Type != GL_FLOAT &&
image->Type != GL_BITMAP) {
gl_error( ctx, GL_INVALID_OPERATION, "glDrawPixels(stencil type)");
return;
}
drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
assert(image);
assert(image->Format == GL_STENCIL_INDEX);
assert(image->Type == GL_UNSIGNED_BYTE || image->Type == GL_BITMAP);
for (row = 0; row < height; row++, y++) {
GLstencil values[MAX_WIDTH];
GLenum destType = (sizeof(GLstencil) == sizeof(GLubyte))
? GL_UNSIGNED_BYTE : GL_UNSIGNED_SHORT;
const GLvoid *source = gl_pixel_addr_in_image(&ctx->Unpack,
pixels, width, height, GL_COLOR_INDEX, type, 0, row, 0);
_mesa_unpack_index_span(ctx, drawWidth, destType, values,
type, source, &ctx->Unpack, GL_TRUE);
if (image->Type == GL_UNSIGNED_BYTE)
widthInBytes = image->Width;
else
widthInBytes = (image->Width + 7) / 8;
width = image->Width;
height = image->Height;
if (zoom) {
gl_write_zoomed_stencil_span( ctx, (GLuint) drawWidth, x, y,
values, desty );
/* process the image row by row */
for (i=0;i<height;i++,y++) {
GLstencil *src = (GLstencil*)image->Data + i * widthInBytes;
GLstencil *stencilValues;
GLstencil stencilCopy[MAX_WIDTH];
if (image->Type == GL_BITMAP) {
/* convert bitmap data to GLubyte (0 or 1) data */
GLint j;
for (j = 0; j < width; j++) {
stencilCopy[j] = ( src[j >> 3] >> (7 - (j & 0x7)) ) & 1;
}
src = stencilCopy;
}
if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift
|| ctx->Pixel.MapStencilFlag) {
/* make copy of stencil values */
if (src != stencilCopy)
MEMCPY( stencilCopy, src, width * sizeof(GLstencil));
/* apply shift and offset */
if (ctx->Pixel.IndexOffset || ctx->Pixel.IndexShift) {
gl_shift_and_offset_stencil( ctx, width, stencilCopy );
}
/* mapping */
if (ctx->Pixel.MapStencilFlag) {
gl_map_stencil( ctx, width, stencilCopy );
}
stencilValues = stencilCopy;
}
else {
gl_write_stencil_span( ctx, (GLuint) drawWidth, x, y, values );
/* use stencil values in-place */
stencilValues = src;
}
/* write stencil values to stencil buffer */
if (zoom) {
gl_write_zoomed_stencil_span( ctx, (GLuint) width, x, y,
stencilValues, desty );
}
else {
gl_write_stencil_span( ctx, (GLuint) width, x, y, stencilValues );
}
}
}
@@ -448,37 +562,30 @@ draw_stencil_pixels( GLcontext *ctx, GLint x, GLint y,
/*
* Do a glDrawPixels of depth values.
*/
static void
draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height,
GLenum type, const GLvoid *pixels )
static void draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
const struct gl_image *image )
{
const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
GLint width, height;
const GLint desty = y;
GLubyte rgba[MAX_WIDTH][4];
GLuint ispan[MAX_WIDTH];
GLint drawWidth = (width > MAX_WIDTH) ? MAX_WIDTH : width;
const GLboolean bias_or_scale = ctx->Pixel.DepthBias!=0.0 || ctx->Pixel.DepthScale!=1.0;
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
if (type != GL_UNSIGNED_BYTE
&& type != GL_UNSIGNED_BYTE
&& type != GL_UNSIGNED_SHORT
&& type != GL_UNSIGNED_SHORT
&& type != GL_UNSIGNED_INT
&& type != GL_UNSIGNED_INT
&& type != GL_FLOAT) {
gl_error(ctx, GL_INVALID_ENUM, "glDrawPixels(type)");
return;
}
assert(image);
assert(image->Format == GL_DEPTH_COMPONENT);
/* Colors or indexes */
width = image->Width;
height = image->Height;
/* Color or index */
if (ctx->Visual->RGBAflag) {
GLint r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
GLint g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
GLint b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
GLint a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
GLint i;
for (i = 0; i < drawWidth; i++) {
for (i=0; i<width; i++) {
rgba[i][RCOMP] = r;
rgba[i][GCOMP] = g;
rgba[i][BCOMP] = b;
@@ -487,36 +594,34 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
}
else {
GLint i;
for (i = 0; i < drawWidth; i++) {
for (i=0;i<width;i++) {
ispan[i] = ctx->Current.RasterIndex;
}
}
if (type==GL_UNSIGNED_SHORT && sizeof(GLdepth)==sizeof(GLushort)
if (image->Type==GL_UNSIGNED_SHORT && sizeof(GLdepth)==sizeof(GLushort)
&& !bias_or_scale && !zoom && ctx->Visual->RGBAflag) {
/* Special case: directly write 16-bit depth values */
GLint row;
for (row = 0; row < height; row++, y++) {
const GLdepth *zptr = gl_pixel_addr_in_image(&ctx->Unpack,
pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
GLint j;
for (j=0;j<height;j++,y++) {
GLdepth *zptr = (GLdepth *) image->Data + j * width;
gl_write_rgba_span( ctx, width, x, y, zptr, rgba, GL_BITMAP );
}
}
else if (type==GL_UNSIGNED_INT && sizeof(GLdepth)==sizeof(GLuint)
else if (image->Type==GL_UNSIGNED_INT && sizeof(GLdepth)==sizeof(GLuint)
&& !bias_or_scale && !zoom && ctx->Visual->RGBAflag) {
/* Special case: directly write 32-bit depth values */
GLint i, row;
GLint i, j;
/* Compute shift value to scale 32-bit uints down to depth values. */
GLuint shift = 0;
GLuint max = MAX_DEPTH;
while ((max & 0x80000000) == 0) {
while ((max&0x80000000)==0) {
max = max << 1;
shift++;
}
for (row = 0; row < height; row++, y++) {
for (j=0;j<height;j++,y++) {
GLdepth zspan[MAX_WIDTH];
const GLdepth *zptr = gl_pixel_addr_in_image(&ctx->Unpack,
pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
GLuint *zptr = (GLuint *) image->Data + j * width;
for (i=0;i<width;i++) {
zspan[i] = zptr[i] >> shift;
}
@@ -524,30 +629,72 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
}
}
else {
/* General case */
GLint row;
for (row = 0; row < height; row++, y++) {
/* General case (slower) */
GLint i, j;
/* process image row by row */
for (i=0;i<height;i++,y++) {
GLfloat depth[MAX_WIDTH];
GLdepth zspan[MAX_WIDTH];
const GLvoid *src = gl_pixel_addr_in_image(&ctx->Unpack,
pixels, width, height, GL_DEPTH_COMPONENT, type, 0, row, 0);
_mesa_unpack_depth_span( ctx, drawWidth, zspan, type, src,
&ctx->Unpack, GL_TRUE );
switch (image->Type) {
case GL_UNSIGNED_SHORT:
{
GLushort *src = (GLushort *) image->Data + i * width;
for (j=0;j<width;j++) {
depth[j] = USHORT_TO_FLOAT( *src++ );
}
}
break;
case GL_UNSIGNED_INT:
{
GLuint *src = (GLuint *) image->Data + i * width;
for (j=0;j<width;j++) {
depth[j] = UINT_TO_FLOAT( *src++ );
}
}
break;
case GL_FLOAT:
{
GLfloat *src = (GLfloat *) image->Data + i * width;
for (j=0;j<width;j++) {
depth[j] = *src++;
}
}
break;
default:
gl_problem(ctx, "Bad type in draw_depth_pixels");
return;
}
/* apply depth scale and bias */
if (ctx->Pixel.DepthScale!=1.0 || ctx->Pixel.DepthBias!=0.0) {
for (j=0;j<width;j++) {
depth[j] = depth[j] * ctx->Pixel.DepthScale + ctx->Pixel.DepthBias;
}
}
/* clamp depth values to [0,1] and convert from floats to integers */
for (j=0;j<width;j++) {
zspan[j] = (GLdepth) (CLAMP( depth[j], 0.0F, 1.0F ) * DEPTH_SCALE);
}
if (ctx->Visual->RGBAflag) {
if (zoom) {
gl_write_zoomed_rgba_span(ctx, width, x, y, zspan,
(const GLubyte (*)[4])rgba, desty);
gl_write_zoomed_rgba_span( ctx, width, x, y, zspan,
(const GLubyte (*)[4])rgba, desty );
}
else {
gl_write_rgba_span(ctx, width, x, y, zspan, rgba, GL_BITMAP);
gl_write_rgba_span( ctx, width, x, y, zspan, rgba, GL_BITMAP );
}
}
else {
if (zoom) {
gl_write_zoomed_index_span(ctx, width, x, y, zspan,
ispan, GL_BITMAP);
gl_write_zoomed_index_span( ctx, width, x, y, zspan,
ispan, GL_BITMAP );
}
else {
gl_write_index_span(ctx, width, x, y, zspan, ispan, GL_BITMAP);
gl_write_index_span( ctx, width, x, y, zspan, ispan, GL_BITMAP );
}
}
@@ -556,71 +703,184 @@ draw_depth_pixels( GLcontext *ctx, GLint x, GLint y,
}
/* Simple unpacking parameters: */
static struct gl_pixelstore_attrib NoUnpack = {
1, /* Alignment */
0, /* RowLength */
0, /* SkipPixels */
0, /* SkipRows */
0, /* ImageHeight */
0, /* SkipImages */
GL_FALSE, /* SwapBytes */
GL_FALSE /* LsbFirst */
};
/*
* Do glDrawPixels of RGBA pixels.
*/
static void
draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
GLsizei width, GLsizei height,
GLenum format, GLenum type, const GLvoid *pixels )
static void draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
const struct gl_image *image )
{
const struct gl_pixelstore_attrib *unpack = &ctx->Unpack;
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
GLint width, height;
GLint i, j;
const GLint desty = y;
GLdepth zspan[MAX_WIDTH];
GLboolean quickDraw;
const GLboolean zoom = ctx->Pixel.ZoomX!=1.0 || ctx->Pixel.ZoomY!=1.0;
assert(image);
/* Try an optimized glDrawPixels first */
if (simple_DrawPixels(ctx, x, y, width, height, format, type, pixels))
if (gl_direct_DrawPixels(ctx, &NoUnpack, image->Width, image->Height,
image->Format, image->Type, image->Data ))
return;
width = image->Width;
height = image->Height;
/* Fragment depth values */
if (ctx->Depth.Test) {
if (ctx->Depth.Test || ctx->Fog.Enabled) {
/* fill in array of z values */
GLdepth z = (GLdepth) (ctx->Current.RasterPos[2] * DEPTH_SCALE);
GLint i;
for (i=0;i<width;i++) {
zspan[i] = z;
}
}
if (ctx->RasterMask == 0 && !zoom
&& x >= 0 && y >= 0
&& x + width <= ctx->Buffer->Width
&& y + height <= ctx->Buffer->Height) {
if (ctx->RasterMask==0 && !zoom && x>=0 && y>=0
&& x+width<=ctx->Buffer->Width && y+height<=ctx->Buffer->Height) {
quickDraw = GL_TRUE;
}
else {
quickDraw = GL_FALSE;
}
/*
* General solution
*/
{
/* General solution */
GLboolean r_flag, g_flag, b_flag, a_flag, l_flag;
GLuint components;
GLubyte rgba[MAX_WIDTH][4];
GLint row;
if (width > MAX_WIDTH)
width = MAX_WIDTH;
for (row = 0; row < height; row++, y++) {
const GLvoid *source = gl_pixel_addr_in_image(unpack,
pixels, width, height, format, type, 0, row, 0);
_mesa_unpack_ubyte_color_span(ctx, width, GL_RGBA, (void*) rgba,
format, type, source, unpack, GL_TRUE);
GLfloat rf[MAX_WIDTH];
GLfloat gf[MAX_WIDTH];
GLfloat bf[MAX_WIDTH];
DEFARRAY(GLfloat,af,MAX_WIDTH);
CHECKARRAY(af,return);
r_flag = g_flag = b_flag = a_flag = l_flag = GL_FALSE;
switch (image->Format) {
case GL_RED:
r_flag = GL_TRUE;
components = 1;
break;
case GL_GREEN:
g_flag = GL_TRUE;
components = 1;
break;
case GL_BLUE:
b_flag = GL_TRUE;
components = 1;
break;
case GL_ALPHA:
a_flag = GL_TRUE;
components = 1;
break;
case GL_RGB:
r_flag = g_flag = b_flag = GL_TRUE;
components = 3;
break;
case GL_LUMINANCE:
l_flag = GL_TRUE;
components = 1;
break;
case GL_LUMINANCE_ALPHA:
l_flag = a_flag = GL_TRUE;
components = 2;
break;
case GL_RGBA:
r_flag = g_flag = b_flag = a_flag = GL_TRUE;
components = 4;
break;
default:
gl_problem(ctx, "Bad type in draw_rgba_pixels");
goto cleanup;
}
/* process the image row by row */
for (i=0;i<height;i++,y++) {
/* convert to floats */
switch (image->Type) {
case GL_UNSIGNED_BYTE:
{
GLubyte *src = (GLubyte *) image->Data + i * width * components;
for (j=0;j<width;j++) {
if (l_flag) {
rf[j] = gf[j] = bf[j] = UBYTE_TO_FLOAT(*src++);
}
else {
rf[j] = r_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
gf[j] = g_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
bf[j] = b_flag ? UBYTE_TO_FLOAT(*src++) : 0.0;
}
af[j] = a_flag ? UBYTE_TO_FLOAT(*src++) : 1.0;
}
}
break;
case GL_FLOAT:
{
GLfloat *src = (GLfloat *) image->Data + i * width * components;
for (j=0;j<width;j++) {
if (l_flag) {
rf[j] = gf[j] = bf[j] = *src++;
}
else {
rf[j] = r_flag ? *src++ : 0.0;
gf[j] = g_flag ? *src++ : 0.0;
bf[j] = b_flag ? *src++ : 0.0;
}
af[j] = a_flag ? *src++ : 1.0;
}
}
break;
default:
gl_problem( ctx, "draw_rgba_pixels type" );
goto cleanup;
}
/* apply scale and bias */
if (ctx->Pixel.ScaleOrBiasRGBA) {
gl_scale_and_bias_color(ctx, width, rf, gf, bf, af);
}
/* apply pixel mappings */
if (ctx->Pixel.MapColorFlag) {
gl_map_color(ctx, width, rf, gf, bf, af);
}
/* convert to integers */
for (j=0;j<width;j++) {
rgba[j][RCOMP] = (GLint) (rf[j] * 255.0F);
rgba[j][GCOMP] = (GLint) (gf[j] * 255.0F);
rgba[j][BCOMP] = (GLint) (bf[j] * 255.0F);
rgba[j][ACOMP] = (GLint) (af[j] * 255.0F);
}
/* write to frame buffer */
if (quickDraw) {
(*ctx->Driver.WriteRGBASpan)( ctx, width, x, y,
(CONST GLubyte (*)[]) rgba, NULL);
(*ctx->Driver.WriteRGBASpan)( ctx, width, x, y,
(const GLubyte (*)[4])rgba, NULL);
}
else if (zoom) {
gl_write_zoomed_rgba_span( ctx, width, x, y, zspan,
(CONST GLubyte (*)[]) rgba, desty );
(const GLubyte (*)[4])rgba, desty );
}
else {
gl_write_rgba_span( ctx, (GLuint) width, x, y, zspan, rgba, GL_BITMAP);
}
}
cleanup:
UNDEFARRAY(af);
}
}
@@ -629,50 +889,45 @@ draw_rgba_pixels( GLcontext *ctx, GLint x, GLint y,
/*
* Execute glDrawPixels
*/
void
_mesa_DrawPixels( GLsizei width, GLsizei height,
GLenum format, GLenum type, const GLvoid *pixels )
void gl_DrawPixels( GLcontext* ctx, struct gl_image *image )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDrawPixels");
if (gl_image_error_test( ctx, image, "glDrawPixels" ))
return;
if (ctx->RenderMode==GL_RENDER) {
GLint x, y;
if (!pixels || !ctx->Current.RasterPosValid) {
if (!ctx->Current.RasterPosValid) {
return;
}
x = (GLint) (ctx->Current.RasterPos[0] + 0.5F);
y = (GLint) (ctx->Current.RasterPos[1] + 0.5F);
switch (format) {
switch (image->Format) {
case GL_COLOR_INDEX:
draw_index_pixels( ctx, x, y, image );
break;
case GL_STENCIL_INDEX:
draw_stencil_pixels( ctx, x, y, width, height, type, pixels );
draw_stencil_pixels( ctx, x, y, image );
break;
case GL_DEPTH_COMPONENT:
draw_depth_pixels( ctx, x, y, width, height, type, pixels );
break;
case GL_COLOR_INDEX:
if (ctx->Visual->RGBAflag)
draw_index_pixels(ctx, x, y, width, height, type, pixels);
else
draw_rgba_pixels(ctx, x,y, width, height, format, type, pixels);
draw_depth_pixels( ctx, x, y, image );
break;
case GL_RED:
case GL_GREEN:
case GL_BLUE:
case GL_ALPHA:
case GL_RGB:
case GL_LUMINANCE:
case GL_LUMINANCE_ALPHA:
case GL_RGB:
case GL_BGR:
case GL_RGBA:
case GL_BGRA:
case GL_ABGR_EXT:
draw_rgba_pixels(ctx, x, y, width, height, format, type, pixels);
draw_rgba_pixels( ctx, x, y, image );
break;
default:
gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels(format)" );
gl_error( ctx, GL_INVALID_ENUM, "glDrawPixels" );
return;
}
}

View File

@@ -1,8 +1,8 @@
/* $Id: extensions.c,v 1.11 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: extensions.c,v 1.10.2.3 1999/12/12 18:30:47 keithw Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,16 +25,15 @@
*/
#ifdef PC_HEADER
#include "all.h"
#ifndef XFree86Server
#include <stdlib.h>
#else
#include "glheader.h"
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "extensions.h"
#include "mem.h"
#include "simple_list.h"
#include "types.h"
#endif
#define MAX_EXT_NAMELEN 80
@@ -62,7 +61,7 @@ static struct { int enabled; const char *name; } default_extensions[] = {
{ DEFAULT_ON, "GL_EXT_texture3D" },
{ ALWAYS_ENABLED, "GL_MESA_window_pos" },
{ ALWAYS_ENABLED, "GL_MESA_resize_buffers" },
{ ALWAYS_ENABLED, "GL_EXT_shared_texture_palette" },
{ DEFAULT_ON, "GL_EXT_shared_texture_palette" },
{ ALWAYS_ENABLED, "GL_EXT_rescale_normal" },
{ ALWAYS_ENABLED, "GL_EXT_abgr" },
{ ALWAYS_ENABLED, "GL_SGIS_texture_edge_clamp" },
@@ -72,8 +71,13 @@ static struct { int enabled; const char *name; } default_extensions[] = {
{ ALWAYS_ENABLED, "GL_NV_texgen_reflection" },
{ DEFAULT_ON, "GL_PGI_misc_hints" },
{ DEFAULT_ON, "GL_EXT_compiled_vertex_array" },
{ DEFAULT_OFF, "GL_EXT_vertex_array_set" },
{ DEFAULT_ON, "GL_EXT_clip_volume_hint" },
/* These obviously won't make it before 3.3:
*/
{ DEFAULT_OFF, "GL_EXT_vertex_array_set" },
{ DEFAULT_OFF, "GL_EXT_texture_env" },
{ DEFAULT_OFF, "GL_EXT_fog_coord" },
};
@@ -133,6 +137,24 @@ int gl_extensions_disable( GLcontext *ctx, const char *name )
}
/*
* Test if the named extension is enabled in this context.
*/
GLboolean gl_extension_is_enabled( GLcontext *ctx, const char *name)
{
struct extension *i;
foreach( i, ctx->Extensions.ext_list )
if (strncmp(i->name, name, MAX_EXT_NAMELEN) == 0) {
if (i->enabled)
return GL_TRUE;
else
return GL_FALSE;
}
return GL_FALSE;
}
void gl_extensions_dtr( GLcontext *ctx )
{
struct extension *i, *nexti;
@@ -218,43 +240,409 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
gl_function address;
};
static struct proc procTable[] = {
/* OpenGL 1.0 functions */
{ "glAccum", (gl_function) glAccum },
{ "glAlphaFunc", (gl_function) glAlphaFunc },
{ "glBegin", (gl_function) glBegin },
{ "glBitmap", (gl_function) glBitmap },
{ "glAccum", (gl_function) glAccum },
{ "glAlphaFunc", (gl_function) glAlphaFunc },
{ "glBegin", (gl_function) glBegin },
{ "glBitmap", (gl_function) glBitmap },
{ "glBlendFunc", (gl_function) glBlendFunc },
{ "glCallList", (gl_function) glCallList },
{ "glCallLists", (gl_function) glCallLists },
{ "glClear", (gl_function) glClear },
{ "glClearAccum", (gl_function) glClearAccum },
{ "glClearColor", (gl_function) glClearColor },
{ "glClearDepth", (gl_function) glClearDepth },
{ "glClearIndex", (gl_function) glClearIndex },
{ "glClearStencil", (gl_function) glClearStencil },
{ "glClipPlane", (gl_function) glClipPlane },
{ "glColor3b", (gl_function) glColor3b },
{ "glColor3bv", (gl_function) glColor3bv },
{ "glColor3d", (gl_function) glColor3d },
{ "glColor3dv", (gl_function) glColor3dv },
{ "glColor3f", (gl_function) glColor3f },
{ "glColor3fv", (gl_function) glColor3fv },
{ "glColor3i", (gl_function) glColor3i },
{ "glColor3iv", (gl_function) glColor3iv },
{ "glColor3s", (gl_function) glColor3s },
{ "glColor3sv", (gl_function) glColor3sv },
{ "glColor3ub", (gl_function) glColor3ub },
{ "glColor3ubv", (gl_function) glColor3ubv },
{ "glColor3ui", (gl_function) glColor3ui },
{ "glColor3uiv", (gl_function) glColor3uiv },
{ "glColor3us", (gl_function) glColor3us },
{ "glColor3usv", (gl_function) glColor3usv },
{ "glColor4b", (gl_function) glColor4b },
{ "glColor4bv", (gl_function) glColor4bv },
{ "glColor4d", (gl_function) glColor4d },
{ "glColor4dv", (gl_function) glColor4dv },
{ "glColor4f", (gl_function) glColor4f },
{ "glColor4fv", (gl_function) glColor4fv },
{ "glColor4i", (gl_function) glColor4i },
{ "glColor4iv", (gl_function) glColor4iv },
{ "glColor4s", (gl_function) glColor4s },
{ "glColor4sv", (gl_function) glColor4sv },
{ "glColor4ub", (gl_function) glColor4ub },
{ "glColor4ubv", (gl_function) glColor4ubv },
{ "glColor4ui", (gl_function) glColor4ui },
{ "glColor4uiv", (gl_function) glColor4uiv },
{ "glColor4us", (gl_function) glColor4us },
{ "glColor4usv", (gl_function) glColor4usv },
{ "glColorMask", (gl_function) glColorMask },
{ "glColorMaterial", (gl_function) glColorMaterial },
{ "glCopyPixels", (gl_function) glCopyPixels },
{ "glCullFace", (gl_function) glCullFace },
{ "glDeleteLists", (gl_function) glDeleteLists },
{ "glDepthFunc", (gl_function) glDepthFunc },
{ "glDepthMask", (gl_function) glDepthMask },
{ "glDepthRange", (gl_function) glDepthRange },
{ "glDisable", (gl_function) glDisable },
{ "glDrawBuffer", (gl_function) glDrawBuffer },
{ "glDrawPixels", (gl_function) glDrawPixels },
{ "glEdgeFlag", (gl_function) glEdgeFlag },
{ "glEdgeFlagv", (gl_function) glEdgeFlagv },
{ "glEnable", (gl_function) glEnable },
{ "glEnd", (gl_function) glEnd },
{ "glEndList", (gl_function) glEndList },
{ "glEvalCoord1d", (gl_function) glEvalCoord1d },
{ "glEvalCoord1dv", (gl_function) glEvalCoord1dv },
{ "glEvalCoord1f", (gl_function) glEvalCoord1f },
{ "glEvalCoord1fv", (gl_function) glEvalCoord1fv },
{ "glEvalCoord2d", (gl_function) glEvalCoord2d },
{ "glEvalCoord2dv", (gl_function) glEvalCoord2dv },
{ "glEvalCoord2f", (gl_function) glEvalCoord2f },
{ "glEvalCoord2fv", (gl_function) glEvalCoord2fv },
{ "glEvalMesh1", (gl_function) glEvalMesh1 },
{ "glEvalMesh2", (gl_function) glEvalMesh2 },
{ "glEvalPoint1", (gl_function) glEvalPoint1 },
{ "glEvalPoint2", (gl_function) glEvalPoint2 },
{ "glFeedbackBuffer", (gl_function) glFeedbackBuffer },
{ "glFinish", (gl_function) glFinish },
{ "glFlush", (gl_function) glFlush },
{ "glFogf", (gl_function) glFogf },
{ "glFogfv", (gl_function) glFogfv },
{ "glFogi", (gl_function) glFogi },
{ "glFogiv", (gl_function) glFogiv },
{ "glFrontFace", (gl_function) glFrontFace },
{ "glFrustum", (gl_function) glFrustum },
{ "glGenLists", (gl_function) glGenLists },
{ "glGetBooleanv", (gl_function) glGetBooleanv },
{ "glGetClipPlane", (gl_function) glGetClipPlane },
{ "glGetDoublev", (gl_function) glGetDoublev },
{ "glGetError", (gl_function) glGetError },
{ "glGetFloatv", (gl_function) glGetFloatv },
{ "glGetIntegerv", (gl_function) glGetIntegerv },
{ "glGetLightfv", (gl_function) glGetLightfv },
{ "glGetLightiv", (gl_function) glGetLightiv },
{ "glGetMapdv", (gl_function) glGetMapdv },
{ "glGetMapfv", (gl_function) glGetMapfv },
{ "glGetMapiv", (gl_function) glGetMapiv },
{ "glGetMaterialfv", (gl_function) glGetMaterialfv },
{ "glGetMaterialiv", (gl_function) glGetMaterialiv },
{ "glGetPixelMapfv", (gl_function) glGetPixelMapfv },
{ "glGetPixelMapuiv", (gl_function) glGetPixelMapuiv },
{ "glGetPixelMapusv", (gl_function) glGetPixelMapusv },
{ "glGetPolygonStipple", (gl_function) glGetPolygonStipple },
{ "glGetString", (gl_function) glGetString },
{ "glGetTexEnvfv", (gl_function) glGetTexEnvfv },
{ "glGetTexEnviv", (gl_function) glGetTexEnviv },
{ "glGetTexGendv", (gl_function) glGetTexGendv },
{ "glGetTexGenfv", (gl_function) glGetTexGenfv },
{ "glGetTexGeniv", (gl_function) glGetTexGeniv },
{ "glGetTexImage", (gl_function) glGetTexImage },
{ "glGetTexLevelParameterfv", (gl_function) glGetTexLevelParameterfv },
{ "glGetTexLevelParameteriv", (gl_function) glGetTexLevelParameteriv },
{ "glGetTexParameterfv", (gl_function) glGetTexParameterfv },
{ "glGetTexParameteriv", (gl_function) glGetTexParameteriv },
{ "glHint", (gl_function) glHint },
{ "glIndexMask", (gl_function) glIndexMask },
{ "glIndexd", (gl_function) glIndexd },
{ "glIndexdv", (gl_function) glIndexdv },
{ "glIndexf", (gl_function) glIndexf },
{ "glIndexfv", (gl_function) glIndexfv },
{ "glIndexi", (gl_function) glIndexi },
{ "glIndexiv", (gl_function) glIndexiv },
{ "glIndexs", (gl_function) glIndexs },
{ "glIndexsv", (gl_function) glIndexsv },
{ "glInitNames", (gl_function) glInitNames },
{ "glIsEnabled", (gl_function) glIsEnabled },
{ "glIsList", (gl_function) glIsList },
{ "glLightModelf", (gl_function) glLightModelf },
{ "glLightModelfv", (gl_function) glLightModelfv },
{ "glLightModeli", (gl_function) glLightModeli },
{ "glLightModeliv", (gl_function) glLightModeliv },
{ "glLightf", (gl_function) glLightf },
{ "glLightfv", (gl_function) glLightfv },
{ "glLighti", (gl_function) glLighti },
{ "glLightiv", (gl_function) glLightiv },
{ "glLineStipple", (gl_function) glLineStipple },
{ "glLineWidth", (gl_function) glLineWidth },
{ "glListBase", (gl_function) glListBase },
{ "glLoadIdentity", (gl_function) glLoadIdentity },
{ "glLoadMatrixd", (gl_function) glLoadMatrixd },
{ "glLoadMatrixf", (gl_function) glLoadMatrixf },
{ "glLoadName", (gl_function) glLoadName },
{ "glLogicOp", (gl_function) glLogicOp },
{ "glMap1d", (gl_function) glMap1d },
{ "glMap1f", (gl_function) glMap1f },
{ "glMap2d", (gl_function) glMap2d },
{ "glMap2f", (gl_function) glMap2f },
{ "glMapGrid1d", (gl_function) glMapGrid1d },
{ "glMapGrid1f", (gl_function) glMapGrid1f },
{ "glMapGrid2d", (gl_function) glMapGrid2d },
{ "glMapGrid2f", (gl_function) glMapGrid2f },
{ "glMaterialf", (gl_function) glMaterialf },
{ "glMaterialfv", (gl_function) glMaterialfv },
{ "glMateriali", (gl_function) glMateriali },
{ "glMaterialiv", (gl_function) glMaterialiv },
{ "glMatrixMode", (gl_function) glMatrixMode },
{ "glMultMatrixd", (gl_function) glMultMatrixd },
{ "glMultMatrixf", (gl_function) glMultMatrixf },
{ "glNewList", (gl_function) glNewList },
{ "glNormal3b", (gl_function) glNormal3b },
{ "glNormal3bv", (gl_function) glNormal3bv },
{ "glNormal3d", (gl_function) glNormal3d },
{ "glNormal3dv", (gl_function) glNormal3dv },
{ "glNormal3f", (gl_function) glNormal3f },
{ "glNormal3fv", (gl_function) glNormal3fv },
{ "glNormal3i", (gl_function) glNormal3i },
{ "glNormal3iv", (gl_function) glNormal3iv },
{ "glNormal3s", (gl_function) glNormal3s },
{ "glNormal3sv", (gl_function) glNormal3sv },
{ "glOrtho", (gl_function) glOrtho },
{ "glPassThrough", (gl_function) glPassThrough },
{ "glPixelMapfv", (gl_function) glPixelMapfv },
{ "glPixelMapuiv", (gl_function) glPixelMapuiv },
{ "glPixelMapusv", (gl_function) glPixelMapusv },
{ "glPixelStoref", (gl_function) glPixelStoref },
{ "glPixelStorei", (gl_function) glPixelStorei },
{ "glPixelTransferf", (gl_function) glPixelTransferf },
{ "glPixelTransferi", (gl_function) glPixelTransferi },
{ "glPixelZoom", (gl_function) glPixelZoom },
{ "glPointSize", (gl_function) glPointSize },
{ "glPolygonMode", (gl_function) glPolygonMode },
{ "glPolygonOffset", (gl_function) glPolygonOffset },
{ "glPolygonStipple", (gl_function) glPolygonStipple },
{ "glPopAttrib", (gl_function) glPopAttrib },
{ "glPopMatrix", (gl_function) glPopMatrix },
{ "glPopName", (gl_function) glPopName },
{ "glPushAttrib", (gl_function) glPushAttrib },
{ "glPushMatrix", (gl_function) glPushMatrix },
{ "glPushName", (gl_function) glPushName },
{ "glRasterPos2d", (gl_function) glRasterPos2d },
{ "glRasterPos2dv", (gl_function) glRasterPos2dv },
{ "glRasterPos2f", (gl_function) glRasterPos2f },
{ "glRasterPos2fv", (gl_function) glRasterPos2fv },
{ "glRasterPos2i", (gl_function) glRasterPos2i },
{ "glRasterPos2iv", (gl_function) glRasterPos2iv },
{ "glRasterPos2s", (gl_function) glRasterPos2s },
{ "glRasterPos2sv", (gl_function) glRasterPos2sv },
{ "glRasterPos3d", (gl_function) glRasterPos3d },
{ "glRasterPos3dv", (gl_function) glRasterPos3dv },
{ "glRasterPos3f", (gl_function) glRasterPos3f },
{ "glRasterPos3fv", (gl_function) glRasterPos3fv },
{ "glRasterPos3i", (gl_function) glRasterPos3i },
{ "glRasterPos3iv", (gl_function) glRasterPos3iv },
{ "glRasterPos3s", (gl_function) glRasterPos3s },
{ "glRasterPos3sv", (gl_function) glRasterPos3sv },
{ "glRasterPos4d", (gl_function) glRasterPos4d },
{ "glRasterPos4dv", (gl_function) glRasterPos4dv },
{ "glRasterPos4f", (gl_function) glRasterPos4f },
{ "glRasterPos4fv", (gl_function) glRasterPos4fv },
{ "glRasterPos4i", (gl_function) glRasterPos4i },
{ "glRasterPos4iv", (gl_function) glRasterPos4iv },
{ "glRasterPos4s", (gl_function) glRasterPos4s },
{ "glRasterPos4sv", (gl_function) glRasterPos4sv },
{ "glReadBuffer", (gl_function) glReadBuffer },
{ "glReadPixels", (gl_function) glReadPixels },
{ "glRectd", (gl_function) glRectd },
{ "glRectdv", (gl_function) glRectdv },
{ "glRectf", (gl_function) glRectf },
{ "glRectfv", (gl_function) glRectfv },
{ "glRecti", (gl_function) glRecti },
{ "glRectiv", (gl_function) glRectiv },
{ "glRects", (gl_function) glRects },
{ "glRectsv", (gl_function) glRectsv },
{ "glRenderMode", (gl_function) glRenderMode },
{ "glRotated", (gl_function) glRotated },
{ "glRotatef", (gl_function) glRotatef },
{ "glScaled", (gl_function) glScaled },
{ "glScalef", (gl_function) glScalef },
{ "glScissor", (gl_function) glScissor },
{ "glSelectBuffer", (gl_function) glSelectBuffer },
{ "glShadeModel", (gl_function) glShadeModel },
{ "glStencilFunc", (gl_function) glStencilFunc },
{ "glStencilMask", (gl_function) glStencilMask },
{ "glStencilOp", (gl_function) glStencilOp },
{ "glTexCoord1d", (gl_function) glTexCoord1d },
{ "glTexCoord1dv", (gl_function) glTexCoord1dv },
{ "glTexCoord1f", (gl_function) glTexCoord1f },
{ "glTexCoord1fv", (gl_function) glTexCoord1fv },
{ "glTexCoord1i", (gl_function) glTexCoord1i },
{ "glTexCoord1iv", (gl_function) glTexCoord1iv },
{ "glTexCoord1s", (gl_function) glTexCoord1s },
{ "glTexCoord1sv", (gl_function) glTexCoord1sv },
{ "glTexCoord2d", (gl_function) glTexCoord2d },
{ "glTexCoord2dv", (gl_function) glTexCoord2dv },
{ "glTexCoord2f", (gl_function) glTexCoord2f },
{ "glTexCoord2fv", (gl_function) glTexCoord2fv },
{ "glTexCoord2i", (gl_function) glTexCoord2i },
{ "glTexCoord2iv", (gl_function) glTexCoord2iv },
{ "glTexCoord2s", (gl_function) glTexCoord2s },
{ "glTexCoord2sv", (gl_function) glTexCoord2sv },
{ "glTexCoord3d", (gl_function) glTexCoord3d },
{ "glTexCoord3dv", (gl_function) glTexCoord3dv },
{ "glTexCoord3f", (gl_function) glTexCoord3f },
{ "glTexCoord3fv", (gl_function) glTexCoord3fv },
{ "glTexCoord3i", (gl_function) glTexCoord3i },
{ "glTexCoord3iv", (gl_function) glTexCoord3iv },
{ "glTexCoord3s", (gl_function) glTexCoord3s },
{ "glTexCoord3sv", (gl_function) glTexCoord3sv },
{ "glTexCoord4d", (gl_function) glTexCoord4d },
{ "glTexCoord4dv", (gl_function) glTexCoord4dv },
{ "glTexCoord4f", (gl_function) glTexCoord4f },
{ "glTexCoord4fv", (gl_function) glTexCoord4fv },
{ "glTexCoord4i", (gl_function) glTexCoord4i },
{ "glTexCoord4iv", (gl_function) glTexCoord4iv },
{ "glTexCoord4s", (gl_function) glTexCoord4s },
{ "glTexCoord4sv", (gl_function) glTexCoord4sv },
{ "glTexEnvf", (gl_function) glTexEnvf },
{ "glTexEnvfv", (gl_function) glTexEnvfv },
{ "glTexEnvi", (gl_function) glTexEnvi },
{ "glTexEnviv", (gl_function) glTexEnviv },
{ "glTexGend", (gl_function) glTexGend },
{ "glTexGendv", (gl_function) glTexGendv },
{ "glTexGenf", (gl_function) glTexGenf },
{ "glTexGenfv", (gl_function) glTexGenfv },
{ "glTexGeni", (gl_function) glTexGeni },
{ "glTexGeniv", (gl_function) glTexGeniv },
{ "glTexImage1D", (gl_function) glTexImage1D },
{ "glTexImage2D", (gl_function) glTexImage2D },
{ "glTexParameterf", (gl_function) glTexParameterf },
{ "glTexParameterfv", (gl_function) glTexParameterfv },
{ "glTexParameteri", (gl_function) glTexParameteri },
{ "glTexParameteriv", (gl_function) glTexParameteriv },
{ "glTranslated", (gl_function) glTranslated },
{ "glTranslatef", (gl_function) glTranslatef },
{ "glVertex2d", (gl_function) glVertex2d },
{ "glVertex2dv", (gl_function) glVertex2dv },
{ "glVertex2f", (gl_function) glVertex2f },
{ "glVertex2fv", (gl_function) glVertex2fv },
{ "glVertex2i", (gl_function) glVertex2i },
{ "glVertex2iv", (gl_function) glVertex2iv },
{ "glVertex2s", (gl_function) glVertex2s },
{ "glVertex2sv", (gl_function) glVertex2sv },
{ "glVertex3d", (gl_function) glVertex3d },
{ "glVertex3dv", (gl_function) glVertex3dv },
{ "glVertex3f", (gl_function) glVertex3f },
{ "glVertex3fv", (gl_function) glVertex3fv },
{ "glVertex3i", (gl_function) glVertex3i },
{ "glVertex3iv", (gl_function) glVertex3iv },
{ "glVertex3s", (gl_function) glVertex3s },
{ "glVertex3sv", (gl_function) glVertex3sv },
{ "glVertex4d", (gl_function) glVertex4d },
{ "glVertex4dv", (gl_function) glVertex4dv },
{ "glVertex4f", (gl_function) glVertex4f },
{ "glVertex4fv", (gl_function) glVertex4fv },
{ "glVertex4i", (gl_function) glVertex4i },
{ "glVertex4iv", (gl_function) glVertex4iv },
{ "glVertex4s", (gl_function) glVertex4s },
{ "glVertex4sv", (gl_function) glVertex4sv },
{ "glViewport", (gl_function) glViewport },
/* OpenGL 1.1 functions */
{ "glEnableClientState", (gl_function) glEnableClientState },
{ "glDisableClientState", (gl_function) glDisableClientState },
{ "glPushClientAttrib", (gl_function) glPushClientAttrib },
{ "glPopClientAttrib", (gl_function) glPopClientAttrib },
{ "glIndexub", (gl_function) glIndexub },
{ "glIndexubv", (gl_function) glIndexubv },
{ "glVertexPointer", (gl_function) glVertexPointer },
{ "glNormalPointer", (gl_function) glNormalPointer },
{ "glColorPointer", (gl_function) glColorPointer },
{ "glIndexPointer", (gl_function) glIndexPointer },
{ "glTexCoordPointer", (gl_function) glTexCoordPointer },
{ "glEdgeFlagPointer", (gl_function) glEdgeFlagPointer },
{ "glGetPointerv", (gl_function) glGetPointerv },
{ "glArrayElement", (gl_function) glArrayElement },
{ "glDrawArrays", (gl_function) glDrawArrays },
{ "glDrawElements", (gl_function) glDrawElements },
{ "glInterleavedArrays", (gl_function) glInterleavedArrays },
{ "glGenTextures", (gl_function) glGenTextures },
{ "glDeleteTextures", (gl_function) glDeleteTextures },
{ "glBindTexture", (gl_function) glBindTexture },
{ "glPrioritizeTextures", (gl_function) glPrioritizeTextures },
{ "glAreTexturesResident", (gl_function) glAreTexturesResident },
{ "glIsTexture", (gl_function) glIsTexture },
{ "glTexSubImage1D", (gl_function) glTexSubImage1D },
{ "glTexSubImage2D", (gl_function) glTexSubImage2D },
{ "glArrayElement", (gl_function) glArrayElement },
{ "glBindTexture", (gl_function) glBindTexture },
{ "glColorPointer", (gl_function) glColorPointer },
{ "glCopyTexImage1D", (gl_function) glCopyTexImage1D },
{ "glCopyTexImage2D", (gl_function) glCopyTexImage2D },
{ "glCopyTexSubImage1D", (gl_function) glCopyTexSubImage1D },
{ "glCopyTexSubImage2D", (gl_function) glCopyTexSubImage2D },
{ "glDeleteTextures", (gl_function) glDeleteTextures },
{ "glDisableClientState", (gl_function) glDisableClientState },
{ "glDrawArrays", (gl_function) glDrawArrays },
{ "glDrawElements", (gl_function) glDrawElements },
{ "glEdgeFlagPointer", (gl_function) glEdgeFlagPointer },
{ "glEnableClientState", (gl_function) glEnableClientState },
{ "glGenTextures", (gl_function) glGenTextures },
{ "glGetPointerv", (gl_function) glGetPointerv },
{ "glIndexPointer", (gl_function) glIndexPointer },
{ "glIndexub", (gl_function) glIndexub },
{ "glIndexubv", (gl_function) glIndexubv },
{ "glInterleavedArrays", (gl_function) glInterleavedArrays },
{ "glIsTexture", (gl_function) glIsTexture },
{ "glNormalPointer", (gl_function) glNormalPointer },
{ "glPopClientAttrib", (gl_function) glPopClientAttrib },
{ "glPrioritizeTextures", (gl_function) glPrioritizeTextures },
{ "glPushClientAttrib", (gl_function) glPushClientAttrib },
{ "glTexCoordPointer", (gl_function) glTexCoordPointer },
{ "glTexSubImage1D", (gl_function) glTexSubImage1D },
{ "glTexSubImage2D", (gl_function) glTexSubImage2D },
{ "glVertexPointer", (gl_function) glVertexPointer },
/* OpenGL 1.2 functions */
{ "glCopyTexSubImage3D", (gl_function) glCopyTexSubImage3D },
{ "glDrawRangeElements", (gl_function) glDrawRangeElements },
{ "glTexImage3D", (gl_function) glTexImage3D },
{ "glTexSubImage3D", (gl_function) glTexSubImage3D },
{ "glCopyTexSubImage3D", (gl_function) glCopyTexSubImage3D },
/* NOTE: 1.2 imaging subset functions not implemented in Mesa */
/* ARB_imaging functions */
{ "glBlendColor", (gl_function) glBlendColor },
{ "glBlendEquation", (gl_function) glBlendEquation },
{ "glColorSubTable", (gl_function) glColorSubTable },
{ "glColorTable", (gl_function) glColorTable },
{ "glColorTableParameterfv", (gl_function) glColorTableParameterfv },
{ "glColorTableParameteriv", (gl_function) glColorTableParameteriv },
{ "glConvolutionFilter1D", (gl_function) glConvolutionFilter1D },
{ "glConvolutionFilter2D", (gl_function) glConvolutionFilter2D },
{ "glConvolutionParameterf", (gl_function) glConvolutionParameterf },
{ "glConvolutionParameterfv", (gl_function) glConvolutionParameterfv },
{ "glConvolutionParameteri", (gl_function) glConvolutionParameteri },
{ "glConvolutionParameteriv", (gl_function) glConvolutionParameteriv },
{ "glCopyColorSubTable", (gl_function) glCopyColorSubTable },
{ "glCopyColorTable", (gl_function) glCopyColorTable },
{ "glCopyConvolutionFilter1D", (gl_function) glCopyConvolutionFilter1D },
{ "glCopyConvolutionFilter2D", (gl_function) glCopyConvolutionFilter2D },
{ "glGetColorTable", (gl_function) glGetColorTable },
{ "glGetColorTableParameterfv", (gl_function) glGetColorTableParameterfv },
{ "glGetColorTableParameteriv", (gl_function) glGetColorTableParameteriv },
{ "glGetConvolutionFilter", (gl_function) glGetConvolutionFilter },
{ "glGetConvolutionParameterfv", (gl_function) glGetConvolutionParameterfv },
{ "glGetConvolutionParameteriv", (gl_function) glGetConvolutionParameteriv },
{ "glGetHistogram", (gl_function) glGetHistogram },
{ "glGetHistogramParameterfv", (gl_function) glGetHistogramParameterfv },
{ "glGetHistogramParameteriv", (gl_function) glGetHistogramParameteriv },
{ "glGetMinmax", (gl_function) glGetMinmax },
{ "glGetMinmaxParameterfv", (gl_function) glGetMinmaxParameterfv },
{ "glGetMinmaxParameteriv", (gl_function) glGetMinmaxParameteriv },
{ "glGetSeparableFilter", (gl_function) glGetSeparableFilter },
{ "glHistogram", (gl_function) glHistogram },
{ "glMinmax", (gl_function) glMinmax },
{ "glResetHistogram", (gl_function) glResetHistogram },
{ "glResetMinmax", (gl_function) glResetMinmax },
{ "glSeparableFilter2D", (gl_function) glSeparableFilter2D },
/* GL_EXT_paletted_texture */
{ "glColorTableEXT", (gl_function) glColorTableEXT },
{ "glColorSubTableEXT", (gl_function) glColorSubTableEXT },
{ "glGetColorTableEXT", (gl_function) glGetColorTableEXT },
{ "glGetColorTableParameterfvEXT", (gl_function) glGetColorTableParameterfvEXT },
{ "glGetColorTableParameterivEXT", (gl_function) glGetColorTableParameterivEXT },
/* GL_EXT_compiled_vertex_array */
{ "glLockArraysEXT", (gl_function) glLockArraysEXT },
{ "glUnlockArraysEXT", (gl_function) glUnlockArraysEXT },
/* GL_EXT_point_parameters */
{ "glPointParameterfEXT", (gl_function) glPointParameterfEXT },
{ "glPointParameterfvEXT", (gl_function) glPointParameterfvEXT },
/* GL_EXT_polygon_offset */
{ "glPolygonOffsetEXT", (gl_function) glPolygonOffsetEXT },
/* GL_EXT_blend_minmax */
{ "glBlendEquationEXT", (gl_function) glBlendEquationEXT },
@@ -262,9 +650,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
/* GL_EXT_blend_color */
{ "glBlendColorEXT", (gl_function) glBlendColorEXT },
/* GL_EXT_polygon_offset */
{ "glPolygonOffsetEXT", (gl_function) glPolygonOffsetEXT },
/* GL_EXT_vertex_arrays */
{ "glVertexPointerEXT", (gl_function) glVertexPointerEXT },
{ "glNormalPointerEXT", (gl_function) glNormalPointerEXT },
@@ -289,13 +674,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
{ "glTexSubImage3DEXT", (gl_function) glTexSubImage3DEXT },
{ "glCopyTexSubImage3DEXT", (gl_function) glCopyTexSubImage3DEXT },
/* GL_EXT_color_table */
{ "glColorTableEXT", (gl_function) glColorTableEXT },
{ "glColorSubTableEXT", (gl_function) glColorSubTableEXT },
{ "glGetColorTableEXT", (gl_function) glGetColorTableEXT },
{ "glGetColorTableParameterfvEXT", (gl_function) glGetColorTableParameterfvEXT },
{ "glGetColorTableParameterivEXT", (gl_function) glGetColorTableParameterivEXT },
/* GL_ARB_multitexture */
{ "glActiveTextureARB", (gl_function) glActiveTextureARB },
{ "glClientActiveTextureARB", (gl_function) glClientActiveTextureARB },
@@ -332,10 +710,6 @@ void (*gl_get_proc_address( const GLubyte *procName ))()
{ "glMultiTexCoord4sARB", (gl_function) glMultiTexCoord4sARB },
{ "glMultiTexCoord4svARB", (gl_function) glMultiTexCoord4svARB },
/* GL_EXT_point_parameters */
{ "glPointParameterfEXT", (gl_function) glPointParameterfEXT },
{ "glPointParameterfvEXT", (gl_function) glPointParameterfvEXT },
/* GL_INGR_blend_func_separate */
{ "glBlendFuncSeparateINGR", (gl_function) glBlendFuncSeparateINGR },

View File

@@ -1,4 +1,4 @@
/* $Id: extensions.h,v 1.5 1999/10/16 11:30:27 brianp Exp $ */
/* $Id: extensions.h,v 1.5.2.1 1999/11/20 13:13:50 miklos Exp $ */
/*
* Mesa 3-D graphics library
@@ -39,7 +39,7 @@
*/
extern int gl_extensions_add( struct gl_context *ctx, int state,
const char *name, void (*notify)( void ) );
extern GLboolean gl_extension_is_enabled( GLcontext *ctx, const char *name);
extern int gl_extensions_enable( struct gl_context *ctx, const char *name );
extern int gl_extensions_disable( struct gl_context *ctx, const char *name );
extern void gl_extensions_dtr( struct gl_context *ctx );

View File

@@ -1,8 +1,8 @@
/* $Id: fog.c,v 1.4 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: fog.c,v 1.3.2.1 1999/11/25 16:51:24 keithw Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,64 +25,29 @@
*/
/* $XFree86: xc/lib/GL/mesa/src/fog.c,v 1.4 1999/04/04 00:20:24 dawes Exp $ */
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <math.h>
#include <stdlib.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "fog.h"
#include "macros.h"
#include "mmath.h"
#include "types.h"
#include "xform.h"
#endif
void
_mesa_Fogf(GLenum pname, GLfloat param)
void gl_Fogfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
{
_mesa_Fogfv(pname, &param);
}
void
_mesa_Fogi(GLenum pname, GLint param )
{
GLfloat fparam = (GLfloat) param;
_mesa_Fogfv(pname, &fparam);
}
void
_mesa_Fogiv(GLenum pname, const GLint *params )
{
GLfloat p[4];
switch (pname) {
case GL_FOG_MODE:
case GL_FOG_DENSITY:
case GL_FOG_START:
case GL_FOG_END:
case GL_FOG_INDEX:
p[0] = (GLfloat) *params;
break;
case GL_FOG_COLOR:
p[0] = INT_TO_FLOAT( params[0] );
p[1] = INT_TO_FLOAT( params[1] );
p[2] = INT_TO_FLOAT( params[2] );
p[3] = INT_TO_FLOAT( params[3] );
break;
default:
/* Error will be caught later in gl_Fogfv */
;
}
_mesa_Fogfv(pname, p);
}
void
_mesa_Fogfv( GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLenum m;
switch (pname) {
@@ -106,23 +71,9 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
}
break;
case GL_FOG_START:
#if 0
/* Prior to OpenGL 1.1, this was an error */
if (*params<0.0F) {
gl_error( ctx, GL_INVALID_VALUE, "glFog(GL_FOG_START)" );
return;
}
#endif
ctx->Fog.Start = *params;
break;
case GL_FOG_END:
#if 0
/* Prior to OpenGL 1.1, this was an error */
if (*params<0.0F) {
gl_error( ctx, GL_INVALID_VALUE, "glFog(GL_FOG_END)" );
return;
}
#endif
ctx->Fog.End = *params;
break;
case GL_FOG_INDEX:
@@ -150,9 +101,13 @@ _mesa_Fogfv( GLenum pname, const GLfloat *params )
typedef void (*fog_func)( struct vertex_buffer *VB, GLuint side,
GLubyte flag );
typedef void (*fog_coord_func)( struct vertex_buffer *VB,
const GLvector4f *from,
GLubyte flag );
static fog_func fog_ci_tab[2];
static fog_func fog_rgba_tab[2];
static fog_coord_func make_fog_coord_tab[2];
/*
* Compute the fogged color for an array of vertices.
@@ -206,6 +161,70 @@ void gl_fog_vertices( struct vertex_buffer *VB )
}
}
static void check_fog_coords( GLcontext *ctx, struct gl_pipeline_stage *d )
{
d->type = 0;
if (ctx->FogMode==FOG_FRAGMENT)
{
d->type = PIPE_IMMEDIATE|PIPE_PRECALC;
d->inputs = VERT_OBJ_ANY;
d->outputs = VERT_FOG_COORD;
}
}
void gl_make_fog_coords( struct vertex_buffer *VB )
{
GLcontext *ctx = VB->ctx;
/* If full eye coords weren't required, just calculate the eye Z
* values.
*/
if (!ctx->NeedEyeCoords) {
GLfloat *m = ctx->ModelView.m;
GLfloat plane[4];
plane[0] = m[2];
plane[1] = m[6];
plane[2] = m[10];
plane[3] = m[14];
gl_dotprod_tab[0][VB->ObjPtr->size](&VB->Eye,
2, /* fill z coordinates */
VB->ObjPtr,
plane,
0 );
make_fog_coord_tab[0]( VB, &VB->Eye, 0 );
}
else
{
make_fog_coord_tab[0]( VB, VB->EyePtr, 0 );
}
}
/* Drivers that want fog coordinates in VB->Spec[0] alpha, can substitute this
* stage for the default PIPE_OP_FOG pipeline stage.
*/
struct gl_pipeline_stage gl_fog_coord_stage = {
"build fog coordinates",
PIPE_OP_FOG,
PIPE_PRECALC|PIPE_IMMEDIATE,
0,
NEW_FOG,
NEW_LIGHTING|NEW_RASTER_OPS|NEW_FOG|NEW_MODELVIEW,
0, 0,
0, 0, 0,
check_fog_coords,
gl_make_fog_coords
};
/*
* Apply fog to an array of RGBA pixels.
* Input: n - number of pixels

View File

@@ -1,8 +1,8 @@
/* $Id: fog.h,v 1.2 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: fog.h,v 1.1.1.1.2.1 1999/11/25 16:51:24 keithw Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,6 +25,7 @@
*/
#ifndef FOG_H
#define FOG_H
@@ -32,21 +33,7 @@
#include "types.h"
extern void
_mesa_Fogf(GLenum pname, GLfloat param);
extern void
_mesa_Fogi(GLenum pname, GLint param );
extern void
_mesa_Fogfv(GLenum pname, const GLfloat *params );
extern void
_mesa_Fogiv(GLenum pname, const GLint *params );
extern void gl_Fogfv( GLcontext *ctx, GLenum pname, const GLfloat *params );
extern void gl_fog_vertices( struct vertex_buffer *VB );
@@ -58,7 +45,11 @@ extern void gl_fog_rgba_pixels( const GLcontext *ctx,
extern void gl_fog_ci_pixels( const GLcontext *ctx,
GLuint n, const GLdepth z[], GLuint indx[] );
extern void gl_make_fog_coords( struct vertex_buffer *VB );
extern struct gl_pipeline_stage gl_fog_coord_stage;
extern void gl_init_fog( void );
#endif

View File

@@ -1,8 +1,8 @@
/* $Id: get.c,v 1.6 1999/11/11 01:22:26 brianp Exp $ */
/* $Id: get.c,v 1.5.2.1 1999/12/13 21:58:42 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,10 +25,18 @@
*/
/* $XFree86: xc/lib/GL/mesa/src/get.c,v 1.3 1999/04/04 00:20:25 dawes Exp $ */
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <stdio.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "enable.h"
#include "enums.h"
@@ -58,10 +66,8 @@
void
_mesa_GetBooleanv( GLenum pname, GLboolean *params )
void gl_GetBooleanv( GLcontext *ctx, GLenum pname, GLboolean *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint i;
GLuint texUnit = ctx->Texture.CurrentUnit;
GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
@@ -742,13 +748,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
*params = INT_TO_BOOL(0); /* TODO */
break;
case GL_TEXTURE_1D:
*params = _mesa_IsEnabled(GL_TEXTURE_1D );
*params = gl_IsEnabled( ctx, GL_TEXTURE_1D );
break;
case GL_TEXTURE_2D:
*params = _mesa_IsEnabled(GL_TEXTURE_2D );
*params = gl_IsEnabled( ctx, GL_TEXTURE_2D );
break;
case GL_TEXTURE_3D:
*params = _mesa_IsEnabled(GL_TEXTURE_3D );
*params = gl_IsEnabled( ctx, GL_TEXTURE_3D );
break;
case GL_TEXTURE_BINDING_1D:
*params = INT_TO_BOOL(textureUnit->CurrentD[1]->Name);
@@ -972,10 +978,8 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
void
_mesa_GetDoublev( GLenum pname, GLdouble *params )
void gl_GetDoublev( GLcontext *ctx, GLenum pname, GLdouble *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint i;
GLuint texUnit = ctx->Texture.CurrentUnit;
GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
@@ -1656,13 +1660,13 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
*params = 0.0; /* TODO */
break;
case GL_TEXTURE_1D:
*params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_2D:
*params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_3D:
*params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_BINDING_1D:
*params = (GLdouble) textureUnit->CurrentD[1]->Name;
@@ -1889,10 +1893,8 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
void
_mesa_GetFloatv( GLenum pname, GLfloat *params )
void gl_GetFloatv( GLcontext *ctx, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint i;
GLuint texUnit = ctx->Texture.CurrentUnit;
GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
@@ -2570,13 +2572,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
*params = 0.0F; /* TODO */
break;
case GL_TEXTURE_1D:
*params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_2D:
*params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_3D:
*params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1.0 : 0.0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1.0 : 0.0;
break;
case GL_TEXTURE_BINDING_1D:
*params = (GLfloat) textureUnit->CurrentD[1]->Name;
@@ -2800,10 +2802,8 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
void
_mesa_GetIntegerv( GLenum pname, GLint *params )
void gl_GetIntegerv( GLcontext *ctx, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint i;
GLuint texUnit = ctx->Texture.CurrentUnit;
GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;
@@ -3485,13 +3485,13 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
*params = 0; /* TODO */
break;
case GL_TEXTURE_1D:
*params = _mesa_IsEnabled(GL_TEXTURE_1D) ? 1 : 0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_1D) ? 1 : 0;
break;
case GL_TEXTURE_2D:
*params = _mesa_IsEnabled(GL_TEXTURE_2D) ? 1 : 0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_2D) ? 1 : 0;
break;
case GL_TEXTURE_3D:
*params = _mesa_IsEnabled(GL_TEXTURE_3D) ? 1 : 0;
*params = gl_IsEnabled(ctx, GL_TEXTURE_3D) ? 1 : 0;
break;
case GL_TEXTURE_BINDING_1D:
*params = textureUnit->CurrentD[1]->Name;
@@ -3725,10 +3725,8 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
void
_mesa_GetPointerv( GLenum pname, GLvoid **params )
void gl_GetPointerv( GLcontext *ctx, GLenum pname, GLvoid **params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint texUnit = ctx->Texture.CurrentUnit;
/*GLuint texTransformUnit = ctx->Texture.CurrentTransformUnit;*/
@@ -3768,13 +3766,11 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
const GLubyte *
_mesa_GetString( GLenum name )
const GLubyte *gl_GetString( GLcontext *ctx, GLenum name )
{
GET_CURRENT_CONTEXT(ctx);
static char result[1000];
static char *vendor = "Brian Paul";
static char *version = "1.2 Mesa 3.3 beta";
static char *version = "1.2 Mesa 3.1";
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glGetString", 0);
@@ -3815,24 +3811,3 @@ _mesa_GetString( GLenum name )
return NULL;
}
}
/*
* Execute a glGetError command
*/
GLenum
_mesa_GetError( void )
{
GET_CURRENT_CONTEXT(ctx);
GLenum e = ctx->ErrorValue;
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL( ctx, "glGetError", (GLenum) 0);
if (MESA_VERBOSE & VERBOSE_API)
fprintf(stderr, "glGetError <-- %s\n", gl_lookup_enum_by_nr(e));
ctx->ErrorValue = (GLenum) GL_NO_ERROR;
return e;
}

View File

@@ -1,8 +1,8 @@
/* $Id: light.c,v 1.9 1999/11/11 01:22:27 brianp Exp $ */
/* $Id: light.c,v 1.8.2.1 1999/11/22 19:01:39 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,16 +25,27 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#include <float.h>
#ifndef XFree86Server
#include <assert.h>
#include <float.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "enums.h"
#include "light.h"
#include "macros.h"
#include "matrix.h"
#include "mem.h"
#include "mmath.h"
#include "simple_list.h"
#include "types.h"
@@ -44,20 +55,21 @@
void
_mesa_ShadeModel( GLenum mode )
void gl_ShadeModel( GLcontext *ctx, GLenum mode )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glShadeModel");
if (MESA_VERBOSE & VERBOSE_API)
fprintf(stderr, "glShadeModel %s\n", gl_lookup_enum_by_nr(mode));
if (mode == GL_FLAT || mode == GL_SMOOTH) {
if (ctx->Light.ShadeModel!=mode) {
ctx->Light.ShadeModel = mode;
ctx->TriangleCaps ^= DD_FLATSHADE;
ctx->NewState |= NEW_RASTER_OPS;
if (ctx->Light.ShadeModel != mode) {
ctx->Light.ShadeModel = mode;
if (ctx->Light.ShadeModel == GL_FLAT)
ctx->TriangleCaps |= DD_FLATSHADE;
else
ctx->TriangleCaps &= ~DD_FLATSHADE;
ctx->NewState |= NEW_RASTER_OPS;
if (ctx->Driver.ShadeModel)
(*ctx->Driver.ShadeModel)( ctx, mode );
}
@@ -69,25 +81,19 @@ _mesa_ShadeModel( GLenum mode )
void
_mesa_Lightf( GLenum light, GLenum pname, GLfloat param )
void gl_Lightfv( GLcontext *ctx,
GLenum light, GLenum pname, const GLfloat *params,
GLint nparams )
{
_mesa_Lightfv( light, pname, &param );
}
void
_mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLint l;
GLint nParams;
(void) nparams;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLight");
l = (GLint) (light - GL_LIGHT0);
if (l < 0 || l >= MAX_LIGHTS) {
if (l<0 || l>=MAX_LIGHTS) {
gl_error( ctx, GL_INVALID_ENUM, "glLight" );
return;
}
@@ -95,22 +101,18 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
switch (pname) {
case GL_AMBIENT:
COPY_4V( ctx->Light.Light[l].Ambient, params );
nParams = 4;
break;
case GL_DIFFUSE:
COPY_4V( ctx->Light.Light[l].Diffuse, params );
nParams = 4;
break;
case GL_SPECULAR:
COPY_4V( ctx->Light.Light[l].Specular, params );
nParams = 4;
break;
case GL_POSITION:
/* transform position by ModelView matrix */
TRANSFORM_POINT( ctx->Light.Light[l].EyePosition,
ctx->ModelView.m,
params );
nParams = 4;
break;
case GL_SPOT_DIRECTION:
/* transform direction by inverse modelview */
@@ -120,7 +122,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
TRANSFORM_NORMAL( ctx->Light.Light[l].EyeDirection,
params,
ctx->ModelView.inv );
nParams = 3;
break;
case GL_SPOT_EXPONENT:
if (params[0]<0.0 || params[0]>128.0) {
@@ -131,7 +132,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
ctx->Light.Light[l].SpotExponent = params[0];
gl_compute_spot_exp_table( &ctx->Light.Light[l] );
}
nParams = 1;
break;
case GL_SPOT_CUTOFF:
if ((params[0]<0.0 || params[0]>90.0) && params[0]!=180.0) {
@@ -142,7 +142,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
ctx->Light.Light[l].CosCutoff = cos(params[0]*DEG2RAD);
if (ctx->Light.Light[l].CosCutoff < 0)
ctx->Light.Light[l].CosCutoff = 0;
nParams = 1;
break;
case GL_CONSTANT_ATTENUATION:
if (params[0]<0.0) {
@@ -150,7 +149,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
return;
}
ctx->Light.Light[l].ConstantAttenuation = params[0];
nParams = 1;
break;
case GL_LINEAR_ATTENUATION:
if (params[0]<0.0) {
@@ -158,7 +156,6 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
return;
}
ctx->Light.Light[l].LinearAttenuation = params[0];
nParams = 1;
break;
case GL_QUADRATIC_ATTENUATION:
if (params[0]<0.0) {
@@ -166,73 +163,23 @@ _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
return;
}
ctx->Light.Light[l].QuadraticAttenuation = params[0];
nParams = 1;
break;
default:
gl_error( ctx, GL_INVALID_ENUM, "glLight" );
return;
break;
}
if (ctx->Driver.Lightfv)
ctx->Driver.Lightfv( ctx, light, pname, params, nParams );
ctx->Driver.Lightfv( ctx, light, pname, params, nparams );
ctx->NewState |= NEW_LIGHTING;
}
void
_mesa_Lighti( GLenum light, GLenum pname, GLint param )
void gl_GetLightfv( GLcontext *ctx,
GLenum light, GLenum pname, GLfloat *params )
{
_mesa_Lightiv( light, pname, &param );
}
void
_mesa_Lightiv( GLenum light, GLenum pname, const GLint *params )
{
GLfloat fparam[4];
switch (pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
fparam[0] = INT_TO_FLOAT( params[0] );
fparam[1] = INT_TO_FLOAT( params[1] );
fparam[2] = INT_TO_FLOAT( params[2] );
fparam[3] = INT_TO_FLOAT( params[3] );
break;
case GL_POSITION:
fparam[0] = (GLfloat) params[0];
fparam[1] = (GLfloat) params[1];
fparam[2] = (GLfloat) params[2];
fparam[3] = (GLfloat) params[3];
break;
case GL_SPOT_DIRECTION:
fparam[0] = (GLfloat) params[0];
fparam[1] = (GLfloat) params[1];
fparam[2] = (GLfloat) params[2];
break;
case GL_SPOT_EXPONENT:
case GL_SPOT_CUTOFF:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
fparam[0] = (GLfloat) params[0];
break;
default:
/* error will be caught later in gl_Lightfv */
;
}
_mesa_Lightfv( light, pname, fparam );
}
void
_mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLint l = (GLint) (light - GL_LIGHT0);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetLight");
@@ -281,10 +228,8 @@ _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
void
_mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
void gl_GetLightiv( GLcontext *ctx, GLenum light, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
GLint l = (GLint) (light - GL_LIGHT0);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetLight");
@@ -352,11 +297,9 @@ _mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
/**********************************************************************/
void
_mesa_LightModelfv( GLenum pname, const GLfloat *params )
void gl_LightModelfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModelfv");
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModel");
switch (pname) {
case GL_LIGHT_MODEL_AMBIENT:
@@ -400,46 +343,6 @@ _mesa_LightModelfv( GLenum pname, const GLfloat *params )
}
void
_mesa_LightModeliv( GLenum pname, const GLint *params )
{
GLfloat fparam[4];
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLightModeliv");
switch (pname) {
case GL_LIGHT_MODEL_AMBIENT:
fparam[0] = INT_TO_FLOAT( params[0] );
fparam[1] = INT_TO_FLOAT( params[1] );
fparam[2] = INT_TO_FLOAT( params[2] );
fparam[3] = INT_TO_FLOAT( params[3] );
break;
case GL_LIGHT_MODEL_LOCAL_VIEWER:
case GL_LIGHT_MODEL_TWO_SIDE:
case GL_LIGHT_MODEL_COLOR_CONTROL:
fparam[0] = (GLfloat) params[0];
break;
default:
/* Error will be caught later in gl_LightModelfv */
;
}
_mesa_LightModelfv( pname, fparam );
}
void
_mesa_LightModeli( GLenum pname, GLint param )
{
_mesa_LightModeliv( pname, &param );
}
void
_mesa_LightModelf( GLenum pname, GLfloat param )
{
_mesa_LightModelfv( pname, &param );
}
/********** MATERIAL **********/
@@ -665,11 +568,11 @@ void gl_update_color_material( GLcontext *ctx,
GLfloat tmp[4], color[4];
UBYTE_RGBA_TO_FLOAT_RGBA( color, rgba );
if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
fprintf(stderr, "gl_update_color_material, mask %x\n", bitmask);
if (bitmask & FRONT_AMBIENT_BIT) {
struct gl_material *mat = &ctx->Light.Material[0];
SUB_3V( tmp, color, mat->Ambient );
@@ -772,10 +675,8 @@ void gl_update_color_material( GLcontext *ctx,
void
_mesa_ColorMaterial( GLenum face, GLenum mode )
void gl_ColorMaterial( GLcontext *ctx, GLenum face, GLenum mode )
{
GET_CURRENT_CONTEXT(ctx);
GLuint bitmask;
GLuint legal = (FRONT_EMISSION_BIT | BACK_EMISSION_BIT |
FRONT_SPECULAR_BIT | BACK_SPECULAR_BIT |
@@ -803,21 +704,12 @@ _mesa_ColorMaterial( GLenum face, GLenum mode )
void
_mesa_Materialf( GLenum face, GLenum pname, GLfloat param )
{
_mesa_Materialfv( face, pname, &param );
}
/* KW: This is now called directly (ie by name) from the glMaterial*
* API functions.
*/
void
_mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
void gl_Materialfv( GLcontext *ctx,
GLenum face, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
struct immediate *IM;
struct gl_material *mat;
GLuint bitmask;
@@ -843,7 +735,6 @@ _mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
IM->MaterialMask[count] = 0;
}
IM->MaterialMask[count] |= bitmask;
mat = IM->Material[count];
@@ -892,48 +783,11 @@ _mesa_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
}
void
_mesa_Materiali(GLenum face, GLenum pname, GLint param )
void gl_GetMaterialfv( GLcontext *ctx,
GLenum face, GLenum pname, GLfloat *params )
{
_mesa_Materialiv(face, pname, &param);
}
void
_mesa_Materialiv(GLenum face, GLenum pname, const GLint *params )
{
GLfloat fparam[4];
switch (pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
case GL_EMISSION:
case GL_AMBIENT_AND_DIFFUSE:
fparam[0] = INT_TO_FLOAT( params[0] );
fparam[1] = INT_TO_FLOAT( params[1] );
fparam[2] = INT_TO_FLOAT( params[2] );
fparam[3] = INT_TO_FLOAT( params[3] );
break;
case GL_SHININESS:
fparam[0] = (GLfloat) params[0];
break;
case GL_COLOR_INDEXES:
fparam[0] = (GLfloat) params[0];
fparam[1] = (GLfloat) params[1];
fparam[2] = (GLfloat) params[2];
break;
default:
/* Error will be caught later in gl_Materialfv */
;
}
_mesa_Materialfv(face, pname, fparam);
}
void
_mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint f;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetMaterialfv");
@@ -976,10 +830,9 @@ _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
void
_mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
void gl_GetMaterialiv( GLcontext *ctx,
GLenum face, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint f;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glGetMaterialiv");
@@ -1268,7 +1121,7 @@ void gl_update_lighting( GLcontext *ctx )
void gl_compute_light_positions( GLcontext *ctx )
{
struct gl_light *light;
if (ctx->Light.NeedVertices && !ctx->Light.Model.LocalViewer) {
GLfloat eye_z[3] = { 0, 0, 1 };
if (!ctx->NeedEyeCoords) {

View File

@@ -1,8 +1,8 @@
/* $Id: lines.c,v 1.6 1999/11/11 01:22:27 brianp Exp $ */
/* $Id: lines.c,v 1.5.2.1 1999/11/25 16:51:24 keithw Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,10 +25,17 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "depth.h"
#include "feedback.h"
@@ -43,10 +50,8 @@
void
_mesa_LineWidth( GLfloat width )
void gl_LineWidth( GLcontext *ctx, GLfloat width )
{
GET_CURRENT_CONTEXT(ctx);
if (width<=0.0) {
gl_error( ctx, GL_INVALID_VALUE, "glLineWidth" );
return;
@@ -63,10 +68,8 @@ _mesa_LineWidth( GLfloat width )
void
_mesa_LineStipple( GLint factor, GLushort pattern )
void gl_LineStipple( GLcontext *ctx, GLint factor, GLushort pattern )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glLineStipple");
ctx->Line.StippleFactor = CLAMP( factor, 1, 256 );
ctx->Line.StipplePattern = pattern;
@@ -1024,8 +1027,7 @@ void gl_set_line_function( GLcontext *ctx )
else {
if (ctx->Light.ShadeModel==GL_SMOOTH) {
/* Width==1, non-stippled, smooth-shaded */
if (ctx->Depth.Test
|| (ctx->Fog.Enabled && ctx->Hint.Fog==GL_NICEST)) {
if (ctx->Depth.Test || ctx->FogMode == FOG_FRAGMENT) {
if (rgbmode)
ctx->Driver.LineFunc = smooth_rgba_z_line;
else
@@ -1040,8 +1042,7 @@ void gl_set_line_function( GLcontext *ctx )
}
else {
/* Width==1, non-stippled, flat-shaded */
if (ctx->Depth.Test
|| (ctx->Fog.Enabled && ctx->Hint.Fog==GL_NICEST)) {
if (ctx->Depth.Test || ctx->FogMode == FOG_FRAGMENT) {
if (rgbmode)
ctx->Driver.LineFunc = flat_rgba_z_line;
else

View File

@@ -1,8 +1,8 @@
/* $Id: stencil.c,v 1.9 1999/11/11 01:22:27 brianp Exp $ */
/* $Id: stencil.c,v 1.8.2.1 1999/12/04 21:15:31 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,12 +25,19 @@
*/
/* $XFree86: xc/lib/GL/mesa/src/stencil.c,v 1.3 1999/04/04 00:20:32 dawes Exp $ */
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <stdlib.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "mem.h"
#include "macros.h"
#include "pb.h"
#include "stencil.h"
#include "types.h"
@@ -38,15 +45,6 @@
#endif
#if STENCIL_BITS==8
# define STENCIL_MAX 0xff
#elif STENCIL_BITS==16
# define STENCIL_MAX 0xffff
#else
illegal number of stencil bits
#endif
/*
* Return the address of a stencil buffer value given the window coords:
@@ -54,10 +52,8 @@
#define STENCIL_ADDRESS(X,Y) (ctx->Buffer->Stencil + ctx->Buffer->Width * (Y) + (X))
void
_mesa_ClearStencil( GLint s )
void gl_ClearStencil( GLcontext *ctx, GLint s )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glClearStencil");
ctx->Stencil.Clear = (GLstencil) s;
@@ -68,10 +64,8 @@ _mesa_ClearStencil( GLint s )
void
_mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
void gl_StencilFunc( GLcontext *ctx, GLenum func, GLint ref, GLuint mask )
{
GET_CURRENT_CONTEXT(ctx);
GLint maxref;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilFunc");
@@ -103,10 +97,8 @@ _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
void
_mesa_StencilMask( GLuint mask )
void gl_StencilMask( GLcontext *ctx, GLuint mask )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilMask");
ctx->Stencil.WriteMask = (GLstencil) mask;
@@ -117,10 +109,8 @@ _mesa_StencilMask( GLuint mask )
void
_mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
void gl_StencilOp( GLcontext *ctx, GLenum fail, GLenum zfail, GLenum zpass )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glStencilOp");
switch (fail) {
case GL_KEEP:
@@ -178,19 +168,14 @@ _mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
/* Stencil Logic:
IF stencil test fails THEN
Apply fail-op to stencil value
Don't write the pixel (RGBA,Z)
Execute FailOp
ELSE
Write the pixel
ENDIF
Perform Depth Test
IF depth test passes OR no depth buffer THEN
Execute ZPass
Write the pixel
ELSE
Execute ZFail
IF doing depth test && depth test fails THEN
Apply zfail-op to stencil value
Write RGBA and Z to appropriate buffers
ELSE
Apply zpass-op to stencil value
ENDIF
*/
@@ -199,21 +184,19 @@ ENDIF
/*
* Apply the given stencil operator for each pixel in the span whose
* mask flag is set.
* Apply the given stencil operator to the array of stencil values.
* Don't touch stencil[i] if mask[i] is zero.
* Input: n - number of pixels in the span
* x, y - location of leftmost pixel in the span
* oper - the stencil buffer operator
* stencil - array of stencil values
* mask - array [n] of flag: 1=apply operator, 0=don't apply operator
*/
static void apply_stencil_op_to_span( GLcontext *ctx,
GLuint n, GLint x, GLint y,
GLenum oper, GLubyte mask[] )
static void apply_stencil_op( GLcontext *ctx, GLenum oper,
GLuint n, GLstencil stencil[], GLubyte mask[] )
{
const GLstencil ref = ctx->Stencil.Ref;
const GLstencil wrtmask = ctx->Stencil.WriteMask;
const GLstencil invmask = (GLstencil) (~ctx->Stencil.WriteMask);
GLstencil *stencil = STENCIL_ADDRESS( x, y );
GLuint i;
switch (oper) {
@@ -352,7 +335,7 @@ static void apply_stencil_op_to_span( GLcontext *ctx,
}
break;
default:
gl_problem(ctx, "Bad stencilop in apply_stencil_op_to_span");
gl_problem(ctx, "Bad stencil op in apply_stencil_op");
}
}
@@ -527,7 +510,9 @@ GLint gl_stencil_span( GLcontext *ctx,
return 0;
}
apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.FailFunc, fail );
if (ctx->Stencil.FailFunc != GL_KEEP) {
apply_stencil_op( ctx, ctx->Stencil.FailFunc, n, stencil, fail );
}
return (allfail) ? 0 : 1;
}
@@ -547,11 +532,13 @@ void gl_depth_stencil_span( GLcontext *ctx,
GLuint n, GLint x, GLint y, const GLdepth z[],
GLubyte mask[] )
{
GLstencil *stencil = STENCIL_ADDRESS(x, y);
if (ctx->Depth.Test==GL_FALSE) {
/*
* No depth buffer, just apply zpass stencil function to active pixels.
*/
apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZPassFunc, mask );
apply_stencil_op( ctx, ctx->Stencil.ZPassFunc, n, stencil, mask );
}
else {
/*
@@ -560,31 +547,36 @@ void gl_depth_stencil_span( GLcontext *ctx,
GLubyte passmask[MAX_WIDTH], failmask[MAX_WIDTH], oldmask[MAX_WIDTH];
GLuint i;
/* init pass and fail masks to zero, copy mask[] to oldmask[] */
for (i=0;i<n;i++) {
passmask[i] = failmask[i] = 0;
oldmask[i] = mask[i];
}
/* save the current mask bits */
MEMCPY(oldmask, mask, n * sizeof(GLubyte));
/* apply the depth test */
if (ctx->Driver.DepthTestSpan)
(*ctx->Driver.DepthTestSpan)( ctx, n, x, y, z, mask );
/* set the stencil pass/fail flags according to result of depth test */
/* Set the stencil pass/fail flags according to result of depth testing.
* if oldmask[i] == 0 then
* Don't touch the stencil value
* else if oldmask[i] and newmask[i] then
* Depth test passed
* else
* assert(oldmask[i] && !newmask[i])
* Depth test failed
* endif
*/
for (i=0;i<n;i++) {
if (oldmask[i]) {
if (mask[i]) {
passmask[i] = 1;
}
else {
failmask[i] = 1;
}
}
ASSERT(mask[i] == 0 || mask[i] == 1);
passmask[i] = oldmask[i] & mask[i];
failmask[i] = oldmask[i] & (mask[i] ^ 1);
}
/* apply the pass and fail operations */
apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZFailFunc, failmask );
apply_stencil_op_to_span( ctx, n, x, y, ctx->Stencil.ZPassFunc, passmask );
if (ctx->Stencil.ZFailFunc != GL_KEEP) {
apply_stencil_op( ctx, ctx->Stencil.ZFailFunc, n, stencil, failmask );
}
if (ctx->Stencil.ZPassFunc != GL_KEEP) {
apply_stencil_op( ctx, ctx->Stencil.ZPassFunc, n, stencil, passmask );
}
}
}
@@ -964,26 +956,27 @@ void gl_depth_stencil_pixels( GLcontext *ctx,
GLubyte passmask[PB_SIZE], failmask[PB_SIZE], oldmask[PB_SIZE];
GLuint i;
/* init pass and fail masks to zero */
for (i=0;i<n;i++) {
passmask[i] = failmask[i] = 0;
oldmask[i] = mask[i];
}
/* save the current mask bits */
MEMCPY(oldmask, mask, n * sizeof(GLubyte));
/* apply the depth test */
if (ctx->Driver.DepthTestPixels)
(*ctx->Driver.DepthTestPixels)( ctx, n, x, y, z, mask );
/* set the stencil pass/fail flags according to result of depth test */
/* Set the stencil pass/fail flags according to result of depth testing.
* if oldmask[i] == 0 then
* Don't touch the stencil value
* else if oldmask[i] and newmask[i] then
* Depth test passed
* else
* assert(oldmask[i] && !newmask[i])
* Depth test failed
* endif
*/
for (i=0;i<n;i++) {
if (oldmask[i]) {
if (mask[i]) {
passmask[i] = 1;
}
else {
failmask[i] = 1;
}
}
ASSERT(mask[i] == 0 || mask[i] == 1);
passmask[i] = oldmask[i] & mask[i];
failmask[i] = oldmask[i] & (mask[i] ^ 1);
}
/* apply the pass and fail operations */
@@ -1062,7 +1055,7 @@ void gl_alloc_stencil_buffer( GLcontext *ctx )
ctx->Buffer->Stencil = (GLstencil *) MALLOC(buffersize * sizeof(GLstencil));
if (!ctx->Buffer->Stencil) {
/* out of memory */
_mesa_set_enable( ctx, GL_STENCIL_TEST, GL_FALSE );
gl_set_enable( ctx, GL_STENCIL_TEST, GL_FALSE );
gl_error( ctx, GL_OUT_OF_MEMORY, "gl_alloc_stencil_buffer" );
}
}
@@ -1083,30 +1076,63 @@ void gl_clear_stencil_buffer( GLcontext *ctx )
if (ctx->Scissor.Enabled) {
/* clear scissor region only */
GLint y;
GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
const GLint width = ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1;
if (ctx->Stencil.WriteMask != STENCIL_MAX) {
/* must apply mask to the clear */
GLint y;
for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
GLint x;
const GLstencil mask = ctx->Stencil.WriteMask;
const GLstencil invMask = ~mask;
const GLstencil clearVal = (ctx->Stencil.Clear & mask);
for (x = 0; x < width; x++) {
ptr[x] = (ptr[x] & invMask) | clearVal;
}
}
}
else {
/* no masking */
GLint y;
for (y=ctx->Buffer->Ymin; y<=ctx->Buffer->Ymax; y++) {
GLstencil *ptr = STENCIL_ADDRESS( ctx->Buffer->Xmin, y );
#if STENCIL_BITS==8
MEMSET( ptr, ctx->Stencil.Clear, width * sizeof(GLstencil) );
MEMSET( ptr, ctx->Stencil.Clear, width * sizeof(GLstencil) );
#else
GLint x;
for (x = 0; x < width; x++)
ptr[x] = ctx->Stencil.Clear;
GLint x;
for (x = 0; x < width; x++)
ptr[x] = ctx->Stencil.Clear;
#endif
}
}
}
else {
/* clear whole stencil buffer */
if (ctx->Stencil.WriteMask != STENCIL_MAX) {
/* must apply mask to the clear */
const GLuint n = ctx->Buffer->Width * ctx->Buffer->Height;
GLstencil *buffer = ctx->Buffer->Stencil;
const GLstencil mask = ctx->Stencil.WriteMask;
const GLstencil invMask = ~mask;
const GLstencil clearVal = (ctx->Stencil.Clear & mask);
GLuint i;
for (i = 0; i < n; i++) {
buffer[i] = (buffer[i] & invMask) | clearVal;
}
}
else {
/* clear whole buffer without masking */
const GLuint n = ctx->Buffer->Width * ctx->Buffer->Height;
GLstencil *buffer = ctx->Buffer->Stencil;
#if STENCIL_BITS==8
MEMSET( ctx->Buffer->Stencil, ctx->Stencil.Clear,
ctx->Buffer->Width * ctx->Buffer->Height * sizeof(GLstencil) );
MEMSET(buffer, ctx->Stencil.Clear, n * sizeof(GLstencil) );
#else
GLuint i;
GLuint pixels = ctx->Buffer->Width * ctx->Buffer->Height;
GLstencil *buffer = ctx->Buffer->Stencil;
for (i = 0; i < pixels; i++)
ptr[i] = ctx->Stencil.Clear;
GLuint i;
for (i = 0; i < n; i++) {
buffer[i] = ctx->Stencil.Clear;
}
#endif
}
}
}

View File

@@ -1,8 +1,8 @@
/* $Id: texobj.c,v 1.8 1999/11/11 01:22:28 brianp Exp $ */
/* $Id: texobj.c,v 1.7.2.1 1999/12/01 21:07:26 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -23,16 +23,25 @@
* 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.
*/
/* $XFree86: xc/lib/GL/mesa/src/texobj.c,v 1.3 1999/04/04 00:20:32 dawes Exp $ */
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "enums.h"
#include "hash.h"
#include "mem.h"
#include "macros.h"
#include "teximage.h"
#include "texstate.h"
#include "texobj.h"
@@ -56,7 +65,7 @@ gl_alloc_texture_object( struct gl_shared_state *shared, GLuint name,
{
struct gl_texture_object *obj;
assert(dimensions <= 3);
ASSERT(dimensions <= 3);
obj = (struct gl_texture_object *)
calloc(1,sizeof(struct gl_texture_object));
@@ -74,13 +83,13 @@ gl_alloc_texture_object( struct gl_shared_state *shared, GLuint name,
obj->BaseLevel = 0;
obj->MaxLevel = 1000;
obj->MinMagThresh = 0.0F;
obj->Palette.Table[0] = 255;
obj->Palette.Table[1] = 255;
obj->Palette.Table[2] = 255;
obj->Palette.Table[3] = 255;
obj->Palette.Size = 1;
obj->Palette.IntFormat = GL_RGBA;
obj->Palette.Format = GL_RGBA;
obj->Palette[0] = 255;
obj->Palette[1] = 255;
obj->Palette[2] = 255;
obj->Palette[3] = 255;
obj->PaletteSize = 1;
obj->PaletteIntFormat = GL_RGBA;
obj->PaletteFormat = GL_RGBA;
/* insert into linked list */
if (shared) {
@@ -325,10 +334,8 @@ void gl_test_texture_object_completeness( const GLcontext *ctx, struct gl_textur
/*
* Execute glGenTextures
*/
void
_mesa_GenTextures( GLsizei n, GLuint *texName )
void gl_GenTextures( GLcontext *ctx, GLsizei n, GLuint *texName )
{
GET_CURRENT_CONTEXT(ctx);
GLuint first;
GLint i;
@@ -358,10 +365,8 @@ _mesa_GenTextures( GLsizei n, GLuint *texName )
/*
* Execute glDeleteTextures
*/
void
_mesa_DeleteTextures( GLsizei n, const GLuint *texName)
void gl_DeleteTextures( GLcontext *ctx, GLsizei n, const GLuint *texName)
{
GET_CURRENT_CONTEXT(ctx);
GLint i;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDeleteTextures");
@@ -404,10 +409,8 @@ _mesa_DeleteTextures( GLsizei n, const GLuint *texName)
/*
* Execute glBindTexture
*/
void
_mesa_BindTexture( GLenum target, GLuint texName )
void gl_BindTexture( GLcontext *ctx, GLenum target, GLuint texName )
{
GET_CURRENT_CONTEXT(ctx);
GLuint unit = ctx->Texture.CurrentUnit;
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
struct gl_texture_object *oldTexObj;
@@ -420,14 +423,21 @@ _mesa_BindTexture( GLenum target, GLuint texName )
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glBindTexture");
dim = (GLuint) (target - GL_TEXTURE_1D);
if (dim < 0 || dim > 2) {
gl_error( ctx, GL_INVALID_ENUM, "glBindTexture" );
return;
switch (target) {
case GL_TEXTURE_1D:
dim = 1;
break;
case GL_TEXTURE_2D:
dim = 2;
break;
case GL_TEXTURE_3D:
dim = 3;
break;
default:
gl_error( ctx, GL_INVALID_ENUM, "glBindTexture(target)" );
return;
}
dim++;
oldTexObj = texUnit->CurrentD[dim];
if (oldTexObj->Name == texName)
@@ -444,6 +454,7 @@ _mesa_BindTexture( GLenum target, GLuint texName )
if (newTexObj->Dimensions != dim) {
if (newTexObj->Dimensions) {
/* the named texture object's dimensions don't match the target */
gl_error( ctx, GL_INVALID_OPERATION, "glBindTexture" );
return;
}
@@ -498,11 +509,10 @@ _mesa_BindTexture( GLenum target, GLuint texName )
/*
* Execute glPrioritizeTextures
*/
void
_mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
const GLclampf *priorities )
void gl_PrioritizeTextures( GLcontext *ctx,
GLsizei n, const GLuint *texName,
const GLclampf *priorities )
{
GET_CURRENT_CONTEXT(ctx);
GLint i;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glPrioritizeTextures");
@@ -531,11 +541,10 @@ _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
/*
* Execute glAreTexturesResident
*/
GLboolean
_mesa_AreTexturesResident( GLsizei n, const GLuint *texName,
GLboolean *residences )
GLboolean gl_AreTexturesResident( GLcontext *ctx, GLsizei n,
const GLuint *texName,
GLboolean *residences )
{
GET_CURRENT_CONTEXT(ctx);
GLboolean resident = GL_TRUE;
GLint i;
@@ -574,10 +583,8 @@ _mesa_AreTexturesResident( GLsizei n, const GLuint *texName,
/*
* Execute glIsTexture
*/
GLboolean
_mesa_IsTexture( GLuint texture )
GLboolean gl_IsTexture( GLcontext *ctx, GLuint texture )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH_WITH_RETVAL(ctx, "glIsTextures",
GL_FALSE);
if (texture>0 && HashLookup(ctx->Shared->TexObjects, texture)) {

View File

@@ -1,8 +1,8 @@
/* $Id: texstate.c,v 1.5 1999/11/11 01:22:28 brianp Exp $ */
/* $Id: texstate.c,v 1.4.2.2 1999/11/22 13:54:02 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
* Version: 3.1
*
* Copyright (C) 1999 Brian Paul All Rights Reserved.
*
@@ -25,12 +25,19 @@
*/
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <assert.h>
#include <stdio.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "enums.h"
#include "extensions.h"
#include "macros.h"
#include "matrix.h"
#include "texobj.h"
@@ -60,10 +67,9 @@
/**********************************************************************/
void
_mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
void gl_TexEnvfv( GLcontext *ctx,
GLenum target, GLenum pname, const GLfloat *param )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexEnv");
@@ -88,9 +94,8 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
case GL_BLEND:
case GL_DECAL:
case GL_REPLACE:
/* A small optimization for drivers */
if (texUnit->EnvMode == mode)
return;
return; /* no change */
if (MESA_VERBOSE & (VERBOSE_STATE|VERBOSE_TEXTURE))
fprintf(stderr, "glTexEnv: old mode %s, new mode %s\n",
@@ -123,40 +128,12 @@ _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
}
void
_mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param )
void gl_GetTexEnvfv( GLcontext *ctx,
GLenum target, GLenum pname, GLfloat *params )
{
_mesa_TexEnvfv( target, pname, &param );
}
void
_mesa_TexEnvi( GLenum target, GLenum pname, GLint param )
{
GLfloat p[4];
p[0] = (GLfloat) param;
p[1] = p[2] = p[3] = 0.0;
_mesa_TexEnvfv( target, pname, p );
}
void
_mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param )
{
GLfloat p[4];
p[0] = INT_TO_FLOAT( param[0] );
p[1] = INT_TO_FLOAT( param[1] );
p[2] = INT_TO_FLOAT( param[2] );
p[3] = INT_TO_FLOAT( param[3] );
_mesa_TexEnvfv( target, pname, p );
}
void
_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
if (target!=GL_TEXTURE_ENV) {
gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" );
@@ -175,10 +152,9 @@ _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
}
void
_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
void gl_GetTexEnviv( GLcontext *ctx,
GLenum target, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
if (target!=GL_TEXTURE_ENV) {
gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(target)" );
@@ -207,17 +183,9 @@ _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
/**********************************************************************/
void
_mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param )
void gl_TexParameterfv( GLcontext *ctx,
GLenum target, GLenum pname, const GLfloat *params )
{
_mesa_TexParameterfv(target, pname, &param);
}
void
_mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
GLenum eparam = (GLenum) (GLint) params[0];
struct gl_texture_object *texObj;
@@ -362,41 +330,20 @@ _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
}
void
_mesa_TexParameteri( GLenum target, GLenum pname, const GLint param )
{
GLfloat fparam[4];
fparam[0] = (GLfloat) param;
fparam[1] = fparam[2] = fparam[3] = 0.0;
_mesa_TexParameterfv(target, pname, fparam);
}
void
_mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
{
GLfloat fparam[4];
fparam[0] = (GLfloat) params[0];
fparam[1] = fparam[2] = fparam[3] = 0.0;
_mesa_TexParameterfv(target, pname, fparam);
}
void
_mesa_GetTexLevelParameterfv( GLenum target, GLint level,
GLenum pname, GLfloat *params )
void gl_GetTexLevelParameterfv( GLcontext *ctx, GLenum target, GLint level,
GLenum pname, GLfloat *params )
{
GLint iparam;
_mesa_GetTexLevelParameteriv( target, level, pname, &iparam );
gl_GetTexLevelParameteriv( ctx, target, level, pname, &iparam );
*params = (GLfloat) iparam;
}
void
_mesa_GetTexLevelParameteriv( GLenum target, GLint level,
GLenum pname, GLint *params )
void gl_GetTexLevelParameteriv( GLcontext *ctx, GLenum target, GLint level,
GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
const struct gl_texture_image *img = NULL;
GLuint dimensions;
@@ -501,10 +448,10 @@ _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
void
_mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
void gl_GetTexParameterfv( GLcontext *ctx,
GLenum target, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
struct gl_texture_object *obj;
@@ -569,10 +516,9 @@ _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
}
void
_mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
void gl_GetTexParameteriv( GLcontext *ctx,
GLenum target, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];
struct gl_texture_object *obj;
@@ -651,10 +597,9 @@ _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
/**********************************************************************/
void
_mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
void gl_TexGenfv( GLcontext *ctx,
GLenum coord, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint tUnit = ctx->Texture.CurrentTransformUnit;
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glTexGenfv");
@@ -665,7 +610,7 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
gl_lookup_enum_by_nr(pname),
*(int *)params);
switch (coord) {
switch( coord ) {
case GL_S:
if (pname==GL_TEXTURE_GEN_MODE) {
GLenum mode = (GLenum) (GLint) *params;
@@ -851,57 +796,10 @@ _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
}
void
_mesa_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
void gl_GetTexGendv( GLcontext *ctx,
GLenum coord, GLenum pname, GLdouble *params )
{
GLfloat p[4];
p[0] = params[0];
p[1] = params[1];
p[2] = params[2];
p[3] = params[3];
_mesa_TexGenfv(coord, pname, p);
}
void
_mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
{
GLfloat p = (GLfloat) param;
_mesa_TexGenfv( coord, pname, &p );
}
void
_mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
{
GLfloat p[4];
p[0] = params[0];
p[1] = params[1];
p[2] = params[2];
p[3] = params[3];
_mesa_TexGenfv( coord, pname, p );
}
void
_mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
{
_mesa_TexGenfv(coord, pname, &param);
}
void
_mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
{
_mesa_TexGeniv( coord, pname, &param );
}
void
_mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint tUnit = ctx->Texture.CurrentTransformUnit;
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
@@ -976,10 +874,9 @@ _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
void
_mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
void gl_GetTexGenfv( GLcontext *ctx,
GLenum coord, GLenum pname, GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint tUnit = ctx->Texture.CurrentTransformUnit;
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
@@ -1054,10 +951,9 @@ _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
void
_mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
void gl_GetTexGeniv( GLcontext *ctx,
GLenum coord, GLenum pname, GLint *params )
{
GET_CURRENT_CONTEXT(ctx);
GLuint tUnit = ctx->Texture.CurrentTransformUnit;
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[tUnit];
@@ -1087,7 +983,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
break;
case GL_T:
if (pname==GL_TEXTURE_GEN_MODE) {
params[0] = texUnit->GenModeT;
params[0] = (GLint) texUnit->GenModeT;
}
else if (pname==GL_OBJECT_PLANE) {
params[0] = (GLint) texUnit->ObjectPlaneT[0];
@@ -1108,7 +1004,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
break;
case GL_R:
if (pname==GL_TEXTURE_GEN_MODE) {
params[0] = texUnit->GenModeR;
params[0] = (GLint) texUnit->GenModeR;
}
else if (pname==GL_OBJECT_PLANE) {
params[0] = (GLint) texUnit->ObjectPlaneR[0];
@@ -1129,7 +1025,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
break;
case GL_Q:
if (pname==GL_TEXTURE_GEN_MODE) {
params[0] = texUnit->GenModeQ;
params[0] = (GLint) texUnit->GenModeQ;
}
else if (pname==GL_OBJECT_PLANE) {
params[0] = (GLint) texUnit->ObjectPlaneQ[0];
@@ -1142,7 +1038,7 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
params[1] = (GLint) texUnit->EyePlaneQ[1];
params[2] = (GLint) texUnit->EyePlaneQ[2];
params[3] = (GLint) texUnit->EyePlaneQ[3];
}
}
else {
gl_error( ctx, GL_INVALID_ENUM, "glGetTexGeniv(pname)" );
return;
@@ -1156,10 +1052,8 @@ _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
/* GL_ARB_multitexture */
void
_mesa_ActiveTextureARB( GLenum target )
void gl_ActiveTexture( GLcontext *ctx, GLenum target )
{
GET_CURRENT_CONTEXT(ctx);
GLint maxUnits = ctx->Const.MaxTextureUnits;
ASSERT_OUTSIDE_BEGIN_END( ctx, "glActiveTextureARB" );
@@ -1183,10 +1077,8 @@ _mesa_ActiveTextureARB( GLenum target )
/* GL_ARB_multitexture */
void
_mesa_ClientActiveTextureARB( GLenum target )
void gl_ClientActiveTexture( GLcontext *ctx, GLenum target )
{
GET_CURRENT_CONTEXT(ctx);
GLint maxUnits = ctx->Const.MaxTextureUnits;
ASSERT_OUTSIDE_BEGIN_END( ctx, "glClientActiveTextureARB" );

View File

@@ -1,4 +1,4 @@
/* $Id: varray.c,v 1.14 1999/11/11 01:22:28 brianp Exp $ */
/* $Id: varray.c,v 1.13.2.3 1999/12/01 12:18:47 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -27,8 +27,15 @@
#ifdef PC_HEADER
#include "all.h"
#else
#include "glheader.h"
#ifndef XFree86Server
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#else
#include "GL/xf86glx.h"
#endif
#include "context.h"
#include "api.h"
#include "cva.h"
#include "enable.h"
#include "enums.h"
@@ -47,14 +54,24 @@
#include "vbindirect.h"
#include "vbxform.h"
#include "xform.h"
#ifdef XFree86Server
#include "GL/xf86glx.h"
#endif
#endif
#if defined(GLX_DIRECT_RENDERING) && !defined(XFree86Server) && !defined(GLX_USE_DLOPEN)
#define NEED_MESA_FUNCS_WRAPPED
#include "mesa_api.h"
#endif
void
_mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
void GLAPIENTRY glVertexPointer(CTX_ARG GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (size<2 || size>4) {
gl_error( ctx, GL_INVALID_VALUE, "glVertexPointer(size)" );
@@ -103,10 +120,13 @@ _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
void
_mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
void GLAPIENTRY glNormalPointer(CTX_ARG GLenum type, GLsizei stride,
const GLvoid *ptr )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (stride<0) {
gl_error( ctx, GL_INVALID_VALUE, "glNormalPointer(stride)" );
@@ -152,11 +172,13 @@ _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
void
_mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
void GLAPIENTRY glColorPointer(CTX_ARG GLint size, GLenum type, GLsizei stride,
const GLvoid *ptr )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (size<3 || size>4) {
gl_error( ctx, GL_INVALID_VALUE, "glColorPointer(size)" );
return;
@@ -215,10 +237,13 @@ _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
void
_mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
void GLAPIENTRY glIndexPointer(CTX_ARG GLenum type, GLsizei stride,
const GLvoid *ptr )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (stride<0) {
gl_error( ctx, GL_INVALID_VALUE, "glIndexPointer(stride)" );
@@ -259,12 +284,16 @@ _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
void
_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
void GLAPIENTRY glTexCoordPointer(CTX_ARG GLint size, GLenum type,
GLsizei stride, const GLvoid *ptr )
{
GET_CURRENT_CONTEXT(ctx);
GLuint texUnit;
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
texUnit = ctx->Array.ActiveTexture;
if (size<1 || size>4) {
@@ -317,11 +346,14 @@ _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr
void
_mesa_EdgeFlagPointer(GLsizei stride, const void *vptr)
void GLAPIENTRY glEdgeFlagPointer(CTX_ARG GLsizei stride, const void *vptr )
{
GET_CURRENT_CONTEXT(ctx);
const GLboolean *ptr = (GLboolean *)vptr;
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (stride<0) {
gl_error( ctx, GL_INVALID_VALUE, "glEdgeFlagPointer(stride)" );
@@ -438,42 +470,8 @@ void gl_exec_array_elements( GLcontext *ctx, struct immediate *IM,
/* Enough funny business going on in here it might be quicker to use a
* function pointer.
*/
#define ARRAY_ELT( IM, i ) \
{ \
GLuint count = IM->Count; \
IM->Elt[count] = i; \
IM->Flag[count] = ((IM->Flag[count] & IM->ArrayAndFlags) | \
VERT_ELT); \
IM->FlushElt |= IM->ArrayEltFlush; \
IM->Count = count += IM->ArrayIncr; \
if (count == VB_MAX) \
IM->maybe_transform_vb( IM ); \
}
void
_mesa_ArrayElement( GLint i )
void gl_DrawArrays( GLcontext *ctx, GLenum mode, GLint start, GLsizei count )
{
GET_IMMEDIATE;
ARRAY_ELT( IM, i );
}
void gl_ArrayElement( GLcontext *CC, GLint i )
{
struct immediate *im = CC->input;
ARRAY_ELT( im, i );
}
void
_mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
{
GET_CURRENT_CONTEXT(ctx);
struct vertex_buffer *VB = ctx->VB;
GLint i;
@@ -505,14 +503,23 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
* rendering to keep it turned on.
*/
relock = ctx->CompileCVAFlag;
ctx->CompileCVAFlag = 0;
if (!elt->pipeline_valid || relock)
if (relock) {
ctx->CompileCVAFlag = 0;
elt->pipeline_valid = 0;
}
if (!elt->pipeline_valid)
gl_build_immediate_pipeline( ctx );
required = elt->inputs;
fallback = (elt->inputs & ~ctx->Array.Summary);
/* The translate function doesn't do anything about size. It
* just ensures that type and stride come out right.
*/
IM->v.Obj.size = ctx->Array.Vertex.Size;
if (required & VERT_RGBA)
{
Color = &ctx->Array.Color;
@@ -585,7 +592,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
VB->NextPrimitive = IM->NextPrimitive;
VB->MaterialMask = IM->MaterialMask;
VB->Material = IM->Material;
VB->BoundsPtr = 0;
VB->BoundsPtr = 0;
while (remaining > 0) {
GLint vbspace = VB_MAX - VB_START;
@@ -669,6 +676,7 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
VB->NextPrimitive[VB->CopyStart] = VB->Count;
VB->Primitive[VB->CopyStart] = mode;
ctx->Array.Flag[count] |= VERT_END_VB;
/* Transform and render.
*/
@@ -682,7 +690,12 @@ _mesa_DrawArrays(GLenum mode, GLint start, GLsizei count)
remaining -= n;
}
ctx->CompileCVAFlag = relock;
gl_reset_input( ctx );
if (relock) {
ctx->CompileCVAFlag = relock;
elt->pipeline_valid = 0;
}
}
else if (ctx->Array.Vertex.Enabled)
{
@@ -783,13 +796,16 @@ static GLuint natural_stride[0x10] =
0 /* f */
};
void
_mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indices)
void GLAPIENTRY glDrawElements(CTX_ARG GLenum mode, GLsizei count,
GLenum type, const GLvoid *indices )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
struct gl_cva *cva;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
cva = &ctx->CVA;
ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx, "glDrawElements");
@@ -899,10 +915,10 @@ _mesa_DrawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid *indice
void
_mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
void GLAPIENTRY glInterleavedArrays(CTX_ARG GLenum format, GLsizei stride,
const GLvoid *pointer )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GLboolean tflag, cflag, nflag; /* enable/disable flags */
GLint tcomps, ccomps, vcomps; /* components per texcoord, color, vertex */
@@ -912,6 +928,11 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
GLint c, f;
GLint coordUnitSave;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
f = sizeof(GLfloat);
c = f * ((4*sizeof(GLubyte) + (f-1)) / f);
@@ -1035,8 +1056,8 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
stride = defstride;
}
_mesa_DisableClientState( GL_EDGE_FLAG_ARRAY );
_mesa_DisableClientState( GL_INDEX_ARRAY );
gl_DisableClientState( ctx, GL_EDGE_FLAG_ARRAY );
gl_DisableClientState( ctx, GL_INDEX_ARRAY );
/* Texcoords */
coordUnitSave = ctx->Array.ActiveTexture;
@@ -1044,61 +1065,63 @@ _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
GLint i;
GLint factor = ctx->Array.TexCoordInterleaveFactor;
for (i = 0; i < factor; i++) {
_mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
_mesa_EnableClientState( GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer( tcomps, GL_FLOAT, stride,
gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
gl_EnableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer(CTX_PRM tcomps, GL_FLOAT, stride,
(GLubyte *) pointer + i * coffset );
}
for (i = factor; i < ctx->Const.MaxTextureUnits; i++) {
_mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
_mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
gl_DisableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
}
}
else {
GLint i;
for (i = 0; i < ctx->Const.MaxTextureUnits; i++) {
_mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + i) );
_mesa_DisableClientState( GL_TEXTURE_COORD_ARRAY );
gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + i) );
gl_DisableClientState( ctx, GL_TEXTURE_COORD_ARRAY );
}
}
/* Restore texture coordinate unit index */
_mesa_ClientActiveTextureARB( (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) );
gl_ClientActiveTexture( ctx, (GLenum) (GL_TEXTURE0_ARB + coordUnitSave) );
/* Color */
if (cflag) {
_mesa_EnableClientState( GL_COLOR_ARRAY );
glColorPointer( ccomps, ctype, stride,
gl_EnableClientState( ctx, GL_COLOR_ARRAY );
glColorPointer(CTX_PRM ccomps, ctype, stride,
(GLubyte*) pointer + coffset );
}
else {
_mesa_DisableClientState( GL_COLOR_ARRAY );
gl_DisableClientState( ctx, GL_COLOR_ARRAY );
}
/* Normals */
if (nflag) {
_mesa_EnableClientState( GL_NORMAL_ARRAY );
glNormalPointer( GL_FLOAT, stride,
gl_EnableClientState( ctx, GL_NORMAL_ARRAY );
glNormalPointer(CTX_PRM GL_FLOAT, stride,
(GLubyte*) pointer + noffset );
}
else {
_mesa_DisableClientState( GL_NORMAL_ARRAY );
gl_DisableClientState( ctx, GL_NORMAL_ARRAY );
}
_mesa_EnableClientState( GL_VERTEX_ARRAY );
glVertexPointer( vcomps, GL_FLOAT, stride,
gl_EnableClientState( ctx, GL_VERTEX_ARRAY );
glVertexPointer(CTX_PRM vcomps, GL_FLOAT, stride,
(GLubyte *) pointer + voffset );
}
void
_mesa_DrawRangeElements(GLenum mode, GLuint start,
GLuint end, GLsizei count,
GLenum type, const GLvoid *indices)
void GLAPIENTRY glDrawRangeElements(CTX_ARG GLenum mode, GLuint start,
GLuint end, GLsizei count,
GLenum type, const GLvoid *indices )
{
GET_CURRENT_CONTEXT(ctx);
GLcontext *ctx;
GET_CONTEXT;
CHECK_CONTEXT;
ctx = CC;
if (end < start) {
gl_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements( end < start )");
@@ -1106,11 +1129,11 @@ _mesa_DrawRangeElements(GLenum mode, GLuint start,
}
if (!ctx->Array.LockCount && 2*count > (GLint) 3*(end-start)) {
glLockArraysEXT( start, end );
glDrawElements( mode, count, type, indices );
glUnlockArraysEXT();
glLockArraysEXT(CTX_PRM start, end );
glDrawElements(CTX_PRM mode, count, type, indices );
glUnlockArraysEXT(CTX_VPRM );
} else {
glDrawElements( mode, count, type, indices );
glDrawElements(CTX_PRM mode, count, type, indices );
}
}

View File

@@ -1464,7 +1464,7 @@
#else
#define P_ARG1(a) a
#define P_ARG2(a, b) a, b
#define P_ARG3(a, b) a, b, c
#define P_ARG3(a, b, c) a, b, c
#endif
/* MMX */
@@ -1570,22 +1570,22 @@
#define CMPPS(a, b, c) cmpps P_ARG3(a, b, c)
#define CMPSS(a, b, c) cmpss P_ARG3(a, b, c)
*/
#define CMPEQPS(a, b) cmpeqps P_ARG3(a, b)
#define CMPLTPS(a, b) cmpltps P_ARG3(a, b)
#define CMPLEPS(a, b) cmpleps P_ARG3(a, b)
#define CMPUNORDPS(a, b) cmpunordps P_ARG3(a, b)
#define CMPNEQPS(a, b) cmpneqps P_ARG3(a, b)
#define CMPNLTPS(a, b) cmpnltps P_ARG3(a, b)
#define CMPNLEPS(a, b) cmpnleps P_ARG3(a, b)
#define CMPORDPS(a, b) cmpordps P_ARG3(a, b)
#define CMPEQSS(a, b) cmpeqss P_ARG3(a, b)
#define CMPLTSS(a, b) cmpltss P_ARG3(a, b)
#define CMPLESS(a, b) cmpless P_ARG3(a, b)
#define CMPUNORDSS(a, b) cmpunordss P_ARG3(a, b)
#define CMPNEQSS(a, b) cmpneqss P_ARG3(a, b)
#define CMPNLTSS(a, b) cmpnltss P_ARG3(a, b)
#define CMPNLESS(a, b) cmpnless P_ARG3(a, b)
#define CMPORDSS(a, b) cmpordss P_ARG3(a, b)
#define CMPEQPS(a, b) cmpeqps P_ARG2(a, b)
#define CMPLTPS(a, b) cmpltps P_ARG2(a, b)
#define CMPLEPS(a, b) cmpleps P_ARG2(a, b)
#define CMPUNORDPS(a, b) cmpunordps P_ARG2(a, b)
#define CMPNEQPS(a, b) cmpneqps P_ARG2(a, b)
#define CMPNLTPS(a, b) cmpnltps P_ARG2(a, b)
#define CMPNLEPS(a, b) cmpnleps P_ARG2(a, b)
#define CMPORDPS(a, b) cmpordps P_ARG2(a, b)
#define CMPEQSS(a, b) cmpeqss P_ARG2(a, b)
#define CMPLTSS(a, b) cmpltss P_ARG2(a, b)
#define CMPLESS(a, b) cmpless P_ARG2(a, b)
#define CMPUNORDSS(a, b) cmpunordss P_ARG2(a, b)
#define CMPNEQSS(a, b) cmpneqss P_ARG2(a, b)
#define CMPNLTSS(a, b) cmpnltss P_ARG2(a, b)
#define CMPNLESS(a, b) cmpnless P_ARG2(a, b)
#define CMPORDSS(a, b) cmpordss P_ARG2(a, b)
#define COMISS(a, b) comiss P_ARG2(a, b)
#define CVTPI2PS(a, b) cvtpi2ps P_ARG2(a, b)
#define CVTPS2PI(a, b) cvtps2pi P_ARG2(a, b)

View File

@@ -37,6 +37,12 @@
int gl_x86_cpu_features = 0;
static void message(const char *msg)
{
if (getenv("MESA_DEBUG"))
fprintf(stderr, "%s\n", msg);
}
void gl_init_all_x86_asm (void)
{
@@ -48,7 +54,7 @@ void gl_init_all_x86_asm (void)
gl_x86_cpu_features = 0;
if (gl_x86_cpu_features & GL_CPU_GenuineIntel) {
fprintf (stderr, "GenuineIntel cpu detected.\n");
message("GenuineIntel cpu detected.");
}
if (gl_x86_cpu_features) {
@@ -59,7 +65,7 @@ void gl_init_all_x86_asm (void)
if (gl_x86_cpu_features & GL_CPU_MMX) {
char *s = getenv( "MESA_NO_MMX" );
if (s == NULL) {
fprintf (stderr, "MMX cpu detected.\n");
message("MMX cpu detected.");
} else {
gl_x86_cpu_features &= (~GL_CPU_MMX);
}
@@ -71,7 +77,7 @@ void gl_init_all_x86_asm (void)
if (gl_x86_cpu_features & GL_CPU_3Dnow) {
char *s = getenv( "MESA_NO_3DNOW" );
if (s == NULL) {
fprintf (stderr, "3Dnow cpu detected.\n");
message("3Dnow cpu detected.");
gl_init_3dnow_asm_transforms ();
} else {
gl_x86_cpu_features &= (~GL_CPU_3Dnow);