Windows/DOS users should enable core.autocrlf from now on: git config --global core.autocrlf truetags/mesa_7_1_rc1
| @@ -1,42 +1,42 @@ | |||
| # MinGW config include file updated for Mesa 7.0 | |||
| # | |||
| # Updated : by Heromyth, on 2007-7-21 | |||
| # Email : zxpmyth@yahoo.com.cn | |||
| # Bugs : 1) All the default settings work fine. But the setting X86=1 can't work. | |||
| # The others havn't been tested yet. | |||
| # 2) The generated DLLs are *not* compatible with the ones built | |||
| # with the other compilers like VC8, especially for GLUT. | |||
| # 3) Although more tests are needed, it can be used individually! | |||
| # The generated DLLs by MingW with STDCALL are not totally compatible | |||
| # with the ones linked by Microsoft's compilers. | |||
| # | |||
| # xxx_USING_STDCALL = 1 Compiling MESA with __stdcall. This is default! | |||
| # | |||
| # xxx_USING_STDCALL = 0 Compiling MESA without __stdcall. I like this:) | |||
| # | |||
| # In fact, GL_USING_STDCALL and GLUT_USING_STDCALL can be | |||
| # different. For example: | |||
| # | |||
| # GL_USING_STDCALL = 0 | |||
| # GLUT_USING_STDCALL = 1 | |||
| # | |||
| # Suggested setting: | |||
| # | |||
| # ALL_USING_STDCALL = 1 | |||
| # | |||
| # That's default! | |||
| # | |||
| ALL_USING_STDCALL = 1 | |||
| ifeq ($(ALL_USING_STDCALL),1) | |||
| GL_USING_STDCALL = 1 | |||
| GLUT_USING_STDCALL = 1 | |||
| else | |||
| GL_USING_STDCALL = 0 | |||
| GLUT_USING_STDCALL = 0 | |||
| endif | |||
| # MinGW config include file updated for Mesa 7.0 | |||
| # | |||
| # Updated : by Heromyth, on 2007-7-21 | |||
| # Email : zxpmyth@yahoo.com.cn | |||
| # Bugs : 1) All the default settings work fine. But the setting X86=1 can't work. | |||
| # The others havn't been tested yet. | |||
| # 2) The generated DLLs are *not* compatible with the ones built | |||
| # with the other compilers like VC8, especially for GLUT. | |||
| # 3) Although more tests are needed, it can be used individually! | |||
| # The generated DLLs by MingW with STDCALL are not totally compatible | |||
| # with the ones linked by Microsoft's compilers. | |||
| # | |||
| # xxx_USING_STDCALL = 1 Compiling MESA with __stdcall. This is default! | |||
| # | |||
| # xxx_USING_STDCALL = 0 Compiling MESA without __stdcall. I like this:) | |||
| # | |||
| # In fact, GL_USING_STDCALL and GLUT_USING_STDCALL can be | |||
| # different. For example: | |||
| # | |||
| # GL_USING_STDCALL = 0 | |||
| # GLUT_USING_STDCALL = 1 | |||
| # | |||
| # Suggested setting: | |||
| # | |||
| # ALL_USING_STDCALL = 1 | |||
| # | |||
| # That's default! | |||
| # | |||
| ALL_USING_STDCALL = 1 | |||
| ifeq ($(ALL_USING_STDCALL),1) | |||
| GL_USING_STDCALL = 1 | |||
| GLUT_USING_STDCALL = 1 | |||
| else | |||
| GL_USING_STDCALL = 0 | |||
| GLUT_USING_STDCALL = 0 | |||
| endif | |||
| @@ -1,163 +1,163 @@ | |||
| File: docs/README.WIN32 | |||
| Last updated: Apr 25, 2007 - Karl Schultz - kschultz@users.sourceforge.net | |||
| Quick Start | |||
| ----- ----- | |||
| Unzip the MesaLib, MesaGLUT, and MesaDemos ZIP files into the same | |||
| directory. The libs and demos build separately, so if you do not care | |||
| about the demos or GLUT, you only need to unzip MesaLib. If you unzip | |||
| more than one ZIP file, they all need to be unzipped into the same | |||
| directory. Don't worry, you will not overwrite anything. | |||
| The Windows build system uses Microsoft Visual Studio. Project files | |||
| for a specific version of Visual Studio are in their own directory in | |||
| the top-level "windows" directory. For example, Visual Studio 8 files | |||
| are in windows/VC8. | |||
| Support has been dropped for versions of Visual Studio prior to 8. The | |||
| main reason is because Microsoft now provides a free compiler and | |||
| developer environment. Visual Studio Express can be found at | |||
| http://msdn.microsoft.com/vstudio/express/visualc/default.aspx | |||
| You'll also need the Platform SDK. Instructions for obtaining and | |||
| using the SDK with Visual Studio Express can be found at | |||
| http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ | |||
| If you are stuck using VC6 or VC7, you may start with these project | |||
| files, but you may need to modify them to reflect changes in the | |||
| Mesa source code tree. If you sucessfully update the project files, | |||
| please submit them to the author of this document so that they may | |||
| be included in the next distribution. | |||
| The project files to build the core Mesa library, Windows Mesa | |||
| drivers, OSMesa, and GLU are in the mesa directory. The project files | |||
| to build GLUT and some demo programs are in the progs directory. | |||
| Makefiles are no longer shipped or supported, but can be generated | |||
| from the projects using Visual Studio. | |||
| Windows Drivers | |||
| ------- ------- | |||
| At this time, only the GDI driver is known to work. Most of the demos | |||
| in progs/demos should work with this driver. | |||
| Source code also exists in the tree for other drivers in | |||
| src/mesa/drivers/windows, but the status of this code is unknown. | |||
| The GDI driver operates basically by writing pixel spans into a DIB | |||
| section and then blitting the DIB to the window. The driver was | |||
| recently cleaned up and rewitten and so may have bugs or may be | |||
| missing some functionality. The older versions of the CVS source may | |||
| be useful in figuring out any problems, or report them to me. | |||
| To build Mesa with the GDI driver, build the mesa, gdi, and glu | |||
| projects in the Visual Studio workspace found at | |||
| windows/VC8/mesa/mesa.sln | |||
| The osmesa DLL can also be built with the osmesa project. | |||
| The build system creates a lib top-level directory and copies | |||
| resulting LIB and DLL files to this lib directory. The files are: | |||
| OPENGL32.LIB, GLU32.LIB, OSMESA32.LIB | |||
| OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL | |||
| If the MesaDemos ZIP file was extracted, the DLL files are also copied | |||
| to the demos directory. This facilitates running the demos as described | |||
| below. | |||
| GLUT and Demos | |||
| ---- --- ----- | |||
| A Visual Studio workspace can be found at | |||
| windows/VC8/progs/progs.sln | |||
| It can be used to build GLUT and a few demos. The GLUT lib and DLL | |||
| are copied to the top-level lib directory, along with the Mesa libs. | |||
| The demo build system expects to find the LIB files in the top level | |||
| lib directory, so you must build the Mesa libs first. The demo | |||
| executables are placed in the demos directory, because some of them | |||
| rely on data files found there. Also, the Mesa lib DLL's were copied | |||
| there by the Mesa lib build process. Therefore, you should be able to | |||
| simply run the demo executables from the demo directory. | |||
| If you want to run the demos from the Visual Studio, you may have to | |||
| change the startup directory and explicitly state where the executables are. | |||
| You may also build all the demo programs by using a makefile. Go to | |||
| the progs/demos directory and make sure you have executed VCVARS32.BAT | |||
| or whatever setup script is appropriate for your compiler. Then, | |||
| nmake -f Makefile.win | |||
| should build all the demos. | |||
| Build System Notes | |||
| ----- ------ ----- | |||
| VC6 (not actively supported) | |||
| --- | |||
| Visual Studio 6 does not recognize files with the .cc extension as C++ | |||
| language files, without a lot of unnatural tweaking. So, the VC6 | |||
| build process uses custom build steps to compile these files in the | |||
| GLU library. | |||
| Two additional configurations are provided, Debug x86 and Release x86 | |||
| that activate the shader code compilation by defining SLANG_86. It is | |||
| unknown if and how this works. | |||
| VC7 (not actively supported) | |||
| --- | |||
| The above-mentioned .cc problem does not exist in this version. | |||
| VC8 | |||
| --- | |||
| No notes. | |||
| General | |||
| ------- | |||
| After building, you can copy the above DLL files to a place in your | |||
| PATH such as $SystemRoot/SYSTEM32. If you don't like putting things | |||
| in a system directory, place them in the same directory as the | |||
| executable(s). Be careful about accidentially overwriting files of | |||
| the same name in the SYSTEM32 directory. | |||
| The DLL files are built so that the external entry points use the | |||
| stdcall calling convention. | |||
| Static LIB files are not built. The LIB files that are built with are | |||
| the linker import files associated with the DLL files. | |||
| The si-glu sources are used to build the GLU libs. This was done | |||
| mainly to get the better tessellator code. | |||
| To build "mangled" Mesa, add the preprocessor define USE_MGL_NAMESPACE | |||
| to the project settings. You will also need to edit src/mesa.def to | |||
| change all the gl* symbols to mgl*. Because this is easy to do with a | |||
| global replace operation in a text editor, no additional mangled | |||
| version of mesa.def is maintained or shipped. | |||
| If you have a Windows-related build problem or question, it is | |||
| probably better to direct it to me (kschultz@users.sourceforge.net), | |||
| rather than directly to the other Mesa developers. I will help you as | |||
| much as I can. I also monitor the Mesa mailing lists and will answer | |||
| questions in this area there as well. | |||
| Karl Schultz | |||
| File: docs/README.WIN32 | |||
| Last updated: Apr 25, 2007 - Karl Schultz - kschultz@users.sourceforge.net | |||
| Quick Start | |||
| ----- ----- | |||
| Unzip the MesaLib, MesaGLUT, and MesaDemos ZIP files into the same | |||
| directory. The libs and demos build separately, so if you do not care | |||
| about the demos or GLUT, you only need to unzip MesaLib. If you unzip | |||
| more than one ZIP file, they all need to be unzipped into the same | |||
| directory. Don't worry, you will not overwrite anything. | |||
| The Windows build system uses Microsoft Visual Studio. Project files | |||
| for a specific version of Visual Studio are in their own directory in | |||
| the top-level "windows" directory. For example, Visual Studio 8 files | |||
| are in windows/VC8. | |||
| Support has been dropped for versions of Visual Studio prior to 8. The | |||
| main reason is because Microsoft now provides a free compiler and | |||
| developer environment. Visual Studio Express can be found at | |||
| http://msdn.microsoft.com/vstudio/express/visualc/default.aspx | |||
| You'll also need the Platform SDK. Instructions for obtaining and | |||
| using the SDK with Visual Studio Express can be found at | |||
| http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/ | |||
| If you are stuck using VC6 or VC7, you may start with these project | |||
| files, but you may need to modify them to reflect changes in the | |||
| Mesa source code tree. If you sucessfully update the project files, | |||
| please submit them to the author of this document so that they may | |||
| be included in the next distribution. | |||
| The project files to build the core Mesa library, Windows Mesa | |||
| drivers, OSMesa, and GLU are in the mesa directory. The project files | |||
| to build GLUT and some demo programs are in the progs directory. | |||
| Makefiles are no longer shipped or supported, but can be generated | |||
| from the projects using Visual Studio. | |||
| Windows Drivers | |||
| ------- ------- | |||
| At this time, only the GDI driver is known to work. Most of the demos | |||
| in progs/demos should work with this driver. | |||
| Source code also exists in the tree for other drivers in | |||
| src/mesa/drivers/windows, but the status of this code is unknown. | |||
| The GDI driver operates basically by writing pixel spans into a DIB | |||
| section and then blitting the DIB to the window. The driver was | |||
| recently cleaned up and rewitten and so may have bugs or may be | |||
| missing some functionality. The older versions of the CVS source may | |||
| be useful in figuring out any problems, or report them to me. | |||
| To build Mesa with the GDI driver, build the mesa, gdi, and glu | |||
| projects in the Visual Studio workspace found at | |||
| windows/VC8/mesa/mesa.sln | |||
| The osmesa DLL can also be built with the osmesa project. | |||
| The build system creates a lib top-level directory and copies | |||
| resulting LIB and DLL files to this lib directory. The files are: | |||
| OPENGL32.LIB, GLU32.LIB, OSMESA32.LIB | |||
| OPENGL32.DLL, GLU32.DLL, OSMESA32.DLL | |||
| If the MesaDemos ZIP file was extracted, the DLL files are also copied | |||
| to the demos directory. This facilitates running the demos as described | |||
| below. | |||
| GLUT and Demos | |||
| ---- --- ----- | |||
| A Visual Studio workspace can be found at | |||
| windows/VC8/progs/progs.sln | |||
| It can be used to build GLUT and a few demos. The GLUT lib and DLL | |||
| are copied to the top-level lib directory, along with the Mesa libs. | |||
| The demo build system expects to find the LIB files in the top level | |||
| lib directory, so you must build the Mesa libs first. The demo | |||
| executables are placed in the demos directory, because some of them | |||
| rely on data files found there. Also, the Mesa lib DLL's were copied | |||
| there by the Mesa lib build process. Therefore, you should be able to | |||
| simply run the demo executables from the demo directory. | |||
| If you want to run the demos from the Visual Studio, you may have to | |||
| change the startup directory and explicitly state where the executables are. | |||
| You may also build all the demo programs by using a makefile. Go to | |||
| the progs/demos directory and make sure you have executed VCVARS32.BAT | |||
| or whatever setup script is appropriate for your compiler. Then, | |||
| nmake -f Makefile.win | |||
| should build all the demos. | |||
| Build System Notes | |||
| ----- ------ ----- | |||
| VC6 (not actively supported) | |||
| --- | |||
| Visual Studio 6 does not recognize files with the .cc extension as C++ | |||
| language files, without a lot of unnatural tweaking. So, the VC6 | |||
| build process uses custom build steps to compile these files in the | |||
| GLU library. | |||
| Two additional configurations are provided, Debug x86 and Release x86 | |||
| that activate the shader code compilation by defining SLANG_86. It is | |||
| unknown if and how this works. | |||
| VC7 (not actively supported) | |||
| --- | |||
| The above-mentioned .cc problem does not exist in this version. | |||
| VC8 | |||
| --- | |||
| No notes. | |||
| General | |||
| ------- | |||
| After building, you can copy the above DLL files to a place in your | |||
| PATH such as $SystemRoot/SYSTEM32. If you don't like putting things | |||
| in a system directory, place them in the same directory as the | |||
| executable(s). Be careful about accidentially overwriting files of | |||
| the same name in the SYSTEM32 directory. | |||
| The DLL files are built so that the external entry points use the | |||
| stdcall calling convention. | |||
| Static LIB files are not built. The LIB files that are built with are | |||
| the linker import files associated with the DLL files. | |||
| The si-glu sources are used to build the GLU libs. This was done | |||
| mainly to get the better tessellator code. | |||
| To build "mangled" Mesa, add the preprocessor define USE_MGL_NAMESPACE | |||
| to the project settings. You will also need to edit src/mesa.def to | |||
| change all the gl* symbols to mgl*. Because this is easy to do with a | |||
| global replace operation in a text editor, no additional mangled | |||
| version of mesa.def is maintained or shipped. | |||
| If you have a Windows-related build problem or question, it is | |||
| probably better to direct it to me (kschultz@users.sourceforge.net), | |||
| rather than directly to the other Mesa developers. I will help you as | |||
| much as I can. I also monitor the Mesa mailing lists and will answer | |||
| questions in this area there as well. | |||
| Karl Schultz | |||
| @@ -1,33 +1,33 @@ | |||
| default: full | |||
| all: full subset | |||
| %.tag: %.doxy | |||
| doxygen $< | |||
| FULL = \ | |||
| main.doxy \ | |||
| math.doxy \ | |||
| vbo.doxy \ | |||
| glapi.doxy \ | |||
| shader.doxy \ | |||
| swrast.doxy \ | |||
| swrast_setup.doxy \ | |||
| tnl.doxy \ | |||
| tnl_dd.doxy | |||
| full: $(FULL:.doxy=.tag) | |||
| $(foreach FILE,$(FULL),doxygen $(FILE);) | |||
| SUBSET = \ | |||
| main.doxy \ | |||
| math.doxy \ | |||
| miniglx.doxy | |||
| subset: $(SUBSET:.doxy=.tag) | |||
| $(foreach FILE,$(SUBSET),doxygen $(FILE);) | |||
| clean: | |||
| rm -rf $(FULL:.doxy=) $(SUBSET:.doxy=) | |||
| rm -rf *.tag | |||
| default: full | |||
| all: full subset | |||
| %.tag: %.doxy | |||
| doxygen $< | |||
| FULL = \ | |||
| main.doxy \ | |||
| math.doxy \ | |||
| vbo.doxy \ | |||
| glapi.doxy \ | |||
| shader.doxy \ | |||
| swrast.doxy \ | |||
| swrast_setup.doxy \ | |||
| tnl.doxy \ | |||
| tnl_dd.doxy | |||
| full: $(FULL:.doxy=.tag) | |||
| $(foreach FILE,$(FULL),doxygen $(FILE);) | |||
| SUBSET = \ | |||
| main.doxy \ | |||
| math.doxy \ | |||
| miniglx.doxy | |||
| subset: $(SUBSET:.doxy=.tag) | |||
| $(foreach FILE,$(SUBSET),doxygen $(FILE);) | |||
| clean: | |||
| rm -rf $(FULL:.doxy=) $(SUBSET:.doxy=) | |||
| rm -rf *.tag | |||
| @@ -1,19 +1,19 @@ | |||
| doxygen tnl_dd.doxy | |||
| doxygen vbo.doxy | |||
| doxygen math.doxy | |||
| doxygen swrast.doxy | |||
| doxygen swrast_setup.doxy | |||
| doxygen tnl.doxy | |||
| doxygen core.doxy | |||
| doxygen glapi.doxy | |||
| doxygen shader.doxy | |||
| echo Building again, to resolve tags | |||
| doxygen tnl_dd.doxy | |||
| doxygen vbo.doxy | |||
| doxygen math.doxy | |||
| doxygen swrast.doxy | |||
| doxygen swrast_setup.doxy | |||
| doxygen tnl.doxy | |||
| doxygen glapi.doxy | |||
| doxygen shader.doxy | |||
| doxygen tnl_dd.doxy | |||
| doxygen vbo.doxy | |||
| doxygen math.doxy | |||
| doxygen swrast.doxy | |||
| doxygen swrast_setup.doxy | |||
| doxygen tnl.doxy | |||
| doxygen core.doxy | |||
| doxygen glapi.doxy | |||
| doxygen shader.doxy | |||
| echo Building again, to resolve tags | |||
| doxygen tnl_dd.doxy | |||
| doxygen vbo.doxy | |||
| doxygen math.doxy | |||
| doxygen swrast.doxy | |||
| doxygen swrast_setup.doxy | |||
| doxygen tnl.doxy | |||
| doxygen glapi.doxy | |||
| doxygen shader.doxy | |||
| @@ -1,79 +1,79 @@ | |||
| /**************************************************************************** | |||
| * | |||
| * Mesa bindings for SciTech MGL | |||
| * | |||
| * Copyright (C) 1996 SciTech Software. | |||
| * All rights reserved. | |||
| * | |||
| * Filename: mglmesa.h | |||
| * Version: Revision: 1.1.1.1 | |||
| * | |||
| * Language: ANSI C | |||
| * Environment: Any | |||
| * | |||
| * Description: Header file for the Mesa/OpenGL interface bindings for the | |||
| * SciTech MGL graphics library. Uses the MGL internal | |||
| * device context structures to get direct access to the | |||
| * high performance MGL rasterization functions for maximum | |||
| * performance. Utilizes the VESA VBE/AF Accelerator Functions | |||
| * via the MGL's accelerated device driver functions, as well | |||
| * as basic DirectDraw accelerated functions provided by the | |||
| * MGL. | |||
| * | |||
| * 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. | |||
| * | |||
| * | |||
| ****************************************************************************/ | |||
| #ifndef __MGLMESA_H | |||
| #define __MGLMESA_H | |||
| #include "mgraph.h" | |||
| /*------------------------- Function Prototypes ---------------------------*/ | |||
| #ifdef __cplusplus | |||
| extern "C" { /* Use "C" linkage when in C++ mode */ | |||
| #endif | |||
| #ifndef __WINDOWS__ | |||
| #define GLAPIENTRY | |||
| #endif | |||
| #ifdef __WINDOWS__ | |||
| bool GLAPIENTRY MGLMesaInitDLL(MGLCallbacks *cb,char *version); | |||
| #endif | |||
| void GLAPIENTRY MGLMesaChooseVisual(MGLDC *dc,MGLVisual *visual); | |||
| bool GLAPIENTRY MGLMesaSetVisual(MGLDC *dc,MGLVisual *visual); | |||
| bool GLAPIENTRY MGLMesaCreateContext(MGLDC *dc,bool forceMemDC); | |||
| void GLAPIENTRY MGLMesaDestroyContext(MGLDC *dc); | |||
| void GLAPIENTRY MGLMesaMakeCurrent(MGLDC *dc); | |||
| void GLAPIENTRY MGLMesaSwapBuffers(MGLDC *dc,bool waitVRT); | |||
| /* Palette manipulation support. The reason we provide palette manipulation | |||
| * routines is so that when rendering in double buffered modes with a | |||
| * software backbuffer, the palette for the backbuffer is kept consistent | |||
| * with the hardware front buffer. | |||
| */ | |||
| void GLAPIENTRY MGLMesaSetPaletteEntry(MGLDC *dc,int entry,uchar red,uchar green,uchar blue); | |||
| void GLAPIENTRY MGLMesaSetPalette(MGLDC *dc,palette_t *pal,int numColors,int startIndex); | |||
| void GLAPIENTRY MGLMesaRealizePalette(MGLDC *dc,int numColors,int startIndex,int waitVRT); | |||
| #ifdef __cplusplus | |||
| } /* End of "C" linkage for C++ */ | |||
| #endif /* __cplusplus */ | |||
| #endif /* __MGLMESA_H */ | |||
| /**************************************************************************** | |||
| * | |||
| * Mesa bindings for SciTech MGL | |||
| * | |||
| * Copyright (C) 1996 SciTech Software. | |||
| * All rights reserved. | |||
| * | |||
| * Filename: mglmesa.h | |||
| * Version: Revision: 1.1.1.1 | |||
| * | |||
| * Language: ANSI C | |||
| * Environment: Any | |||
| * | |||
| * Description: Header file for the Mesa/OpenGL interface bindings for the | |||
| * SciTech MGL graphics library. Uses the MGL internal | |||
| * device context structures to get direct access to the | |||
| * high performance MGL rasterization functions for maximum | |||
| * performance. Utilizes the VESA VBE/AF Accelerator Functions | |||
| * via the MGL's accelerated device driver functions, as well | |||
| * as basic DirectDraw accelerated functions provided by the | |||
| * MGL. | |||
| * | |||
| * 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. | |||
| * | |||
| * | |||
| ****************************************************************************/ | |||
| #ifndef __MGLMESA_H | |||
| #define __MGLMESA_H | |||
| #include "mgraph.h" | |||
| /*------------------------- Function Prototypes ---------------------------*/ | |||
| #ifdef __cplusplus | |||
| extern "C" { /* Use "C" linkage when in C++ mode */ | |||
| #endif | |||
| #ifndef __WINDOWS__ | |||
| #define GLAPIENTRY | |||
| #endif | |||
| #ifdef __WINDOWS__ | |||
| bool GLAPIENTRY MGLMesaInitDLL(MGLCallbacks *cb,char *version); | |||
| #endif | |||
| void GLAPIENTRY MGLMesaChooseVisual(MGLDC *dc,MGLVisual *visual); | |||
| bool GLAPIENTRY MGLMesaSetVisual(MGLDC *dc,MGLVisual *visual); | |||
| bool GLAPIENTRY MGLMesaCreateContext(MGLDC *dc,bool forceMemDC); | |||
| void GLAPIENTRY MGLMesaDestroyContext(MGLDC *dc); | |||
| void GLAPIENTRY MGLMesaMakeCurrent(MGLDC *dc); | |||
| void GLAPIENTRY MGLMesaSwapBuffers(MGLDC *dc,bool waitVRT); | |||
| /* Palette manipulation support. The reason we provide palette manipulation | |||
| * routines is so that when rendering in double buffered modes with a | |||
| * software backbuffer, the palette for the backbuffer is kept consistent | |||
| * with the hardware front buffer. | |||
| */ | |||
| void GLAPIENTRY MGLMesaSetPaletteEntry(MGLDC *dc,int entry,uchar red,uchar green,uchar blue); | |||
| void GLAPIENTRY MGLMesaSetPalette(MGLDC *dc,palette_t *pal,int numColors,int startIndex); | |||
| void GLAPIENTRY MGLMesaRealizePalette(MGLDC *dc,int numColors,int startIndex,int waitVRT); | |||
| #ifdef __cplusplus | |||
| } /* End of "C" linkage for C++ */ | |||
| #endif /* __cplusplus */ | |||
| #endif /* __MGLMESA_H */ | |||
| @@ -1,119 +1,119 @@ | |||
| BACKGROUND = 0.000 0.500 0.700 | |||
| ANAME = AXLE1 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = -7.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 6.000 | |||
| AMOTORED = 1 | |||
| AANGULARVELOCITY = 90.000 | |||
| ADIRECTION = 1 | |||
| ANAME = AXLE2 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = -3.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 12.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE3 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = 1.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 6.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE4 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = 8.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 18.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE5 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 1 | |||
| APOSITION = 8.000 -8.200 -7.400 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 12.000 | |||
| AMOTORED = 0 | |||
| GNAME = GEAR1 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 40 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE1 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR2 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 30 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE2 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR3 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE3 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR4 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 1.700 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE2 | |||
| GPOSITION = 5.000 | |||
| GNAME = GEAR5 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 3.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE4 | |||
| GPOSITION = 5.000 | |||
| GNAME = GEAR6 | |||
| GTYPE = BEVEL | |||
| GFACE = 0 | |||
| GRADIUS = 4.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 1.700 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE4 | |||
| GPOSITION = -4.000 | |||
| GNAME = GEAR7 | |||
| GTYPE = BEVEL | |||
| GFACE = 0 | |||
| GRADIUS = 4.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 1.700 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE5 | |||
| GPOSITION = 5.000 | |||
| BELTNAME = BELT1 | |||
| GEAR1NAME = GEAR5 | |||
| GEAR2NAME = GEAR4 | |||
| BACKGROUND = 0.000 0.500 0.700 | |||
| ANAME = AXLE1 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = -7.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 6.000 | |||
| AMOTORED = 1 | |||
| AANGULARVELOCITY = 90.000 | |||
| ADIRECTION = 1 | |||
| ANAME = AXLE2 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = -3.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 12.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE3 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = 1.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 6.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE4 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 2 | |||
| APOSITION = 8.000 0.000 0.000 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 18.000 | |||
| AMOTORED = 0 | |||
| ANAME = AXLE5 | |||
| ARADIUS = 1.000 | |||
| AAXIS = 1 | |||
| APOSITION = 8.000 -8.200 -7.400 | |||
| ACOLOR = 0.800 0.500 0.200 | |||
| ALENGTH = 12.000 | |||
| AMOTORED = 0 | |||
| GNAME = GEAR1 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 40 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE1 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR2 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 30 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE2 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR3 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 2.200 | |||
| GWIDTH = 3.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE3 | |||
| GPOSITION = 0.000 | |||
| GNAME = GEAR4 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 1.700 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE2 | |||
| GPOSITION = 5.000 | |||
| GNAME = GEAR5 | |||
| GTYPE = NORMAL | |||
| GRADIUS = 3.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 0.500 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE4 | |||
| GPOSITION = 5.000 | |||
| GNAME = GEAR6 | |||
| GTYPE = BEVEL | |||
| GFACE = 0 | |||
| GRADIUS = 4.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 1.700 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE4 | |||
| GPOSITION = -4.000 | |||
| GNAME = GEAR7 | |||
| GTYPE = BEVEL | |||
| GFACE = 0 | |||
| GRADIUS = 4.000 | |||
| GWIDTH = 1.000 | |||
| GTEETH = 20 | |||
| GTOOTHDEPTH = 1.700 | |||
| GCOLOR = 0.500 0.500 0.500 | |||
| GAXLE = AXLE5 | |||
| GPOSITION = 5.000 | |||
| BELTNAME = BELT1 | |||
| GEAR1NAME = GEAR5 | |||
| GEAR2NAME = GEAR4 | |||
| @@ -1,132 +1,132 @@ | |||
| Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216 | |||
| Named object: "Object01" | |||
| Tri-mesh, Vertices: 20 Faces: 36 | |||
| Vertex list: | |||
| Vertex 0: X: -210 Y: -432.781738 Z: 180.000031 | |||
| Vertex 1: X: -610.810303 Y: 144.260559 Z: 103.580154 | |||
| Vertex 2: X: 56.586655 Y: 144.260544 Z: -128.902023 | |||
| Vertex 3: X: -75.776352 Y: 144.260605 Z: 565.321838 | |||
| Vertex 4: X: -462.815979 Y: -347.937683 Z: 131.797302 | |||
| Vertex 5: X: -616.506042 Y: -126.67173 Z: 102.494209 | |||
| Vertex 6: X: -41.847229 Y: -347.937683 Z: -14.843644 | |||
| Vertex 7: X: 60.375015 Y: -126.671753 Z: -133.291641 | |||
| Vertex 8: X: -125.336807 Y: -347.937653 Z: 423.046448 | |||
| Vertex 9: X: -73.868958 Y: -126.671692 Z: 570.797424 | |||
| Vertex 10: X: -448.353271 Y: 237.304672 Z: -92.34951 | |||
| Vertex 11: X: -192.440964 Y: 237.304672 Z: -181.494431 | |||
| Vertex 12: X: 145.038193 Y: 237.304672 Z: 109.754745 | |||
| Vertex 13: X: 94.283768 Y: 237.304688 Z: 375.953766 | |||
| Vertex 14: X: -326.684937 Y: 237.304733 Z: 522.594727 | |||
| Vertex 15: X: -531.842834 Y: 237.304718 Z: 345.540588 | |||
| Vertex 16: X: -331.419525 Y: -225.964966 Z: -168.564438 | |||
| Vertex 17: X: 152.575485 Y: -225.964935 Z: 249.129868 | |||
| Vertex 18: X: -451.155914 Y: -225.964905 Z: 459.434662 | |||
| Vertex 19: X: -298.413483 Y: 423.31897 Z: 163.142761 | |||
| Face list: | |||
| Face 0: A:0 B:4 C:6 AB:1 BC:1 CA:1 | |||
| Face 1: A:4 B:5 C:16 AB:1 BC:1 CA:1 | |||
| Face 2: A:4 B:16 C:6 AB:1 BC:1 CA:1 | |||
| Face 3: A:6 B:16 C:7 AB:1 BC:1 CA:1 | |||
| Face 4: A:5 B:1 C:10 AB:1 BC:1 CA:1 | |||
| Face 5: A:5 B:10 C:16 AB:1 BC:1 CA:1 | |||
| Face 6: A:16 B:10 C:11 AB:1 BC:1 CA:1 | |||
| Face 7: A:16 B:11 C:7 AB:1 BC:1 CA:1 | |||
| Face 8: A:7 B:11 C:2 AB:1 BC:1 CA:1 | |||
| Face 9: A:0 B:6 C:8 AB:1 BC:1 CA:1 | |||
| Face 10: A:6 B:7 C:17 AB:1 BC:1 CA:1 | |||
| Face 11: A:6 B:17 C:8 AB:1 BC:1 CA:1 | |||
| Face 12: A:8 B:17 C:9 AB:1 BC:1 CA:1 | |||
| Face 13: A:7 B:2 C:12 AB:1 BC:1 CA:1 | |||
| Face 14: A:7 B:12 C:17 AB:1 BC:1 CA:1 | |||
| Face 15: A:17 B:12 C:13 AB:1 BC:1 CA:1 | |||
| Face 16: A:17 B:13 C:9 AB:1 BC:1 CA:1 | |||
| Face 17: A:9 B:13 C:3 AB:1 BC:1 CA:1 | |||
| Face 18: A:0 B:8 C:4 AB:1 BC:1 CA:1 | |||
| Face 19: A:8 B:9 C:18 AB:1 BC:1 CA:1 | |||
| Face 20: A:8 B:18 C:4 AB:1 BC:1 CA:1 | |||
| Face 21: A:4 B:18 C:5 AB:1 BC:1 CA:1 | |||
| Face 22: A:9 B:3 C:14 AB:1 BC:1 CA:1 | |||
| Face 23: A:9 B:14 C:18 AB:1 BC:1 CA:1 | |||
| Face 24: A:18 B:14 C:15 AB:1 BC:1 CA:1 | |||
| Face 25: A:18 B:15 C:5 AB:1 BC:1 CA:1 | |||
| Face 26: A:5 B:15 C:1 AB:1 BC:1 CA:1 | |||
| Face 27: A:1 B:15 C:10 AB:1 BC:1 CA:1 | |||
| Face 28: A:15 B:14 C:19 AB:1 BC:1 CA:1 | |||
| Face 29: A:15 B:19 C:10 AB:1 BC:1 CA:1 | |||
| Face 30: A:10 B:19 C:11 AB:1 BC:1 CA:1 | |||
| Face 31: A:14 B:3 C:13 AB:1 BC:1 CA:1 | |||
| Face 32: A:14 B:13 C:19 AB:1 BC:1 CA:1 | |||
| Face 33: A:19 B:13 C:12 AB:1 BC:1 CA:1 | |||
| Face 34: A:19 B:12 C:11 AB:1 BC:1 CA:1 | |||
| Page 1 | |||
| Face 35: A:11 B:12 C:2 AB:1 BC:1 CA:1 | |||
| Page 2 | |||
| Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216 | |||
| Named object: "Object01" | |||
| Tri-mesh, Vertices: 20 Faces: 36 | |||
| Vertex list: | |||
| Vertex 0: X: -210 Y: -432.781738 Z: 180.000031 | |||
| Vertex 1: X: -610.810303 Y: 144.260559 Z: 103.580154 | |||
| Vertex 2: X: 56.586655 Y: 144.260544 Z: -128.902023 | |||
| Vertex 3: X: -75.776352 Y: 144.260605 Z: 565.321838 | |||
| Vertex 4: X: -462.815979 Y: -347.937683 Z: 131.797302 | |||
| Vertex 5: X: -616.506042 Y: -126.67173 Z: 102.494209 | |||
| Vertex 6: X: -41.847229 Y: -347.937683 Z: -14.843644 | |||
| Vertex 7: X: 60.375015 Y: -126.671753 Z: -133.291641 | |||
| Vertex 8: X: -125.336807 Y: -347.937653 Z: 423.046448 | |||
| Vertex 9: X: -73.868958 Y: -126.671692 Z: 570.797424 | |||
| Vertex 10: X: -448.353271 Y: 237.304672 Z: -92.34951 | |||
| Vertex 11: X: -192.440964 Y: 237.304672 Z: -181.494431 | |||
| Vertex 12: X: 145.038193 Y: 237.304672 Z: 109.754745 | |||
| Vertex 13: X: 94.283768 Y: 237.304688 Z: 375.953766 | |||
| Vertex 14: X: -326.684937 Y: 237.304733 Z: 522.594727 | |||
| Vertex 15: X: -531.842834 Y: 237.304718 Z: 345.540588 | |||
| Vertex 16: X: -331.419525 Y: -225.964966 Z: -168.564438 | |||
| Vertex 17: X: 152.575485 Y: -225.964935 Z: 249.129868 | |||
| Vertex 18: X: -451.155914 Y: -225.964905 Z: 459.434662 | |||
| Vertex 19: X: -298.413483 Y: 423.31897 Z: 163.142761 | |||
| Face list: | |||
| Face 0: A:0 B:4 C:6 AB:1 BC:1 CA:1 | |||
| Face 1: A:4 B:5 C:16 AB:1 BC:1 CA:1 | |||
| Face 2: A:4 B:16 C:6 AB:1 BC:1 CA:1 | |||
| Face 3: A:6 B:16 C:7 AB:1 BC:1 CA:1 | |||
| Face 4: A:5 B:1 C:10 AB:1 BC:1 CA:1 | |||
| Face 5: A:5 B:10 C:16 AB:1 BC:1 CA:1 | |||
| Face 6: A:16 B:10 C:11 AB:1 BC:1 CA:1 | |||
| Face 7: A:16 B:11 C:7 AB:1 BC:1 CA:1 | |||
| Face 8: A:7 B:11 C:2 AB:1 BC:1 CA:1 | |||
| Face 9: A:0 B:6 C:8 AB:1 BC:1 CA:1 | |||
| Face 10: A:6 B:7 C:17 AB:1 BC:1 CA:1 | |||
| Face 11: A:6 B:17 C:8 AB:1 BC:1 CA:1 | |||
| Face 12: A:8 B:17 C:9 AB:1 BC:1 CA:1 | |||
| Face 13: A:7 B:2 C:12 AB:1 BC:1 CA:1 | |||
| Face 14: A:7 B:12 C:17 AB:1 BC:1 CA:1 | |||
| Face 15: A:17 B:12 C:13 AB:1 BC:1 CA:1 | |||
| Face 16: A:17 B:13 C:9 AB:1 BC:1 CA:1 | |||
| Face 17: A:9 B:13 C:3 AB:1 BC:1 CA:1 | |||
| Face 18: A:0 B:8 C:4 AB:1 BC:1 CA:1 | |||
| Face 19: A:8 B:9 C:18 AB:1 BC:1 CA:1 | |||
| Face 20: A:8 B:18 C:4 AB:1 BC:1 CA:1 | |||
| Face 21: A:4 B:18 C:5 AB:1 BC:1 CA:1 | |||
| Face 22: A:9 B:3 C:14 AB:1 BC:1 CA:1 | |||
| Face 23: A:9 B:14 C:18 AB:1 BC:1 CA:1 | |||
| Face 24: A:18 B:14 C:15 AB:1 BC:1 CA:1 | |||
| Face 25: A:18 B:15 C:5 AB:1 BC:1 CA:1 | |||
| Face 26: A:5 B:15 C:1 AB:1 BC:1 CA:1 | |||
| Face 27: A:1 B:15 C:10 AB:1 BC:1 CA:1 | |||
| Face 28: A:15 B:14 C:19 AB:1 BC:1 CA:1 | |||
| Face 29: A:15 B:19 C:10 AB:1 BC:1 CA:1 | |||
| Face 30: A:10 B:19 C:11 AB:1 BC:1 CA:1 | |||
| Face 31: A:14 B:3 C:13 AB:1 BC:1 CA:1 | |||
| Face 32: A:14 B:13 C:19 AB:1 BC:1 CA:1 | |||
| Face 33: A:19 B:13 C:12 AB:1 BC:1 CA:1 | |||
| Face 34: A:19 B:12 C:11 AB:1 BC:1 CA:1 | |||
| Page 1 | |||
| Face 35: A:11 B:12 C:2 AB:1 BC:1 CA:1 | |||
| Page 2 | |||
| @@ -1,264 +1,264 @@ | |||
| Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216 | |||
| Named object: "Object01" | |||
| Tri-mesh, Vertices: 40 Faces: 80 | |||
| Vertex list: | |||
| Vertex 0: X: -50.170624 Y: -0.000026 Z: -240.147842 | |||
| Vertex 1: X: -80.584503 Y: -63.958851 Z: -205.014572 | |||
| Vertex 2: X: -129.795166 Y: -39.528744 Z: -148.16774 | |||
| Vertex 3: X: -129.795166 Y: 39.528721 Z: -148.16774 | |||
| Vertex 4: X: -80.584503 Y: 63.958797 Z: -205.014572 | |||
| Vertex 5: X: 85.963654 Y: -0.000002 Z: 31.490465 | |||
| Vertex 6: X: 39.614838 Y: -63.958828 Z: 34.827602 | |||
| Vertex 7: X: -35.37915 Y: -39.528728 Z: 40.227196 | |||
| Vertex 8: X: -35.37912 Y: 39.528736 Z: 40.227188 | |||
| Vertex 9: X: 39.614838 Y: 63.95882 Z: 34.827595 | |||
| Vertex 10: X: -9.852051 Y: 0.000023 Z: 319.829254 | |||
| Vertex 11: X: -44.985352 Y: -63.958805 Z: 289.415405 | |||
| Vertex 12: X: -101.832199 Y: -39.528709 Z: 240.204758 | |||
| Vertex 13: X: -101.832184 Y: 39.528755 Z: 240.204773 | |||
| Vertex 14: X: -44.985352 Y: 63.958843 Z: 289.415405 | |||
| Vertex 15: X: -281.490326 Y: 0.000035 Z: 455.963654 | |||
| Vertex 16: X: -284.827484 Y: -63.958794 Z: 409.614868 | |||
| Vertex 17: X: -290.227112 Y: -39.528702 Z: 334.62085 | |||
| Vertex 18: X: -290.227112 Y: 39.528763 Z: 334.62088 | |||
| Vertex 19: X: -284.827484 Y: 63.958855 Z: 409.614838 | |||
| Vertex 20: X: -569.829163 Y: 0.000026 Z: 360.14798 | |||
| Vertex 21: X: -539.415344 Y: -63.958801 Z: 325.014709 | |||
| Vertex 22: X: -490.204712 Y: -39.528709 Z: 268.167847 | |||
| Vertex 23: X: -490.204712 Y: 39.528755 Z: 268.167847 | |||
| Vertex 24: X: -539.415344 Y: 63.958847 Z: 325.014679 | |||
| Vertex 25: X: -705.963684 Y: 0.000002 Z: 88.509598 | |||
| Vertex 26: X: -659.614807 Y: -63.958824 Z: 85.172462 | |||
| Vertex 27: X: -584.62085 Y: -39.528725 Z: 79.77285 | |||
| Vertex 28: X: -584.62085 Y: 39.52874 Z: 79.77285 | |||
| Vertex 29: X: -659.614868 Y: 63.958824 Z: 85.172447 | |||
| Vertex 30: X: -610.147827 Y: -0.000023 Z: -199.829361 | |||
| Vertex 31: X: -575.014587 Y: -63.958847 Z: -169.415497 | |||
| Vertex 32: X: -518.167725 Y: -39.528744 Z: -120.204819 | |||
| Vertex 33: X: -518.167725 Y: 39.528721 Z: -120.204834 | |||
| Vertex 34: X: -575.014587 Y: 63.958801 Z: -169.415497 | |||
| Vertex 35: X: -338.509338 Y: -0.000035 Z: -335.963745 | |||
| Vertex 36: X: -335.172241 Y: -63.958858 Z: -289.614868 | |||
| Vertex 37: X: -329.772675 Y: -39.528751 Z: -214.620865 | |||
| Vertex 38: X: -329.772675 Y: 39.528713 Z: -214.620865 | |||
| Vertex 39: X: -335.172241 Y: 63.95879 Z: -289.614899 | |||
| Face list: | |||
| Face 0: A:0 B:6 C:1 AB:0 BC:1 CA:1 | |||
| Smoothing: 1 | |||
| Face 1: A:0 B:5 C:6 AB:1 BC:1 CA:0 | |||
| Smoothing: 1 | |||
| Face 2: A:1 B:7 C:2 AB:0 BC:1 CA:1 | |||
| Smoothing: 2 | |||
| Face 3: A:1 B:6 C:7 AB:1 BC:1 CA:0 | |||
| Smoothing: 2 | |||
| Face 4: A:2 B:8 C:3 AB:0 BC:1 CA:1 | |||
| Smoothing: 3 | |||
| Face 5: A:2 B:7 C:8 AB:1 BC:1 CA:0 | |||
| Smoothing: 3 | |||
| Face 6: A:3 B:9 C:4 AB:0 BC:1 CA:1 | |||
| Smoothing: 4 | |||
| Face 7: A:3 B:8 C:9 AB:1 BC:1 CA:0 | |||
| Page 1 | |||
| Smoothing: 4 | |||
| Face 8: A:4 B:5 C:0 AB:0 BC:1 CA:1 | |||
| Smoothing: 5 | |||
| Face 9: A:4 B:9 C:5 AB:1 BC:1 CA:0 | |||
| Smoothing: 5 | |||
| Face 10: A:5 B:11 C:6 AB:0 BC:1 CA:1 | |||
| Smoothing: 6 | |||
| Face 11: A:5 B:10 C:11 AB:1 BC:1 CA:0 | |||
| Smoothing: 6 | |||
| Face 12: A:6 B:12 C:7 AB:0 BC:1 CA:1 | |||
| Smoothing: 7 | |||
| Face 13: A:6 B:11 C:12 AB:1 BC:1 CA:0 | |||
| Smoothing: 7 | |||
| Face 14: A:7 B:13 C:8 AB:0 BC:1 CA:1 | |||
| Smoothing: 8 | |||
| Face 15: A:7 B:12 C:13 AB:1 BC:1 CA:0 | |||
| Smoothing: 8 | |||
| Face 16: A:8 B:14 C:9 AB:0 BC:1 CA:1 | |||
| Smoothing: 9 | |||
| Face 17: A:8 B:13 C:14 AB:1 BC:1 CA:0 | |||
| Smoothing: 9 | |||
| Face 18: A:9 B:10 C:5 AB:0 BC:1 CA:1 | |||
| Smoothing: 10 | |||
| Face 19: A:9 B:14 C:10 AB:1 BC:1 CA:0 | |||
| Smoothing: 10 | |||
| Face 20: A:10 B:16 C:11 AB:0 BC:1 CA:1 | |||
| Smoothing: 11 | |||
| Face 21: A:10 B:15 C:16 AB:1 BC:1 CA:0 | |||
| Smoothing: 11 | |||
| Face 22: A:11 B:17 C:12 AB:0 BC:1 CA:1 | |||
| Smoothing: 12 | |||
| Face 23: A:11 B:16 C:17 AB:1 BC:1 CA:0 | |||
| Smoothing: 12 | |||
| Face 24: A:12 B:18 C:13 AB:0 BC:1 CA:1 | |||
| Smoothing: 13 | |||
| Face 25: A:12 B:17 C:18 AB:1 BC:1 CA:0 | |||
| Smoothing: 13 | |||
| Face 26: A:13 B:19 C:14 AB:0 BC:1 CA:1 | |||
| Smoothing: 14 | |||
| Face 27: A:13 B:18 C:19 AB:1 BC:1 CA:0 | |||
| Smoothing: 14 | |||
| Face 28: A:14 B:15 C:10 AB:0 BC:1 CA:1 | |||
| Smoothing: 15 | |||
| Face 29: A:14 B:19 C:15 AB:1 BC:1 CA:0 | |||
| Smoothing: 15 | |||
| Face 30: A:15 B:21 C:16 AB:0 BC:1 CA:1 | |||
| Smoothing: 16 | |||
| Face 31: A:15 B:20 C:21 AB:1 BC:1 CA:0 | |||
| Smoothing: 16 | |||
| Face 32: A:16 B:22 C:17 AB:0 BC:1 CA:1 | |||
| Smoothing: 17 | |||
| Face 33: A:16 B:21 C:22 AB:1 BC:1 CA:0 | |||
| Smoothing: 17 | |||
| Face 34: A:17 B:23 C:18 AB:0 BC:1 CA:1 | |||
| Smoothing: 18 | |||
| Face 35: A:17 B:22 C:23 AB:1 BC:1 CA:0 | |||
| Smoothing: 18 | |||
| Face 36: A:18 B:24 C:19 AB:0 BC:1 CA:1 | |||
| Smoothing: 19 | |||
| Face 37: A:18 B:23 C:24 AB:1 BC:1 CA:0 | |||
| Smoothing: 19 | |||
| Page 2 | |||
| Face 38: A:19 B:20 C:15 AB:0 BC:1 CA:1 | |||
| Smoothing: 20 | |||
| Face 39: A:19 B:24 C:20 AB:1 BC:1 CA:0 | |||
| Smoothing: 20 | |||
| Face 40: A:20 B:26 C:21 AB:0 BC:1 CA:1 | |||
| Smoothing: 21 | |||
| Face 41: A:20 B:25 C:26 AB:1 BC:1 CA:0 | |||
| Smoothing: 21 | |||
| Face 42: A:21 B:27 C:22 AB:0 BC:1 CA:1 | |||
| Smoothing: 22 | |||
| Face 43: A:21 B:26 C:27 AB:1 BC:1 CA:0 | |||
| Smoothing: 22 | |||
| Face 44: A:22 B:28 C:23 AB:0 BC:1 CA:1 | |||
| Smoothing: 23 | |||
| Face 45: A:22 B:27 C:28 AB:1 BC:1 CA:0 | |||
| Smoothing: 23 | |||
| Face 46: A:23 B:29 C:24 AB:0 BC:1 CA:1 | |||
| Smoothing: 24 | |||
| Face 47: A:23 B:28 C:29 AB:1 BC:1 CA:0 | |||
| Smoothing: 24 | |||
| Face 48: A:24 B:25 C:20 AB:0 BC:1 CA:1 | |||
| Smoothing: 25 | |||
| Face 49: A:24 B:29 C:25 AB:1 BC:1 CA:0 | |||
| Smoothing: 25 | |||
| Face 50: A:25 B:31 C:26 AB:0 BC:1 CA:1 | |||
| Smoothing: 26 | |||
| Face 51: A:25 B:30 C:31 AB:1 BC:1 CA:0 | |||
| Smoothing: 26 | |||
| Face 52: A:26 B:32 C:27 AB:0 BC:1 CA:1 | |||
| Smoothing: 27 | |||
| Face 53: A:26 B:31 C:32 AB:1 BC:1 CA:0 | |||
| Smoothing: 27 | |||
| Face 54: A:27 B:33 C:28 AB:0 BC:1 CA:1 | |||
| Smoothing: 28 | |||
| Face 55: A:27 B:32 C:33 AB:1 BC:1 CA:0 | |||
| Smoothing: 28 | |||
| Face 56: A:28 B:34 C:29 AB:0 BC:1 CA:1 | |||
| Smoothing: 29 | |||
| Face 57: A:28 B:33 C:34 AB:1 BC:1 CA:0 | |||
| Smoothing: 29 | |||
| Face 58: A:29 B:30 C:25 AB:0 BC:1 CA:1 | |||
| Smoothing: 30 | |||
| Face 59: A:29 B:34 C:30 AB:1 BC:1 CA:0 | |||
| Smoothing: 30 | |||
| Face 60: A:30 B:36 C:31 AB:0 BC:1 CA:1 | |||
| Smoothing: 31 | |||
| Face 61: A:30 B:35 C:36 AB:1 BC:1 CA:0 | |||
| Smoothing: 31 | |||
| Face 62: A:31 B:37 C:32 AB:0 BC:1 CA:1 | |||
| Smoothing: 32 | |||
| Face 63: A:31 B:36 C:37 AB:1 BC:1 CA:0 | |||
| Smoothing: 32 | |||
| Face 64: A:32 B:38 C:33 AB:0 BC:1 CA:1 | |||
| Smoothing: 1 | |||
| Face 65: A:32 B:37 C:38 AB:1 BC:1 CA:0 | |||
| Smoothing: 1 | |||
| Face 66: A:33 B:39 C:34 AB:0 BC:1 CA:1 | |||
| Smoothing: 2 | |||
| Face 67: A:33 B:38 C:39 AB:1 BC:1 CA:0 | |||
| Smoothing: 2 | |||
| Face 68: A:34 B:35 C:30 AB:0 BC:1 CA:1 | |||
| Page 3 | |||
| Smoothing: 3 | |||
| Face 69: A:34 B:39 C:35 AB:1 BC:1 CA:0 | |||
| Smoothing: 3 | |||
| Face 70: A:35 B:1 C:36 AB:0 BC:1 CA:1 | |||
| Smoothing: 4 | |||
| Face 71: A:35 B:0 C:1 AB:1 BC:1 CA:0 | |||
| Smoothing: 4 | |||
| Face 72: A:36 B:2 C:37 AB:0 BC:1 CA:1 | |||
| Smoothing: 5 | |||
| Face 73: A:36 B:1 C:2 AB:1 BC:1 CA:0 | |||
| Smoothing: 5 | |||
| Face 74: A:37 B:3 C:38 AB:0 BC:1 CA:1 | |||
| Smoothing: 6 | |||
| Face 75: A:37 B:2 C:3 AB:1 BC:1 CA:0 | |||
| Smoothing: 6 | |||
| Face 76: A:38 B:4 C:39 AB:0 BC:1 CA:1 | |||
| Smoothing: 7 | |||
| Face 77: A:38 B:3 C:4 AB:1 BC:1 CA:0 | |||
| Smoothing: 7 | |||
| Face 78: A:39 B:0 C:35 AB:0 BC:1 CA:1 | |||
| Smoothing: 8 | |||
| Face 79: A:39 B:4 C:0 AB:1 BC:1 CA:0 | |||
| Smoothing: 8 | |||
| Page 4 | |||
| Ambient light color: Red=0.039216 Green=0.039216 Blue=0.039216 | |||
| Named object: "Object01" | |||
| Tri-mesh, Vertices: 40 Faces: 80 | |||
| Vertex list: | |||
| Vertex 0: X: -50.170624 Y: -0.000026 Z: -240.147842 | |||
| Vertex 1: X: -80.584503 Y: -63.958851 Z: -205.014572 | |||
| Vertex 2: X: -129.795166 Y: -39.528744 Z: -148.16774 | |||
| Vertex 3: X: -129.795166 Y: 39.528721 Z: -148.16774 | |||
| Vertex 4: X: -80.584503 Y: 63.958797 Z: -205.014572 | |||
| Vertex 5: X: 85.963654 Y: -0.000002 Z: 31.490465 | |||
| Vertex 6: X: 39.614838 Y: -63.958828 Z: 34.827602 | |||
| Vertex 7: X: -35.37915 Y: -39.528728 Z: 40.227196 | |||
| Vertex 8: X: -35.37912 Y: 39.528736 Z: 40.227188 | |||
| Vertex 9: X: 39.614838 Y: 63.95882 Z: 34.827595 | |||
| Vertex 10: X: -9.852051 Y: 0.000023 Z: 319.829254 | |||
| Vertex 11: X: -44.985352 Y: -63.958805 Z: 289.415405 | |||
| Vertex 12: X: -101.832199 Y: -39.528709 Z: 240.204758 | |||
| Vertex 13: X: -101.832184 Y: 39.528755 Z: 240.204773 | |||
| Vertex 14: X: -44.985352 Y: 63.958843 Z: 289.415405 | |||
| Vertex 15: X: -281.490326 Y: 0.000035 Z: 455.963654 | |||
| Vertex 16: X: -284.827484 Y: -63.958794 Z: 409.614868 | |||
| Vertex 17: X: -290.227112 Y: -39.528702 Z: 334.62085 | |||
| Vertex 18: X: -290.227112 Y: 39.528763 Z: 334.62088 | |||
| Vertex 19: X: -284.827484 Y: 63.958855 Z: 409.614838 | |||
| Vertex 20: X: -569.829163 Y: 0.000026 Z: 360.14798 | |||
| Vertex 21: X: -539.415344 Y: -63.958801 Z: 325.014709 | |||
| Vertex 22: X: -490.204712 Y: -39.528709 Z: 268.167847 | |||
| Vertex 23: X: -490.204712 Y: 39.528755 Z: 268.167847 | |||
| Vertex 24: X: -539.415344 Y: 63.958847 Z: 325.014679 | |||
| Vertex 25: X: -705.963684 Y: 0.000002 Z: 88.509598 | |||
| Vertex 26: X: -659.614807 Y: -63.958824 Z: 85.172462 | |||
| Vertex 27: X: -584.62085 Y: -39.528725 Z: 79.77285 | |||
| Vertex 28: X: -584.62085 Y: 39.52874 Z: 79.77285 | |||
| Vertex 29: X: -659.614868 Y: 63.958824 Z: 85.172447 | |||
| Vertex 30: X: -610.147827 Y: -0.000023 Z: -199.829361 | |||
| Vertex 31: X: -575.014587 Y: -63.958847 Z: -169.415497 | |||
| Vertex 32: X: -518.167725 Y: -39.528744 Z: -120.204819 | |||
| Vertex 33: X: -518.167725 Y: 39.528721 Z: -120.204834 | |||
| Vertex 34: X: -575.014587 Y: 63.958801 Z: -169.415497 | |||
| Vertex 35: X: -338.509338 Y: -0.000035 Z: -335.963745 | |||
| Vertex 36: X: -335.172241 Y: -63.958858 Z: -289.614868 | |||
| Vertex 37: X: -329.772675 Y: -39.528751 Z: -214.620865 | |||
| Vertex 38: X: -329.772675 Y: 39.528713 Z: -214.620865 | |||
| Vertex 39: X: -335.172241 Y: 63.95879 Z: -289.614899 | |||
| Face list: | |||
| Face 0: A:0 B:6 C:1 AB:0 BC:1 CA:1 | |||
| Smoothing: 1 | |||
| Face 1: A:0 B:5 C:6 AB:1 BC:1 CA:0 | |||
| Smoothing: 1 | |||
| Face 2: A:1 B:7 C:2 AB:0 BC:1 CA:1 | |||
| Smoothing: 2 | |||
| Face 3: A:1 B:6 C:7 AB:1 BC:1 CA:0 | |||
| Smoothing: 2 | |||
| Face 4: A:2 B:8 C:3 AB:0 BC:1 CA:1 | |||
| Smoothing: 3 | |||
| Face 5: A:2 B:7 C:8 AB:1 BC:1 CA:0 | |||
| Smoothing: 3 | |||
| Face 6: A:3 B:9 C:4 AB:0 BC:1 CA:1 | |||
| Smoothing: 4 | |||
| Face 7: A:3 B:8 C:9 AB:1 BC:1 CA:0 | |||
| Page 1 | |||
| Smoothing: 4 | |||
| Face 8: A:4 B:5 C:0 AB:0 BC:1 CA:1 | |||
| Smoothing: 5 | |||
| Face 9: A:4 B:9 C:5 AB:1 BC:1 CA:0 | |||
| Smoothing: 5 | |||
| Face 10: A:5 B:11 C:6 AB:0 BC:1 CA:1 | |||
| Smoothing: 6 | |||
| Face 11: A:5 B:10 C:11 AB:1 BC:1 CA:0 | |||
| Smoothing: 6 | |||
| Face 12: A:6 B:12 C:7 AB:0 BC:1 CA:1 | |||
| Smoothing: 7 | |||
| Face 13: A:6 B:11 C:12 AB:1 BC:1 CA:0 | |||
| Smoothing: 7 | |||
| Face 14: A:7 B:13 C:8 AB:0 BC:1 CA:1 | |||
| Smoothing: 8 | |||
| Face 15: A:7 B:12 C:13 AB:1 BC:1 CA:0 | |||
| Smoothing: 8 | |||
| Face 16: A:8 B:14 C:9 AB:0 BC:1 CA:1 | |||
| Smoothing: 9 | |||
| Face 17: A:8 B:13 C:14 AB:1 BC:1 CA:0 | |||
| Smoothing: 9 | |||
| Face 18: A:9 B:10 C:5 AB:0 BC:1 CA:1 | |||
| Smoothing: 10 | |||
| Face 19: A:9 B:14 C:10 AB:1 BC:1 CA:0 | |||
| Smoothing: 10 | |||
| Face 20: A:10 B:16 C:11 AB:0 BC:1 CA:1 | |||
| Smoothing: 11 | |||
| Face 21: A:10 B:15 C:16 AB:1 BC:1 CA:0 | |||
| Smoothing: 11 | |||
| Face 22: A:11 B:17 C:12 AB:0 BC:1 CA:1 | |||
| Smoothing: 12 | |||
| Face 23: A:11 B:16 C:17 AB:1 BC:1 CA:0 | |||
| Smoothing: 12 | |||
| Face 24: A:12 B:18 C:13 AB:0 BC:1 CA:1 | |||
| Smoothing: 13 | |||
| Face 25: A:12 B:17 C:18 AB:1 BC:1 CA:0 | |||
| Smoothing: 13 | |||
| Face 26: A:13 B:19 C:14 AB:0 BC:1 CA:1 | |||
| Smoothing: 14 | |||
| Face 27: A:13 B:18 C:19 AB:1 BC:1 CA:0 | |||
| Smoothing: 14 | |||
| Face 28: A:14 B:15 C:10 AB:0 BC:1 CA:1 | |||
| Smoothing: 15 | |||
| Face 29: A:14 B:19 C:15 AB:1 BC:1 CA:0 | |||
| Smoothing: 15 | |||
| Face 30: A:15 B:21 C:16 AB:0 BC:1 CA:1 | |||
| Smoothing: 16 | |||
| Face 31: A:15 B:20 C:21 AB:1 BC:1 CA:0 | |||
| Smoothing: 16 | |||
| Face 32: A:16 B:22 C:17 AB:0 BC:1 CA:1 | |||
| Smoothing: 17 | |||
| Face 33: A:16 B:21 C:22 AB:1 BC:1 CA:0 | |||
| Smoothing: 17 | |||
| Face 34: A:17 B:23 C:18 AB:0 BC:1 CA:1 | |||
| Smoothing: 18 | |||
| Face 35: A:17 B:22 C:23 AB:1 BC:1 CA:0 | |||
| Smoothing: 18 | |||
| Face 36: A:18 B:24 C:19 AB:0 BC:1 CA:1 | |||
| Smoothing: 19 | |||
| Face 37: A:18 B:23 C:24 AB:1 BC:1 CA:0 | |||
| Smoothing: 19 | |||
| Page 2 | |||
| Face 38: A:19 B:20 C:15 AB:0 BC:1 CA:1 | |||
| Smoothing: 20 | |||
| Face 39: A:19 B:24 C:20 AB:1 BC:1 CA:0 | |||
| Smoothing: 20 | |||
| Face 40: A:20 B:26 C:21 AB:0 BC:1 CA:1 | |||
| Smoothing: 21 | |||
| Face 41: A:20 B:25 C:26 AB:1 BC:1 CA:0 | |||
| Smoothing: 21 | |||
| Face 42: A:21 B:27 C:22 AB:0 BC:1 CA:1 | |||
| Smoothing: 22 | |||
| Face 43: A:21 B:26 C:27 AB:1 BC:1 CA:0 | |||
| Smoothing: 22 | |||
| Face 44: A:22 B:28 C:23 AB:0 BC:1 CA:1 | |||
| Smoothing: 23 | |||
| Face 45: A:22 B:27 C:28 AB:1 BC:1 CA:0 | |||
| Smoothing: 23 | |||
| Face 46: A:23 B:29 C:24 AB:0 BC:1 CA:1 | |||
| Smoothing: 24 | |||
| Face 47: A:23 B:28 C:29 AB:1 BC:1 CA:0 | |||
| Smoothing: 24 | |||
| Face 48: A:24 B:25 C:20 AB:0 BC:1 CA:1 | |||
| Smoothing: 25 | |||
| Face 49: A:24 B:29 C:25 AB:1 BC:1 CA:0 | |||
| Smoothing: 25 | |||
| Face 50: A:25 B:31 C:26 AB:0 BC:1 CA:1 | |||
| Smoothing: 26 | |||
| Face 51: A:25 B:30 C:31 AB:1 BC:1 CA:0 | |||
| Smoothing: 26 | |||
| Face 52: A:26 B:32 C:27 AB:0 BC:1 CA:1 | |||
| Smoothing: 27 | |||
| Face 53: A:26 B:31 C:32 AB:1 BC:1 CA:0 | |||
| Smoothing: 27 | |||
| Face 54: A:27 B:33 C:28 AB:0 BC:1 CA:1 | |||
| Smoothing: 28 | |||
| Face 55: A:27 B:32 C:33 AB:1 BC:1 CA:0 | |||
| Smoothing: 28 | |||
| Face 56: A:28 B:34 C:29 AB:0 BC:1 CA:1 | |||
| Smoothing: 29 | |||
| Face 57: A:28 B:33 C:34 AB:1 BC:1 CA:0 | |||
| Smoothing: 29 | |||
| Face 58: A:29 B:30 C:25 AB:0 BC:1 CA:1 | |||
| Smoothing: 30 | |||
| Face 59: A:29 B:34 C:30 AB:1 BC:1 CA:0 | |||
| Smoothing: 30 | |||
| Face 60: A:30 B:36 C:31 AB:0 BC:1 CA:1 | |||
| Smoothing: 31 | |||
| Face 61: A:30 B:35 C:36 AB:1 BC:1 CA:0 | |||
| Smoothing: 31 | |||
| Face 62: A:31 B:37 C:32 AB:0 BC:1 CA:1 | |||
| Smoothing: 32 | |||
| Face 63: A:31 B:36 C:37 AB:1 BC:1 CA:0 | |||
| Smoothing: 32 | |||
| Face 64: A:32 B:38 C:33 AB:0 BC:1 CA:1 | |||
| Smoothing: 1 | |||
| Face 65: A:32 B:37 C:38 AB:1 BC:1 CA:0 | |||
| Smoothing: 1 | |||
| Face 66: A:33 B:39 C:34 AB:0 BC:1 CA:1 | |||
| Smoothing: 2 | |||
| Face 67: A:33 B:38 C:39 AB:1 BC:1 CA:0 | |||
| Smoothing: 2 | |||
| Face 68: A:34 B:35 C:30 AB:0 BC:1 CA:1 | |||
| Page 3 | |||
| Smoothing: 3 | |||
| Face 69: A:34 B:39 C:35 AB:1 BC:1 CA:0 | |||
| Smoothing: 3 | |||
| Face 70: A:35 B:1 C:36 AB:0 BC:1 CA:1 | |||
| Smoothing: 4 | |||
| Face 71: A:35 B:0 C:1 AB:1 BC:1 CA:0 | |||
| Smoothing: 4 | |||
| Face 72: A:36 B:2 C:37 AB:0 BC:1 CA:1 | |||
| Smoothing: 5 | |||
| Face 73: A:36 B:1 C:2 AB:1 BC:1 CA:0 | |||
| Smoothing: 5 | |||
| Face 74: A:37 B:3 C:38 AB:0 BC:1 CA:1 | |||
| Smoothing: 6 | |||
| Face 75: A:37 B:2 C:3 AB:1 BC:1 CA:0 | |||
| Smoothing: 6 | |||
| Face 76: A:38 B:4 C:39 AB:0 BC:1 CA:1 | |||
| Smoothing: 7 | |||
| Face 77: A:38 B:3 C:4 AB:1 BC:1 CA:0 | |||
| Smoothing: 7 | |||
| Face 78: A:39 B:0 C:35 AB:0 BC:1 CA:1 | |||
| Smoothing: 8 | |||
| Face 79: A:39 B:4 C:0 AB:1 BC:1 CA:0 | |||
| Smoothing: 8 | |||
| Page 4 | |||
| @@ -1,63 +1,63 @@ | |||
| # Makefile for GLU for GCC-2.95.2/Mingw32 contributed by | |||
| # Paul Garceau <pgarceau@teleport.com> | |||
| # Mesa 3-D graphics library | |||
| # Version: 3.3 | |||
| # 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. | |||
| # | |||
| # 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. | |||
| MESA_MAJOR=3 | |||
| MESA_MINOR=3 | |||
| MESA_TINY=0 | |||
| VERSION=$(MESA_MAJOR).$(MESA_MINOR) | |||
| CFLAGS = -I. -DWIN32 -D__WIN32__ -D_WINDOWS \ | |||
| -O2 -funroll-loops \ | |||
| -fexpensive-optimizations -fomit-frame-pointer -ffast-math \ | |||
| -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ | |||
| -mwindows | |||
| CC = gcc | |||
| MAKELIB = ar ru | |||
| GLU_LIB = libGLU.a | |||
| ##### MACROS ##### | |||
| VPATH = RCS | |||
| INCDIR = ../include | |||
| LIBDIR = ../lib | |||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | |||
| polytest.c project.c quadric.c tess.c tesselat.c | |||
| OBJECTS = $(SOURCES:.c=.o) | |||
| ##### RULES ##### | |||
| .c.o: | |||
| $(CC) -c -I$(INCDIR) $(CFLAGS) $< | |||
| ##### TARGETS ##### | |||
| # Make the library: | |||
| $(LIBDIR)/$(GLU_LIB): $(OBJECTS) | |||
| # Makefile for GLU for GCC-2.95.2/Mingw32 contributed by | |||
| # Paul Garceau <pgarceau@teleport.com> | |||
| # Mesa 3-D graphics library | |||
| # Version: 3.3 | |||
| # 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. | |||
| # | |||
| # 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. | |||
| MESA_MAJOR=3 | |||
| MESA_MINOR=3 | |||
| MESA_TINY=0 | |||
| VERSION=$(MESA_MAJOR).$(MESA_MINOR) | |||
| CFLAGS = -I. -DWIN32 -D__WIN32__ -D_WINDOWS \ | |||
| -O2 -funroll-loops \ | |||
| -fexpensive-optimizations -fomit-frame-pointer -ffast-math \ | |||
| -malign-loops=2 -malign-jumps=2 -malign-functions=2 \ | |||
| -mwindows | |||
| CC = gcc | |||
| MAKELIB = ar ru | |||
| GLU_LIB = libGLU.a | |||
| ##### MACROS ##### | |||
| VPATH = RCS | |||
| INCDIR = ../include | |||
| LIBDIR = ../lib | |||
| SOURCES = glu.c mipmap.c nurbs.c nurbscrv.c nurbssrf.c nurbsutl.c \ | |||
| polytest.c project.c quadric.c tess.c tesselat.c | |||
| OBJECTS = $(SOURCES:.c=.o) | |||
| ##### RULES ##### | |||
| .c.o: | |||
| $(CC) -c -I$(INCDIR) $(CFLAGS) $< | |||
| ##### TARGETS ##### | |||
| # Make the library: | |||
| $(LIBDIR)/$(GLU_LIB): $(OBJECTS) | |||
| $(MAKELIB) $(GLU_LIB) $(MAJOR) $(MINOR) $(TINY) $(OBJECTS) | |||
| @@ -1,103 +1,103 @@ | |||
| EXPORTS | |||
| glutInit | |||
| glutInitDisplayMode | |||
| glutInitDisplayString | |||
| glutInitWindowPosition | |||
| glutInitWindowSize | |||
| glutMainLoop | |||
| glutCreateWindow | |||
| glutCreateSubWindow | |||
| glutDestroyWindow | |||
| glutPostRedisplay | |||
| glutSwapBuffers | |||
| glutGetWindow | |||
| glutSetWindow | |||
| glutSetWindowTitle | |||
| glutSetIconTitle | |||
| glutPositionWindow | |||
| glutReshapeWindow | |||
| glutPopWindow | |||
| glutPushWindow | |||
| glutIconifyWindow | |||
| glutShowWindow | |||
| glutHideWindow | |||
| glutFullScreen | |||
| glutSetCursor | |||
| glutWarpPointer | |||
| glutEstablishOverlay | |||
| glutRemoveOverlay | |||
| glutUseLayer | |||
| glutPostOverlayRedisplay | |||
| glutShowOverlay | |||
| glutHideOverlay | |||
| glutCreateMenu | |||
| glutDestroyMenu | |||
| glutGetMenu | |||
| glutSetMenu | |||
| glutAddMenuEntry | |||
| glutAddSubMenu | |||
| glutChangeToMenuEntry | |||
| glutChangeToSubMenu | |||
| glutRemoveMenuItem | |||
| glutAttachMenu | |||
| glutDetachMenu | |||
| glutDisplayFunc | |||
| glutReshapeFunc | |||
| glutKeyboardFunc | |||
| glutMouseFunc | |||
| glutMotionFunc | |||
| glutPassiveMotionFunc | |||
| glutEntryFunc | |||
| glutVisibilityFunc | |||
| glutIdleFunc | |||
| glutTimerFunc | |||
| glutMenuStateFunc | |||
| glutSpecialFunc | |||
| glutSpaceballMotionFunc | |||
| glutSpaceballRotateFunc | |||
| glutSpaceballButtonFunc | |||
| glutButtonBoxFunc | |||
| glutDialsFunc | |||
| glutTabletMotionFunc | |||
| glutTabletButtonFunc | |||
| glutMenuStatusFunc | |||
| glutOverlayDisplayFunc | |||
| glutWindowStatusFunc | |||
| glutSetColor | |||
| glutGetColor | |||
| glutCopyColormap | |||
| glutGet | |||
| glutDeviceGet | |||
| glutExtensionSupported | |||
| glutGetModifiers | |||
| glutLayerGet | |||
| glutBitmapCharacter | |||
| glutBitmapWidth | |||
| glutStrokeCharacter | |||
| glutStrokeWidth | |||
| glutBitmapLength | |||
| glutStrokeLength | |||
| glutWireSphere | |||
| glutSolidSphere | |||
| glutWireCone | |||
| glutSolidCone | |||
| glutWireCube | |||
| glutSolidCube | |||
| glutWireTorus | |||
| glutSolidTorus | |||
| glutWireDodecahedron | |||
| glutSolidDodecahedron | |||
| glutWireTeapot | |||
| glutSolidTeapot | |||
| glutWireOctahedron | |||
| glutSolidOctahedron | |||
| glutWireTetrahedron | |||
| glutSolidTetrahedron | |||
| glutWireIcosahedron | |||
| glutSolidIcosahedron | |||
| glutVideoResizeGet | |||
| glutSetupVideoResizing | |||
| glutStopVideoResizing | |||
| glutVideoResize | |||
| glutVideoPan | |||
| glutReportErrors | |||
| EXPORTS | |||
| glutInit | |||
| glutInitDisplayMode | |||
| glutInitDisplayString | |||
| glutInitWindowPosition | |||
| glutInitWindowSize | |||
| glutMainLoop | |||
| glutCreateWindow | |||
| glutCreateSubWindow | |||
| glutDestroyWindow | |||
| glutPostRedisplay | |||
| glutSwapBuffers | |||
| glutGetWindow | |||
| glutSetWindow | |||
| glutSetWindowTitle | |||
| glutSetIconTitle | |||
| glutPositionWindow | |||
| glutReshapeWindow | |||
| glutPopWindow | |||
| glutPushWindow | |||
| glutIconifyWindow | |||
| glutShowWindow | |||
| glutHideWindow | |||
| glutFullScreen | |||
| glutSetCursor | |||
| glutWarpPointer | |||
| glutEstablishOverlay | |||
| glutRemoveOverlay | |||
| glutUseLayer | |||
| glutPostOverlayRedisplay | |||
| glutShowOverlay | |||
| glutHideOverlay | |||
| glutCreateMenu | |||
| glutDestroyMenu | |||
| glutGetMenu | |||
| glutSetMenu | |||
| glutAddMenuEntry | |||
| glutAddSubMenu | |||
| glutChangeToMenuEntry | |||
| glutChangeToSubMenu | |||
| glutRemoveMenuItem | |||
| glutAttachMenu | |||
| glutDetachMenu | |||
| glutDisplayFunc | |||
| glutReshapeFunc | |||
| glutKeyboardFunc | |||
| glutMouseFunc | |||
| glutMotionFunc | |||
| glutPassiveMotionFunc | |||
| glutEntryFunc | |||
| glutVisibilityFunc | |||
| glutIdleFunc | |||
| glutTimerFunc | |||
| glutMenuStateFunc | |||
| glutSpecialFunc | |||
| glutSpaceballMotionFunc | |||
| glutSpaceballRotateFunc | |||
| glutSpaceballButtonFunc | |||
| glutButtonBoxFunc | |||
| glutDialsFunc | |||
| glutTabletMotionFunc | |||
| glutTabletButtonFunc | |||
| glutMenuStatusFunc | |||
| glutOverlayDisplayFunc | |||
| glutWindowStatusFunc | |||
| glutSetColor | |||
| glutGetColor | |||
| glutCopyColormap | |||
| glutGet | |||
| glutDeviceGet | |||
| glutExtensionSupported | |||
| glutGetModifiers | |||
| glutLayerGet | |||
| glutBitmapCharacter | |||
| glutBitmapWidth | |||
| glutStrokeCharacter | |||
| glutStrokeWidth | |||
| glutBitmapLength | |||
| glutStrokeLength | |||
| glutWireSphere | |||
| glutSolidSphere | |||
| glutWireCone | |||
| glutSolidCone | |||
| glutWireCube | |||
| glutSolidCube | |||
| glutWireTorus | |||
| glutSolidTorus | |||
| glutWireDodecahedron | |||
| glutSolidDodecahedron | |||
| glutWireTeapot | |||
| glutSolidTeapot | |||
| glutWireOctahedron | |||
| glutSolidOctahedron | |||
| glutWireTetrahedron | |||
| glutSolidTetrahedron | |||
| glutWireIcosahedron | |||
| glutSolidIcosahedron | |||
| glutVideoResizeGet | |||
| glutSetupVideoResizing | |||
| glutStopVideoResizing | |||
| glutVideoResize | |||
| glutVideoPan | |||
| glutReportErrors | |||
| @@ -1,420 +1,420 @@ | |||
| # Makefile | |||
| # Created by IBM WorkFrame/2 MakeMake at 12:46:25 on 3 June 2003 | |||
| # | |||
| # The actions included in this make file are: | |||
| # Compile::C++ Compiler | |||
| # Link::Linker | |||
| # Lib::Import Lib | |||
| .SUFFIXES: | |||
| .SUFFIXES: \ | |||
| .LIB .cpp .dll .obj | |||
| .cpp.obj: | |||
| @echo " Compile::C++ Compiler " | |||
| icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s | |||
| {G:\EVGEN\MESA5\src-glut.os2pm}.cpp.obj: | |||
| @echo " Compile::C++ Compiler " | |||
| icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s | |||
| .dll.LIB: | |||
| @echo " Lib::Import Lib " | |||
| implib.exe %|dpfF.LIB %s | |||
| {G:\EVGEN\MESA5\src-glut.os2pm}.dll.LIB: | |||
| @echo " Lib::Import Lib " | |||
| implib.exe %|dpfF.LIB %s | |||
| all: \ | |||
| .\libGlut.LIB | |||
| .\libGlut.dll: \ | |||
| .\os2_winproc.obj \ | |||
| .\WarpWin.obj \ | |||
| .\glutOverlay.obj \ | |||
| .\glut_8x13.obj \ | |||
| .\glut_9x15.obj \ | |||
| .\glut_bitmap.obj \ | |||
| .\glut_cindex.obj \ | |||
| .\glut_cmap.obj \ | |||
| .\glut_cursor.obj \ | |||
| .\glut_event.obj \ | |||
| .\glut_ext.obj \ | |||
| .\glut_fullscrn.obj \ | |||
| .\glut_gamemode.obj \ | |||
| .\glut_get.obj \ | |||
| .\glut_hel10.obj \ | |||
| .\glut_hel12.obj \ | |||
| .\glut_hel18.obj \ | |||
| .\glut_init.obj \ | |||
| .\glut_input.obj \ | |||
| .\glut_key.obj \ | |||
| .\glut_keyctrl.obj \ | |||
| .\glut_keyup.obj \ | |||
| .\glut_mesa.obj \ | |||
| .\glut_modifier.obj \ | |||
| .\glut_roman.obj \ | |||
| .\glut_shapes.obj \ | |||
| .\glut_stroke.obj \ | |||
| .\glut_swap.obj \ | |||
| .\glut_teapot.obj \ | |||
| .\glut_tr24.obj \ | |||
| .\glut_util.obj \ | |||
| .\glut_vidresize.obj \ | |||
| .\glut_warp.obj \ | |||
| .\glut_win.obj \ | |||
| .\glut_winmisc.obj \ | |||
| .\os2_glx.obj \ | |||
| .\os2_menu.obj \ | |||
| ..\si-glu\libGLU.lib \ | |||
| ..\MesaDll\MesaGL2.lib \ | |||
| ..\drv\DrvLoad\MesaDrvLoad.lib \ | |||
| {$(LIB)}libGlut.DEF | |||
| @echo " Link::Linker " | |||
| icc.exe @<< | |||
| /B" /dbgpack /exepack:2 /st:200000 /packd /optfunc" | |||
| /FelibGlut.dll | |||
| ..\si-glu\libGLU.lib | |||
| ..\MesaDll\MesaGL2.lib | |||
| ..\drv\DrvLoad\MesaDrvLoad.lib | |||
| libGlut.DEF | |||
| .\os2_winproc.obj | |||
| .\WarpWin.obj | |||
| .\glutOverlay.obj | |||
| .\glut_8x13.obj | |||
| .\glut_9x15.obj | |||
| .\glut_bitmap.obj | |||
| .\glut_cindex.obj | |||
| .\glut_cmap.obj | |||
| .\glut_cursor.obj | |||
| .\glut_event.obj | |||
| .\glut_ext.obj | |||
| .\glut_fullscrn.obj | |||
| .\glut_gamemode.obj | |||
| .\glut_get.obj | |||
| .\glut_hel10.obj | |||
| .\glut_hel12.obj | |||
| .\glut_hel18.obj | |||
| .\glut_init.obj | |||
| .\glut_input.obj | |||
| .\glut_key.obj | |||
| .\glut_keyctrl.obj | |||
| .\glut_keyup.obj | |||
| .\glut_mesa.obj | |||
| .\glut_modifier.obj | |||
| .\glut_roman.obj | |||
| .\glut_shapes.obj | |||
| .\glut_stroke.obj | |||
| .\glut_swap.obj | |||
| .\glut_teapot.obj | |||
| .\glut_tr24.obj | |||
| .\glut_util.obj | |||
| .\glut_vidresize.obj | |||
| .\glut_warp.obj | |||
| .\glut_win.obj | |||
| .\glut_winmisc.obj | |||
| .\os2_glx.obj | |||
| .\os2_menu.obj | |||
| << | |||
| .\os2_winproc.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_winproc.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2mesadef.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}context.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapi.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}mtypes.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glheader.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapitable.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glthread.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}math/m_matrix.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Trace/tr_context.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}dd.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}conf.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/glext.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Xthreads.h | |||
| .\os2_menu.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_menu.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\os2_glx.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_glx.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h | |||
| .\glut_winmisc.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_winmisc.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_win.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_win.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutos2.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h | |||
| .\glut_warp.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_warp.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_vidresize.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_vidresize.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_util.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_util.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_tr24.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_tr24.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_teapot.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_teapot.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_swap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_swap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_stroke.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_stroke.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_shapes.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_shapes.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_roman.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_roman.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h | |||
| .\glut_modifier.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_modifier.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_mesa.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_mesa.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_keyup.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_keyup.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_keyctrl.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_keyctrl.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_key.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_key.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_input.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_input.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_init.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_init.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_hel18.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel18.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_hel12.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel12.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_hel10.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel10.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_get.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_get.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_gamemode.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_gamemode.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_fullscrn.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_fullscrn.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_ext.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_ext.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_event.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_event.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_cursor.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cursor.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_cmap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cmap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}layerutil.h | |||
| .\glut_cindex.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cindex.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_bitmap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_bitmap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_9x15.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_9x15.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_8x13.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_8x13.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glutOverlay.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glutOverlay.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\WarpWin.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\WarpWin.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpWin.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h | |||
| .\libGlut.LIB: \ | |||
| .\libGlut.dll | |||
| # Makefile | |||
| # Created by IBM WorkFrame/2 MakeMake at 12:46:25 on 3 June 2003 | |||
| # | |||
| # The actions included in this make file are: | |||
| # Compile::C++ Compiler | |||
| # Link::Linker | |||
| # Lib::Import Lib | |||
| .SUFFIXES: | |||
| .SUFFIXES: \ | |||
| .LIB .cpp .dll .obj | |||
| .cpp.obj: | |||
| @echo " Compile::C++ Compiler " | |||
| icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s | |||
| {G:\EVGEN\MESA5\src-glut.os2pm}.cpp.obj: | |||
| @echo " Compile::C++ Compiler " | |||
| icc.exe /I..\ /I..\X86 /I..\GL /I..\swrast /I..\swrast_setup /Ss /Wcmpcndcnscnvcpydclenuextgeninilanobsordparporppcprorearettrdtruund /Tx /O /Gm /Ge- /G5 /Gf /Gi /Oi /C %s | |||
| .dll.LIB: | |||
| @echo " Lib::Import Lib " | |||
| implib.exe %|dpfF.LIB %s | |||
| {G:\EVGEN\MESA5\src-glut.os2pm}.dll.LIB: | |||
| @echo " Lib::Import Lib " | |||
| implib.exe %|dpfF.LIB %s | |||
| all: \ | |||
| .\libGlut.LIB | |||
| .\libGlut.dll: \ | |||
| .\os2_winproc.obj \ | |||
| .\WarpWin.obj \ | |||
| .\glutOverlay.obj \ | |||
| .\glut_8x13.obj \ | |||
| .\glut_9x15.obj \ | |||
| .\glut_bitmap.obj \ | |||
| .\glut_cindex.obj \ | |||
| .\glut_cmap.obj \ | |||
| .\glut_cursor.obj \ | |||
| .\glut_event.obj \ | |||
| .\glut_ext.obj \ | |||
| .\glut_fullscrn.obj \ | |||
| .\glut_gamemode.obj \ | |||
| .\glut_get.obj \ | |||
| .\glut_hel10.obj \ | |||
| .\glut_hel12.obj \ | |||
| .\glut_hel18.obj \ | |||
| .\glut_init.obj \ | |||
| .\glut_input.obj \ | |||
| .\glut_key.obj \ | |||
| .\glut_keyctrl.obj \ | |||
| .\glut_keyup.obj \ | |||
| .\glut_mesa.obj \ | |||
| .\glut_modifier.obj \ | |||
| .\glut_roman.obj \ | |||
| .\glut_shapes.obj \ | |||
| .\glut_stroke.obj \ | |||
| .\glut_swap.obj \ | |||
| .\glut_teapot.obj \ | |||
| .\glut_tr24.obj \ | |||
| .\glut_util.obj \ | |||
| .\glut_vidresize.obj \ | |||
| .\glut_warp.obj \ | |||
| .\glut_win.obj \ | |||
| .\glut_winmisc.obj \ | |||
| .\os2_glx.obj \ | |||
| .\os2_menu.obj \ | |||
| ..\si-glu\libGLU.lib \ | |||
| ..\MesaDll\MesaGL2.lib \ | |||
| ..\drv\DrvLoad\MesaDrvLoad.lib \ | |||
| {$(LIB)}libGlut.DEF | |||
| @echo " Link::Linker " | |||
| icc.exe @<< | |||
| /B" /dbgpack /exepack:2 /st:200000 /packd /optfunc" | |||
| /FelibGlut.dll | |||
| ..\si-glu\libGLU.lib | |||
| ..\MesaDll\MesaGL2.lib | |||
| ..\drv\DrvLoad\MesaDrvLoad.lib | |||
| libGlut.DEF | |||
| .\os2_winproc.obj | |||
| .\WarpWin.obj | |||
| .\glutOverlay.obj | |||
| .\glut_8x13.obj | |||
| .\glut_9x15.obj | |||
| .\glut_bitmap.obj | |||
| .\glut_cindex.obj | |||
| .\glut_cmap.obj | |||
| .\glut_cursor.obj | |||
| .\glut_event.obj | |||
| .\glut_ext.obj | |||
| .\glut_fullscrn.obj | |||
| .\glut_gamemode.obj | |||
| .\glut_get.obj | |||
| .\glut_hel10.obj | |||
| .\glut_hel12.obj | |||
| .\glut_hel18.obj | |||
| .\glut_init.obj | |||
| .\glut_input.obj | |||
| .\glut_key.obj | |||
| .\glut_keyctrl.obj | |||
| .\glut_keyup.obj | |||
| .\glut_mesa.obj | |||
| .\glut_modifier.obj | |||
| .\glut_roman.obj | |||
| .\glut_shapes.obj | |||
| .\glut_stroke.obj | |||
| .\glut_swap.obj | |||
| .\glut_teapot.obj | |||
| .\glut_tr24.obj | |||
| .\glut_util.obj | |||
| .\glut_vidresize.obj | |||
| .\glut_warp.obj | |||
| .\glut_win.obj | |||
| .\glut_winmisc.obj | |||
| .\os2_glx.obj | |||
| .\os2_menu.obj | |||
| << | |||
| .\os2_winproc.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_winproc.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2mesadef.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}context.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapi.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}mtypes.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glheader.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glapitable.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glthread.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}math/m_matrix.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Trace/tr_context.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}dd.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}conf.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_config.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/glext.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}Xthreads.h | |||
| .\os2_menu.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_menu.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\os2_glx.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\os2_glx.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h | |||
| .\glut_winmisc.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_winmisc.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_win.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_win.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutos2.h \ | |||
| gl\os2mesa.h \ | |||
| gl\gl.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}gl_mangle.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}GL/os2_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}os2_config.h | |||
| .\glut_warp.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_warp.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_vidresize.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_vidresize.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_util.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_util.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_tr24.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_tr24.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_teapot.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_teapot.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_swap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_swap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_stroke.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_stroke.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_shapes.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_shapes.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_roman.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_roman.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h | |||
| .\glut_modifier.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_modifier.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_mesa.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_mesa.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_keyup.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_keyup.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_keyctrl.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_keyctrl.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_key.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_key.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_input.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_input.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_init.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_init.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_hel18.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel18.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_hel12.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel12.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_hel10.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_hel10.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_get.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_get.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_gamemode.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_gamemode.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_fullscrn.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_fullscrn.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_ext.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_ext.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_event.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_event.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_cursor.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cursor.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_cmap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cmap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}layerutil.h | |||
| .\glut_cindex.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_cindex.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_bitmap.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_bitmap.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\glut_9x15.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_9x15.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glut_8x13.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glut_8x13.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h | |||
| .\glutOverlay.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\glutOverlay.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutint.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutbitmap.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutstroke.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}glutwin32.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_x11.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}win32_glx.h | |||
| .\WarpWin.obj: \ | |||
| G:\EVGEN\MESA5\src-glut.os2pm\WarpWin.cpp \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpWin.h \ | |||
| {G:\EVGEN\MESA5\src-glut.os2pm;..\;..\X86;..\GL;..\swrast;..\swrast_setup;$(INCLUDE);}WarpGL.h | |||
| .\libGlut.LIB: \ | |||
| .\libGlut.dll | |||
| @@ -1,133 +1,133 @@ | |||
| /*********************************************************** | |||
| * Copyright (C) 1997, Be Inc. All rights reserved. | |||
| * | |||
| * FILE: glutOverlay.cpp | |||
| * | |||
| * DESCRIPTION: we don't support overlays, so this code is | |||
| * really simple | |||
| ***********************************************************/ | |||
| /*********************************************************** | |||
| * Headers | |||
| ***********************************************************/ | |||
| #include <GL/glut.h> | |||
| #include "glutint.h" | |||
| #include "glutbitmap.h" | |||
| #include "glutstroke.h" | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutEstablishOverlay(void) | |||
| { | |||
| __glutFatalError("OS2PM lacks overlay support."); | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutUseLayer(GLenum layer) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutRemoveOverlay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutPostOverlayRedisplay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutShowOverlay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY glutHideOverlay(void) | |||
| { | |||
| // ignore | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutLayerGet(GLenum param) | |||
| { | |||
| // ignore | |||
| } | |||
| /*********************************************************** | |||
| * Unsupported callbacks | |||
| ***********************************************************/ | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutOverlayDisplayFunc(GLUTdisplayCB displayFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutDialsFunc(GLUTdialsCB dialsFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutPostWindowOverlayRedisplay(int win) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitDisplayString(const char *string) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutForceJoystickFunc(void) | |||
| { // | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutBitmapWidth(GLUTbitmapFont font, int c) | |||
| { return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutBitmapLength(GLUTbitmapFont font, const unsigned char *string) | |||
| { // | |||
| return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutStrokeWidth(GLUTstrokeFont font, int c) | |||
| { return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutStrokeLength(GLUTstrokeFont font, const unsigned char *string) | |||
| { return 0; | |||
| } | |||
| /*********************************************************** | |||
| * Copyright (C) 1997, Be Inc. All rights reserved. | |||
| * | |||
| * FILE: glutOverlay.cpp | |||
| * | |||
| * DESCRIPTION: we don't support overlays, so this code is | |||
| * really simple | |||
| ***********************************************************/ | |||
| /*********************************************************** | |||
| * Headers | |||
| ***********************************************************/ | |||
| #include <GL/glut.h> | |||
| #include "glutint.h" | |||
| #include "glutbitmap.h" | |||
| #include "glutstroke.h" | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutEstablishOverlay(void) | |||
| { | |||
| __glutFatalError("OS2PM lacks overlay support."); | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutUseLayer(GLenum layer) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutRemoveOverlay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutPostOverlayRedisplay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutShowOverlay(void) { | |||
| // ignore | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY glutHideOverlay(void) | |||
| { | |||
| // ignore | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutLayerGet(GLenum param) | |||
| { | |||
| // ignore | |||
| } | |||
| /*********************************************************** | |||
| * Unsupported callbacks | |||
| ***********************************************************/ | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutOverlayDisplayFunc(GLUTdisplayCB displayFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballMotionFunc(GLUTspaceMotionCB spaceMotionFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballRotateFunc(GLUTspaceRotateCB spaceRotateFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutSpaceballButtonFunc(GLUTspaceButtonCB spaceButtonFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutButtonBoxFunc(GLUTbuttonBoxCB buttonBoxFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutDialsFunc(GLUTdialsCB dialsFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutTabletMotionFunc(GLUTtabletMotionCB tabletMotionFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutTabletButtonFunc(GLUTtabletButtonCB tabletButtonFunc) | |||
| { | |||
| } | |||
| GLUTAPI void GLUTAPIENTRY | |||
| glutPostWindowOverlayRedisplay(int win) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitDisplayString(const char *string) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutJoystickFunc(GLUTjoystickCB joystickFunc, int pollInterval) | |||
| { // | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutForceJoystickFunc(void) | |||
| { // | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutBitmapWidth(GLUTbitmapFont font, int c) | |||
| { return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutBitmapLength(GLUTbitmapFont font, const unsigned char *string) | |||
| { // | |||
| return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutStrokeWidth(GLUTstrokeFont font, int c) | |||
| { return 0; | |||
| } | |||
| int GLUTAPIENTRY | |||
| glutStrokeLength(GLUTstrokeFont font, const unsigned char *string) | |||
| { return 0; | |||
| } | |||
| @@ -1,57 +1,57 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #include "glutbitmap.h" | |||
| void GLUTAPIENTRY | |||
| glutBitmapCharacter(GLUTbitmapFont font, int c) | |||
| { | |||
| const BitmapCharRec *ch; | |||
| BitmapFontPtr fontinfo; | |||
| GLint swapbytes, lsbfirst, rowlength; | |||
| GLint skiprows, skippixels, alignment; | |||
| #if defined(_WIN32) | |||
| fontinfo = (BitmapFontPtr) __glutFont(font); | |||
| #else | |||
| fontinfo = (BitmapFontPtr) font; | |||
| #endif | |||
| if (c < fontinfo->first || | |||
| c >= fontinfo->first + fontinfo->num_chars) | |||
| return; | |||
| ch = fontinfo->ch[c - fontinfo->first]; | |||
| if (ch) { | |||
| /* Save current modes. */ | |||
| glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes); | |||
| glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst); | |||
| glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength); | |||
| glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows); | |||
| glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels); | |||
| glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); | |||
| /* Little endian machines (DEC Alpha for example) could | |||
| benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE | |||
| instead of GL_FALSE, but this would require changing the | |||
| generated bitmaps too. */ | |||
| glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); | |||
| glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE); | |||
| glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); | |||
| glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); | |||
| glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); | |||
| glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | |||
| glBitmap(ch->width, ch->height, ch->xorig, ch->yorig, | |||
| ch->advance, 0, ch->bitmap); | |||
| /* Restore saved modes. */ | |||
| glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes); | |||
| glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst); | |||
| glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength); | |||
| glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows); | |||
| glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels); | |||
| glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); | |||
| } | |||
| } | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #include "glutbitmap.h" | |||
| void GLUTAPIENTRY | |||
| glutBitmapCharacter(GLUTbitmapFont font, int c) | |||
| { | |||
| const BitmapCharRec *ch; | |||
| BitmapFontPtr fontinfo; | |||
| GLint swapbytes, lsbfirst, rowlength; | |||
| GLint skiprows, skippixels, alignment; | |||
| #if defined(_WIN32) | |||
| fontinfo = (BitmapFontPtr) __glutFont(font); | |||
| #else | |||
| fontinfo = (BitmapFontPtr) font; | |||
| #endif | |||
| if (c < fontinfo->first || | |||
| c >= fontinfo->first + fontinfo->num_chars) | |||
| return; | |||
| ch = fontinfo->ch[c - fontinfo->first]; | |||
| if (ch) { | |||
| /* Save current modes. */ | |||
| glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes); | |||
| glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst); | |||
| glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength); | |||
| glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows); | |||
| glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels); | |||
| glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); | |||
| /* Little endian machines (DEC Alpha for example) could | |||
| benefit from setting GL_UNPACK_LSB_FIRST to GL_TRUE | |||
| instead of GL_FALSE, but this would require changing the | |||
| generated bitmaps too. */ | |||
| glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE); | |||
| glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE); | |||
| glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); | |||
| glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); | |||
| glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); | |||
| glPixelStorei(GL_UNPACK_ALIGNMENT, 1); | |||
| glBitmap(ch->width, ch->height, ch->xorig, ch->yorig, | |||
| ch->advance, 0, ch->bitmap); | |||
| /* Restore saved modes. */ | |||
| glPixelStorei(GL_UNPACK_SWAP_BYTES, swapbytes); | |||
| glPixelStorei(GL_UNPACK_LSB_FIRST, lsbfirst); | |||
| glPixelStorei(GL_UNPACK_ROW_LENGTH, rowlength); | |||
| glPixelStorei(GL_UNPACK_SKIP_ROWS, skiprows); | |||
| glPixelStorei(GL_UNPACK_SKIP_PIXELS, skippixels); | |||
| glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); | |||
| } | |||
| } | |||
| @@ -1,399 +1,399 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #ifdef __VMS | |||
| //EK#include <GL/vms_x_fix.h> | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <stdio.h> /* SunOS multithreaded assert() needs <stdio.h>. Lame. */ | |||
| #include <assert.h> | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xutil.h> | |||
| #include <X11/Xatom.h> /* for XA_RGB_DEFAULT_MAP atom */ | |||
| #if defined(__vms) | |||
| #include <Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ | |||
| #else | |||
| #include <X11/Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ | |||
| #endif | |||
| #endif | |||
| /* SGI optimization introduced in IRIX 6.3 to avoid X server | |||
| round trips for interning common X atoms. */ | |||
| #if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS) | |||
| #include <X11/SGIFastAtom.h> | |||
| #else | |||
| #define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how) | |||
| #endif | |||
| #include "glutint.h" | |||
| #include "layerutil.h" | |||
| GLUTcolormap *__glutColormapList = NULL; | |||
| GLUTcolormap * | |||
| __glutAssociateNewColormap(XVisualInfo * vis) | |||
| { | |||
| GLUTcolormap *cmap; | |||
| int transparentPixel, i; | |||
| unsigned long pixels[255]; | |||
| cmap = (GLUTcolormap *) malloc(sizeof(GLUTcolormap)); | |||
| if (!cmap) | |||
| __glutFatalError("out of memory."); | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| pixels[0] = 0; /* avoid compilation warnings on win32 */ | |||
| cmap->visual = 0; | |||
| cmap->size = 256; /* always assume 256 on Win32 */ | |||
| #else | |||
| cmap->visual = vis->visual; | |||
| cmap->size = vis->visual->map_entries; | |||
| #endif | |||
| cmap->refcnt = 1; | |||
| cmap->cells = (GLUTcolorcell *) | |||
| malloc(sizeof(GLUTcolorcell) * cmap->size); | |||
| if (!cmap->cells) | |||
| __glutFatalError("out of memory."); | |||
| /* make all color cell entries be invalid */ | |||
| for (i = cmap->size - 1; i >= 0; i--) { | |||
| cmap->cells[i].component[GLUT_RED] = -1.0; | |||
| cmap->cells[i].component[GLUT_GREEN] = -1.0; | |||
| cmap->cells[i].component[GLUT_BLUE] = -1.0; | |||
| } | |||
| transparentPixel = __glutGetTransparentPixel(__glutDisplay, vis); | |||
| if (transparentPixel == -1 || transparentPixel >= cmap->size) { | |||
| /* If there is no transparent pixel or if the transparent | |||
| pixel is outside the range of valid colormap cells (HP | |||
| can implement their overlays this smart way since their | |||
| transparent pixel is 255), we can AllocAll the colormap. | |||
| See note below. */ | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, cmap->visual, AllocAll); | |||
| } else { | |||
| /* On machines where zero (or some other value in the range | |||
| of 0 through map_entries-1), BadAlloc may be generated | |||
| when an AllocAll overlay colormap is allocated since the | |||
| transparent pixel precludes all the cells in the colormap | |||
| being allocated (the transparent pixel is pre-allocated). | |||
| So in this case, use XAllocColorCells to allocate | |||
| map_entries-1 pixels (that is, all but the transparent | |||
| pixel. */ | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, 0, AllocNone); | |||
| #else | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, vis->visual, AllocNone); | |||
| XAllocColorCells(__glutDisplay, cmap->cmap, False, 0, 0, | |||
| pixels, cmap->size - 1); | |||
| #endif | |||
| } | |||
| cmap->next = __glutColormapList; | |||
| __glutColormapList = cmap; | |||
| return cmap; | |||
| } | |||
| static GLUTcolormap * | |||
| associateColormap(XVisualInfo * vis) | |||
| { | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| GLUTcolormap *cmap = __glutColormapList; | |||
| while (cmap != NULL) { | |||
| /* Play safe: compare visual IDs, not Visual*'s. */ | |||
| if (cmap->visual->visualid == vis->visual->visualid) { | |||
| /* Already have created colormap for the visual. */ | |||
| cmap->refcnt++; | |||
| return cmap; | |||
| } | |||
| cmap = cmap->next; | |||
| } | |||
| #endif | |||
| return __glutAssociateNewColormap(vis); | |||
| } | |||
| void | |||
| __glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap) | |||
| { | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| if (vi->dwFlags & PFD_NEED_PALETTE || vi->iPixelType == PFD_TYPE_COLORINDEX) { | |||
| *colormap = associateColormap(vi); | |||
| *cmap = (*colormap)->cmap; | |||
| } else { | |||
| *colormap = NULL; | |||
| *cmap = 0; | |||
| } | |||
| #else | |||
| Status status; | |||
| XStandardColormap *standardCmaps; | |||
| int i, numCmaps; | |||
| static Atom hpColorRecoveryAtom = -1; | |||
| int isRGB, visualClass, rc; | |||
| #if defined(__cplusplus) || defined(c_plusplus) | |||
| visualClass = vi->c_class; | |||
| #else | |||
| visualClass = vi->class; | |||
| #endif | |||
| switch (visualClass) { | |||
| case PseudoColor: | |||
| /* Mesa might return a PseudoColor visual for RGB mode. */ | |||
| rc = glXGetConfig(__glutDisplay, vi, GLX_RGBA, &isRGB); | |||
| if (rc == 0 && isRGB) { | |||
| /* Must be Mesa. */ | |||
| *colormap = NULL; | |||
| if (MaxCmapsOfScreen(DefaultScreenOfDisplay(__glutDisplay)) == 1 | |||
| && vi->visual == DefaultVisual(__glutDisplay, __glutScreen)) { | |||
| char *privateCmap = getenv("MESA_PRIVATE_CMAP"); | |||
| if (privateCmap) { | |||
| /* User doesn't want to share colormaps. */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| } else { | |||
| /* Share the root colormap. */ | |||
| *cmap = DefaultColormap(__glutDisplay, __glutScreen); | |||
| } | |||
| } else { | |||
| /* Get our own PseudoColor colormap. */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| } | |||
| } else { | |||
| /* CI mode, real GLX never returns a PseudoColor visual | |||
| for RGB mode. */ | |||
| *colormap = associateColormap(vi); | |||
| *cmap = (*colormap)->cmap; | |||
| } | |||
| break; | |||
| case TrueColor: | |||
| case DirectColor: | |||
| *colormap = NULL; /* NULL if RGBA */ | |||
| /* Hewlett-Packard supports a feature called "HP Color | |||
| Recovery". Mesa has code to use HP Color Recovery. For | |||
| Mesa to use this feature, the atom | |||
| _HP_RGB_SMOOTH_MAP_LIST must be defined on the root | |||
| window AND the colormap obtainable by XGetRGBColormaps | |||
| for that atom must be set on the window. If that | |||
| colormap is not set, the output will look stripy. */ | |||
| if (hpColorRecoveryAtom == -1) { | |||
| char *xvendor; | |||
| #define VENDOR_HP "Hewlett-Packard" | |||
| /* Only makes sense to make XInternAtom round-trip if we | |||
| know that we are connected to an HP X server. */ | |||
| xvendor = ServerVendor(__glutDisplay); | |||
| if (!strncmp(xvendor, VENDOR_HP, sizeof(VENDOR_HP) - 1)) { | |||
| hpColorRecoveryAtom = XInternAtom(__glutDisplay, "_HP_RGB_SMOOTH_MAP_LIST", True); | |||
| } else { | |||
| hpColorRecoveryAtom = None; | |||
| } | |||
| } | |||
| if (hpColorRecoveryAtom != None) { | |||
| status = XGetRGBColormaps(__glutDisplay, __glutRoot, | |||
| &standardCmaps, &numCmaps, hpColorRecoveryAtom); | |||
| if (status == 1) { | |||
| for (i = 0; i < numCmaps; i++) { | |||
| if (standardCmaps[i].visualid == vi->visualid) { | |||
| *cmap = standardCmaps[i].colormap; | |||
| XFree(standardCmaps); | |||
| return; | |||
| } | |||
| } | |||
| XFree(standardCmaps); | |||
| } | |||
| } | |||
| #ifndef SOLARIS_2_4_BUG | |||
| /* Solaris 2.4 and 2.5 have a bug in their | |||
| XmuLookupStandardColormap implementations. Please | |||
| compile your Solaris 2.4 or 2.5 version of GLUT with | |||
| -DSOLARIS_2_4_BUG to work around this bug. The symptom | |||
| of the bug is that programs will get a BadMatch error | |||
| from X_CreateWindow when creating a GLUT window because | |||
| Solaris 2.4 and 2.5 create a corrupted RGB_DEFAULT_MAP | |||
| property. Note that this workaround prevents Colormap | |||
| sharing between applications, perhaps leading | |||
| unnecessary colormap installations or colormap flashing. | |||
| Sun fixed this bug in Solaris 2.6. */ | |||
| status = XmuLookupStandardColormap(__glutDisplay, | |||
| vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP, | |||
| /* replace */ False, /* retain */ True); | |||
| if (status == 1) { | |||
| status = XGetRGBColormaps(__glutDisplay, __glutRoot, | |||
| &standardCmaps, &numCmaps, XA_RGB_DEFAULT_MAP); | |||
| if (status == 1) { | |||
| for (i = 0; i < numCmaps; i++) { | |||
| if (standardCmaps[i].visualid == vi->visualid) { | |||
| *cmap = standardCmaps[i].colormap; | |||
| XFree(standardCmaps); | |||
| return; | |||
| } | |||
| } | |||
| XFree(standardCmaps); | |||
| } | |||
| } | |||
| #endif | |||
| /* If no standard colormap but TrueColor, just make a | |||
| private one. */ | |||
| /* XXX Should do a better job of internal sharing for | |||
| privately allocated TrueColor colormaps. */ | |||
| /* XXX DirectColor probably needs ramps hand initialized! */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| break; | |||
| case StaticColor: | |||
| case StaticGray: | |||
| case GrayScale: | |||
| /* Mesa supports these visuals */ | |||
| *colormap = NULL; | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| break; | |||
| default: | |||
| __glutFatalError( | |||
| "could not allocate colormap for visual type: %d.", | |||
| visualClass); | |||
| } | |||
| return; | |||
| #endif | |||
| } | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| static int | |||
| findColormaps(GLUTwindow * window, | |||
| Window * winlist, Colormap * cmaplist, int num, int max) | |||
| { | |||
| GLUTwindow *child; | |||
| int i; | |||
| /* Do not allow more entries that maximum number of | |||
| colormaps! */ | |||
| if (num >= max) | |||
| return num; | |||
| /* Is cmap for this window already on the list? */ | |||
| for (i = 0; i < num; i++) { | |||
| if (cmaplist[i] == window->cmap) | |||
| goto normalColormapAlreadyListed; | |||
| } | |||
| /* Not found on the list; add colormap and window. */ | |||
| winlist[num] = window->win; | |||
| cmaplist[num] = window->cmap; | |||
| num++; | |||
| normalColormapAlreadyListed: | |||
| /* Repeat above but for the overlay colormap if there one. */ | |||
| if (window->overlay) { | |||
| if (num >= max) | |||
| return num; | |||
| for (i = 0; i < num; i++) { | |||
| if (cmaplist[i] == window->overlay->cmap) | |||
| goto overlayColormapAlreadyListed; | |||
| } | |||
| winlist[num] = window->overlay->win; | |||
| cmaplist[num] = window->overlay->cmap; | |||
| num++; | |||
| } | |||
| overlayColormapAlreadyListed: | |||
| /* Recursively search children. */ | |||
| child = window->children; | |||
| while (child) { | |||
| num = findColormaps(child, winlist, cmaplist, num, max); | |||
| child = child->siblings; | |||
| } | |||
| return num; | |||
| } | |||
| void | |||
| __glutEstablishColormapsProperty(GLUTwindow * window) | |||
| { | |||
| /* this routine is strictly X. Win32 doesn't need to do | |||
| anything of this sort (but has to do other wacky stuff | |||
| later). */ | |||
| static Atom wmColormapWindows = None; | |||
| Window *winlist; | |||
| Colormap *cmaplist; | |||
| Status status; | |||
| int maxcmaps, num; | |||
| assert(!window->parent); | |||
| maxcmaps = MaxCmapsOfScreen(ScreenOfDisplay(__glutDisplay, | |||
| __glutScreen)); | |||
| /* For portability reasons we don't use alloca for winlist | |||
| and cmaplist, but we could. */ | |||
| winlist = (Window *) malloc(maxcmaps * sizeof(Window)); | |||
| cmaplist = (Colormap *) malloc(maxcmaps * sizeof(Colormap)); | |||
| num = findColormaps(window, winlist, cmaplist, 0, maxcmaps); | |||
| if (num < 2) { | |||
| /* Property no longer needed; remove it. */ | |||
| wmColormapWindows = XSGIFastInternAtom(__glutDisplay, | |||
| "WM_COLORMAP_WINDOWS", SGI_XA_WM_COLORMAP_WINDOWS, False); | |||
| if (wmColormapWindows == None) { | |||
| __glutWarning("Could not intern X atom for WM_COLORMAP_WINDOWS."); | |||
| return; | |||
| } | |||
| XDeleteProperty(__glutDisplay, window->win, wmColormapWindows); | |||
| } else { | |||
| status = XSetWMColormapWindows(__glutDisplay, window->win, | |||
| winlist, num); | |||
| /* XSetWMColormapWindows should always work unless the | |||
| WM_COLORMAP_WINDOWS property cannot be intern'ed. We | |||
| check to be safe. */ | |||
| if (status == False) | |||
| __glutFatalError("XSetWMColormapWindows returned False."); | |||
| } | |||
| /* For portability reasons we don't use alloca for winlist | |||
| and cmaplist, but we could. */ | |||
| free(winlist); | |||
| free(cmaplist); | |||
| } | |||
| GLUTwindow * | |||
| __glutToplevelOf(GLUTwindow * window) | |||
| { | |||
| while (window->parent) { | |||
| window = window->parent; | |||
| } | |||
| return window; | |||
| } | |||
| #endif | |||
| void | |||
| __glutFreeColormap(GLUTcolormap * cmap) | |||
| { | |||
| GLUTcolormap *cur, **prev; | |||
| cmap->refcnt--; | |||
| if (cmap->refcnt == 0) { | |||
| /* remove from colormap list */ | |||
| cur = __glutColormapList; | |||
| prev = &__glutColormapList; | |||
| while (cur) { | |||
| if (cur == cmap) { | |||
| *prev = cmap->next; | |||
| break; | |||
| } | |||
| prev = &(cur->next); | |||
| cur = cur->next; | |||
| } | |||
| /* actually free colormap */ | |||
| XFreeColormap(__glutDisplay, cmap->cmap); | |||
| free(cmap->cells); | |||
| free(cmap); | |||
| } | |||
| } | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #ifdef __VMS | |||
| //EK#include <GL/vms_x_fix.h> | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <stdio.h> /* SunOS multithreaded assert() needs <stdio.h>. Lame. */ | |||
| #include <assert.h> | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xutil.h> | |||
| #include <X11/Xatom.h> /* for XA_RGB_DEFAULT_MAP atom */ | |||
| #if defined(__vms) | |||
| #include <Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ | |||
| #else | |||
| #include <X11/Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ | |||
| #endif | |||
| #endif | |||
| /* SGI optimization introduced in IRIX 6.3 to avoid X server | |||
| round trips for interning common X atoms. */ | |||
| #if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS) | |||
| #include <X11/SGIFastAtom.h> | |||
| #else | |||
| #define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how) | |||
| #endif | |||
| #include "glutint.h" | |||
| #include "layerutil.h" | |||
| GLUTcolormap *__glutColormapList = NULL; | |||
| GLUTcolormap * | |||
| __glutAssociateNewColormap(XVisualInfo * vis) | |||
| { | |||
| GLUTcolormap *cmap; | |||
| int transparentPixel, i; | |||
| unsigned long pixels[255]; | |||
| cmap = (GLUTcolormap *) malloc(sizeof(GLUTcolormap)); | |||
| if (!cmap) | |||
| __glutFatalError("out of memory."); | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| pixels[0] = 0; /* avoid compilation warnings on win32 */ | |||
| cmap->visual = 0; | |||
| cmap->size = 256; /* always assume 256 on Win32 */ | |||
| #else | |||
| cmap->visual = vis->visual; | |||
| cmap->size = vis->visual->map_entries; | |||
| #endif | |||
| cmap->refcnt = 1; | |||
| cmap->cells = (GLUTcolorcell *) | |||
| malloc(sizeof(GLUTcolorcell) * cmap->size); | |||
| if (!cmap->cells) | |||
| __glutFatalError("out of memory."); | |||
| /* make all color cell entries be invalid */ | |||
| for (i = cmap->size - 1; i >= 0; i--) { | |||
| cmap->cells[i].component[GLUT_RED] = -1.0; | |||
| cmap->cells[i].component[GLUT_GREEN] = -1.0; | |||
| cmap->cells[i].component[GLUT_BLUE] = -1.0; | |||
| } | |||
| transparentPixel = __glutGetTransparentPixel(__glutDisplay, vis); | |||
| if (transparentPixel == -1 || transparentPixel >= cmap->size) { | |||
| /* If there is no transparent pixel or if the transparent | |||
| pixel is outside the range of valid colormap cells (HP | |||
| can implement their overlays this smart way since their | |||
| transparent pixel is 255), we can AllocAll the colormap. | |||
| See note below. */ | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, cmap->visual, AllocAll); | |||
| } else { | |||
| /* On machines where zero (or some other value in the range | |||
| of 0 through map_entries-1), BadAlloc may be generated | |||
| when an AllocAll overlay colormap is allocated since the | |||
| transparent pixel precludes all the cells in the colormap | |||
| being allocated (the transparent pixel is pre-allocated). | |||
| So in this case, use XAllocColorCells to allocate | |||
| map_entries-1 pixels (that is, all but the transparent | |||
| pixel. */ | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, 0, AllocNone); | |||
| #else | |||
| cmap->cmap = XCreateColormap(__glutDisplay, | |||
| __glutRoot, vis->visual, AllocNone); | |||
| XAllocColorCells(__glutDisplay, cmap->cmap, False, 0, 0, | |||
| pixels, cmap->size - 1); | |||
| #endif | |||
| } | |||
| cmap->next = __glutColormapList; | |||
| __glutColormapList = cmap; | |||
| return cmap; | |||
| } | |||
| static GLUTcolormap * | |||
| associateColormap(XVisualInfo * vis) | |||
| { | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| GLUTcolormap *cmap = __glutColormapList; | |||
| while (cmap != NULL) { | |||
| /* Play safe: compare visual IDs, not Visual*'s. */ | |||
| if (cmap->visual->visualid == vis->visual->visualid) { | |||
| /* Already have created colormap for the visual. */ | |||
| cmap->refcnt++; | |||
| return cmap; | |||
| } | |||
| cmap = cmap->next; | |||
| } | |||
| #endif | |||
| return __glutAssociateNewColormap(vis); | |||
| } | |||
| void | |||
| __glutSetupColormap(XVisualInfo * vi, GLUTcolormap ** colormap, Colormap * cmap) | |||
| { | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| if (vi->dwFlags & PFD_NEED_PALETTE || vi->iPixelType == PFD_TYPE_COLORINDEX) { | |||
| *colormap = associateColormap(vi); | |||
| *cmap = (*colormap)->cmap; | |||
| } else { | |||
| *colormap = NULL; | |||
| *cmap = 0; | |||
| } | |||
| #else | |||
| Status status; | |||
| XStandardColormap *standardCmaps; | |||
| int i, numCmaps; | |||
| static Atom hpColorRecoveryAtom = -1; | |||
| int isRGB, visualClass, rc; | |||
| #if defined(__cplusplus) || defined(c_plusplus) | |||
| visualClass = vi->c_class; | |||
| #else | |||
| visualClass = vi->class; | |||
| #endif | |||
| switch (visualClass) { | |||
| case PseudoColor: | |||
| /* Mesa might return a PseudoColor visual for RGB mode. */ | |||
| rc = glXGetConfig(__glutDisplay, vi, GLX_RGBA, &isRGB); | |||
| if (rc == 0 && isRGB) { | |||
| /* Must be Mesa. */ | |||
| *colormap = NULL; | |||
| if (MaxCmapsOfScreen(DefaultScreenOfDisplay(__glutDisplay)) == 1 | |||
| && vi->visual == DefaultVisual(__glutDisplay, __glutScreen)) { | |||
| char *privateCmap = getenv("MESA_PRIVATE_CMAP"); | |||
| if (privateCmap) { | |||
| /* User doesn't want to share colormaps. */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| } else { | |||
| /* Share the root colormap. */ | |||
| *cmap = DefaultColormap(__glutDisplay, __glutScreen); | |||
| } | |||
| } else { | |||
| /* Get our own PseudoColor colormap. */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| } | |||
| } else { | |||
| /* CI mode, real GLX never returns a PseudoColor visual | |||
| for RGB mode. */ | |||
| *colormap = associateColormap(vi); | |||
| *cmap = (*colormap)->cmap; | |||
| } | |||
| break; | |||
| case TrueColor: | |||
| case DirectColor: | |||
| *colormap = NULL; /* NULL if RGBA */ | |||
| /* Hewlett-Packard supports a feature called "HP Color | |||
| Recovery". Mesa has code to use HP Color Recovery. For | |||
| Mesa to use this feature, the atom | |||
| _HP_RGB_SMOOTH_MAP_LIST must be defined on the root | |||
| window AND the colormap obtainable by XGetRGBColormaps | |||
| for that atom must be set on the window. If that | |||
| colormap is not set, the output will look stripy. */ | |||
| if (hpColorRecoveryAtom == -1) { | |||
| char *xvendor; | |||
| #define VENDOR_HP "Hewlett-Packard" | |||
| /* Only makes sense to make XInternAtom round-trip if we | |||
| know that we are connected to an HP X server. */ | |||
| xvendor = ServerVendor(__glutDisplay); | |||
| if (!strncmp(xvendor, VENDOR_HP, sizeof(VENDOR_HP) - 1)) { | |||
| hpColorRecoveryAtom = XInternAtom(__glutDisplay, "_HP_RGB_SMOOTH_MAP_LIST", True); | |||
| } else { | |||
| hpColorRecoveryAtom = None; | |||
| } | |||
| } | |||
| if (hpColorRecoveryAtom != None) { | |||
| status = XGetRGBColormaps(__glutDisplay, __glutRoot, | |||
| &standardCmaps, &numCmaps, hpColorRecoveryAtom); | |||
| if (status == 1) { | |||
| for (i = 0; i < numCmaps; i++) { | |||
| if (standardCmaps[i].visualid == vi->visualid) { | |||
| *cmap = standardCmaps[i].colormap; | |||
| XFree(standardCmaps); | |||
| return; | |||
| } | |||
| } | |||
| XFree(standardCmaps); | |||
| } | |||
| } | |||
| #ifndef SOLARIS_2_4_BUG | |||
| /* Solaris 2.4 and 2.5 have a bug in their | |||
| XmuLookupStandardColormap implementations. Please | |||
| compile your Solaris 2.4 or 2.5 version of GLUT with | |||
| -DSOLARIS_2_4_BUG to work around this bug. The symptom | |||
| of the bug is that programs will get a BadMatch error | |||
| from X_CreateWindow when creating a GLUT window because | |||
| Solaris 2.4 and 2.5 create a corrupted RGB_DEFAULT_MAP | |||
| property. Note that this workaround prevents Colormap | |||
| sharing between applications, perhaps leading | |||
| unnecessary colormap installations or colormap flashing. | |||
| Sun fixed this bug in Solaris 2.6. */ | |||
| status = XmuLookupStandardColormap(__glutDisplay, | |||
| vi->screen, vi->visualid, vi->depth, XA_RGB_DEFAULT_MAP, | |||
| /* replace */ False, /* retain */ True); | |||
| if (status == 1) { | |||
| status = XGetRGBColormaps(__glutDisplay, __glutRoot, | |||
| &standardCmaps, &numCmaps, XA_RGB_DEFAULT_MAP); | |||
| if (status == 1) { | |||
| for (i = 0; i < numCmaps; i++) { | |||
| if (standardCmaps[i].visualid == vi->visualid) { | |||
| *cmap = standardCmaps[i].colormap; | |||
| XFree(standardCmaps); | |||
| return; | |||
| } | |||
| } | |||
| XFree(standardCmaps); | |||
| } | |||
| } | |||
| #endif | |||
| /* If no standard colormap but TrueColor, just make a | |||
| private one. */ | |||
| /* XXX Should do a better job of internal sharing for | |||
| privately allocated TrueColor colormaps. */ | |||
| /* XXX DirectColor probably needs ramps hand initialized! */ | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| break; | |||
| case StaticColor: | |||
| case StaticGray: | |||
| case GrayScale: | |||
| /* Mesa supports these visuals */ | |||
| *colormap = NULL; | |||
| *cmap = XCreateColormap(__glutDisplay, __glutRoot, | |||
| vi->visual, AllocNone); | |||
| break; | |||
| default: | |||
| __glutFatalError( | |||
| "could not allocate colormap for visual type: %d.", | |||
| visualClass); | |||
| } | |||
| return; | |||
| #endif | |||
| } | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| static int | |||
| findColormaps(GLUTwindow * window, | |||
| Window * winlist, Colormap * cmaplist, int num, int max) | |||
| { | |||
| GLUTwindow *child; | |||
| int i; | |||
| /* Do not allow more entries that maximum number of | |||
| colormaps! */ | |||
| if (num >= max) | |||
| return num; | |||
| /* Is cmap for this window already on the list? */ | |||
| for (i = 0; i < num; i++) { | |||
| if (cmaplist[i] == window->cmap) | |||
| goto normalColormapAlreadyListed; | |||
| } | |||
| /* Not found on the list; add colormap and window. */ | |||
| winlist[num] = window->win; | |||
| cmaplist[num] = window->cmap; | |||
| num++; | |||
| normalColormapAlreadyListed: | |||
| /* Repeat above but for the overlay colormap if there one. */ | |||
| if (window->overlay) { | |||
| if (num >= max) | |||
| return num; | |||
| for (i = 0; i < num; i++) { | |||
| if (cmaplist[i] == window->overlay->cmap) | |||
| goto overlayColormapAlreadyListed; | |||
| } | |||
| winlist[num] = window->overlay->win; | |||
| cmaplist[num] = window->overlay->cmap; | |||
| num++; | |||
| } | |||
| overlayColormapAlreadyListed: | |||
| /* Recursively search children. */ | |||
| child = window->children; | |||
| while (child) { | |||
| num = findColormaps(child, winlist, cmaplist, num, max); | |||
| child = child->siblings; | |||
| } | |||
| return num; | |||
| } | |||
| void | |||
| __glutEstablishColormapsProperty(GLUTwindow * window) | |||
| { | |||
| /* this routine is strictly X. Win32 doesn't need to do | |||
| anything of this sort (but has to do other wacky stuff | |||
| later). */ | |||
| static Atom wmColormapWindows = None; | |||
| Window *winlist; | |||
| Colormap *cmaplist; | |||
| Status status; | |||
| int maxcmaps, num; | |||
| assert(!window->parent); | |||
| maxcmaps = MaxCmapsOfScreen(ScreenOfDisplay(__glutDisplay, | |||
| __glutScreen)); | |||
| /* For portability reasons we don't use alloca for winlist | |||
| and cmaplist, but we could. */ | |||
| winlist = (Window *) malloc(maxcmaps * sizeof(Window)); | |||
| cmaplist = (Colormap *) malloc(maxcmaps * sizeof(Colormap)); | |||
| num = findColormaps(window, winlist, cmaplist, 0, maxcmaps); | |||
| if (num < 2) { | |||
| /* Property no longer needed; remove it. */ | |||
| wmColormapWindows = XSGIFastInternAtom(__glutDisplay, | |||
| "WM_COLORMAP_WINDOWS", SGI_XA_WM_COLORMAP_WINDOWS, False); | |||
| if (wmColormapWindows == None) { | |||
| __glutWarning("Could not intern X atom for WM_COLORMAP_WINDOWS."); | |||
| return; | |||
| } | |||
| XDeleteProperty(__glutDisplay, window->win, wmColormapWindows); | |||
| } else { | |||
| status = XSetWMColormapWindows(__glutDisplay, window->win, | |||
| winlist, num); | |||
| /* XSetWMColormapWindows should always work unless the | |||
| WM_COLORMAP_WINDOWS property cannot be intern'ed. We | |||
| check to be safe. */ | |||
| if (status == False) | |||
| __glutFatalError("XSetWMColormapWindows returned False."); | |||
| } | |||
| /* For portability reasons we don't use alloca for winlist | |||
| and cmaplist, but we could. */ | |||
| free(winlist); | |||
| free(cmaplist); | |||
| } | |||
| GLUTwindow * | |||
| __glutToplevelOf(GLUTwindow * window) | |||
| { | |||
| while (window->parent) { | |||
| window = window->parent; | |||
| } | |||
| return window; | |||
| } | |||
| #endif | |||
| void | |||
| __glutFreeColormap(GLUTcolormap * cmap) | |||
| { | |||
| GLUTcolormap *cur, **prev; | |||
| cmap->refcnt--; | |||
| if (cmap->refcnt == 0) { | |||
| /* remove from colormap list */ | |||
| cur = __glutColormapList; | |||
| prev = &__glutColormapList; | |||
| while (cur) { | |||
| if (cur == cmap) { | |||
| *prev = cmap->next; | |||
| break; | |||
| } | |||
| prev = &(cur->next); | |||
| cur = cur->next; | |||
| } | |||
| /* actually free colormap */ | |||
| XFreeColormap(__glutDisplay, cmap->cmap); | |||
| free(cmap->cells); | |||
| free(cmap); | |||
| } | |||
| } | |||
| @@ -1,210 +1,210 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1995, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| #include <X11/Xatom.h> /* For XA_CURSOR */ | |||
| #include <X11/cursorfont.h> | |||
| #endif | |||
| typedef struct _CursorTable { | |||
| #if defined(_WIN32) | |||
| char* glyph; | |||
| #else | |||
| int glyph; | |||
| #endif | |||
| Cursor cursor; | |||
| } CursorTable; | |||
| /* *INDENT-OFF* */ | |||
| static CursorTable cursorTable[] = { | |||
| {XC_arrow, None}, /* GLUT_CURSOR_RIGHT_ARROW */ | |||
| {XC_top_left_arrow, None}, /* GLUT_CURSOR_LEFT_ARROW */ | |||
| {XC_hand1, None}, /* GLUT_CURSOR_INFO */ | |||
| {XC_pirate, None}, /* GLUT_CURSOR_DESTROY */ | |||
| {XC_question_arrow, None}, /* GLUT_CURSOR_HELP */ | |||
| {XC_exchange, None}, /* GLUT_CURSOR_CYCLE */ | |||
| {XC_spraycan, None}, /* GLUT_CURSOR_SPRAY */ | |||
| {XC_watch, None}, /* GLUT_CURSOR_WAIT */ | |||
| {XC_xterm, None}, /* GLUT_CURSOR_TEXT */ | |||
| {XC_crosshair, None}, /* GLUT_CURSOR_CROSSHAIR */ | |||
| {XC_sb_v_double_arrow, None}, /* GLUT_CURSOR_UP_DOWN */ | |||
| {XC_sb_h_double_arrow, None}, /* GLUT_CURSOR_LEFT_RIGHT */ | |||
| {XC_top_side, None}, /* GLUT_CURSOR_TOP_SIDE */ | |||
| {XC_bottom_side, None}, /* GLUT_CURSOR_BOTTOM_SIDE */ | |||
| {XC_left_side, None}, /* GLUT_CURSOR_LEFT_SIDE */ | |||
| {XC_right_side, None}, /* GLUT_CURSOR_RIGHT_SIDE */ | |||
| {XC_top_left_corner, None}, /* GLUT_CURSOR_TOP_LEFT_CORNER */ | |||
| {XC_top_right_corner, None}, /* GLUT_CURSOR_TOP_RIGHT_CORNER */ | |||
| {XC_bottom_right_corner, None}, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */ | |||
| {XC_bottom_left_corner, None}, /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */ | |||
| }; | |||
| /* *INDENT-ON* */ | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| static Cursor blankCursor = None; | |||
| static Cursor fullCrosshairCusor = None; | |||
| /* SGI X server's support a special property called the | |||
| _SGI_CROSSHAIR_CURSOR that when installed as a window's | |||
| cursor, becomes a full screen crosshair cursor. SGI | |||
| has special cursor generation hardware for this case. */ | |||
| static Cursor | |||
| getFullCrosshairCursor(void) | |||
| { | |||
| Cursor cursor; | |||
| Atom crosshairAtom, actualType; | |||
| int rc, actualFormat; | |||
| unsigned long n, left; | |||
| unsigned long *value; | |||
| if (fullCrosshairCusor == None) { | |||
| crosshairAtom = XInternAtom(__glutDisplay, | |||
| "_SGI_CROSSHAIR_CURSOR", True); | |||
| if (crosshairAtom != None) { | |||
| value = 0; /* Make compiler happy. */ | |||
| rc = XGetWindowProperty(__glutDisplay, __glutRoot, | |||
| crosshairAtom, 0, 1, False, XA_CURSOR, &actualType, | |||
| &actualFormat, &n, &left, (unsigned char **) &value); | |||
| if (rc == Success && actualFormat == 32 && n >= 1) { | |||
| cursor = value[0]; | |||
| XFree(value); | |||
| return cursor; | |||
| } | |||
| } | |||
| } | |||
| return XCreateFontCursor(__glutDisplay, XC_crosshair); | |||
| } | |||
| /* X11 forces you to create a blank cursor if you want | |||
| to disable the cursor. */ | |||
| static Cursor | |||
| makeBlankCursor(void) | |||
| { | |||
| static char data[1] = | |||
| {0}; | |||
| Cursor cursor; | |||
| Pixmap blank; | |||
| XColor dummy; | |||
| blank = XCreateBitmapFromData(__glutDisplay, __glutRoot, | |||
| data, 1, 1); | |||
| if (blank == None) | |||
| __glutFatalError("out of memory."); | |||
| cursor = XCreatePixmapCursor(__glutDisplay, blank, blank, | |||
| &dummy, &dummy, 0, 0); | |||
| XFreePixmap(__glutDisplay, blank); | |||
| return cursor; | |||
| } | |||
| #endif /* !_WIN32 && !__OS2PM__*/ | |||
| /* Win32 and X11 use this same function to accomplish | |||
| fairly different tasks. X11 lets you just define the | |||
| cursor for a window and the window system takes care | |||
| of making sure that the window's cursor is installed | |||
| when the mouse is in the window. Win32 requires the | |||
| application to handle a WM_SETCURSOR message to install | |||
| the right cursor when windows are entered. Think of | |||
| the Win32 __glutSetCursor (called from __glutWindowProc) | |||
| as "install cursor". Think of the X11 __glutSetCursor | |||
| (called from glutSetCursor) as "define cursor". */ | |||
| void | |||
| __glutSetCursor(GLUTwindow *window) | |||
| { | |||
| int cursor = window->cursor; | |||
| Cursor xcursor = 0; | |||
| if (cursor >= 0 && | |||
| cursor < sizeof(cursorTable) / sizeof(cursorTable[0])) { | |||
| if (cursorTable[cursor].cursor == None) { | |||
| cursorTable[cursor].cursor = XCreateFontCursor(__glutDisplay, | |||
| cursorTable[cursor].glyph); | |||
| } | |||
| xcursor = cursorTable[cursor].cursor; | |||
| } else { | |||
| /* Special cases. */ | |||
| switch (cursor) { | |||
| case GLUT_CURSOR_INHERIT: | |||
| #if defined(_WIN32) | |||
| while (window->parent) { | |||
| window = window->parent; | |||
| if (window->cursor != GLUT_CURSOR_INHERIT) { | |||
| __glutSetCursor(window); | |||
| return; | |||
| } | |||
| } | |||
| /* XXX Default to an arrow cursor. Is this | |||
| right or should we be letting the default | |||
| window proc be installing some system cursor? */ | |||
| xcursor = cursorTable[0].cursor; | |||
| if (xcursor == NULL) { | |||
| xcursor = | |||
| cursorTable[0].cursor = | |||
| LoadCursor(NULL, cursorTable[0].glyph); | |||
| } | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| xcursor = None; | |||
| #else | |||
| xcursor = None; | |||
| #endif | |||
| break; | |||
| case GLUT_CURSOR_NONE: | |||
| #if defined(_WIN32) || defined(__OS2PM__) | |||
| xcursor = NULL; | |||
| #else | |||
| if (blankCursor == None) { | |||
| blankCursor = makeBlankCursor(); | |||
| } | |||
| xcursor = blankCursor; | |||
| #endif | |||
| break; | |||
| case GLUT_CURSOR_FULL_CROSSHAIR: | |||
| #if defined(_WIN32) | |||
| xcursor = (HICON) IDC_CROSS; | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| #else | |||
| if (fullCrosshairCusor == None) { | |||
| fullCrosshairCusor = getFullCrosshairCursor(); | |||
| } | |||
| xcursor = fullCrosshairCusor; | |||
| #endif | |||
| break; | |||
| } | |||
| } | |||
| XDefineCursor(__glutDisplay, | |||
| window->win, xcursor); | |||
| XFlush(__glutDisplay); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSetCursor(int cursor) | |||
| { | |||
| #ifdef _WIN32 | |||
| POINT point; | |||
| __glutCurrentWindow->cursor = cursor; | |||
| /* Are we in the window right now? If so, | |||
| install the cursor. */ | |||
| GetCursorPos(&point); | |||
| if (__glutCurrentWindow->win == WindowFromPoint(point)) { | |||
| __glutSetCursor(__glutCurrentWindow); | |||
| } | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| #else | |||
| __glutCurrentWindow->cursor = cursor; | |||
| __glutSetCursor(__glutCurrentWindow); | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1995, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| #include <X11/Xatom.h> /* For XA_CURSOR */ | |||
| #include <X11/cursorfont.h> | |||
| #endif | |||
| typedef struct _CursorTable { | |||
| #if defined(_WIN32) | |||
| char* glyph; | |||
| #else | |||
| int glyph; | |||
| #endif | |||
| Cursor cursor; | |||
| } CursorTable; | |||
| /* *INDENT-OFF* */ | |||
| static CursorTable cursorTable[] = { | |||
| {XC_arrow, None}, /* GLUT_CURSOR_RIGHT_ARROW */ | |||
| {XC_top_left_arrow, None}, /* GLUT_CURSOR_LEFT_ARROW */ | |||
| {XC_hand1, None}, /* GLUT_CURSOR_INFO */ | |||
| {XC_pirate, None}, /* GLUT_CURSOR_DESTROY */ | |||
| {XC_question_arrow, None}, /* GLUT_CURSOR_HELP */ | |||
| {XC_exchange, None}, /* GLUT_CURSOR_CYCLE */ | |||
| {XC_spraycan, None}, /* GLUT_CURSOR_SPRAY */ | |||
| {XC_watch, None}, /* GLUT_CURSOR_WAIT */ | |||
| {XC_xterm, None}, /* GLUT_CURSOR_TEXT */ | |||
| {XC_crosshair, None}, /* GLUT_CURSOR_CROSSHAIR */ | |||
| {XC_sb_v_double_arrow, None}, /* GLUT_CURSOR_UP_DOWN */ | |||
| {XC_sb_h_double_arrow, None}, /* GLUT_CURSOR_LEFT_RIGHT */ | |||
| {XC_top_side, None}, /* GLUT_CURSOR_TOP_SIDE */ | |||
| {XC_bottom_side, None}, /* GLUT_CURSOR_BOTTOM_SIDE */ | |||
| {XC_left_side, None}, /* GLUT_CURSOR_LEFT_SIDE */ | |||
| {XC_right_side, None}, /* GLUT_CURSOR_RIGHT_SIDE */ | |||
| {XC_top_left_corner, None}, /* GLUT_CURSOR_TOP_LEFT_CORNER */ | |||
| {XC_top_right_corner, None}, /* GLUT_CURSOR_TOP_RIGHT_CORNER */ | |||
| {XC_bottom_right_corner, None}, /* GLUT_CURSOR_BOTTOM_RIGHT_CORNER */ | |||
| {XC_bottom_left_corner, None}, /* GLUT_CURSOR_BOTTOM_LEFT_CORNER */ | |||
| }; | |||
| /* *INDENT-ON* */ | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| static Cursor blankCursor = None; | |||
| static Cursor fullCrosshairCusor = None; | |||
| /* SGI X server's support a special property called the | |||
| _SGI_CROSSHAIR_CURSOR that when installed as a window's | |||
| cursor, becomes a full screen crosshair cursor. SGI | |||
| has special cursor generation hardware for this case. */ | |||
| static Cursor | |||
| getFullCrosshairCursor(void) | |||
| { | |||
| Cursor cursor; | |||
| Atom crosshairAtom, actualType; | |||
| int rc, actualFormat; | |||
| unsigned long n, left; | |||
| unsigned long *value; | |||
| if (fullCrosshairCusor == None) { | |||
| crosshairAtom = XInternAtom(__glutDisplay, | |||
| "_SGI_CROSSHAIR_CURSOR", True); | |||
| if (crosshairAtom != None) { | |||
| value = 0; /* Make compiler happy. */ | |||
| rc = XGetWindowProperty(__glutDisplay, __glutRoot, | |||
| crosshairAtom, 0, 1, False, XA_CURSOR, &actualType, | |||
| &actualFormat, &n, &left, (unsigned char **) &value); | |||
| if (rc == Success && actualFormat == 32 && n >= 1) { | |||
| cursor = value[0]; | |||
| XFree(value); | |||
| return cursor; | |||
| } | |||
| } | |||
| } | |||
| return XCreateFontCursor(__glutDisplay, XC_crosshair); | |||
| } | |||
| /* X11 forces you to create a blank cursor if you want | |||
| to disable the cursor. */ | |||
| static Cursor | |||
| makeBlankCursor(void) | |||
| { | |||
| static char data[1] = | |||
| {0}; | |||
| Cursor cursor; | |||
| Pixmap blank; | |||
| XColor dummy; | |||
| blank = XCreateBitmapFromData(__glutDisplay, __glutRoot, | |||
| data, 1, 1); | |||
| if (blank == None) | |||
| __glutFatalError("out of memory."); | |||
| cursor = XCreatePixmapCursor(__glutDisplay, blank, blank, | |||
| &dummy, &dummy, 0, 0); | |||
| XFreePixmap(__glutDisplay, blank); | |||
| return cursor; | |||
| } | |||
| #endif /* !_WIN32 && !__OS2PM__*/ | |||
| /* Win32 and X11 use this same function to accomplish | |||
| fairly different tasks. X11 lets you just define the | |||
| cursor for a window and the window system takes care | |||
| of making sure that the window's cursor is installed | |||
| when the mouse is in the window. Win32 requires the | |||
| application to handle a WM_SETCURSOR message to install | |||
| the right cursor when windows are entered. Think of | |||
| the Win32 __glutSetCursor (called from __glutWindowProc) | |||
| as "install cursor". Think of the X11 __glutSetCursor | |||
| (called from glutSetCursor) as "define cursor". */ | |||
| void | |||
| __glutSetCursor(GLUTwindow *window) | |||
| { | |||
| int cursor = window->cursor; | |||
| Cursor xcursor = 0; | |||
| if (cursor >= 0 && | |||
| cursor < sizeof(cursorTable) / sizeof(cursorTable[0])) { | |||
| if (cursorTable[cursor].cursor == None) { | |||
| cursorTable[cursor].cursor = XCreateFontCursor(__glutDisplay, | |||
| cursorTable[cursor].glyph); | |||
| } | |||
| xcursor = cursorTable[cursor].cursor; | |||
| } else { | |||
| /* Special cases. */ | |||
| switch (cursor) { | |||
| case GLUT_CURSOR_INHERIT: | |||
| #if defined(_WIN32) | |||
| while (window->parent) { | |||
| window = window->parent; | |||
| if (window->cursor != GLUT_CURSOR_INHERIT) { | |||
| __glutSetCursor(window); | |||
| return; | |||
| } | |||
| } | |||
| /* XXX Default to an arrow cursor. Is this | |||
| right or should we be letting the default | |||
| window proc be installing some system cursor? */ | |||
| xcursor = cursorTable[0].cursor; | |||
| if (xcursor == NULL) { | |||
| xcursor = | |||
| cursorTable[0].cursor = | |||
| LoadCursor(NULL, cursorTable[0].glyph); | |||
| } | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| xcursor = None; | |||
| #else | |||
| xcursor = None; | |||
| #endif | |||
| break; | |||
| case GLUT_CURSOR_NONE: | |||
| #if defined(_WIN32) || defined(__OS2PM__) | |||
| xcursor = NULL; | |||
| #else | |||
| if (blankCursor == None) { | |||
| blankCursor = makeBlankCursor(); | |||
| } | |||
| xcursor = blankCursor; | |||
| #endif | |||
| break; | |||
| case GLUT_CURSOR_FULL_CROSSHAIR: | |||
| #if defined(_WIN32) | |||
| xcursor = (HICON) IDC_CROSS; | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| #else | |||
| if (fullCrosshairCusor == None) { | |||
| fullCrosshairCusor = getFullCrosshairCursor(); | |||
| } | |||
| xcursor = fullCrosshairCusor; | |||
| #endif | |||
| break; | |||
| } | |||
| } | |||
| XDefineCursor(__glutDisplay, | |||
| window->win, xcursor); | |||
| XFlush(__glutDisplay); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSetCursor(int cursor) | |||
| { | |||
| #ifdef _WIN32 | |||
| POINT point; | |||
| __glutCurrentWindow->cursor = cursor; | |||
| /* Are we in the window right now? If so, | |||
| install the cursor. */ | |||
| GetCursorPos(&point); | |||
| if (__glutCurrentWindow->win == WindowFromPoint(point)) { | |||
| __glutSetCursor(__glutCurrentWindow); | |||
| } | |||
| #elif defined(__OS2PM__) | |||
| //todo | |||
| #else | |||
| __glutCurrentWindow->cursor = cursor; | |||
| __glutSetCursor(__glutCurrentWindow); | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,204 +1,204 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutExtensionSupported(const char *extension) | |||
| { | |||
| static const GLubyte *extensions = NULL; | |||
| const GLubyte *start; | |||
| GLubyte *where, *terminator; | |||
| /* Extension names should not have spaces. */ | |||
| where = (GLubyte *) strchr(extension, ' '); | |||
| if (where || *extension == '\0') | |||
| return 0; | |||
| if (!extensions) { | |||
| extensions = glGetString(GL_EXTENSIONS); | |||
| } | |||
| /* It takes a bit of care to be fool-proof about parsing the | |||
| OpenGL extensions string. Don't be fooled by sub-strings, | |||
| etc. */ | |||
| start = extensions; | |||
| for (;;) { | |||
| /* If your application crashes in the strstr routine below, | |||
| you are probably calling glutExtensionSupported without | |||
| having a current window. Calling glGetString without | |||
| a current OpenGL context has unpredictable results. | |||
| Please fix your program. */ | |||
| where = (GLubyte *) strstr((const char *) start, extension); | |||
| if (!where) | |||
| break; | |||
| terminator = where + strlen(extension); | |||
| if (where == start || *(where - 1) == ' ') { | |||
| if (*terminator == ' ' || *terminator == '\0') { | |||
| return 1; | |||
| } | |||
| } | |||
| start = terminator; | |||
| } | |||
| return 0; | |||
| } | |||
| struct name_address_pair { | |||
| const char *name; | |||
| const void *address; | |||
| }; | |||
| static struct name_address_pair glut_functions[] = { | |||
| { "glutInit", (const void *) glutInit }, | |||
| { "glutInitDisplayMode", (const void *) glutInitDisplayMode }, | |||
| { "glutInitDisplayString", (const void *) glutInitDisplayString }, | |||
| { "glutInitWindowPosition", (const void *) glutInitWindowPosition }, | |||
| { "glutInitWindowSize", (const void *) glutInitWindowSize }, | |||
| { "glutMainLoop", (const void *) glutMainLoop }, | |||
| { "glutCreateWindow", (const void *) glutCreateWindow }, | |||
| { "glutCreateSubWindow", (const void *) glutCreateSubWindow }, | |||
| { "glutDestroyWindow", (const void *) glutDestroyWindow }, | |||
| { "glutPostRedisplay", (const void *) glutPostRedisplay }, | |||
| { "glutPostWindowRedisplay", (const void *) glutPostWindowRedisplay }, | |||
| { "glutSwapBuffers", (const void *) glutSwapBuffers }, | |||
| { "glutGetWindow", (const void *) glutGetWindow }, | |||
| { "glutSetWindow", (const void *) glutSetWindow }, | |||
| { "glutSetWindowTitle", (const void *) glutSetWindowTitle }, | |||
| { "glutSetIconTitle", (const void *) glutSetIconTitle }, | |||
| { "glutPositionWindow", (const void *) glutPositionWindow }, | |||
| { "glutReshapeWindow", (const void *) glutReshapeWindow }, | |||
| { "glutPopWindow", (const void *) glutPopWindow }, | |||
| { "glutPushWindow", (const void *) glutPushWindow }, | |||
| { "glutIconifyWindow", (const void *) glutIconifyWindow }, | |||
| { "glutShowWindow", (const void *) glutShowWindow }, | |||
| { "glutHideWindow", (const void *) glutHideWindow }, | |||
| { "glutFullScreen", (const void *) glutFullScreen }, | |||
| { "glutSetCursor", (const void *) glutSetCursor }, | |||
| { "glutWarpPointer", (const void *) glutWarpPointer }, | |||
| { "glutEstablishOverlay", (const void *) glutEstablishOverlay }, | |||
| { "glutRemoveOverlay", (const void *) glutRemoveOverlay }, | |||
| { "glutUseLayer", (const void *) glutUseLayer }, | |||
| { "glutPostOverlayRedisplay", (const void *) glutPostOverlayRedisplay }, | |||
| { "glutPostWindowOverlayRedisplay", (const void *) glutPostWindowOverlayRedisplay }, | |||
| { "glutShowOverlay", (const void *) glutShowOverlay }, | |||
| { "glutHideOverlay", (const void *) glutHideOverlay }, | |||
| { "glutCreateMenu", (const void *) glutCreateMenu }, | |||
| { "glutDestroyMenu", (const void *) glutDestroyMenu }, | |||
| { "glutGetMenu", (const void *) glutGetMenu }, | |||
| { "glutSetMenu", (const void *) glutSetMenu }, | |||
| { "glutAddMenuEntry", (const void *) glutAddMenuEntry }, | |||
| { "glutAddSubMenu", (const void *) glutAddSubMenu }, | |||
| { "glutChangeToMenuEntry", (const void *) glutChangeToMenuEntry }, | |||
| { "glutChangeToSubMenu", (const void *) glutChangeToSubMenu }, | |||
| { "glutRemoveMenuItem", (const void *) glutRemoveMenuItem }, | |||
| { "glutAttachMenu", (const void *) glutAttachMenu }, | |||
| { "glutDetachMenu", (const void *) glutDetachMenu }, | |||
| { "glutDisplayFunc", (const void *) glutDisplayFunc }, | |||
| { "glutReshapeFunc", (const void *) glutReshapeFunc }, | |||
| { "glutKeyboardFunc", (const void *) glutKeyboardFunc }, | |||
| { "glutMouseFunc", (const void *) glutMouseFunc }, | |||
| { "glutMotionFunc", (const void *) glutMotionFunc }, | |||
| { "glutPassiveMotionFunc", (const void *) glutPassiveMotionFunc }, | |||
| { "glutEntryFunc", (const void *) glutEntryFunc }, | |||
| { "glutVisibilityFunc", (const void *) glutVisibilityFunc }, | |||
| { "glutIdleFunc", (const void *) glutIdleFunc }, | |||
| { "glutTimerFunc", (const void *) glutTimerFunc }, | |||
| { "glutMenuStateFunc", (const void *) glutMenuStateFunc }, | |||
| { "glutSpecialFunc", (const void *) glutSpecialFunc }, | |||
| { "glutSpaceballMotionFunc", (const void *) glutSpaceballMotionFunc }, | |||
| { "glutSpaceballRotateFunc", (const void *) glutSpaceballRotateFunc }, | |||
| { "glutSpaceballButtonFunc", (const void *) glutSpaceballButtonFunc }, | |||
| { "glutButtonBoxFunc", (const void *) glutButtonBoxFunc }, | |||
| { "glutDialsFunc", (const void *) glutDialsFunc }, | |||
| { "glutTabletMotionFunc", (const void *) glutTabletMotionFunc }, | |||
| { "glutTabletButtonFunc", (const void *) glutTabletButtonFunc }, | |||
| { "glutMenuStatusFunc", (const void *) glutMenuStatusFunc }, | |||
| { "glutOverlayDisplayFunc", (const void *) glutOverlayDisplayFunc }, | |||
| { "glutWindowStatusFunc", (const void *) glutWindowStatusFunc }, | |||
| { "glutKeyboardUpFunc", (const void *) glutKeyboardUpFunc }, | |||
| { "glutSpecialUpFunc", (const void *) glutSpecialUpFunc }, | |||
| { "glutJoystickFunc", (const void *) glutJoystickFunc }, | |||
| { "glutSetColor", (const void *) glutSetColor }, | |||
| { "glutGetColor", (const void *) glutGetColor }, | |||
| { "glutCopyColormap", (const void *) glutCopyColormap }, | |||
| { "glutGet", (const void *) glutGet }, | |||
| { "glutDeviceGet", (const void *) glutDeviceGet }, | |||
| { "glutExtensionSupported", (const void *) glutExtensionSupported }, | |||
| { "glutGetModifiers", (const void *) glutGetModifiers }, | |||
| { "glutLayerGet", (const void *) glutLayerGet }, | |||
| { "glutGetProcAddress", (const void *) glutGetProcAddress }, | |||
| { "glutBitmapCharacter", (const void *) glutBitmapCharacter }, | |||
| { "glutBitmapWidth", (const void *) glutBitmapWidth }, | |||
| { "glutStrokeCharacter", (const void *) glutStrokeCharacter }, | |||
| { "glutStrokeWidth", (const void *) glutStrokeWidth }, | |||
| { "glutBitmapLength", (const void *) glutBitmapLength }, | |||
| { "glutStrokeLength", (const void *) glutStrokeLength }, | |||
| { "glutWireSphere", (const void *) glutWireSphere }, | |||
| { "glutSolidSphere", (const void *) glutSolidSphere }, | |||
| { "glutWireCone", (const void *) glutWireCone }, | |||
| { "glutSolidCone", (const void *) glutSolidCone }, | |||
| { "glutWireCube", (const void *) glutWireCube }, | |||
| { "glutSolidCube", (const void *) glutSolidCube }, | |||
| { "glutWireTorus", (const void *) glutWireTorus }, | |||
| { "glutSolidTorus", (const void *) glutSolidTorus }, | |||
| { "glutWireDodecahedron", (const void *) glutWireDodecahedron }, | |||
| { "glutSolidDodecahedron", (const void *) glutSolidDodecahedron }, | |||
| { "glutWireTeapot", (const void *) glutWireTeapot }, | |||
| { "glutSolidTeapot", (const void *) glutSolidTeapot }, | |||
| { "glutWireOctahedron", (const void *) glutWireOctahedron }, | |||
| { "glutSolidOctahedron", (const void *) glutSolidOctahedron }, | |||
| { "glutWireTetrahedron", (const void *) glutWireTetrahedron }, | |||
| { "glutSolidTetrahedron", (const void *) glutSolidTetrahedron }, | |||
| { "glutWireIcosahedron", (const void *) glutWireIcosahedron }, | |||
| { "glutSolidIcosahedron", (const void *) glutSolidIcosahedron }, | |||
| { "glutVideoResizeGet", (const void *) glutVideoResizeGet }, | |||
| { "glutSetupVideoResizing", (const void *) glutSetupVideoResizing }, | |||
| { "glutStopVideoResizing", (const void *) glutStopVideoResizing }, | |||
| { "glutVideoResize", (const void *) glutVideoResize }, | |||
| { "glutVideoPan", (const void *) glutVideoPan }, | |||
| { "glutReportErrors", (const void *) glutReportErrors }, | |||
| { "glutIgnoreKeyRepeat", (const void *) glutIgnoreKeyRepeat }, | |||
| { "glutSetKeyRepeat", (const void *) glutSetKeyRepeat }, | |||
| { "glutForceJoystickFunc", (const void *) glutForceJoystickFunc }, | |||
| { "glutGameModeString", (const void *) glutGameModeString }, | |||
| { "glutEnterGameMode", (const void *) glutEnterGameMode }, | |||
| { "glutLeaveGameMode", (const void *) glutLeaveGameMode }, | |||
| { "glutGameModeGet", (const void *) glutGameModeGet }, | |||
| { NULL, NULL } | |||
| }; | |||
| /* XXX This isn't an official GLUT function, yet */ | |||
| void * GLUTAPIENTRY | |||
| glutGetProcAddress(const char *procName) | |||
| { | |||
| /* Try GLUT functions first */ | |||
| int i; | |||
| for (i = 0; glut_functions[i].name; i++) { | |||
| if (strcmp(glut_functions[i].name, procName) == 0) | |||
| return (void *) glut_functions[i].address; | |||
| } | |||
| /* Try core GL functions */ | |||
| #if defined(_WIN32) | |||
| return (void *) wglGetProcAddress((LPCSTR) procName); | |||
| #elif defined(__OS2PM__) | |||
| return (void *) wglGetProcAddress((char *) procName); | |||
| #elif defined(GLX_ARB_get_proc_address) | |||
| return (void *) glXGetProcAddressARB((const GLubyte *) procName); | |||
| #else | |||
| return NULL; | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutExtensionSupported(const char *extension) | |||
| { | |||
| static const GLubyte *extensions = NULL; | |||
| const GLubyte *start; | |||
| GLubyte *where, *terminator; | |||
| /* Extension names should not have spaces. */ | |||
| where = (GLubyte *) strchr(extension, ' '); | |||
| if (where || *extension == '\0') | |||
| return 0; | |||
| if (!extensions) { | |||
| extensions = glGetString(GL_EXTENSIONS); | |||
| } | |||
| /* It takes a bit of care to be fool-proof about parsing the | |||
| OpenGL extensions string. Don't be fooled by sub-strings, | |||
| etc. */ | |||
| start = extensions; | |||
| for (;;) { | |||
| /* If your application crashes in the strstr routine below, | |||
| you are probably calling glutExtensionSupported without | |||
| having a current window. Calling glGetString without | |||
| a current OpenGL context has unpredictable results. | |||
| Please fix your program. */ | |||
| where = (GLubyte *) strstr((const char *) start, extension); | |||
| if (!where) | |||
| break; | |||
| terminator = where + strlen(extension); | |||
| if (where == start || *(where - 1) == ' ') { | |||
| if (*terminator == ' ' || *terminator == '\0') { | |||
| return 1; | |||
| } | |||
| } | |||
| start = terminator; | |||
| } | |||
| return 0; | |||
| } | |||
| struct name_address_pair { | |||
| const char *name; | |||
| const void *address; | |||
| }; | |||
| static struct name_address_pair glut_functions[] = { | |||
| { "glutInit", (const void *) glutInit }, | |||
| { "glutInitDisplayMode", (const void *) glutInitDisplayMode }, | |||
| { "glutInitDisplayString", (const void *) glutInitDisplayString }, | |||
| { "glutInitWindowPosition", (const void *) glutInitWindowPosition }, | |||
| { "glutInitWindowSize", (const void *) glutInitWindowSize }, | |||
| { "glutMainLoop", (const void *) glutMainLoop }, | |||
| { "glutCreateWindow", (const void *) glutCreateWindow }, | |||
| { "glutCreateSubWindow", (const void *) glutCreateSubWindow }, | |||
| { "glutDestroyWindow", (const void *) glutDestroyWindow }, | |||
| { "glutPostRedisplay", (const void *) glutPostRedisplay }, | |||
| { "glutPostWindowRedisplay", (const void *) glutPostWindowRedisplay }, | |||
| { "glutSwapBuffers", (const void *) glutSwapBuffers }, | |||
| { "glutGetWindow", (const void *) glutGetWindow }, | |||
| { "glutSetWindow", (const void *) glutSetWindow }, | |||
| { "glutSetWindowTitle", (const void *) glutSetWindowTitle }, | |||
| { "glutSetIconTitle", (const void *) glutSetIconTitle }, | |||
| { "glutPositionWindow", (const void *) glutPositionWindow }, | |||
| { "glutReshapeWindow", (const void *) glutReshapeWindow }, | |||
| { "glutPopWindow", (const void *) glutPopWindow }, | |||
| { "glutPushWindow", (const void *) glutPushWindow }, | |||
| { "glutIconifyWindow", (const void *) glutIconifyWindow }, | |||
| { "glutShowWindow", (const void *) glutShowWindow }, | |||
| { "glutHideWindow", (const void *) glutHideWindow }, | |||
| { "glutFullScreen", (const void *) glutFullScreen }, | |||
| { "glutSetCursor", (const void *) glutSetCursor }, | |||
| { "glutWarpPointer", (const void *) glutWarpPointer }, | |||
| { "glutEstablishOverlay", (const void *) glutEstablishOverlay }, | |||
| { "glutRemoveOverlay", (const void *) glutRemoveOverlay }, | |||
| { "glutUseLayer", (const void *) glutUseLayer }, | |||
| { "glutPostOverlayRedisplay", (const void *) glutPostOverlayRedisplay }, | |||
| { "glutPostWindowOverlayRedisplay", (const void *) glutPostWindowOverlayRedisplay }, | |||
| { "glutShowOverlay", (const void *) glutShowOverlay }, | |||
| { "glutHideOverlay", (const void *) glutHideOverlay }, | |||
| { "glutCreateMenu", (const void *) glutCreateMenu }, | |||
| { "glutDestroyMenu", (const void *) glutDestroyMenu }, | |||
| { "glutGetMenu", (const void *) glutGetMenu }, | |||
| { "glutSetMenu", (const void *) glutSetMenu }, | |||
| { "glutAddMenuEntry", (const void *) glutAddMenuEntry }, | |||
| { "glutAddSubMenu", (const void *) glutAddSubMenu }, | |||
| { "glutChangeToMenuEntry", (const void *) glutChangeToMenuEntry }, | |||
| { "glutChangeToSubMenu", (const void *) glutChangeToSubMenu }, | |||
| { "glutRemoveMenuItem", (const void *) glutRemoveMenuItem }, | |||
| { "glutAttachMenu", (const void *) glutAttachMenu }, | |||
| { "glutDetachMenu", (const void *) glutDetachMenu }, | |||
| { "glutDisplayFunc", (const void *) glutDisplayFunc }, | |||
| { "glutReshapeFunc", (const void *) glutReshapeFunc }, | |||
| { "glutKeyboardFunc", (const void *) glutKeyboardFunc }, | |||
| { "glutMouseFunc", (const void *) glutMouseFunc }, | |||
| { "glutMotionFunc", (const void *) glutMotionFunc }, | |||
| { "glutPassiveMotionFunc", (const void *) glutPassiveMotionFunc }, | |||
| { "glutEntryFunc", (const void *) glutEntryFunc }, | |||
| { "glutVisibilityFunc", (const void *) glutVisibilityFunc }, | |||
| { "glutIdleFunc", (const void *) glutIdleFunc }, | |||
| { "glutTimerFunc", (const void *) glutTimerFunc }, | |||
| { "glutMenuStateFunc", (const void *) glutMenuStateFunc }, | |||
| { "glutSpecialFunc", (const void *) glutSpecialFunc }, | |||
| { "glutSpaceballMotionFunc", (const void *) glutSpaceballMotionFunc }, | |||
| { "glutSpaceballRotateFunc", (const void *) glutSpaceballRotateFunc }, | |||
| { "glutSpaceballButtonFunc", (const void *) glutSpaceballButtonFunc }, | |||
| { "glutButtonBoxFunc", (const void *) glutButtonBoxFunc }, | |||
| { "glutDialsFunc", (const void *) glutDialsFunc }, | |||
| { "glutTabletMotionFunc", (const void *) glutTabletMotionFunc }, | |||
| { "glutTabletButtonFunc", (const void *) glutTabletButtonFunc }, | |||
| { "glutMenuStatusFunc", (const void *) glutMenuStatusFunc }, | |||
| { "glutOverlayDisplayFunc", (const void *) glutOverlayDisplayFunc }, | |||
| { "glutWindowStatusFunc", (const void *) glutWindowStatusFunc }, | |||
| { "glutKeyboardUpFunc", (const void *) glutKeyboardUpFunc }, | |||
| { "glutSpecialUpFunc", (const void *) glutSpecialUpFunc }, | |||
| { "glutJoystickFunc", (const void *) glutJoystickFunc }, | |||
| { "glutSetColor", (const void *) glutSetColor }, | |||
| { "glutGetColor", (const void *) glutGetColor }, | |||
| { "glutCopyColormap", (const void *) glutCopyColormap }, | |||
| { "glutGet", (const void *) glutGet }, | |||
| { "glutDeviceGet", (const void *) glutDeviceGet }, | |||
| { "glutExtensionSupported", (const void *) glutExtensionSupported }, | |||
| { "glutGetModifiers", (const void *) glutGetModifiers }, | |||
| { "glutLayerGet", (const void *) glutLayerGet }, | |||
| { "glutGetProcAddress", (const void *) glutGetProcAddress }, | |||
| { "glutBitmapCharacter", (const void *) glutBitmapCharacter }, | |||
| { "glutBitmapWidth", (const void *) glutBitmapWidth }, | |||
| { "glutStrokeCharacter", (const void *) glutStrokeCharacter }, | |||
| { "glutStrokeWidth", (const void *) glutStrokeWidth }, | |||
| { "glutBitmapLength", (const void *) glutBitmapLength }, | |||
| { "glutStrokeLength", (const void *) glutStrokeLength }, | |||
| { "glutWireSphere", (const void *) glutWireSphere }, | |||
| { "glutSolidSphere", (const void *) glutSolidSphere }, | |||
| { "glutWireCone", (const void *) glutWireCone }, | |||
| { "glutSolidCone", (const void *) glutSolidCone }, | |||
| { "glutWireCube", (const void *) glutWireCube }, | |||
| { "glutSolidCube", (const void *) glutSolidCube }, | |||
| { "glutWireTorus", (const void *) glutWireTorus }, | |||
| { "glutSolidTorus", (const void *) glutSolidTorus }, | |||
| { "glutWireDodecahedron", (const void *) glutWireDodecahedron }, | |||
| { "glutSolidDodecahedron", (const void *) glutSolidDodecahedron }, | |||
| { "glutWireTeapot", (const void *) glutWireTeapot }, | |||
| { "glutSolidTeapot", (const void *) glutSolidTeapot }, | |||
| { "glutWireOctahedron", (const void *) glutWireOctahedron }, | |||
| { "glutSolidOctahedron", (const void *) glutSolidOctahedron }, | |||
| { "glutWireTetrahedron", (const void *) glutWireTetrahedron }, | |||
| { "glutSolidTetrahedron", (const void *) glutSolidTetrahedron }, | |||
| { "glutWireIcosahedron", (const void *) glutWireIcosahedron }, | |||
| { "glutSolidIcosahedron", (const void *) glutSolidIcosahedron }, | |||
| { "glutVideoResizeGet", (const void *) glutVideoResizeGet }, | |||
| { "glutSetupVideoResizing", (const void *) glutSetupVideoResizing }, | |||
| { "glutStopVideoResizing", (const void *) glutStopVideoResizing }, | |||
| { "glutVideoResize", (const void *) glutVideoResize }, | |||
| { "glutVideoPan", (const void *) glutVideoPan }, | |||
| { "glutReportErrors", (const void *) glutReportErrors }, | |||
| { "glutIgnoreKeyRepeat", (const void *) glutIgnoreKeyRepeat }, | |||
| { "glutSetKeyRepeat", (const void *) glutSetKeyRepeat }, | |||
| { "glutForceJoystickFunc", (const void *) glutForceJoystickFunc }, | |||
| { "glutGameModeString", (const void *) glutGameModeString }, | |||
| { "glutEnterGameMode", (const void *) glutEnterGameMode }, | |||
| { "glutLeaveGameMode", (const void *) glutLeaveGameMode }, | |||
| { "glutGameModeGet", (const void *) glutGameModeGet }, | |||
| { NULL, NULL } | |||
| }; | |||
| /* XXX This isn't an official GLUT function, yet */ | |||
| void * GLUTAPIENTRY | |||
| glutGetProcAddress(const char *procName) | |||
| { | |||
| /* Try GLUT functions first */ | |||
| int i; | |||
| for (i = 0; glut_functions[i].name; i++) { | |||
| if (strcmp(glut_functions[i].name, procName) == 0) | |||
| return (void *) glut_functions[i].address; | |||
| } | |||
| /* Try core GL functions */ | |||
| #if defined(_WIN32) | |||
| return (void *) wglGetProcAddress((LPCSTR) procName); | |||
| #elif defined(__OS2PM__) | |||
| return (void *) wglGetProcAddress((char *) procName); | |||
| #elif defined(GLX_ARB_get_proc_address) | |||
| return (void *) glXGetProcAddressARB((const GLubyte *) procName); | |||
| #else | |||
| return NULL; | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,38 +1,38 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1995, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <assert.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutFullScreen(void) | |||
| { | |||
| assert(!__glutCurrentWindow->parent); | |||
| IGNORE_IN_GAME_MODE(); | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| if (__glutMotifHints == None) { | |||
| __glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS", | |||
| SGI_XA__MOTIF_WM_HINTS, 0); | |||
| if (__glutMotifHints == None) { | |||
| __glutWarning("Could not intern X atom for _MOTIF_WM_HINTS."); | |||
| } | |||
| } | |||
| #endif | |||
| __glutCurrentWindow->desiredX = 0; | |||
| __glutCurrentWindow->desiredY = 0; | |||
| __glutCurrentWindow->desiredWidth = __glutScreenWidth; | |||
| __glutCurrentWindow->desiredHeight = __glutScreenHeight; | |||
| __glutCurrentWindow->desiredConfMask |= CWX | CWY | CWWidth | CWHeight; | |||
| __glutPutOnWorkList(__glutCurrentWindow, | |||
| GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK); | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1995, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <assert.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutFullScreen(void) | |||
| { | |||
| assert(!__glutCurrentWindow->parent); | |||
| IGNORE_IN_GAME_MODE(); | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| if (__glutMotifHints == None) { | |||
| __glutMotifHints = XSGIFastInternAtom(__glutDisplay, "_MOTIF_WM_HINTS", | |||
| SGI_XA__MOTIF_WM_HINTS, 0); | |||
| if (__glutMotifHints == None) { | |||
| __glutWarning("Could not intern X atom for _MOTIF_WM_HINTS."); | |||
| } | |||
| } | |||
| #endif | |||
| __glutCurrentWindow->desiredX = 0; | |||
| __glutCurrentWindow->desiredY = 0; | |||
| __glutCurrentWindow->desiredWidth = __glutScreenWidth; | |||
| __glutCurrentWindow->desiredHeight = __glutScreenHeight; | |||
| __glutCurrentWindow->desiredConfMask |= CWX | CWY | CWWidth | CWHeight; | |||
| __glutPutOnWorkList(__glutCurrentWindow, | |||
| GLUT_CONFIGURE_WORK | GLUT_FULL_SCREEN_WORK); | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,232 +1,232 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <assert.h> | |||
| #include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutGet(GLenum param) | |||
| { | |||
| Window win, root; | |||
| int x, y, value; | |||
| unsigned int width, height, border, depth; | |||
| switch (param) { | |||
| case GLUT_INIT_WINDOW_X: | |||
| return __glutInitX; | |||
| case GLUT_INIT_WINDOW_Y: | |||
| return __glutInitY; | |||
| case GLUT_INIT_WINDOW_WIDTH: | |||
| return __glutInitWidth; | |||
| case GLUT_INIT_WINDOW_HEIGHT: | |||
| return __glutInitHeight; | |||
| case GLUT_INIT_DISPLAY_MODE: | |||
| return __glutDisplayMode; | |||
| case GLUT_WINDOW_X: | |||
| XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win, | |||
| __glutRoot, 0, 0, &x, &y, &win); | |||
| return x; | |||
| case GLUT_WINDOW_Y: | |||
| XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win, | |||
| __glutRoot, 0, 0, &x, &y, &win); | |||
| return y; | |||
| case GLUT_WINDOW_WIDTH: | |||
| if (!__glutCurrentWindow->reshape) { | |||
| XGetGeometry(__glutDisplay, __glutCurrentWindow->win, | |||
| &root, &x, &y, | |||
| &width, &height, &border, &depth); | |||
| return width; | |||
| } | |||
| return __glutCurrentWindow->width; | |||
| case GLUT_WINDOW_HEIGHT: | |||
| if (!__glutCurrentWindow->reshape) { | |||
| XGetGeometry(__glutDisplay, __glutCurrentWindow->win, | |||
| &root, &x, &y, | |||
| &width, &height, &border, &depth); | |||
| return height; | |||
| } | |||
| return __glutCurrentWindow->height; | |||
| #ifdef __OS2__ | |||
| #define GET_CONFIG(attrib) \ | |||
| { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) \ | |||
| glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \ | |||
| else \ | |||
| glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \ | |||
| } \ | |||
| #else | |||
| #define GET_CONFIG(attrib) { \ | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \ | |||
| glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \ | |||
| attrib, &value); \ | |||
| } else { \ | |||
| glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \ | |||
| attrib, &value); \ | |||
| } \ | |||
| } | |||
| #endif | |||
| case GLUT_WINDOW_BUFFER_SIZE: | |||
| GET_CONFIG(GLX_BUFFER_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_STENCIL_SIZE: | |||
| GET_CONFIG(GLX_STENCIL_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_DEPTH_SIZE: | |||
| GET_CONFIG(GLX_DEPTH_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_RED_SIZE: | |||
| GET_CONFIG(GLX_RED_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_GREEN_SIZE: | |||
| GET_CONFIG(GLX_GREEN_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_BLUE_SIZE: | |||
| GET_CONFIG(GLX_BLUE_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ALPHA_SIZE: | |||
| GET_CONFIG(GLX_ALPHA_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_RED_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_RED_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_GREEN_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_GREEN_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_BLUE_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_BLUE_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_ALPHA_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_ALPHA_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_DOUBLEBUFFER: | |||
| GET_CONFIG(GLX_DOUBLEBUFFER); | |||
| return value; | |||
| case GLUT_WINDOW_RGBA: | |||
| GET_CONFIG(GLX_RGBA); | |||
| return value; | |||
| case GLUT_WINDOW_COLORMAP_SIZE: | |||
| GET_CONFIG(GLX_RGBA); | |||
| if (value) { | |||
| return 0; | |||
| } else { | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| /* KLUDGE: we always assume 256 colors in CI mode on | |||
| Win32 */ | |||
| return 256; | |||
| #else | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { | |||
| return __glutCurrentWindow->vis->visual->map_entries; | |||
| } else { | |||
| return __glutCurrentWindow->overlay->vis->visual->map_entries; | |||
| } | |||
| #endif /* _WIN32 */ | |||
| } | |||
| case GLUT_WINDOW_PARENT: | |||
| return __glutCurrentWindow->parent ? | |||
| __glutCurrentWindow->parent->num + 1 : 0; | |||
| case GLUT_WINDOW_NUM_CHILDREN: | |||
| { | |||
| int num = 0; | |||
| GLUTwindow *children = __glutCurrentWindow->children; | |||
| while (children) { | |||
| num++; | |||
| children = children->siblings; | |||
| } | |||
| return num; | |||
| } | |||
| case GLUT_WINDOW_NUM_SAMPLES: | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample) | |||
| if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) { | |||
| GET_CONFIG(GLX_SAMPLES_SGIS); | |||
| return value; | |||
| } else { | |||
| return 0; | |||
| } | |||
| #else | |||
| /* Independent of GLX server support, multisampling not | |||
| supported by GLX client-side. */ | |||
| return 0; | |||
| #endif | |||
| case GLUT_WINDOW_STEREO: | |||
| GET_CONFIG(GLX_STEREO); | |||
| return value; | |||
| case GLUT_WINDOW_CURSOR: | |||
| return __glutCurrentWindow->cursor; | |||
| case GLUT_SCREEN_WIDTH: | |||
| return DisplayWidth(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_HEIGHT: | |||
| return DisplayHeight(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_WIDTH_MM: | |||
| return DisplayWidthMM(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_HEIGHT_MM: | |||
| return DisplayHeightMM(__glutDisplay, __glutScreen); | |||
| case GLUT_MENU_NUM_ITEMS: | |||
| return __glutCurrentMenu->num; | |||
| case GLUT_DISPLAY_MODE_POSSIBLE: | |||
| { | |||
| XVisualInfo *vi; | |||
| Bool dummy, visAlloced; | |||
| void *fbc; | |||
| #if defined(_WIN32) | |||
| /* Our fake glXChooseVisual (which is called by | |||
| __glutDetermineVisual) needs an HDC to work with, so grab one | |||
| from the "root" window. */ | |||
| XHDC = GetDC(GetDesktopWindow()); | |||
| #endif | |||
| vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc); | |||
| #if defined(_WIN32) | |||
| ReleaseDC(GetDesktopWindow(), XHDC); | |||
| #endif | |||
| if (vi) { | |||
| if (visAlloced) | |||
| XFree(vi); | |||
| return 1; | |||
| } | |||
| return 0; | |||
| } | |||
| case GLUT_ELAPSED_TIME: | |||
| { | |||
| #ifdef OLD_VMS | |||
| struct timeval6 elapsed, beginning, now; | |||
| #else | |||
| struct timeval elapsed, beginning, now; | |||
| #endif | |||
| __glutInitTime(&beginning); | |||
| GETTIMEOFDAY(&now); | |||
| TIMEDELTA(elapsed, now, beginning); | |||
| /* Return elapsed milliseconds. */ | |||
| #if defined(__vms) && ( __VMS_VER < 70000000 ) | |||
| return (int) (elapsed.val / TICKS_PER_MILLISECOND); | |||
| #else | |||
| return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000)); | |||
| #endif | |||
| } | |||
| case GLUT_WINDOW_FORMAT_ID: | |||
| #if defined(__OS2__) | |||
| return wglGetPixelFormat(__glutCurrentWindow->hdc); | |||
| #elif defined(_WIN32) | |||
| return GetPixelFormat(__glutCurrentWindow->hdc); | |||
| #else | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { | |||
| return (int) __glutCurrentWindow->vis->visualid; | |||
| } else { | |||
| return (int) __glutCurrentWindow->overlay->vis->visualid; | |||
| } | |||
| #endif | |||
| default: | |||
| __glutWarning("invalid glutGet parameter: %d", param); | |||
| return -1; | |||
| } | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <assert.h> | |||
| #include <stdlib.h> /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutGet(GLenum param) | |||
| { | |||
| Window win, root; | |||
| int x, y, value; | |||
| unsigned int width, height, border, depth; | |||
| switch (param) { | |||
| case GLUT_INIT_WINDOW_X: | |||
| return __glutInitX; | |||
| case GLUT_INIT_WINDOW_Y: | |||
| return __glutInitY; | |||
| case GLUT_INIT_WINDOW_WIDTH: | |||
| return __glutInitWidth; | |||
| case GLUT_INIT_WINDOW_HEIGHT: | |||
| return __glutInitHeight; | |||
| case GLUT_INIT_DISPLAY_MODE: | |||
| return __glutDisplayMode; | |||
| case GLUT_WINDOW_X: | |||
| XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win, | |||
| __glutRoot, 0, 0, &x, &y, &win); | |||
| return x; | |||
| case GLUT_WINDOW_Y: | |||
| XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win, | |||
| __glutRoot, 0, 0, &x, &y, &win); | |||
| return y; | |||
| case GLUT_WINDOW_WIDTH: | |||
| if (!__glutCurrentWindow->reshape) { | |||
| XGetGeometry(__glutDisplay, __glutCurrentWindow->win, | |||
| &root, &x, &y, | |||
| &width, &height, &border, &depth); | |||
| return width; | |||
| } | |||
| return __glutCurrentWindow->width; | |||
| case GLUT_WINDOW_HEIGHT: | |||
| if (!__glutCurrentWindow->reshape) { | |||
| XGetGeometry(__glutDisplay, __glutCurrentWindow->win, | |||
| &root, &x, &y, | |||
| &width, &height, &border, &depth); | |||
| return height; | |||
| } | |||
| return __glutCurrentWindow->height; | |||
| #ifdef __OS2__ | |||
| #define GET_CONFIG(attrib) \ | |||
| { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) \ | |||
| glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \ | |||
| else \ | |||
| glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \ | |||
| } \ | |||
| #else | |||
| #define GET_CONFIG(attrib) { \ | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \ | |||
| glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \ | |||
| attrib, &value); \ | |||
| } else { \ | |||
| glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \ | |||
| attrib, &value); \ | |||
| } \ | |||
| } | |||
| #endif | |||
| case GLUT_WINDOW_BUFFER_SIZE: | |||
| GET_CONFIG(GLX_BUFFER_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_STENCIL_SIZE: | |||
| GET_CONFIG(GLX_STENCIL_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_DEPTH_SIZE: | |||
| GET_CONFIG(GLX_DEPTH_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_RED_SIZE: | |||
| GET_CONFIG(GLX_RED_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_GREEN_SIZE: | |||
| GET_CONFIG(GLX_GREEN_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_BLUE_SIZE: | |||
| GET_CONFIG(GLX_BLUE_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ALPHA_SIZE: | |||
| GET_CONFIG(GLX_ALPHA_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_RED_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_RED_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_GREEN_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_GREEN_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_BLUE_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_BLUE_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_ACCUM_ALPHA_SIZE: | |||
| GET_CONFIG(GLX_ACCUM_ALPHA_SIZE); | |||
| return value; | |||
| case GLUT_WINDOW_DOUBLEBUFFER: | |||
| GET_CONFIG(GLX_DOUBLEBUFFER); | |||
| return value; | |||
| case GLUT_WINDOW_RGBA: | |||
| GET_CONFIG(GLX_RGBA); | |||
| return value; | |||
| case GLUT_WINDOW_COLORMAP_SIZE: | |||
| GET_CONFIG(GLX_RGBA); | |||
| if (value) { | |||
| return 0; | |||
| } else { | |||
| #if defined(_WIN32) || defined(__OS2__) | |||
| /* KLUDGE: we always assume 256 colors in CI mode on | |||
| Win32 */ | |||
| return 256; | |||
| #else | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { | |||
| return __glutCurrentWindow->vis->visual->map_entries; | |||
| } else { | |||
| return __glutCurrentWindow->overlay->vis->visual->map_entries; | |||
| } | |||
| #endif /* _WIN32 */ | |||
| } | |||
| case GLUT_WINDOW_PARENT: | |||
| return __glutCurrentWindow->parent ? | |||
| __glutCurrentWindow->parent->num + 1 : 0; | |||
| case GLUT_WINDOW_NUM_CHILDREN: | |||
| { | |||
| int num = 0; | |||
| GLUTwindow *children = __glutCurrentWindow->children; | |||
| while (children) { | |||
| num++; | |||
| children = children->siblings; | |||
| } | |||
| return num; | |||
| } | |||
| case GLUT_WINDOW_NUM_SAMPLES: | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample) | |||
| if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) { | |||
| GET_CONFIG(GLX_SAMPLES_SGIS); | |||
| return value; | |||
| } else { | |||
| return 0; | |||
| } | |||
| #else | |||
| /* Independent of GLX server support, multisampling not | |||
| supported by GLX client-side. */ | |||
| return 0; | |||
| #endif | |||
| case GLUT_WINDOW_STEREO: | |||
| GET_CONFIG(GLX_STEREO); | |||
| return value; | |||
| case GLUT_WINDOW_CURSOR: | |||
| return __glutCurrentWindow->cursor; | |||
| case GLUT_SCREEN_WIDTH: | |||
| return DisplayWidth(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_HEIGHT: | |||
| return DisplayHeight(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_WIDTH_MM: | |||
| return DisplayWidthMM(__glutDisplay, __glutScreen); | |||
| case GLUT_SCREEN_HEIGHT_MM: | |||
| return DisplayHeightMM(__glutDisplay, __glutScreen); | |||
| case GLUT_MENU_NUM_ITEMS: | |||
| return __glutCurrentMenu->num; | |||
| case GLUT_DISPLAY_MODE_POSSIBLE: | |||
| { | |||
| XVisualInfo *vi; | |||
| Bool dummy, visAlloced; | |||
| void *fbc; | |||
| #if defined(_WIN32) | |||
| /* Our fake glXChooseVisual (which is called by | |||
| __glutDetermineVisual) needs an HDC to work with, so grab one | |||
| from the "root" window. */ | |||
| XHDC = GetDC(GetDesktopWindow()); | |||
| #endif | |||
| vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc); | |||
| #if defined(_WIN32) | |||
| ReleaseDC(GetDesktopWindow(), XHDC); | |||
| #endif | |||
| if (vi) { | |||
| if (visAlloced) | |||
| XFree(vi); | |||
| return 1; | |||
| } | |||
| return 0; | |||
| } | |||
| case GLUT_ELAPSED_TIME: | |||
| { | |||
| #ifdef OLD_VMS | |||
| struct timeval6 elapsed, beginning, now; | |||
| #else | |||
| struct timeval elapsed, beginning, now; | |||
| #endif | |||
| __glutInitTime(&beginning); | |||
| GETTIMEOFDAY(&now); | |||
| TIMEDELTA(elapsed, now, beginning); | |||
| /* Return elapsed milliseconds. */ | |||
| #if defined(__vms) && ( __VMS_VER < 70000000 ) | |||
| return (int) (elapsed.val / TICKS_PER_MILLISECOND); | |||
| #else | |||
| return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000)); | |||
| #endif | |||
| } | |||
| case GLUT_WINDOW_FORMAT_ID: | |||
| #if defined(__OS2__) | |||
| return wglGetPixelFormat(__glutCurrentWindow->hdc); | |||
| #elif defined(_WIN32) | |||
| return GetPixelFormat(__glutCurrentWindow->hdc); | |||
| #else | |||
| if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { | |||
| return (int) __glutCurrentWindow->vis->visualid; | |||
| } else { | |||
| return (int) __glutCurrentWindow->overlay->vis->visualid; | |||
| } | |||
| #endif | |||
| default: | |||
| __glutWarning("invalid glutGet parameter: %d", param); | |||
| return -1; | |||
| } | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,451 +1,451 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #ifdef __VMS | |||
| #include <GL/vms_x_fix.h> | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <stdio.h> | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xatom.h> | |||
| #endif | |||
| /* SGI optimization introduced in IRIX 6.3 to avoid X server | |||
| round trips for interning common X atoms. */ | |||
| #if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS) | |||
| #include <X11/SGIFastAtom.h> | |||
| #else | |||
| #define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how) | |||
| #endif | |||
| #include "glutint.h" | |||
| /* GLUT inter-file variables */ | |||
| /* *INDENT-OFF* */ | |||
| char *__glutProgramName = NULL; | |||
| int __glutArgc = 0; | |||
| char **__glutArgv = NULL; | |||
| char *__glutGeometry = NULL; | |||
| Display *__glutDisplay = NULL; | |||
| int __glutScreen; | |||
| Window __glutRoot; | |||
| int __glutScreenHeight; | |||
| int __glutScreenWidth; | |||
| GLboolean __glutIconic = GL_FALSE; | |||
| GLboolean __glutDebug = GL_FALSE; | |||
| unsigned int __glutDisplayMode = | |||
| GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH; | |||
| char *__glutDisplayString = NULL; | |||
| int __glutConnectionFD; | |||
| XSizeHints __glutSizeHints = {0}; | |||
| int __glutInitWidth = 300, __glutInitHeight = 300; | |||
| int __glutInitX = -1, __glutInitY = -1; | |||
| GLboolean __glutForceDirect = GL_FALSE, | |||
| __glutTryDirect = GL_TRUE; | |||
| Atom __glutWMDeleteWindow; | |||
| /* *INDENT-ON* */ | |||
| #ifdef _WIN32 | |||
| void (__cdecl *__glutExitFunc)(int retval) = NULL; | |||
| #endif | |||
| static Bool synchronize = False; | |||
| #if defined(__OS2__) | |||
| MRESULT EXPENTRY GlutWindowProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); | |||
| MRESULT EXPENTRY GlutWindowChildProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); | |||
| void __glutOpenOS2Connection(char* display) | |||
| { | |||
| static char *classname=NULL; | |||
| extern HAB hab; /* PM anchor block handle */ | |||
| ERRORID erridErrorCode;/* last error id code */ | |||
| int ii; | |||
| /* Make sure we register the window only once. */ | |||
| if(classname) | |||
| return; | |||
| classname = "GLUT"; | |||
| if ( !WinRegisterClass( hab, /* PM anchor block handle */ | |||
| classname,/* window class name */ | |||
| GlutWindowProc,/* address of window procedure*/ | |||
| CS_SIZEREDRAW, /* |CS_SYNCPAINT size changes cause redrawing */ | |||
| 0UL ) ) /* window data */ | |||
| { erridErrorCode = WinGetLastError(hab); | |||
| ii = erridErrorCode; | |||
| return; | |||
| } | |||
| classname = "GLUTCHILD"; | |||
| if ( !WinRegisterClass( hab, /* PM anchor block handle */ | |||
| classname,/* window class name */ | |||
| GlutWindowChildProc,/* address of window procedure*/ | |||
| CS_SIZEREDRAW, /* size changes cause redrawing */ | |||
| 0UL ) ) /* window data */ | |||
| { erridErrorCode = WinGetLastError(hab); | |||
| ii = erridErrorCode; | |||
| return; | |||
| } | |||
| __glutScreenWidth = GetSystemMetrics(SM_CXSCREEN); | |||
| __glutScreenHeight = GetSystemMetrics(SM_CYSCREEN); | |||
| /* Set the root window to NULL because windows creates a top-level | |||
| window when the parent is NULL. X creates a top-level window | |||
| when the parent is the root window. */ | |||
| __glutRoot = NULLHANDLE; | |||
| /* Set the display to 1 -- we shouldn't be using this anywhere | |||
| (except as an argument to X calls). */ | |||
| __glutDisplay = (Display*)1; | |||
| /* There isn't any concept of multiple screens in Win32, therefore, | |||
| we don't need to keep track of the screen we're on... it's always | |||
| the same one. */ | |||
| __glutScreen = 0; | |||
| } | |||
| #elif defined(_WIN32) | |||
| #ifdef __BORLANDC__ | |||
| #include <float.h> /* For masking floating point exceptions. */ | |||
| #endif | |||
| void | |||
| __glutOpenWin32Connection(char* display) | |||
| { | |||
| static char *classname; | |||
| WNDCLASS wc; | |||
| HINSTANCE hInstance = GetModuleHandle(NULL); | |||
| /* Make sure we register the window only once. */ | |||
| if(classname) | |||
| return; | |||
| #ifdef __BORLANDC__ | |||
| /* Under certain conditions (e.g. while rendering solid surfaces with | |||
| lighting enabled) Microsoft OpenGL libraries cause some illegal | |||
| operations like floating point overflow or division by zero. The | |||
| default behaviour of Microsoft compilers is to mask (ignore) | |||
| floating point exceptions, while Borland compilers do not. The | |||
| following function of Borland RTL allows to mask exceptions. | |||
| Advice from Pier Giorgio Esposito (mc2172@mclink.it). */ | |||
| _control87(MCW_EM,MCW_EM); | |||
| #endif | |||
| classname = "GLUT"; | |||
| /* Clear (important!) and then fill in the window class structure. */ | |||
| memset(&wc, 0, sizeof(WNDCLASS)); | |||
| wc.style = CS_OWNDC; | |||
| wc.lpfnWndProc = (WNDPROC)__glutWindowProc; | |||
| wc.hInstance = hInstance; | |||
| wc.hIcon = LoadIcon(hInstance, "GLUT_ICON"); | |||
| wc.hCursor = LoadCursor(hInstance, IDC_ARROW); | |||
| wc.hbrBackground = NULL; | |||
| wc.lpszMenuName = NULL; | |||
| wc.lpszClassName = classname; | |||
| /* Fill in a default icon if one isn't specified as a resource. */ | |||
| if(!wc.hIcon) | |||
| wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); | |||
| if(!RegisterClass(&wc)) { | |||
| __glutFatalError("RegisterClass() failed:" | |||
| "Cannot register GLUT window class."); | |||
| } | |||
| __glutScreenWidth = GetSystemMetrics(SM_CXSCREEN); | |||
| __glutScreenHeight = GetSystemMetrics(SM_CYSCREEN); | |||
| /* Set the root window to NULL because windows creates a top-level | |||
| window when the parent is NULL. X creates a top-level window | |||
| when the parent is the root window. */ | |||
| __glutRoot = NULL; | |||
| /* Set the display to 1 -- we shouldn't be using this anywhere | |||
| (except as an argument to X calls). */ | |||
| __glutDisplay = (Display*)1; | |||
| /* There isn't any concept of multiple screens in Win32, therefore, | |||
| we don't need to keep track of the screen we're on... it's always | |||
| the same one. */ | |||
| __glutScreen = 0; | |||
| } | |||
| #else /* !_WIN32 */ | |||
| void | |||
| __glutOpenXConnection(char *display) | |||
| { | |||
| int errorBase, eventBase; | |||
| __glutDisplay = XOpenDisplay(display); | |||
| if (!__glutDisplay) | |||
| __glutFatalError("could not open display: %s", | |||
| XDisplayName(display)); | |||
| if (synchronize) | |||
| XSynchronize(__glutDisplay, True); | |||
| if (!glXQueryExtension(__glutDisplay, &errorBase, &eventBase)) | |||
| __glutFatalError( | |||
| "OpenGL GLX extension not supported by display: %s", | |||
| XDisplayName(display)); | |||
| __glutScreen = DefaultScreen(__glutDisplay); | |||
| __glutRoot = RootWindow(__glutDisplay, __glutScreen); | |||
| __glutScreenWidth = DisplayWidth(__glutDisplay, __glutScreen); | |||
| __glutScreenHeight = DisplayHeight(__glutDisplay, | |||
| __glutScreen); | |||
| __glutConnectionFD = ConnectionNumber(__glutDisplay); | |||
| __glutWMDeleteWindow = XSGIFastInternAtom(__glutDisplay, | |||
| "WM_DELETE_WINDOW", SGI_XA_WM_DELETE_WINDOW, False); | |||
| } | |||
| #endif /* _WIN32 */ | |||
| void | |||
| #ifdef OLD_VMS | |||
| __glutInitTime(struct timeval6 *beginning) | |||
| #else | |||
| __glutInitTime(struct timeval *beginning) | |||
| #endif | |||
| { | |||
| static int beenhere = 0; | |||
| #ifdef OLD_VMS | |||
| static struct timeval6 genesis; | |||
| #else | |||
| static struct timeval genesis; | |||
| #endif | |||
| if (!beenhere) { | |||
| GETTIMEOFDAY(&genesis); | |||
| beenhere = 1; | |||
| } | |||
| *beginning = genesis; | |||
| } | |||
| static void | |||
| removeArgs(int *argcp, char **argv, int numToRemove) | |||
| { | |||
| int i, j; | |||
| for (i = 0, j = numToRemove; argv[j]; i++, j++) { | |||
| argv[i] = argv[j]; | |||
| } | |||
| argv[i] = NULL; | |||
| *argcp -= numToRemove; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInit(int *argcp, char **argv) | |||
| { | |||
| char *display = NULL; | |||
| char *str, *geometry = NULL; | |||
| #ifdef OLD_VMS | |||
| struct timeval6 unused; | |||
| #else | |||
| struct timeval unused; | |||
| #endif | |||
| int i; | |||
| if (__glutDisplay) { | |||
| __glutWarning("glutInit being called a second time."); | |||
| return; | |||
| } | |||
| /* Determine temporary program name. */ | |||
| str = strrchr(argv[0], '/'); | |||
| if (str == NULL) { | |||
| __glutProgramName = argv[0]; | |||
| } else { | |||
| __glutProgramName = str + 1; | |||
| } | |||
| /* Make private copy of command line arguments. */ | |||
| __glutArgc = *argcp; | |||
| __glutArgv = (char **) malloc(__glutArgc * sizeof(char *)); | |||
| if (!__glutArgv) | |||
| __glutFatalError("out of memory."); | |||
| for (i = 0; i < __glutArgc; i++) { | |||
| __glutArgv[i] = __glutStrdup(argv[i]); | |||
| if (!__glutArgv[i]) | |||
| __glutFatalError("out of memory."); | |||
| } | |||
| /* determine permanent program name */ | |||
| str = strrchr(__glutArgv[0], '/'); | |||
| if (str == NULL) { | |||
| __glutProgramName = __glutArgv[0]; | |||
| } else { | |||
| __glutProgramName = str + 1; | |||
| } | |||
| /* parse arguments for standard options */ | |||
| for (i = 1; i < __glutArgc; i++) { | |||
| if (!strcmp(__glutArgv[i], "-display")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-display option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (++i >= __glutArgc) { | |||
| __glutFatalError( | |||
| "follow -display option with X display name."); | |||
| } | |||
| display = __glutArgv[i]; | |||
| removeArgs(argcp, &argv[1], 2); | |||
| } else if (!strcmp(__glutArgv[i], "-geometry")) { | |||
| if (++i >= __glutArgc) { | |||
| __glutFatalError( | |||
| "follow -geometry option with geometry parameter."); | |||
| } | |||
| geometry = __glutArgv[i]; | |||
| removeArgs(argcp, &argv[1], 2); | |||
| } else if (!strcmp(__glutArgv[i], "-direct")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-direct option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (!__glutTryDirect) | |||
| __glutFatalError( | |||
| "cannot force both direct and indirect rendering."); | |||
| __glutForceDirect = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-indirect")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-indirect option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (__glutForceDirect) | |||
| __glutFatalError( | |||
| "cannot force both direct and indirect rendering."); | |||
| __glutTryDirect = GL_FALSE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-iconic")) { | |||
| __glutIconic = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-gldebug")) { | |||
| __glutDebug = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-sync")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-sync option not supported by Win32 GLUT."); | |||
| #endif | |||
| synchronize = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else { | |||
| /* Once unknown option encountered, stop command line | |||
| processing. */ | |||
| break; | |||
| } | |||
| } | |||
| #if defined(__OS2__) | |||
| __glutOpenOS2Connection(display); | |||
| #elif defined(_WIN32) | |||
| __glutOpenWin32Connection(display); | |||
| #else | |||
| __glutOpenXConnection(display); | |||
| #endif | |||
| if (geometry) { | |||
| int flags, x, y, width, height; | |||
| /* Fix bogus "{width|height} may be used before set" | |||
| warning */ | |||
| width = 0; | |||
| height = 0; | |||
| flags = XParseGeometry(geometry, &x, &y, | |||
| (unsigned int *) &width, (unsigned int *) &height); | |||
| if (WidthValue & flags) { | |||
| /* Careful because X does not allow zero or negative | |||
| width windows */ | |||
| if (width > 0) | |||
| __glutInitWidth = width; | |||
| } | |||
| if (HeightValue & flags) { | |||
| /* Careful because X does not allow zero or negative | |||
| height windows */ | |||
| if (height > 0) | |||
| __glutInitHeight = height; | |||
| } | |||
| glutInitWindowSize(__glutInitWidth, __glutInitHeight); | |||
| if (XValue & flags) { | |||
| if (XNegative & flags) | |||
| x = DisplayWidth(__glutDisplay, __glutScreen) + | |||
| x - __glutSizeHints.width; | |||
| /* Play safe: reject negative X locations */ | |||
| if (x >= 0) | |||
| __glutInitX = x; | |||
| } | |||
| if (YValue & flags) { | |||
| if (YNegative & flags) | |||
| y = DisplayHeight(__glutDisplay, __glutScreen) + | |||
| y - __glutSizeHints.height; | |||
| /* Play safe: reject negative Y locations */ | |||
| if (y >= 0) | |||
| __glutInitY = y; | |||
| } | |||
| glutInitWindowPosition(__glutInitX, __glutInitY); | |||
| } | |||
| __glutInitTime(&unused); | |||
| /* check if GLUT_FPS env var is set */ | |||
| { | |||
| const char *fps = getenv("GLUT_FPS"); | |||
| if (fps) { | |||
| sscanf(fps, "%d", &__glutFPS); | |||
| if (__glutFPS <= 0) | |||
| __glutFPS = 5000; /* 5000 milliseconds */ | |||
| } | |||
| } | |||
| } | |||
| #ifdef _WIN32 | |||
| void APIENTRY | |||
| __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)) | |||
| { | |||
| __glutExitFunc = exitfunc; | |||
| glutInit(argcp, argv); | |||
| } | |||
| #endif | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutInitWindowPosition(int x, int y) | |||
| { | |||
| __glutInitX = x; | |||
| __glutInitY = y; | |||
| if (x >= 0 && y >= 0) { | |||
| __glutSizeHints.x = x; | |||
| __glutSizeHints.y = y; | |||
| __glutSizeHints.flags |= USPosition; | |||
| } else { | |||
| __glutSizeHints.flags &= ~USPosition; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitWindowSize(int width, int height) | |||
| { | |||
| __glutInitWidth = width; | |||
| __glutInitHeight = height; | |||
| if (width > 0 && height > 0) { | |||
| __glutSizeHints.width = width; | |||
| __glutSizeHints.height = height; | |||
| __glutSizeHints.flags |= USSize; | |||
| } else { | |||
| __glutSizeHints.flags &= ~USSize; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitDisplayMode(unsigned int mask) | |||
| { | |||
| __glutDisplayMode = mask; | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #ifdef __VMS | |||
| #include <GL/vms_x_fix.h> | |||
| #endif | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include <stdio.h> | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xatom.h> | |||
| #endif | |||
| /* SGI optimization introduced in IRIX 6.3 to avoid X server | |||
| round trips for interning common X atoms. */ | |||
| #if defined(_SGI_EXTRA_PREDEFINES) && !defined(NO_FAST_ATOMS) | |||
| #include <X11/SGIFastAtom.h> | |||
| #else | |||
| #define XSGIFastInternAtom(dpy,string,fast_name,how) XInternAtom(dpy,string,how) | |||
| #endif | |||
| #include "glutint.h" | |||
| /* GLUT inter-file variables */ | |||
| /* *INDENT-OFF* */ | |||
| char *__glutProgramName = NULL; | |||
| int __glutArgc = 0; | |||
| char **__glutArgv = NULL; | |||
| char *__glutGeometry = NULL; | |||
| Display *__glutDisplay = NULL; | |||
| int __glutScreen; | |||
| Window __glutRoot; | |||
| int __glutScreenHeight; | |||
| int __glutScreenWidth; | |||
| GLboolean __glutIconic = GL_FALSE; | |||
| GLboolean __glutDebug = GL_FALSE; | |||
| unsigned int __glutDisplayMode = | |||
| GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH; | |||
| char *__glutDisplayString = NULL; | |||
| int __glutConnectionFD; | |||
| XSizeHints __glutSizeHints = {0}; | |||
| int __glutInitWidth = 300, __glutInitHeight = 300; | |||
| int __glutInitX = -1, __glutInitY = -1; | |||
| GLboolean __glutForceDirect = GL_FALSE, | |||
| __glutTryDirect = GL_TRUE; | |||
| Atom __glutWMDeleteWindow; | |||
| /* *INDENT-ON* */ | |||
| #ifdef _WIN32 | |||
| void (__cdecl *__glutExitFunc)(int retval) = NULL; | |||
| #endif | |||
| static Bool synchronize = False; | |||
| #if defined(__OS2__) | |||
| MRESULT EXPENTRY GlutWindowProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); | |||
| MRESULT EXPENTRY GlutWindowChildProc( HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2 ); | |||
| void __glutOpenOS2Connection(char* display) | |||
| { | |||
| static char *classname=NULL; | |||
| extern HAB hab; /* PM anchor block handle */ | |||
| ERRORID erridErrorCode;/* last error id code */ | |||
| int ii; | |||
| /* Make sure we register the window only once. */ | |||
| if(classname) | |||
| return; | |||
| classname = "GLUT"; | |||
| if ( !WinRegisterClass( hab, /* PM anchor block handle */ | |||
| classname,/* window class name */ | |||
| GlutWindowProc,/* address of window procedure*/ | |||
| CS_SIZEREDRAW, /* |CS_SYNCPAINT size changes cause redrawing */ | |||
| 0UL ) ) /* window data */ | |||
| { erridErrorCode = WinGetLastError(hab); | |||
| ii = erridErrorCode; | |||
| return; | |||
| } | |||
| classname = "GLUTCHILD"; | |||
| if ( !WinRegisterClass( hab, /* PM anchor block handle */ | |||
| classname,/* window class name */ | |||
| GlutWindowChildProc,/* address of window procedure*/ | |||
| CS_SIZEREDRAW, /* size changes cause redrawing */ | |||
| 0UL ) ) /* window data */ | |||
| { erridErrorCode = WinGetLastError(hab); | |||
| ii = erridErrorCode; | |||
| return; | |||
| } | |||
| __glutScreenWidth = GetSystemMetrics(SM_CXSCREEN); | |||
| __glutScreenHeight = GetSystemMetrics(SM_CYSCREEN); | |||
| /* Set the root window to NULL because windows creates a top-level | |||
| window when the parent is NULL. X creates a top-level window | |||
| when the parent is the root window. */ | |||
| __glutRoot = NULLHANDLE; | |||
| /* Set the display to 1 -- we shouldn't be using this anywhere | |||
| (except as an argument to X calls). */ | |||
| __glutDisplay = (Display*)1; | |||
| /* There isn't any concept of multiple screens in Win32, therefore, | |||
| we don't need to keep track of the screen we're on... it's always | |||
| the same one. */ | |||
| __glutScreen = 0; | |||
| } | |||
| #elif defined(_WIN32) | |||
| #ifdef __BORLANDC__ | |||
| #include <float.h> /* For masking floating point exceptions. */ | |||
| #endif | |||
| void | |||
| __glutOpenWin32Connection(char* display) | |||
| { | |||
| static char *classname; | |||
| WNDCLASS wc; | |||
| HINSTANCE hInstance = GetModuleHandle(NULL); | |||
| /* Make sure we register the window only once. */ | |||
| if(classname) | |||
| return; | |||
| #ifdef __BORLANDC__ | |||
| /* Under certain conditions (e.g. while rendering solid surfaces with | |||
| lighting enabled) Microsoft OpenGL libraries cause some illegal | |||
| operations like floating point overflow or division by zero. The | |||
| default behaviour of Microsoft compilers is to mask (ignore) | |||
| floating point exceptions, while Borland compilers do not. The | |||
| following function of Borland RTL allows to mask exceptions. | |||
| Advice from Pier Giorgio Esposito (mc2172@mclink.it). */ | |||
| _control87(MCW_EM,MCW_EM); | |||
| #endif | |||
| classname = "GLUT"; | |||
| /* Clear (important!) and then fill in the window class structure. */ | |||
| memset(&wc, 0, sizeof(WNDCLASS)); | |||
| wc.style = CS_OWNDC; | |||
| wc.lpfnWndProc = (WNDPROC)__glutWindowProc; | |||
| wc.hInstance = hInstance; | |||
| wc.hIcon = LoadIcon(hInstance, "GLUT_ICON"); | |||
| wc.hCursor = LoadCursor(hInstance, IDC_ARROW); | |||
| wc.hbrBackground = NULL; | |||
| wc.lpszMenuName = NULL; | |||
| wc.lpszClassName = classname; | |||
| /* Fill in a default icon if one isn't specified as a resource. */ | |||
| if(!wc.hIcon) | |||
| wc.hIcon = LoadIcon(NULL, IDI_WINLOGO); | |||
| if(!RegisterClass(&wc)) { | |||
| __glutFatalError("RegisterClass() failed:" | |||
| "Cannot register GLUT window class."); | |||
| } | |||
| __glutScreenWidth = GetSystemMetrics(SM_CXSCREEN); | |||
| __glutScreenHeight = GetSystemMetrics(SM_CYSCREEN); | |||
| /* Set the root window to NULL because windows creates a top-level | |||
| window when the parent is NULL. X creates a top-level window | |||
| when the parent is the root window. */ | |||
| __glutRoot = NULL; | |||
| /* Set the display to 1 -- we shouldn't be using this anywhere | |||
| (except as an argument to X calls). */ | |||
| __glutDisplay = (Display*)1; | |||
| /* There isn't any concept of multiple screens in Win32, therefore, | |||
| we don't need to keep track of the screen we're on... it's always | |||
| the same one. */ | |||
| __glutScreen = 0; | |||
| } | |||
| #else /* !_WIN32 */ | |||
| void | |||
| __glutOpenXConnection(char *display) | |||
| { | |||
| int errorBase, eventBase; | |||
| __glutDisplay = XOpenDisplay(display); | |||
| if (!__glutDisplay) | |||
| __glutFatalError("could not open display: %s", | |||
| XDisplayName(display)); | |||
| if (synchronize) | |||
| XSynchronize(__glutDisplay, True); | |||
| if (!glXQueryExtension(__glutDisplay, &errorBase, &eventBase)) | |||
| __glutFatalError( | |||
| "OpenGL GLX extension not supported by display: %s", | |||
| XDisplayName(display)); | |||
| __glutScreen = DefaultScreen(__glutDisplay); | |||
| __glutRoot = RootWindow(__glutDisplay, __glutScreen); | |||
| __glutScreenWidth = DisplayWidth(__glutDisplay, __glutScreen); | |||
| __glutScreenHeight = DisplayHeight(__glutDisplay, | |||
| __glutScreen); | |||
| __glutConnectionFD = ConnectionNumber(__glutDisplay); | |||
| __glutWMDeleteWindow = XSGIFastInternAtom(__glutDisplay, | |||
| "WM_DELETE_WINDOW", SGI_XA_WM_DELETE_WINDOW, False); | |||
| } | |||
| #endif /* _WIN32 */ | |||
| void | |||
| #ifdef OLD_VMS | |||
| __glutInitTime(struct timeval6 *beginning) | |||
| #else | |||
| __glutInitTime(struct timeval *beginning) | |||
| #endif | |||
| { | |||
| static int beenhere = 0; | |||
| #ifdef OLD_VMS | |||
| static struct timeval6 genesis; | |||
| #else | |||
| static struct timeval genesis; | |||
| #endif | |||
| if (!beenhere) { | |||
| GETTIMEOFDAY(&genesis); | |||
| beenhere = 1; | |||
| } | |||
| *beginning = genesis; | |||
| } | |||
| static void | |||
| removeArgs(int *argcp, char **argv, int numToRemove) | |||
| { | |||
| int i, j; | |||
| for (i = 0, j = numToRemove; argv[j]; i++, j++) { | |||
| argv[i] = argv[j]; | |||
| } | |||
| argv[i] = NULL; | |||
| *argcp -= numToRemove; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInit(int *argcp, char **argv) | |||
| { | |||
| char *display = NULL; | |||
| char *str, *geometry = NULL; | |||
| #ifdef OLD_VMS | |||
| struct timeval6 unused; | |||
| #else | |||
| struct timeval unused; | |||
| #endif | |||
| int i; | |||
| if (__glutDisplay) { | |||
| __glutWarning("glutInit being called a second time."); | |||
| return; | |||
| } | |||
| /* Determine temporary program name. */ | |||
| str = strrchr(argv[0], '/'); | |||
| if (str == NULL) { | |||
| __glutProgramName = argv[0]; | |||
| } else { | |||
| __glutProgramName = str + 1; | |||
| } | |||
| /* Make private copy of command line arguments. */ | |||
| __glutArgc = *argcp; | |||
| __glutArgv = (char **) malloc(__glutArgc * sizeof(char *)); | |||
| if (!__glutArgv) | |||
| __glutFatalError("out of memory."); | |||
| for (i = 0; i < __glutArgc; i++) { | |||
| __glutArgv[i] = __glutStrdup(argv[i]); | |||
| if (!__glutArgv[i]) | |||
| __glutFatalError("out of memory."); | |||
| } | |||
| /* determine permanent program name */ | |||
| str = strrchr(__glutArgv[0], '/'); | |||
| if (str == NULL) { | |||
| __glutProgramName = __glutArgv[0]; | |||
| } else { | |||
| __glutProgramName = str + 1; | |||
| } | |||
| /* parse arguments for standard options */ | |||
| for (i = 1; i < __glutArgc; i++) { | |||
| if (!strcmp(__glutArgv[i], "-display")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-display option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (++i >= __glutArgc) { | |||
| __glutFatalError( | |||
| "follow -display option with X display name."); | |||
| } | |||
| display = __glutArgv[i]; | |||
| removeArgs(argcp, &argv[1], 2); | |||
| } else if (!strcmp(__glutArgv[i], "-geometry")) { | |||
| if (++i >= __glutArgc) { | |||
| __glutFatalError( | |||
| "follow -geometry option with geometry parameter."); | |||
| } | |||
| geometry = __glutArgv[i]; | |||
| removeArgs(argcp, &argv[1], 2); | |||
| } else if (!strcmp(__glutArgv[i], "-direct")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-direct option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (!__glutTryDirect) | |||
| __glutFatalError( | |||
| "cannot force both direct and indirect rendering."); | |||
| __glutForceDirect = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-indirect")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-indirect option not supported by Win32 GLUT."); | |||
| #endif | |||
| if (__glutForceDirect) | |||
| __glutFatalError( | |||
| "cannot force both direct and indirect rendering."); | |||
| __glutTryDirect = GL_FALSE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-iconic")) { | |||
| __glutIconic = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-gldebug")) { | |||
| __glutDebug = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else if (!strcmp(__glutArgv[i], "-sync")) { | |||
| #if defined(_WIN32) | |||
| __glutWarning("-sync option not supported by Win32 GLUT."); | |||
| #endif | |||
| synchronize = GL_TRUE; | |||
| removeArgs(argcp, &argv[1], 1); | |||
| } else { | |||
| /* Once unknown option encountered, stop command line | |||
| processing. */ | |||
| break; | |||
| } | |||
| } | |||
| #if defined(__OS2__) | |||
| __glutOpenOS2Connection(display); | |||
| #elif defined(_WIN32) | |||
| __glutOpenWin32Connection(display); | |||
| #else | |||
| __glutOpenXConnection(display); | |||
| #endif | |||
| if (geometry) { | |||
| int flags, x, y, width, height; | |||
| /* Fix bogus "{width|height} may be used before set" | |||
| warning */ | |||
| width = 0; | |||
| height = 0; | |||
| flags = XParseGeometry(geometry, &x, &y, | |||
| (unsigned int *) &width, (unsigned int *) &height); | |||
| if (WidthValue & flags) { | |||
| /* Careful because X does not allow zero or negative | |||
| width windows */ | |||
| if (width > 0) | |||
| __glutInitWidth = width; | |||
| } | |||
| if (HeightValue & flags) { | |||
| /* Careful because X does not allow zero or negative | |||
| height windows */ | |||
| if (height > 0) | |||
| __glutInitHeight = height; | |||
| } | |||
| glutInitWindowSize(__glutInitWidth, __glutInitHeight); | |||
| if (XValue & flags) { | |||
| if (XNegative & flags) | |||
| x = DisplayWidth(__glutDisplay, __glutScreen) + | |||
| x - __glutSizeHints.width; | |||
| /* Play safe: reject negative X locations */ | |||
| if (x >= 0) | |||
| __glutInitX = x; | |||
| } | |||
| if (YValue & flags) { | |||
| if (YNegative & flags) | |||
| y = DisplayHeight(__glutDisplay, __glutScreen) + | |||
| y - __glutSizeHints.height; | |||
| /* Play safe: reject negative Y locations */ | |||
| if (y >= 0) | |||
| __glutInitY = y; | |||
| } | |||
| glutInitWindowPosition(__glutInitX, __glutInitY); | |||
| } | |||
| __glutInitTime(&unused); | |||
| /* check if GLUT_FPS env var is set */ | |||
| { | |||
| const char *fps = getenv("GLUT_FPS"); | |||
| if (fps) { | |||
| sscanf(fps, "%d", &__glutFPS); | |||
| if (__glutFPS <= 0) | |||
| __glutFPS = 5000; /* 5000 milliseconds */ | |||
| } | |||
| } | |||
| } | |||
| #ifdef _WIN32 | |||
| void APIENTRY | |||
| __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)) | |||
| { | |||
| __glutExitFunc = exitfunc; | |||
| glutInit(argcp, argv); | |||
| } | |||
| #endif | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutInitWindowPosition(int x, int y) | |||
| { | |||
| __glutInitX = x; | |||
| __glutInitY = y; | |||
| if (x >= 0 && y >= 0) { | |||
| __glutSizeHints.x = x; | |||
| __glutSizeHints.y = y; | |||
| __glutSizeHints.flags |= USPosition; | |||
| } else { | |||
| __glutSizeHints.flags &= ~USPosition; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitWindowSize(int width, int height) | |||
| { | |||
| __glutInitWidth = width; | |||
| __glutInitHeight = height; | |||
| if (width > 0 && height > 0) { | |||
| __glutSizeHints.width = width; | |||
| __glutSizeHints.height = height; | |||
| __glutSizeHints.flags |= USSize; | |||
| } else { | |||
| __glutSizeHints.flags &= ~USSize; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutInitDisplayMode(unsigned int mask) | |||
| { | |||
| __glutDisplayMode = mask; | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,29 +1,29 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutKeyboardFunc(GLUTkeyboardCB keyboardFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyPressMask, | |||
| keyboardFunc != NULL || __glutCurrentWindow->special != NULL); | |||
| __glutCurrentWindow->keyboard = keyboardFunc; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSpecialFunc(GLUTspecialCB specialFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyPressMask, | |||
| specialFunc != NULL || __glutCurrentWindow->keyboard != NULL); | |||
| __glutCurrentWindow->special = specialFunc; | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutKeyboardFunc(GLUTkeyboardCB keyboardFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyPressMask, | |||
| keyboardFunc != NULL || __glutCurrentWindow->special != NULL); | |||
| __glutCurrentWindow->keyboard = keyboardFunc; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSpecialFunc(GLUTspecialCB specialFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyPressMask, | |||
| specialFunc != NULL || __glutCurrentWindow->keyboard != NULL); | |||
| __glutCurrentWindow->special = specialFunc; | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,29 +1,29 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutIgnoreKeyRepeat(int ignore) | |||
| { | |||
| __glutCurrentWindow->ignoreKeyRepeat = ignore; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSetKeyRepeat(int repeatMode) | |||
| { | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| XKeyboardControl values; | |||
| /* GLUT's repeatMode #define's match the Xlib API values. */ | |||
| values.auto_repeat_mode = repeatMode; | |||
| XChangeKeyboardControl(__glutDisplay, KBAutoRepeatMode, &values); | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutIgnoreKeyRepeat(int ignore) | |||
| { | |||
| __glutCurrentWindow->ignoreKeyRepeat = ignore; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSetKeyRepeat(int repeatMode) | |||
| { | |||
| #if !defined(_WIN32) && !defined(__OS2PM__) | |||
| XKeyboardControl values; | |||
| /* GLUT's repeatMode #define's match the Xlib API values. */ | |||
| values.auto_repeat_mode = repeatMode; | |||
| XChangeKeyboardControl(__glutDisplay, KBAutoRepeatMode, &values); | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,29 +1,29 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyReleaseMask, | |||
| keyboardUpFunc != NULL || __glutCurrentWindow->specialUp != NULL); | |||
| __glutCurrentWindow->keyboardUp = keyboardUpFunc; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSpecialUpFunc(GLUTspecialCB specialUpFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyReleaseMask, | |||
| specialUpFunc != NULL || __glutCurrentWindow->keyboardUp != NULL); | |||
| __glutCurrentWindow->specialUp = specialUpFunc; | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutKeyboardUpFunc(GLUTkeyboardCB keyboardUpFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyReleaseMask, | |||
| keyboardUpFunc != NULL || __glutCurrentWindow->specialUp != NULL); | |||
| __glutCurrentWindow->keyboardUp = keyboardUpFunc; | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSpecialUpFunc(GLUTspecialCB specialUpFunc) | |||
| { | |||
| __glutChangeWindowEventMask(KeyReleaseMask, | |||
| specialUpFunc != NULL || __glutCurrentWindow->keyboardUp != NULL); | |||
| __glutCurrentWindow->specialUp = specialUpFunc; | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,57 +1,57 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1996. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include "glutint.h" | |||
| int __glutMesaSwapHackSupport = 0; /* Not supported until | |||
| proven otherwise. */ | |||
| /* Use the "Mesa swap hack" if reasonable if and only if | |||
| MESA_SWAP_HACK is set to something whose first character is | |||
| not "N" or "n" AND "Brian Paul" is the vendor string AND | |||
| "Mesa X11"* (or "Mesa" for backward compatibility) is the | |||
| renderer string. | |||
| Anyone who modifies Mesa so that glXSwapBuffers does not | |||
| simply blit the previously rendered back buffer should | |||
| change either their vendor or renderer string to avoid | |||
| confusing GLUT. */ | |||
| void | |||
| __glutDetermineMesaSwapHackSupport(void) | |||
| { | |||
| static int doneAlready = 0; | |||
| char *env, *vendor, *renderer; | |||
| if (doneAlready) | |||
| return; | |||
| env = getenv("MESA_SWAP_HACK"); | |||
| if (env) { | |||
| if ((env[0] != 'n') && (env[0] != 'N')) { | |||
| vendor = (char *) glGetString(GL_VENDOR); | |||
| renderer = (char *) glGetString(GL_RENDERER); | |||
| /* Old versions of X11 Mesa uses the renderer string | |||
| "Mesa"; Brian plans to start using "Mesa X11" to | |||
| distinguish the X version of Mesa from other flavor | |||
| such as Windows or 3Dfx. */ | |||
| #define MESA_X11 "Mesa X11" | |||
| /* XXX At some point in the future, eliminate the | |||
| backward compatibility for the old "Mesa" renderer | |||
| string. */ | |||
| if (!strcmp(vendor, "Brian Paul") && (!strcmp(renderer, "Mesa") || | |||
| !strncmp(renderer, MESA_X11, sizeof(MESA_X11) - 1))) | |||
| __glutMesaSwapHackSupport = 1; | |||
| } | |||
| } | |||
| doneAlready = 1; | |||
| } | |||
| /* Copyright (c) Mark J. Kilgard, 1996. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <string.h> | |||
| #include "glutint.h" | |||
| int __glutMesaSwapHackSupport = 0; /* Not supported until | |||
| proven otherwise. */ | |||
| /* Use the "Mesa swap hack" if reasonable if and only if | |||
| MESA_SWAP_HACK is set to something whose first character is | |||
| not "N" or "n" AND "Brian Paul" is the vendor string AND | |||
| "Mesa X11"* (or "Mesa" for backward compatibility) is the | |||
| renderer string. | |||
| Anyone who modifies Mesa so that glXSwapBuffers does not | |||
| simply blit the previously rendered back buffer should | |||
| change either their vendor or renderer string to avoid | |||
| confusing GLUT. */ | |||
| void | |||
| __glutDetermineMesaSwapHackSupport(void) | |||
| { | |||
| static int doneAlready = 0; | |||
| char *env, *vendor, *renderer; | |||
| if (doneAlready) | |||
| return; | |||
| env = getenv("MESA_SWAP_HACK"); | |||
| if (env) { | |||
| if ((env[0] != 'n') && (env[0] != 'N')) { | |||
| vendor = (char *) glGetString(GL_VENDOR); | |||
| renderer = (char *) glGetString(GL_RENDERER); | |||
| /* Old versions of X11 Mesa uses the renderer string | |||
| "Mesa"; Brian plans to start using "Mesa X11" to | |||
| distinguish the X version of Mesa from other flavor | |||
| such as Windows or 3Dfx. */ | |||
| #define MESA_X11 "Mesa X11" | |||
| /* XXX At some point in the future, eliminate the | |||
| backward compatibility for the old "Mesa" renderer | |||
| string. */ | |||
| if (!strcmp(vendor, "Brian Paul") && (!strcmp(renderer, "Mesa") || | |||
| !strncmp(renderer, MESA_X11, sizeof(MESA_X11) - 1))) | |||
| __glutMesaSwapHackSupport = 1; | |||
| } | |||
| } | |||
| doneAlready = 1; | |||
| } | |||
| @@ -1,31 +1,31 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutGetModifiers(void) | |||
| { | |||
| int modifiers; | |||
| if(__glutModifierMask == (unsigned int) ~0) { | |||
| __glutWarning( | |||
| "glutCurrentModifiers: do not call outside core input callback."); | |||
| return 0; | |||
| } | |||
| modifiers = 0; | |||
| if(__glutModifierMask & (ShiftMask|LockMask)) | |||
| modifiers |= GLUT_ACTIVE_SHIFT; | |||
| if(__glutModifierMask & ControlMask) | |||
| modifiers |= GLUT_ACTIVE_CTRL; | |||
| if(__glutModifierMask & Mod1Mask) | |||
| modifiers |= GLUT_ACTIVE_ALT; | |||
| return modifiers; | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutGetModifiers(void) | |||
| { | |||
| int modifiers; | |||
| if(__glutModifierMask == (unsigned int) ~0) { | |||
| __glutWarning( | |||
| "glutCurrentModifiers: do not call outside core input callback."); | |||
| return 0; | |||
| } | |||
| modifiers = 0; | |||
| if(__glutModifierMask & (ShiftMask|LockMask)) | |||
| modifiers |= GLUT_ACTIVE_SHIFT; | |||
| if(__glutModifierMask & ControlMask) | |||
| modifiers |= GLUT_ACTIVE_CTRL; | |||
| if(__glutModifierMask & Mod1Mask) | |||
| modifiers |= GLUT_ACTIVE_ALT; | |||
| return modifiers; | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,42 +1,42 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #include "glutstroke.h" | |||
| void GLUTAPIENTRY | |||
| glutStrokeCharacter(GLUTstrokeFont font, int c) | |||
| { | |||
| const StrokeCharRec *ch; | |||
| const StrokeRec *stroke; | |||
| const CoordRec *coord; | |||
| StrokeFontPtr fontinfo; | |||
| int i, j; | |||
| #if defined(_WIN32) | |||
| fontinfo = (StrokeFontPtr) __glutFont(font); | |||
| #else | |||
| fontinfo = (StrokeFontPtr) font; | |||
| #endif | |||
| if (c < 0 || c >= fontinfo->num_chars) | |||
| return; | |||
| ch = &(fontinfo->ch[c]); | |||
| if (ch) { | |||
| for (i = ch->num_strokes, stroke = ch->stroke; | |||
| i > 0; i--, stroke++) { | |||
| glBegin(GL_LINE_STRIP); | |||
| for (j = stroke->num_coords, coord = stroke->coord; | |||
| j > 0; j--, coord++) { | |||
| glVertex2f(coord->x, coord->y); | |||
| } | |||
| glEnd(); | |||
| } | |||
| glTranslatef(ch->right, 0.0, 0.0); | |||
| } | |||
| } | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include "glutint.h" | |||
| #include "glutstroke.h" | |||
| void GLUTAPIENTRY | |||
| glutStrokeCharacter(GLUTstrokeFont font, int c) | |||
| { | |||
| const StrokeCharRec *ch; | |||
| const StrokeRec *stroke; | |||
| const CoordRec *coord; | |||
| StrokeFontPtr fontinfo; | |||
| int i, j; | |||
| #if defined(_WIN32) | |||
| fontinfo = (StrokeFontPtr) __glutFont(font); | |||
| #else | |||
| fontinfo = (StrokeFontPtr) font; | |||
| #endif | |||
| if (c < 0 || c >= fontinfo->num_chars) | |||
| return; | |||
| ch = &(fontinfo->ch[c]); | |||
| if (ch) { | |||
| for (i = ch->num_strokes, stroke = ch->stroke; | |||
| i > 0; i--, stroke++) { | |||
| glBegin(GL_LINE_STRIP); | |||
| for (j = stroke->num_coords, coord = stroke->coord; | |||
| j > 0; j--, coord++) { | |||
| glVertex2f(coord->x, coord->y); | |||
| } | |||
| glEnd(); | |||
| } | |||
| glTranslatef(ch->right, 0.0, 0.0); | |||
| } | |||
| } | |||
| @@ -1,67 +1,67 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| GLint __glutFPS = 0; | |||
| GLint __glutSwapCount = 0; | |||
| GLint __glutSwapTime = 0; | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSwapBuffers(void) | |||
| { | |||
| GLUTwindow *window = __glutCurrentWindow; | |||
| if (window->renderWin == window->win) { | |||
| if (__glutCurrentWindow->treatAsSingle) { | |||
| /* Pretend the double buffered window is single buffered, | |||
| so treat glutSwapBuffers as a no-op. */ | |||
| return; | |||
| } | |||
| } else { | |||
| if (__glutCurrentWindow->overlay->treatAsSingle) { | |||
| /* Pretend the double buffered overlay is single | |||
| buffered, so treat glutSwapBuffers as a no-op. */ | |||
| return; | |||
| } | |||
| } | |||
| /* For the MESA_SWAP_HACK. */ | |||
| window->usedSwapBuffers = 1; | |||
| SWAP_BUFFERS_LAYER(__glutCurrentWindow); | |||
| /* I considered putting the window being swapped on the | |||
| GLUT_FINISH_WORK work list because you could call | |||
| glutSwapBuffers from an idle callback which doesn't call | |||
| __glutSetWindow which normally adds indirect rendering | |||
| windows to the GLUT_FINISH_WORK work list. Not being put | |||
| on the list could lead to the buffering up of multiple | |||
| redisplays and buffer swaps and hamper interactivity. I | |||
| consider this an application bug due to not using | |||
| glutPostRedisplay to trigger redraws. If | |||
| glutPostRedisplay were used, __glutSetWindow would be | |||
| called and a glFinish to throttle buffering would occur. */ | |||
| if (__glutFPS) { | |||
| GLint t = glutGet(GLUT_ELAPSED_TIME); | |||
| __glutSwapCount++; | |||
| if (__glutSwapTime == 0) | |||
| __glutSwapTime = t; | |||
| else if (t - __glutSwapTime > __glutFPS) { | |||
| float time = 0.001 * (t - __glutSwapTime); | |||
| float fps = (float) __glutSwapCount / time; | |||
| fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", | |||
| __glutSwapCount, time, fps); | |||
| __glutSwapTime = t; | |||
| __glutSwapCount = 0; | |||
| } | |||
| } | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| GLint __glutFPS = 0; | |||
| GLint __glutSwapCount = 0; | |||
| GLint __glutSwapTime = 0; | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSwapBuffers(void) | |||
| { | |||
| GLUTwindow *window = __glutCurrentWindow; | |||
| if (window->renderWin == window->win) { | |||
| if (__glutCurrentWindow->treatAsSingle) { | |||
| /* Pretend the double buffered window is single buffered, | |||
| so treat glutSwapBuffers as a no-op. */ | |||
| return; | |||
| } | |||
| } else { | |||
| if (__glutCurrentWindow->overlay->treatAsSingle) { | |||
| /* Pretend the double buffered overlay is single | |||
| buffered, so treat glutSwapBuffers as a no-op. */ | |||
| return; | |||
| } | |||
| } | |||
| /* For the MESA_SWAP_HACK. */ | |||
| window->usedSwapBuffers = 1; | |||
| SWAP_BUFFERS_LAYER(__glutCurrentWindow); | |||
| /* I considered putting the window being swapped on the | |||
| GLUT_FINISH_WORK work list because you could call | |||
| glutSwapBuffers from an idle callback which doesn't call | |||
| __glutSetWindow which normally adds indirect rendering | |||
| windows to the GLUT_FINISH_WORK work list. Not being put | |||
| on the list could lead to the buffering up of multiple | |||
| redisplays and buffer swaps and hamper interactivity. I | |||
| consider this an application bug due to not using | |||
| glutPostRedisplay to trigger redraws. If | |||
| glutPostRedisplay were used, __glutSetWindow would be | |||
| called and a glFinish to throttle buffering would occur. */ | |||
| if (__glutFPS) { | |||
| GLint t = glutGet(GLUT_ELAPSED_TIME); | |||
| __glutSwapCount++; | |||
| if (__glutSwapTime == 0) | |||
| __glutSwapTime = t; | |||
| else if (t - __glutSwapTime > __glutFPS) { | |||
| float time = 0.001 * (t - __glutSwapTime); | |||
| float fps = (float) __glutSwapCount / time; | |||
| fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n", | |||
| __glutSwapCount, time, fps); | |||
| __glutSwapTime = t; | |||
| __glutSwapCount = 0; | |||
| } | |||
| } | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,210 +1,210 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /** | |||
| (c) Copyright 1993, Silicon Graphics, Inc. | |||
| ALL RIGHTS RESERVED | |||
| Permission to use, copy, modify, and distribute this software | |||
| for any purpose and without fee is hereby granted, provided | |||
| that the above copyright notice appear in all copies and that | |||
| both the copyright notice and this permission notice appear in | |||
| supporting documentation, and that the name of Silicon | |||
| Graphics, Inc. not be used in advertising or publicity | |||
| pertaining to distribution of the software without specific, | |||
| written prior permission. | |||
| THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU | |||
| "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR | |||
| OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF | |||
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO | |||
| EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE | |||
| ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR | |||
| CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, | |||
| INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, | |||
| SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR | |||
| NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY | |||
| OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | |||
| ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR | |||
| PERFORMANCE OF THIS SOFTWARE. | |||
| US Government Users Restricted Rights | |||
| Use, duplication, or disclosure by the Government is subject to | |||
| restrictions set forth in FAR 52.227.19(c)(2) or subparagraph | |||
| (c)(1)(ii) of the Rights in Technical Data and Computer | |||
| Software clause at DFARS 252.227-7013 and/or in similar or | |||
| successor clauses in the FAR or the DOD or NASA FAR | |||
| Supplement. Unpublished-- rights reserved under the copyright | |||
| laws of the United States. Contractor/manufacturer is Silicon | |||
| Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA | |||
| 94039-7311. | |||
| OpenGL(TM) is a trademark of Silicon Graphics, Inc. | |||
| */ | |||
| #include "glutint.h" | |||
| /* Rim, body, lid, and bottom data must be reflected in x and | |||
| y; handle and spout data across the y axis only. */ | |||
| static int patchdata[][16] = | |||
| { | |||
| /* rim */ | |||
| {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, | |||
| 12, 13, 14, 15}, | |||
| /* body */ | |||
| {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, | |||
| 24, 25, 26, 27}, | |||
| {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, | |||
| 37, 38, 39, 40}, | |||
| /* lid */ | |||
| {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, | |||
| 101, 0, 1, 2, 3,}, | |||
| {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, | |||
| 113, 114, 115, 116, 117}, | |||
| /* bottom */ | |||
| {118, 118, 118, 118, 124, 122, 119, 121, 123, 126, | |||
| 125, 120, 40, 39, 38, 37}, | |||
| /* handle */ | |||
| {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, | |||
| 53, 54, 55, 56}, | |||
| {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, | |||
| 28, 65, 66, 67}, | |||
| /* spout */ | |||
| {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, | |||
| 80, 81, 82, 83}, | |||
| {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, | |||
| 92, 93, 94, 95} | |||
| }; | |||
| /* *INDENT-OFF* */ | |||
| static float cpdata[][3] = | |||
| { | |||
| {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0, | |||
| -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125}, | |||
| {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375, | |||
| 0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375, | |||
| 2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84, | |||
| 2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875}, | |||
| {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75, | |||
| 1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35}, | |||
| {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2, | |||
| 0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12, | |||
| 0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225}, | |||
| {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225}, | |||
| {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0, | |||
| -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5, | |||
| -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3, | |||
| 2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0, | |||
| 2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0, | |||
| 2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8}, | |||
| {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3, | |||
| -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3, | |||
| 1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2, | |||
| -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0, | |||
| 1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0, | |||
| 0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66, | |||
| 0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1}, | |||
| {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7, | |||
| -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0, | |||
| 2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375}, | |||
| {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475}, | |||
| {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4}, | |||
| {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0, | |||
| 3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8, | |||
| 3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4, | |||
| -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0, | |||
| 2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4, | |||
| 2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3, | |||
| 2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4}, | |||
| {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425, | |||
| -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425, | |||
| 0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075}, | |||
| {0.84, -1.5, 0.075} | |||
| }; | |||
| static float tex[2][2][2] = | |||
| { | |||
| { {0, 0}, | |||
| {1, 0}}, | |||
| { {0, 1}, | |||
| {1, 1}} | |||
| }; | |||
| /* *INDENT-ON* */ | |||
| static void | |||
| teapot(GLint grid, GLdouble scale, GLenum type) | |||
| { | |||
| float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3]; | |||
| long i, j, k, l; | |||
| glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT); | |||
| glEnable(GL_AUTO_NORMAL); | |||
| glEnable(GL_NORMALIZE); | |||
| glEnable(GL_MAP2_VERTEX_3); | |||
| glEnable(GL_MAP2_TEXTURE_COORD_2); | |||
| glPushMatrix(); | |||
| glRotatef(270.0, 1.0, 0.0, 0.0); | |||
| glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale); | |||
| glTranslatef(0.0, 0.0, -1.5); | |||
| for (i = 0; i < 10; i++) { | |||
| for (j = 0; j < 4; j++) { | |||
| for (k = 0; k < 4; k++) { | |||
| for (l = 0; l < 3; l++) { | |||
| p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; | |||
| q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; | |||
| if (l == 1) | |||
| q[j][k][l] *= -1.0; | |||
| if (i < 6) { | |||
| r[j][k][l] = | |||
| cpdata[patchdata[i][j * 4 + (3 - k)]][l]; | |||
| if (l == 0) | |||
| r[j][k][l] *= -1.0; | |||
| s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; | |||
| if (l == 0) | |||
| s[j][k][l] *= -1.0; | |||
| if (l == 1) | |||
| s[j][k][l] *= -1.0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, | |||
| &tex[0][0][0]); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &p[0][0][0]); | |||
| glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &q[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| if (i < 6) { | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &r[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &s[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| } | |||
| } | |||
| glPopMatrix(); | |||
| glPopAttrib(); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSolidTeapot(GLdouble scale) | |||
| { | |||
| teapot(7, scale, GL_FILL); | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutWireTeapot(GLdouble scale) | |||
| { | |||
| teapot(10, scale, GL_LINE); | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /** | |||
| (c) Copyright 1993, Silicon Graphics, Inc. | |||
| ALL RIGHTS RESERVED | |||
| Permission to use, copy, modify, and distribute this software | |||
| for any purpose and without fee is hereby granted, provided | |||
| that the above copyright notice appear in all copies and that | |||
| both the copyright notice and this permission notice appear in | |||
| supporting documentation, and that the name of Silicon | |||
| Graphics, Inc. not be used in advertising or publicity | |||
| pertaining to distribution of the software without specific, | |||
| written prior permission. | |||
| THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU | |||
| "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR | |||
| OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF | |||
| MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO | |||
| EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE | |||
| ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR | |||
| CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, | |||
| INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, | |||
| SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR | |||
| NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY | |||
| OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | |||
| ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR | |||
| PERFORMANCE OF THIS SOFTWARE. | |||
| US Government Users Restricted Rights | |||
| Use, duplication, or disclosure by the Government is subject to | |||
| restrictions set forth in FAR 52.227.19(c)(2) or subparagraph | |||
| (c)(1)(ii) of the Rights in Technical Data and Computer | |||
| Software clause at DFARS 252.227-7013 and/or in similar or | |||
| successor clauses in the FAR or the DOD or NASA FAR | |||
| Supplement. Unpublished-- rights reserved under the copyright | |||
| laws of the United States. Contractor/manufacturer is Silicon | |||
| Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA | |||
| 94039-7311. | |||
| OpenGL(TM) is a trademark of Silicon Graphics, Inc. | |||
| */ | |||
| #include "glutint.h" | |||
| /* Rim, body, lid, and bottom data must be reflected in x and | |||
| y; handle and spout data across the y axis only. */ | |||
| static int patchdata[][16] = | |||
| { | |||
| /* rim */ | |||
| {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, | |||
| 12, 13, 14, 15}, | |||
| /* body */ | |||
| {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, | |||
| 24, 25, 26, 27}, | |||
| {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, | |||
| 37, 38, 39, 40}, | |||
| /* lid */ | |||
| {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, | |||
| 101, 0, 1, 2, 3,}, | |||
| {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, | |||
| 113, 114, 115, 116, 117}, | |||
| /* bottom */ | |||
| {118, 118, 118, 118, 124, 122, 119, 121, 123, 126, | |||
| 125, 120, 40, 39, 38, 37}, | |||
| /* handle */ | |||
| {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, | |||
| 53, 54, 55, 56}, | |||
| {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, | |||
| 28, 65, 66, 67}, | |||
| /* spout */ | |||
| {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, | |||
| 80, 81, 82, 83}, | |||
| {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, | |||
| 92, 93, 94, 95} | |||
| }; | |||
| /* *INDENT-OFF* */ | |||
| static float cpdata[][3] = | |||
| { | |||
| {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0, | |||
| -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125}, | |||
| {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375, | |||
| 0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375, | |||
| 2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84, | |||
| 2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875}, | |||
| {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75, | |||
| 1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35}, | |||
| {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2, | |||
| 0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12, | |||
| 0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225}, | |||
| {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225}, | |||
| {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0, | |||
| -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5, | |||
| -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3, | |||
| 2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0, | |||
| 2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0, | |||
| 2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8}, | |||
| {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3, | |||
| -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3, | |||
| 1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2, | |||
| -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0, | |||
| 1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0, | |||
| 0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66, | |||
| 0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1}, | |||
| {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7, | |||
| -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0, | |||
| 2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375}, | |||
| {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475}, | |||
| {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4}, | |||
| {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0, | |||
| 3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8, | |||
| 3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4, | |||
| -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0, | |||
| 2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4, | |||
| 2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3, | |||
| 2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4}, | |||
| {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425, | |||
| -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425, | |||
| 0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075}, | |||
| {0.84, -1.5, 0.075} | |||
| }; | |||
| static float tex[2][2][2] = | |||
| { | |||
| { {0, 0}, | |||
| {1, 0}}, | |||
| { {0, 1}, | |||
| {1, 1}} | |||
| }; | |||
| /* *INDENT-ON* */ | |||
| static void | |||
| teapot(GLint grid, GLdouble scale, GLenum type) | |||
| { | |||
| float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3]; | |||
| long i, j, k, l; | |||
| glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT); | |||
| glEnable(GL_AUTO_NORMAL); | |||
| glEnable(GL_NORMALIZE); | |||
| glEnable(GL_MAP2_VERTEX_3); | |||
| glEnable(GL_MAP2_TEXTURE_COORD_2); | |||
| glPushMatrix(); | |||
| glRotatef(270.0, 1.0, 0.0, 0.0); | |||
| glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale); | |||
| glTranslatef(0.0, 0.0, -1.5); | |||
| for (i = 0; i < 10; i++) { | |||
| for (j = 0; j < 4; j++) { | |||
| for (k = 0; k < 4; k++) { | |||
| for (l = 0; l < 3; l++) { | |||
| p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; | |||
| q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; | |||
| if (l == 1) | |||
| q[j][k][l] *= -1.0; | |||
| if (i < 6) { | |||
| r[j][k][l] = | |||
| cpdata[patchdata[i][j * 4 + (3 - k)]][l]; | |||
| if (l == 0) | |||
| r[j][k][l] *= -1.0; | |||
| s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; | |||
| if (l == 0) | |||
| s[j][k][l] *= -1.0; | |||
| if (l == 1) | |||
| s[j][k][l] *= -1.0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, | |||
| &tex[0][0][0]); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &p[0][0][0]); | |||
| glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &q[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| if (i < 6) { | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &r[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, | |||
| &s[0][0][0]); | |||
| glEvalMesh2(type, 0, grid, 0, grid); | |||
| } | |||
| } | |||
| glPopMatrix(); | |||
| glPopAttrib(); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutSolidTeapot(GLdouble scale) | |||
| { | |||
| teapot(7, scale, GL_FILL); | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutWireTeapot(GLdouble scale) | |||
| { | |||
| teapot(10, scale, GL_LINE); | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,90 +1,90 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <stdarg.h> | |||
| #include <string.h> | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| #if !defined(__OS2__) | |||
| /* strdup is actually not a standard ANSI C or POSIX routine | |||
| so implement a private one for GLUT. OpenVMS does not have a | |||
| strdup; Linux's standard libc doesn't declare strdup by default | |||
| (unless BSD or SVID interfaces are requested). */ | |||
| char * | |||
| __glutStrdup(const char *string) | |||
| { | |||
| char *copy; | |||
| copy = (char*) malloc(strlen(string) + 1); | |||
| if (copy == NULL) | |||
| return NULL; | |||
| strcpy(copy, string); | |||
| return copy; | |||
| } | |||
| #endif | |||
| void | |||
| __glutWarning(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Warning in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutReportErrors(void) | |||
| { | |||
| GLenum error; | |||
| while ((error = glGetError()) != GL_NO_ERROR) | |||
| __glutWarning("GL error: %s", gluErrorString(error)); | |||
| } | |||
| /* ENDCENTRY */ | |||
| void | |||
| __glutFatalError(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Fatal Error in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| /* || defined(__OS2__) */ | |||
| #if defined(_WIN32) | |||
| if (__glutExitFunc) { | |||
| __glutExitFunc(1); | |||
| } | |||
| #endif | |||
| exit(1); | |||
| } | |||
| void | |||
| __glutFatalUsage(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Fatal API Usage in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| abort(); | |||
| } | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <stdarg.h> | |||
| #include <string.h> | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| #if !defined(__OS2__) | |||
| /* strdup is actually not a standard ANSI C or POSIX routine | |||
| so implement a private one for GLUT. OpenVMS does not have a | |||
| strdup; Linux's standard libc doesn't declare strdup by default | |||
| (unless BSD or SVID interfaces are requested). */ | |||
| char * | |||
| __glutStrdup(const char *string) | |||
| { | |||
| char *copy; | |||
| copy = (char*) malloc(strlen(string) + 1); | |||
| if (copy == NULL) | |||
| return NULL; | |||
| strcpy(copy, string); | |||
| return copy; | |||
| } | |||
| #endif | |||
| void | |||
| __glutWarning(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Warning in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| } | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutReportErrors(void) | |||
| { | |||
| GLenum error; | |||
| while ((error = glGetError()) != GL_NO_ERROR) | |||
| __glutWarning("GL error: %s", gluErrorString(error)); | |||
| } | |||
| /* ENDCENTRY */ | |||
| void | |||
| __glutFatalError(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Fatal Error in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| /* || defined(__OS2__) */ | |||
| #if defined(_WIN32) | |||
| if (__glutExitFunc) { | |||
| __glutExitFunc(1); | |||
| } | |||
| #endif | |||
| exit(1); | |||
| } | |||
| void | |||
| __glutFatalUsage(char *format,...) | |||
| { | |||
| va_list args; | |||
| va_start(args, format); | |||
| fprintf(stderr, "GLUT: Fatal API Usage in %s: ", | |||
| __glutProgramName ? __glutProgramName : "(unamed)"); | |||
| vfprintf(stderr, format, args); | |||
| va_end(args); | |||
| putc('\n', stderr); | |||
| abort(); | |||
| } | |||
| @@ -1,232 +1,232 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1996. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #ifdef __sgi | |||
| #include <dlfcn.h> | |||
| #endif | |||
| #include "glutint.h" | |||
| /* Grumble. The IRIX 6.3 and early IRIX 6.4 OpenGL headers | |||
| support the video resize extension, but failed to define | |||
| GLX_SGIX_video_resize. */ | |||
| #if 0 | |||
| #ifdef GLX_SYNC_FRAME_SGIX | |||
| #define GLX_SGIX_video_resize 1 | |||
| #endif | |||
| #endif | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| static int canVideoResize = -1; | |||
| static int videoResizeChannel; | |||
| #else | |||
| static int canVideoResize = 0; | |||
| #endif | |||
| static int videoResizeInUse = 0; | |||
| static int dx = -1, dy = -1, dw = -1, dh = -1; | |||
| /* XXX Note that IRIX 6.2, 6.3, and some 6.4 versions have a | |||
| bug where programs seg-fault when they attempt video | |||
| resizing from an indirect OpenGL context (either local or | |||
| over a network). */ | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| static volatile int errorCaught; | |||
| /* ARGSUSED */ | |||
| static int | |||
| catchXSGIvcErrors(Display * dpy, XErrorEvent * event) | |||
| { | |||
| errorCaught = 1; | |||
| return 0; | |||
| } | |||
| #endif | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutVideoResizeGet(GLenum param) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (canVideoResize < 0) { | |||
| canVideoResize = __glutIsSupportedByGLX("GLX_SGIX_video_resize"); | |||
| if (canVideoResize) { | |||
| #if defined(__sgi) && __sgi | |||
| /* This is a hack because IRIX 6.2, 6.3, and some 6.4 | |||
| versions were released with GLX_SGIX_video_resize | |||
| being advertised by the X server though the video | |||
| resize extension is not actually supported. We try to | |||
| determine if the libGL.so we are using actually has a | |||
| video resize entrypoint before we try to use the | |||
| feature. */ | |||
| void (*func) (void); | |||
| void *glxDso = dlopen("libGL.so", RTLD_LAZY); | |||
| func = (void (*)(void)) dlsym(glxDso, "glXQueryChannelDeltasSGIX"); | |||
| if (!func) { | |||
| canVideoResize = 0; | |||
| } else | |||
| #endif | |||
| { | |||
| char *channelString; | |||
| int (*handler) (Display *, XErrorEvent *); | |||
| channelString = getenv("GLUT_VIDEO_RESIZE_CHANNEL"); | |||
| videoResizeChannel = channelString ? atoi(channelString) : 0; | |||
| /* Work around another annoying problem with SGI's | |||
| GLX_SGIX_video_resize implementation. Early IRIX | |||
| 6.4 OpenGL's advertise the extension and have the | |||
| video resize API, but an XSGIvc X protocol errors | |||
| result trying to use the API. Set up an error | |||
| handler to intercept what would otherwise be a fatal | |||
| error. If an error was recieved, do not report that | |||
| video resize is possible. */ | |||
| handler = XSetErrorHandler(catchXSGIvcErrors); | |||
| errorCaught = 0; | |||
| #if defined(GLX_GLXEXT_PROTOTYPES) | |||
| #endif | |||
| __glut_glXQueryChannelDeltasSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, &dx, &dy, &dw, &dh); | |||
| /* glXQueryChannelDeltasSGIX is an inherent X server | |||
| round-trip so we know we will have gotten either the | |||
| correct reply or and error by this time. */ | |||
| XSetErrorHandler(handler); | |||
| /* Still yet another work around. In IRIX 6.4 betas, | |||
| glXQueryChannelDeltasSGIX will return as if it | |||
| succeeded, but the values are filled with junk. | |||
| Watch to make sure the delta variables really make | |||
| sense. */ | |||
| if (errorCaught || | |||
| dx < 0 || dy < 0 || dw < 0 || dh < 0 || | |||
| dx > 2048 || dy > 2048 || dw > 2048 || dh > 2048) { | |||
| canVideoResize = 0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| #endif /* GLX_SGIX_video_resize */ | |||
| switch (param) { | |||
| case GLUT_VIDEO_RESIZE_POSSIBLE: | |||
| return canVideoResize; | |||
| case GLUT_VIDEO_RESIZE_IN_USE: | |||
| return videoResizeInUse; | |||
| case GLUT_VIDEO_RESIZE_X_DELTA: | |||
| return dx; | |||
| case GLUT_VIDEO_RESIZE_Y_DELTA: | |||
| return dy; | |||
| case GLUT_VIDEO_RESIZE_WIDTH_DELTA: | |||
| return dw; | |||
| case GLUT_VIDEO_RESIZE_HEIGHT_DELTA: | |||
| return dh; | |||
| case GLUT_VIDEO_RESIZE_X: | |||
| case GLUT_VIDEO_RESIZE_Y: | |||
| case GLUT_VIDEO_RESIZE_WIDTH: | |||
| case GLUT_VIDEO_RESIZE_HEIGHT: | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| int x, y, width, height; | |||
| __glut_glXQueryChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, &x, &y, &width, &height); | |||
| switch (param) { | |||
| case GLUT_VIDEO_RESIZE_X: | |||
| return x; | |||
| case GLUT_VIDEO_RESIZE_Y: | |||
| return y; | |||
| case GLUT_VIDEO_RESIZE_WIDTH: | |||
| return width; | |||
| case GLUT_VIDEO_RESIZE_HEIGHT: | |||
| return height; | |||
| } | |||
| } | |||
| #endif | |||
| return -1; | |||
| default: | |||
| __glutWarning("invalid glutVideoResizeGet parameter: %d", param); | |||
| return -1; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSetupVideoResizing(void) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { | |||
| __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, __glutCurrentWindow->win); | |||
| videoResizeInUse = 1; | |||
| } else | |||
| #endif | |||
| __glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n"); | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutStopVideoResizing(void) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { | |||
| if (videoResizeInUse) { | |||
| __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, None); | |||
| videoResizeInUse = 0; | |||
| } | |||
| } | |||
| #endif | |||
| } | |||
| /* ARGSUSED */ | |||
| void GLUTAPIENTRY | |||
| glutVideoResize(int x, int y, int width, int height) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| #ifdef GLX_SYNC_SWAP_SGIX | |||
| /* glXChannelRectSyncSGIX introduced in a patch to IRIX | |||
| 6.2; the original unpatched IRIX 6.2 behavior is always | |||
| GLX_SYNC_SWAP_SGIX. */ | |||
| __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, GLX_SYNC_SWAP_SGIX); | |||
| #endif | |||
| __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, x, y, width, height); | |||
| } | |||
| #endif | |||
| } | |||
| /* ARGSUSED */ | |||
| void GLUTAPIENTRY | |||
| glutVideoPan(int x, int y, int width, int height) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| #ifdef GLX_SYNC_FRAME_SGIX | |||
| /* glXChannelRectSyncSGIX introduced in a patch to IRIX | |||
| 6.2; the original unpatched IRIX 6.2 behavior is always | |||
| GLX_SYNC_SWAP_SGIX. We just ignore that we cannot | |||
| accomplish GLX_SYNC_FRAME_SGIX on IRIX unpatched 6.2; | |||
| this means you'd need a glutSwapBuffers to actually | |||
| realize the video resize. */ | |||
| __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, GLX_SYNC_FRAME_SGIX); | |||
| #endif | |||
| __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, x, y, width, height); | |||
| } | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1996. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #ifdef __sgi | |||
| #include <dlfcn.h> | |||
| #endif | |||
| #include "glutint.h" | |||
| /* Grumble. The IRIX 6.3 and early IRIX 6.4 OpenGL headers | |||
| support the video resize extension, but failed to define | |||
| GLX_SGIX_video_resize. */ | |||
| #if 0 | |||
| #ifdef GLX_SYNC_FRAME_SGIX | |||
| #define GLX_SGIX_video_resize 1 | |||
| #endif | |||
| #endif | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| static int canVideoResize = -1; | |||
| static int videoResizeChannel; | |||
| #else | |||
| static int canVideoResize = 0; | |||
| #endif | |||
| static int videoResizeInUse = 0; | |||
| static int dx = -1, dy = -1, dw = -1, dh = -1; | |||
| /* XXX Note that IRIX 6.2, 6.3, and some 6.4 versions have a | |||
| bug where programs seg-fault when they attempt video | |||
| resizing from an indirect OpenGL context (either local or | |||
| over a network). */ | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| static volatile int errorCaught; | |||
| /* ARGSUSED */ | |||
| static int | |||
| catchXSGIvcErrors(Display * dpy, XErrorEvent * event) | |||
| { | |||
| errorCaught = 1; | |||
| return 0; | |||
| } | |||
| #endif | |||
| /* CENTRY */ | |||
| int GLUTAPIENTRY | |||
| glutVideoResizeGet(GLenum param) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (canVideoResize < 0) { | |||
| canVideoResize = __glutIsSupportedByGLX("GLX_SGIX_video_resize"); | |||
| if (canVideoResize) { | |||
| #if defined(__sgi) && __sgi | |||
| /* This is a hack because IRIX 6.2, 6.3, and some 6.4 | |||
| versions were released with GLX_SGIX_video_resize | |||
| being advertised by the X server though the video | |||
| resize extension is not actually supported. We try to | |||
| determine if the libGL.so we are using actually has a | |||
| video resize entrypoint before we try to use the | |||
| feature. */ | |||
| void (*func) (void); | |||
| void *glxDso = dlopen("libGL.so", RTLD_LAZY); | |||
| func = (void (*)(void)) dlsym(glxDso, "glXQueryChannelDeltasSGIX"); | |||
| if (!func) { | |||
| canVideoResize = 0; | |||
| } else | |||
| #endif | |||
| { | |||
| char *channelString; | |||
| int (*handler) (Display *, XErrorEvent *); | |||
| channelString = getenv("GLUT_VIDEO_RESIZE_CHANNEL"); | |||
| videoResizeChannel = channelString ? atoi(channelString) : 0; | |||
| /* Work around another annoying problem with SGI's | |||
| GLX_SGIX_video_resize implementation. Early IRIX | |||
| 6.4 OpenGL's advertise the extension and have the | |||
| video resize API, but an XSGIvc X protocol errors | |||
| result trying to use the API. Set up an error | |||
| handler to intercept what would otherwise be a fatal | |||
| error. If an error was recieved, do not report that | |||
| video resize is possible. */ | |||
| handler = XSetErrorHandler(catchXSGIvcErrors); | |||
| errorCaught = 0; | |||
| #if defined(GLX_GLXEXT_PROTOTYPES) | |||
| #endif | |||
| __glut_glXQueryChannelDeltasSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, &dx, &dy, &dw, &dh); | |||
| /* glXQueryChannelDeltasSGIX is an inherent X server | |||
| round-trip so we know we will have gotten either the | |||
| correct reply or and error by this time. */ | |||
| XSetErrorHandler(handler); | |||
| /* Still yet another work around. In IRIX 6.4 betas, | |||
| glXQueryChannelDeltasSGIX will return as if it | |||
| succeeded, but the values are filled with junk. | |||
| Watch to make sure the delta variables really make | |||
| sense. */ | |||
| if (errorCaught || | |||
| dx < 0 || dy < 0 || dw < 0 || dh < 0 || | |||
| dx > 2048 || dy > 2048 || dw > 2048 || dh > 2048) { | |||
| canVideoResize = 0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| #endif /* GLX_SGIX_video_resize */ | |||
| switch (param) { | |||
| case GLUT_VIDEO_RESIZE_POSSIBLE: | |||
| return canVideoResize; | |||
| case GLUT_VIDEO_RESIZE_IN_USE: | |||
| return videoResizeInUse; | |||
| case GLUT_VIDEO_RESIZE_X_DELTA: | |||
| return dx; | |||
| case GLUT_VIDEO_RESIZE_Y_DELTA: | |||
| return dy; | |||
| case GLUT_VIDEO_RESIZE_WIDTH_DELTA: | |||
| return dw; | |||
| case GLUT_VIDEO_RESIZE_HEIGHT_DELTA: | |||
| return dh; | |||
| case GLUT_VIDEO_RESIZE_X: | |||
| case GLUT_VIDEO_RESIZE_Y: | |||
| case GLUT_VIDEO_RESIZE_WIDTH: | |||
| case GLUT_VIDEO_RESIZE_HEIGHT: | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| int x, y, width, height; | |||
| __glut_glXQueryChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, &x, &y, &width, &height); | |||
| switch (param) { | |||
| case GLUT_VIDEO_RESIZE_X: | |||
| return x; | |||
| case GLUT_VIDEO_RESIZE_Y: | |||
| return y; | |||
| case GLUT_VIDEO_RESIZE_WIDTH: | |||
| return width; | |||
| case GLUT_VIDEO_RESIZE_HEIGHT: | |||
| return height; | |||
| } | |||
| } | |||
| #endif | |||
| return -1; | |||
| default: | |||
| __glutWarning("invalid glutVideoResizeGet parameter: %d", param); | |||
| return -1; | |||
| } | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutSetupVideoResizing(void) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { | |||
| __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, __glutCurrentWindow->win); | |||
| videoResizeInUse = 1; | |||
| } else | |||
| #endif | |||
| __glutFatalError("glutEstablishVideoResizing: video resizing not possible.\n"); | |||
| } | |||
| void GLUTAPIENTRY | |||
| glutStopVideoResizing(void) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (glutVideoResizeGet(GLUT_VIDEO_RESIZE_POSSIBLE)) { | |||
| if (videoResizeInUse) { | |||
| __glut_glXBindChannelToWindowSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, None); | |||
| videoResizeInUse = 0; | |||
| } | |||
| } | |||
| #endif | |||
| } | |||
| /* ARGSUSED */ | |||
| void GLUTAPIENTRY | |||
| glutVideoResize(int x, int y, int width, int height) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| #ifdef GLX_SYNC_SWAP_SGIX | |||
| /* glXChannelRectSyncSGIX introduced in a patch to IRIX | |||
| 6.2; the original unpatched IRIX 6.2 behavior is always | |||
| GLX_SYNC_SWAP_SGIX. */ | |||
| __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, GLX_SYNC_SWAP_SGIX); | |||
| #endif | |||
| __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, x, y, width, height); | |||
| } | |||
| #endif | |||
| } | |||
| /* ARGSUSED */ | |||
| void GLUTAPIENTRY | |||
| glutVideoPan(int x, int y, int width, int height) | |||
| { | |||
| #if defined(GLX_VERSION_1_1) && defined(GLX_SGIX_video_resize) | |||
| if (videoResizeInUse) { | |||
| #ifdef GLX_SYNC_FRAME_SGIX | |||
| /* glXChannelRectSyncSGIX introduced in a patch to IRIX | |||
| 6.2; the original unpatched IRIX 6.2 behavior is always | |||
| GLX_SYNC_SWAP_SGIX. We just ignore that we cannot | |||
| accomplish GLX_SYNC_FRAME_SGIX on IRIX unpatched 6.2; | |||
| this means you'd need a glutSwapBuffers to actually | |||
| realize the video resize. */ | |||
| __glut_glXChannelRectSyncSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, GLX_SYNC_FRAME_SGIX); | |||
| #endif | |||
| __glut_glXChannelRectSGIX(__glutDisplay, __glutScreen, | |||
| videoResizeChannel, x, y, width, height); | |||
| } | |||
| #endif | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,29 +1,29 @@ | |||
| /* Copyright (c) Mark J. Kilgard, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <stdarg.h> | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutWarpPointer(int x, int y) | |||
| { | |||
| // XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win, | |||
| // 0, 0, 0, 0, x, y); | |||
| POINTL point; | |||
| point.x = x; | |||
| point.y = y; | |||
| WinMapWindowPoints(__glutCurrentWindow->win,HWND_DESKTOP,&point,1); | |||
| WinSetPointerPos(HWND_DESKTOP, point.x, point.y); | |||
| XFlush(__glutDisplay); | |||
| } | |||
| /* ENDCENTRY */ | |||
| /* Copyright (c) Mark J. Kilgard, 1996, 1997. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #include <stdlib.h> | |||
| #include <stdarg.h> | |||
| #include <stdio.h> | |||
| #include "glutint.h" | |||
| /* CENTRY */ | |||
| void GLUTAPIENTRY | |||
| glutWarpPointer(int x, int y) | |||
| { | |||
| // XWarpPointer(__glutDisplay, None, __glutCurrentWindow->win, | |||
| // 0, 0, 0, 0, x, y); | |||
| POINTL point; | |||
| point.x = x; | |||
| point.y = y; | |||
| WinMapWindowPoints(__glutCurrentWindow->win,HWND_DESKTOP,&point,1); | |||
| WinSetPointerPos(HWND_DESKTOP, point.x, point.y); | |||
| XFlush(__glutDisplay); | |||
| } | |||
| /* ENDCENTRY */ | |||
| @@ -1,32 +1,32 @@ | |||
| #ifndef __glutbitmap_h__ | |||
| #define __glutbitmap_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #define GLUT_NO_LIB_PRAGMA /* Avoid auto library linking when building | |||
| the GLUT library itself. */ | |||
| #include <GL/glut.h> | |||
| typedef struct { | |||
| const GLsizei width; | |||
| const GLsizei height; | |||
| const GLfloat xorig; | |||
| const GLfloat yorig; | |||
| const GLfloat advance; | |||
| const GLubyte *bitmap; | |||
| } BitmapCharRec, *BitmapCharPtr; | |||
| typedef struct { | |||
| const char *name; | |||
| const int num_chars; | |||
| const int first; | |||
| const BitmapCharRec * const *ch; | |||
| } BitmapFontRec, *BitmapFontPtr; | |||
| typedef void *GLUTbitmapFont; | |||
| #endif /* __glutbitmap_h__ */ | |||
| #ifndef __glutbitmap_h__ | |||
| #define __glutbitmap_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1994, 1998. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #define GLUT_NO_LIB_PRAGMA /* Avoid auto library linking when building | |||
| the GLUT library itself. */ | |||
| #include <GL/glut.h> | |||
| typedef struct { | |||
| const GLsizei width; | |||
| const GLsizei height; | |||
| const GLfloat xorig; | |||
| const GLfloat yorig; | |||
| const GLfloat advance; | |||
| const GLubyte *bitmap; | |||
| } BitmapCharRec, *BitmapCharPtr; | |||
| typedef struct { | |||
| const char *name; | |||
| const int num_chars; | |||
| const int first; | |||
| const BitmapCharRec * const *ch; | |||
| } BitmapFontRec, *BitmapFontPtr; | |||
| typedef void *GLUTbitmapFont; | |||
| #endif /* __glutbitmap_h__ */ | |||
| @@ -1,42 +1,42 @@ | |||
| #ifndef __glutstroke_h__ | |||
| #define __glutstroke_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #if defined(_WIN32) | |||
| #pragma warning (disable:4244) /* disable bogus conversion warnings */ | |||
| #pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ | |||
| #endif | |||
| typedef struct { | |||
| float x; | |||
| float y; | |||
| } CoordRec, *CoordPtr; | |||
| typedef struct { | |||
| int num_coords; | |||
| const CoordRec *coord; | |||
| } StrokeRec, *StrokePtr; | |||
| typedef struct { | |||
| int num_strokes; | |||
| const StrokeRec *stroke; | |||
| float center; | |||
| float right; | |||
| } StrokeCharRec, *StrokeCharPtr; | |||
| typedef struct { | |||
| const char *name; | |||
| int num_chars; | |||
| const StrokeCharRec *ch; | |||
| float top; | |||
| float bottom; | |||
| } StrokeFontRec, *StrokeFontPtr; | |||
| typedef void *GLUTstrokeFont; | |||
| #endif /* __glutstroke_h__ */ | |||
| #ifndef __glutstroke_h__ | |||
| #define __glutstroke_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| #if defined(_WIN32) | |||
| #pragma warning (disable:4244) /* disable bogus conversion warnings */ | |||
| #pragma warning (disable:4305) /* VC++ 5.0 version of above warning. */ | |||
| #endif | |||
| typedef struct { | |||
| float x; | |||
| float y; | |||
| } CoordRec, *CoordPtr; | |||
| typedef struct { | |||
| int num_coords; | |||
| const CoordRec *coord; | |||
| } StrokeRec, *StrokePtr; | |||
| typedef struct { | |||
| int num_strokes; | |||
| const StrokeRec *stroke; | |||
| float center; | |||
| float right; | |||
| } StrokeCharRec, *StrokeCharPtr; | |||
| typedef struct { | |||
| const char *name; | |||
| int num_chars; | |||
| const StrokeCharRec *ch; | |||
| float top; | |||
| float bottom; | |||
| } StrokeFontRec, *StrokeFontPtr; | |||
| typedef void *GLUTstrokeFont; | |||
| #endif /* __glutstroke_h__ */ | |||
| @@ -1,59 +1,59 @@ | |||
| #ifndef __layerutil_h__ | |||
| #define __layerutil_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1993, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| /* Based on XLayerUtil.h: Revision: 1.3 */ | |||
| #ifdef __VMS | |||
| #include <GL/vms_x_fix.h> | |||
| #endif | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xutil.h> | |||
| #include <X11/Xmd.h> | |||
| #endif /* !_WIN32 */ | |||
| /* Transparent type values */ | |||
| /* None 0 */ | |||
| #define TransparentPixel 1 | |||
| #define TransparentMask 2 | |||
| /* layered visual info template flags */ | |||
| #define VisualLayerMask 0x200 | |||
| #define VisualTransparentType 0x400 | |||
| #define VisualTransparentValue 0x800 | |||
| #define VisualAllLayerMask 0xFFF | |||
| /* layered visual info structure */ | |||
| typedef struct _XLayerVisualInfo { | |||
| XVisualInfo vinfo; | |||
| long layer; | |||
| long type; | |||
| unsigned long value; | |||
| } XLayerVisualInfo; | |||
| /* SERVER_OVERLAY_VISUALS property element */ | |||
| typedef struct _OverlayInfo { | |||
| /* Avoid 64-bit portability problems by being careful to use | |||
| longs due to the way XGetWindowProperty is specified. Note | |||
| that these parameters are passed as CARD32s over X | |||
| protocol. */ | |||
| long overlay_visual; | |||
| long transparent_type; | |||
| long value; | |||
| long layer; | |||
| } OverlayInfo; | |||
| extern int __glutGetTransparentPixel(Display *, XVisualInfo *); | |||
| extern XLayerVisualInfo *__glutXGetLayerVisualInfo(Display *, | |||
| long, XLayerVisualInfo *, int *); | |||
| extern Status __glutXMatchLayerVisualInfo(Display *, | |||
| int, int, int, int, XLayerVisualInfo *); | |||
| #endif /* __layerutil_h__ */ | |||
| #ifndef __layerutil_h__ | |||
| #define __layerutil_h__ | |||
| /* Copyright (c) Mark J. Kilgard, 1993, 1994. */ | |||
| /* This program is freely distributable without licensing fees | |||
| and is provided without guarantee or warrantee expressed or | |||
| implied. This program is -not- in the public domain. */ | |||
| /* Based on XLayerUtil.h: Revision: 1.3 */ | |||
| #ifdef __VMS | |||
| #include <GL/vms_x_fix.h> | |||
| #endif | |||
| #if !defined(_WIN32) && !defined(__OS2__) | |||
| #include <X11/Xlib.h> | |||
| #include <X11/Xutil.h> | |||
| #include <X11/Xmd.h> | |||
| #endif /* !_WIN32 */ | |||
| /* Transparent type values */ | |||
| /* None 0 */ | |||
| #define TransparentPixel 1 | |||
| #define TransparentMask 2 | |||
| /* layered visual info template flags */ | |||
| #define VisualLayerMask 0x200 | |||
| #define VisualTransparentType 0x400 | |||
| #define VisualTransparentValue 0x800 | |||
| #define VisualAllLayerMask 0xFFF | |||
| /* layered visual info structure */ | |||
| typedef struct _XLayerVisualInfo { | |||
| XVisualInfo vinfo; | |||
| long layer; | |||
| long type; | |||
| unsigned long value; | |||
| } XLayerVisualInfo; | |||
| /* SERVER_OVERLAY_VISUALS property element */ | |||
| typedef struct _OverlayInfo { | |||
| /* Avoid 64-bit portability problems by being careful to use | |||
| longs due to the way XGetWindowProperty is specified. Note | |||
| that these parameters are passed as CARD32s over X | |||
| protocol. */ | |||
| long overlay_visual; | |||
| long transparent_type; | |||
| long value; | |||
| long layer; | |||
| } OverlayInfo; | |||
| extern int __glutGetTransparentPixel(Display *, XVisualInfo *); | |||
| extern XLayerVisualInfo *__glutXGetLayerVisualInfo(Display *, | |||
| long, XLayerVisualInfo *, int *); | |||
| extern Status __glutXMatchLayerVisualInfo(Display *, | |||
| int, int, int, int, XLayerVisualInfo *); | |||
| #endif /* __layerutil_h__ */ | |||
| @@ -1,94 +1,94 @@ | |||
| ;----------------------------------------------------- | |||
| ; def Module definition file for the DLL | |||
| ;----------------------------------------------------- | |||
| LIBRARY libGlut INITINSTANCE TERMINSTANCE | |||
| PROTMODE | |||
| DATA MULTIPLE NONSHARED READWRITE LOADONCALL | |||
| CODE LOADONCALL | |||
| EXPORTS ; Names of exported functions and data | |||
| ;********************************* | |||
| ;MesaGLUT | |||
| glutCommandFunc @3001 | |||
| glutCreateWindow @3002 | |||
| glutCreateSubWindow @3003 | |||
| glutDestroyWindow @3004 | |||
| glutDisplayFunc @3005 | |||
| glutEntryFunc @3006 | |||
| glutExtensionSupported @3007 | |||
| glutIdleFunc @3008 | |||
| glutInit @3009 | |||
| glutInitDisplayMode @3010 | |||
| glutInitWindowPosition @3011 | |||
| glutInitWindowSize @3012 | |||
| glutMainLoop @3013 | |||
| glutGet @3014 | |||
| glutGetColor @3015 | |||
| glutGetWindow @3016 | |||
| glutKeyboardFunc @3017 | |||
| glutMouseFunc @3018 | |||
| glutSpecialFunc @3019 | |||
| glutStrokeCharacter @3020 | |||
| glutSetColor @3021 | |||
| glutSetIconTitle @3022 | |||
| glutSetWindow @3023 | |||
| glutSetWindowTitle @3024 | |||
| glutReshapeFunc @3025 | |||
| glutReshapeWindow @3026 | |||
| glutSwapBuffers @3027 | |||
| glutPostRedisplay @3028 | |||
| glutPositionWindow @3029 | |||
| glutVisibilityFunc @3030 | |||
| glutTimerFunc @3031 | |||
| glutMotionFunc @3032 | |||
| glutCreateMenu @3033 | |||
| glutAttachMenu @3034 | |||
| glutDestroyMenu @3035 | |||
| glutAddMenuEntry @3036 | |||
| glutPassiveMotionFunc @3037 | |||
| glutSolidCone @3038 | |||
| glutSolidCube @3039 | |||
| glutSolidDodecahedron @3040 | |||
| glutSolidOctahedron @3041 | |||
| glutSolidIcosahedron @3042 | |||
| glutSolidSphere @3043 | |||
| glutSolidTeapot @3044 | |||
| glutSolidTetrahedron @3045 | |||
| glutSolidTorus @3046 | |||
| glutWireCone @3047 | |||
| glutWireCube @3048 | |||
| glutWireDodecahedron @3049 | |||
| glutWireIcosahedron @3050 | |||
| glutWireOctahedron @3051 | |||
| glutWireSphere @3052 | |||
| glutWireTetrahedron @3053 | |||
| glutWireTorus @3054 | |||
| glutWireTeapot @3055 | |||
| ;GL_GLEXT_PROTOTYPES | |||
| glutBitmapCharacter @3101 | |||
| glutBitmap9By15 @3102 | |||
| glutBitmapHelvetica10 @3103 | |||
| glutBitmapHelvetica12 @3104 | |||
| glutBitmapHelvetica18 @3105 | |||
| glutBitmapTimesRoman24 @3106 | |||
| glutStrokeRoman @3107 | |||
| glutBitmap8By13 @3108 | |||
| ;Global constants | |||
| ; hab @12001 | |||
| ; /* PM anchor block handle */ | |||
| ; hpsCurrent @12002 | |||
| XHDC @12004 | |||
| XHWND @12005 | |||
| ;----------------------------------------------------- | |||
| ; def Module definition file for the DLL | |||
| ;----------------------------------------------------- | |||
| LIBRARY libGlut INITINSTANCE TERMINSTANCE | |||
| PROTMODE | |||
| DATA MULTIPLE NONSHARED READWRITE LOADONCALL | |||
| CODE LOADONCALL | |||
| EXPORTS ; Names of exported functions and data | |||
| ;********************************* | |||
| ;MesaGLUT | |||
| glutCommandFunc @3001 | |||
| glutCreateWindow @3002 | |||
| glutCreateSubWindow @3003 | |||
| glutDestroyWindow @3004 | |||
| glutDisplayFunc @3005 | |||
| glutEntryFunc @3006 | |||
| glutExtensionSupported @3007 | |||
| glutIdleFunc @3008 | |||
| glutInit @3009 | |||
| glutInitDisplayMode @3010 | |||
| glutInitWindowPosition @3011 | |||
| glutInitWindowSize @3012 | |||
| glutMainLoop @3013 | |||
| glutGet @3014 | |||
| glutGetColor @3015 | |||
| glutGetWindow @3016 | |||
| glutKeyboardFunc @3017 | |||
| glutMouseFunc @3018 | |||
| glutSpecialFunc @3019 | |||
| glutStrokeCharacter @3020 | |||
| glutSetColor @3021 | |||
| glutSetIconTitle @3022 | |||
| glutSetWindow @3023 | |||
| glutSetWindowTitle @3024 | |||
| glutReshapeFunc @3025 | |||
| glutReshapeWindow @3026 | |||
| glutSwapBuffers @3027 | |||
| glutPostRedisplay @3028 | |||
| glutPositionWindow @3029 | |||
| glutVisibilityFunc @3030 | |||
| glutTimerFunc @3031 | |||
| glutMotionFunc @3032 | |||
| glutCreateMenu @3033 | |||
| glutAttachMenu @3034 | |||
| glutDestroyMenu @3035 | |||
| glutAddMenuEntry @3036 | |||
| glutPassiveMotionFunc @3037 | |||
| glutSolidCone @3038 | |||
| glutSolidCube @3039 | |||
| glutSolidDodecahedron @3040 | |||
| glutSolidOctahedron @3041 | |||
| glutSolidIcosahedron @3042 | |||
| glutSolidSphere @3043 | |||
| glutSolidTeapot @3044 | |||
| glutSolidTetrahedron @3045 | |||
| glutSolidTorus @3046 | |||
| glutWireCone @3047 | |||
| glutWireCube @3048 | |||
| glutWireDodecahedron @3049 | |||
| glutWireIcosahedron @3050 | |||
| glutWireOctahedron @3051 | |||
| glutWireSphere @3052 | |||
| glutWireTetrahedron @3053 | |||
| glutWireTorus @3054 | |||
| glutWireTeapot @3055 | |||
| ;GL_GLEXT_PROTOTYPES | |||
| glutBitmapCharacter @3101 | |||
| glutBitmap9By15 @3102 | |||
| glutBitmapHelvetica10 @3103 | |||
| glutBitmapHelvetica12 @3104 | |||
| glutBitmapHelvetica18 @3105 | |||
| glutBitmapTimesRoman24 @3106 | |||
| glutStrokeRoman @3107 | |||
| glutBitmap8By13 @3108 | |||
| ;Global constants | |||
| ; hab @12001 | |||
| ; /* PM anchor block handle */ | |||
| ; hpsCurrent @12002 | |||
| XHDC @12004 | |||
| XHWND @12005 | |||
| @@ -1,414 +1,414 @@ | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <allegro.h> | |||
| #include "buffers.h" | |||
| #include "context.h" | |||
| #include "imports.h" | |||
| #include "matrix.h" | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| #include <stdio.h> | |||
| #include <stdlib.h> | |||
| #include <allegro.h> | |||
| #include "buffers.h" | |||
| #include "context.h" | |||
| #include "imports.h" | |||
| #include "matrix.h" | |||
| #include "mtypes.h" | |||
| #include "GL/amesa.h" | |||
| struct amesa_visual | |||
| { | |||
| GLvisual *GLVisual; /* inherit from GLvisual */ | |||
| GLboolean DBFlag; /* double buffered? */ | |||
| GLuint Depth; /* bits per pixel ( >= 15 ) */ | |||
| }; | |||
| struct amesa_buffer | |||
| { | |||
| GLframebuffer *GLBuffer; /* inherit from GLframebuffer */ | |||
| GLuint Width, Height; | |||
| BITMAP *Screen; | |||
| BITMAP *Background; | |||
| BITMAP *Active; | |||
| }; | |||
| struct amesa_context | |||
| { | |||
| GLcontext *GLContext; /* inherit from GLcontext */ | |||
| AMesaVisual Visual; | |||
| AMesaBuffer Buffer; | |||
| GLuint ClearColor; | |||
| GLuint CurrentColor; | |||
| }; | |||
| static void setup_dd_pointers(GLcontext *ctx); | |||
| /**********************************************************************/ | |||
| /***** drawing functions *****/ | |||
| /**********************************************************************/ | |||
| #define FLIP(context, y) (context->Buffer->Height - (y) - 1) | |||
| #include "allegro/generic.h" | |||
| #include "allegro/direct.h" | |||
| /**********************************************************************/ | |||
| /***** 15-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_RGB_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_READ_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(15, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(15, unsigned short) | |||
| IMPLEMENT_READ_RGBA_PIXELS(15, unsigned short) | |||
| /**********************************************************************/ | |||
| /***** 16-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_RGB_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_READ_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(16, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(16, unsigned short) | |||
| IMPLEMENT_READ_RGBA_PIXELS(16, unsigned short) | |||
| /**********************************************************************/ | |||
| /***** 32-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_RGB_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_READ_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(32, unsigned long) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(32, unsigned long) | |||
| IMPLEMENT_READ_RGBA_PIXELS(32, unsigned long) | |||
| /**********************************************************************/ | |||
| /***** Miscellaneous device driver funcs *****/ | |||
| /**********************************************************************/ | |||
| static GLboolean set_buffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bit) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| GLboolean ok = GL_TRUE; | |||
| if (bit == DD_FRONT_LEFT_BIT) | |||
| context->Buffer->Active = context->Buffer->Screen; | |||
| else if (bit == DD_BACK_LEFT) | |||
| { | |||
| if (context->Buffer->Background) | |||
| context->Buffer->Active = context->Buffer->Background; | |||
| else | |||
| ok = GL_FALSE; | |||
| } | |||
| else | |||
| ok = GL_FALSE; | |||
| return ok; | |||
| } | |||
| static void get_buffer_size(GLcontext *ctx, GLuint *width, GLuint *height) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| *width = context->Buffer->Width; | |||
| *height = context->Buffer->Height; | |||
| } | |||
| /** | |||
| * We only implement this function as a mechanism to check if the | |||
| * framebuffer size has changed (and update corresponding state). | |||
| */ | |||
| static void viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) | |||
| { | |||
| /* poll for window size change and realloc software Z/stencil/etc if needed */ | |||
| GLuint newWidth, newHeight; | |||
| GLframebuffer *buffer = ctx->WinSysDrawBuffer; | |||
| get_buffer_size( &newWidth, &newHeight ); | |||
| if (buffer->Width != newWidth || buffer->Height != newHeight) { | |||
| _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight ); | |||
| } | |||
| } | |||
| /**********************************************************************/ | |||
| /**********************************************************************/ | |||
| static void setup_dd_pointers(GLcontext *ctx) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| /* Initialize all the pointers in the driver struct. Do this whenever */ | |||
| /* a new context is made current or we change buffers via set_buffer! */ | |||
| ctx->Driver.UpdateState = setup_dd_pointers; | |||
| ctx->Driver.SetBuffer = set_buffer; | |||
| ctx->Driver.GetBufferSize = get_buffer_size; | |||
| ctx->Driver.Viewport = viewport; | |||
| ctx->Driver.Color = set_color_generic; | |||
| ctx->Driver.ClearColor = clear_color_generic; | |||
| ctx->Driver.Clear = clear_generic; | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_generic; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_generic; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_generic; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_generic; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_generic; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_generic; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_generic; | |||
| if (context->Buffer->Active != screen) | |||
| { | |||
| switch (context->Visual->Depth) | |||
| { | |||
| case 15: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_15; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_15; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_15; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_15; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_15; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_15; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_15; | |||
| break; | |||
| case 16: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_16; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_16; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_16; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_16; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_16; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_16; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_16; | |||
| break; | |||
| case 32: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_32; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_32; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_32; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_32; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_32; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_32; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_32; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| /**********************************************************************/ | |||
| /***** AMesa Public API Functions *****/ | |||
| /**********************************************************************/ | |||
| AMesaVisual AMesaCreateVisual(GLboolean dbFlag, GLint depth, | |||
| GLint depthSize, GLint stencilSize, GLint accumSize) | |||
| { | |||
| AMesaVisual visual; | |||
| GLbyte redBits, greenBits, blueBits; | |||
| visual = (AMesaVisual)calloc(1, sizeof(struct amesa_visual)); | |||
| if (!visual) | |||
| return NULL; | |||
| switch (depth) | |||
| { | |||
| case 15: | |||
| redBits = 5; | |||
| greenBits = 5; | |||
| blueBits = 5; | |||
| break; | |||
| case 16: | |||
| redBits = 5; | |||
| greenBits = 6; | |||
| blueBits = 5; | |||
| break; | |||
| case 24: case 32: | |||
| redBits = 8; | |||
| greenBits = 8; | |||
| blueBits = 8; | |||
| break; | |||
| default: | |||
| free(visual); | |||
| return NULL; | |||
| } | |||
| visual->DBFlag = dbFlag; | |||
| visual->Depth = depth; | |||
| visual->GLVisual = _mesa_create_visual(GL_TRUE, /* rgb mode */ | |||
| dbFlag, /* db_flag */ | |||
| GL_FALSE, /* stereo */ | |||
| redBits, greenBits, blueBits, 8, | |||
| 0, /* index bits */ | |||
| depthSize, /* depth bits */ | |||
| stencilSize,/* stencil bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| 1 ); | |||
| if (!visual->GLVisual) | |||
| { | |||
| free(visual); | |||
| return NULL; | |||
| } | |||
| return visual; | |||
| } | |||
| void AMesaDestroyVisual(AMesaVisual visual) | |||
| { | |||
| _mesa_destroy_visual(visual->GLVisual); | |||
| free(visual); | |||
| } | |||
| AMesaBuffer AMesaCreateBuffer(AMesaVisual visual, | |||
| GLint width, GLint height) | |||
| { | |||
| AMesaBuffer buffer; | |||
| buffer = (AMesaBuffer)calloc(1, sizeof(struct amesa_buffer)); | |||
| if (!buffer) | |||
| return NULL; | |||
| buffer->Screen = NULL; | |||
| buffer->Background = NULL; | |||
| buffer->Active = NULL; | |||
| buffer->Width = width; | |||
| buffer->Height = height; | |||
| if (visual->DBFlag) | |||
| { | |||
| buffer->Background = create_bitmap_ex(visual->Depth, width, height); | |||
| if (!buffer->Background) | |||
| { | |||
| free(buffer); | |||
| return NULL; | |||
| } | |||
| } | |||
| buffer->GLBuffer = _mesa_create_framebuffer(visual->GLVisual); | |||
| if (!buffer->GLBuffer) | |||
| { | |||
| if (buffer->Background) destroy_bitmap(buffer->Background); | |||
| free(buffer); | |||
| return NULL; | |||
| } | |||
| return buffer; | |||
| } | |||
| void AMesaDestroyBuffer(AMesaBuffer buffer) | |||
| { | |||
| if (buffer->Screen) destroy_bitmap(buffer->Screen); | |||
| if (buffer->Background) destroy_bitmap(buffer->Background); | |||
| _mesa_unreference_framebuffer(&buffer->GLBuffer); | |||
| free(buffer); | |||
| } | |||
| AMesaContext AMesaCreateContext(AMesaVisual visual, | |||
| AMesaContext share) | |||
| { | |||
| AMesaContext context; | |||
| GLboolean direct = GL_FALSE; | |||
| context = (AMesaContext)calloc(1, sizeof(struct amesa_context)); | |||
| if (!context) | |||
| return NULL; | |||
| context->Visual = visual; | |||
| context->Buffer = NULL; | |||
| context->ClearColor = 0; | |||
| context->CurrentColor = 0; | |||
| context->GLContext = _mesa_create_context(visual->GLVisual, | |||
| share ? share->GLContext : NULL, | |||
| (void *) context, GL_FALSE ); | |||
| if (!context->GLContext) | |||
| { | |||
| free(context); | |||
| return NULL; | |||
| } | |||
| return context; | |||
| } | |||
| void AMesaDestroyContext(AMesaContext context) | |||
| { | |||
| _mesa_destroy_context(context->GLContext); | |||
| free(context); | |||
| } | |||
| GLboolean AMesaMakeCurrent(AMesaContext context, AMesaBuffer buffer) | |||
| { | |||
| if (context && buffer) { | |||
| set_color_depth(context->Visual->Depth); | |||
| if (set_gfx_mode(GFX_AUTODETECT, buffer->Width, buffer->Height, 0, 0) != 0) | |||
| return GL_FALSE; | |||
| context->Buffer = buffer; | |||
| buffer->Screen = screen; | |||
| buffer->Active = buffer->Background ? buffer->Background : screen; | |||
| setup_dd_pointers(context->GLContext); | |||
| _mesa_make_current(context->GLContext, buffer->GLBuffer); | |||
| } | |||
| else { | |||
| #include "GL/amesa.h" | |||
| struct amesa_visual | |||
| { | |||
| GLvisual *GLVisual; /* inherit from GLvisual */ | |||
| GLboolean DBFlag; /* double buffered? */ | |||
| GLuint Depth; /* bits per pixel ( >= 15 ) */ | |||
| }; | |||
| struct amesa_buffer | |||
| { | |||
| GLframebuffer *GLBuffer; /* inherit from GLframebuffer */ | |||
| GLuint Width, Height; | |||
| BITMAP *Screen; | |||
| BITMAP *Background; | |||
| BITMAP *Active; | |||
| }; | |||
| struct amesa_context | |||
| { | |||
| GLcontext *GLContext; /* inherit from GLcontext */ | |||
| AMesaVisual Visual; | |||
| AMesaBuffer Buffer; | |||
| GLuint ClearColor; | |||
| GLuint CurrentColor; | |||
| }; | |||
| static void setup_dd_pointers(GLcontext *ctx); | |||
| /**********************************************************************/ | |||
| /***** drawing functions *****/ | |||
| /**********************************************************************/ | |||
| #define FLIP(context, y) (context->Buffer->Height - (y) - 1) | |||
| #include "allegro/generic.h" | |||
| #include "allegro/direct.h" | |||
| /**********************************************************************/ | |||
| /***** 15-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_RGB_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_READ_RGBA_SPAN(15, unsigned short) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(15, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(15, unsigned short) | |||
| IMPLEMENT_READ_RGBA_PIXELS(15, unsigned short) | |||
| /**********************************************************************/ | |||
| /***** 16-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_RGB_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_READ_RGBA_SPAN(16, unsigned short) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(16, unsigned short) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(16, unsigned short) | |||
| IMPLEMENT_READ_RGBA_PIXELS(16, unsigned short) | |||
| /**********************************************************************/ | |||
| /***** 32-bit accelerated drawing funcs *****/ | |||
| /**********************************************************************/ | |||
| IMPLEMENT_WRITE_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_RGB_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_MONO_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_READ_RGBA_SPAN(32, unsigned long) | |||
| IMPLEMENT_WRITE_RGBA_PIXELS(32, unsigned long) | |||
| IMPLEMENT_WRITE_MONO_RGBA_PIXELS(32, unsigned long) | |||
| IMPLEMENT_READ_RGBA_PIXELS(32, unsigned long) | |||
| /**********************************************************************/ | |||
| /***** Miscellaneous device driver funcs *****/ | |||
| /**********************************************************************/ | |||
| static GLboolean set_buffer(GLcontext *ctx, GLframebuffer *buffer, GLuint bit) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| GLboolean ok = GL_TRUE; | |||
| if (bit == DD_FRONT_LEFT_BIT) | |||
| context->Buffer->Active = context->Buffer->Screen; | |||
| else if (bit == DD_BACK_LEFT) | |||
| { | |||
| if (context->Buffer->Background) | |||
| context->Buffer->Active = context->Buffer->Background; | |||
| else | |||
| ok = GL_FALSE; | |||
| } | |||
| else | |||
| ok = GL_FALSE; | |||
| return ok; | |||
| } | |||
| static void get_buffer_size(GLcontext *ctx, GLuint *width, GLuint *height) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| *width = context->Buffer->Width; | |||
| *height = context->Buffer->Height; | |||
| } | |||
| /** | |||
| * We only implement this function as a mechanism to check if the | |||
| * framebuffer size has changed (and update corresponding state). | |||
| */ | |||
| static void viewport(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h) | |||
| { | |||
| /* poll for window size change and realloc software Z/stencil/etc if needed */ | |||
| GLuint newWidth, newHeight; | |||
| GLframebuffer *buffer = ctx->WinSysDrawBuffer; | |||
| get_buffer_size( &newWidth, &newHeight ); | |||
| if (buffer->Width != newWidth || buffer->Height != newHeight) { | |||
| _mesa_resize_framebuffer(ctx, buffer, newWidth, newHeight ); | |||
| } | |||
| } | |||
| /**********************************************************************/ | |||
| /**********************************************************************/ | |||
| static void setup_dd_pointers(GLcontext *ctx) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| /* Initialize all the pointers in the driver struct. Do this whenever */ | |||
| /* a new context is made current or we change buffers via set_buffer! */ | |||
| ctx->Driver.UpdateState = setup_dd_pointers; | |||
| ctx->Driver.SetBuffer = set_buffer; | |||
| ctx->Driver.GetBufferSize = get_buffer_size; | |||
| ctx->Driver.Viewport = viewport; | |||
| ctx->Driver.Color = set_color_generic; | |||
| ctx->Driver.ClearColor = clear_color_generic; | |||
| ctx->Driver.Clear = clear_generic; | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_generic; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_generic; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_generic; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_generic; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_generic; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_generic; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_generic; | |||
| if (context->Buffer->Active != screen) | |||
| { | |||
| switch (context->Visual->Depth) | |||
| { | |||
| case 15: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_15; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_15; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_15; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_15; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_15; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_15; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_15; | |||
| break; | |||
| case 16: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_16; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_16; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_16; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_16; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_16; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_16; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_16; | |||
| break; | |||
| case 32: | |||
| ctx->Driver.WriteRGBASpan = write_rgba_span_32; | |||
| ctx->Driver.WriteRGBSpan = write_rgb_span_32; | |||
| ctx->Driver.WriteMonoRGBASpan = write_mono_rgba_span_32; | |||
| ctx->Driver.WriteRGBAPixels = write_rgba_pixels_32; | |||
| ctx->Driver.WriteMonoRGBAPixels = write_mono_rgba_pixels_32; | |||
| ctx->Driver.ReadRGBASpan = read_rgba_span_32; | |||
| ctx->Driver.ReadRGBAPixels = read_rgba_pixels_32; | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| /**********************************************************************/ | |||
| /***** AMesa Public API Functions *****/ | |||
| /**********************************************************************/ | |||
| AMesaVisual AMesaCreateVisual(GLboolean dbFlag, GLint depth, | |||
| GLint depthSize, GLint stencilSize, GLint accumSize) | |||
| { | |||
| AMesaVisual visual; | |||
| GLbyte redBits, greenBits, blueBits; | |||
| visual = (AMesaVisual)calloc(1, sizeof(struct amesa_visual)); | |||
| if (!visual) | |||
| return NULL; | |||
| switch (depth) | |||
| { | |||
| case 15: | |||
| redBits = 5; | |||
| greenBits = 5; | |||
| blueBits = 5; | |||
| break; | |||
| case 16: | |||
| redBits = 5; | |||
| greenBits = 6; | |||
| blueBits = 5; | |||
| break; | |||
| case 24: case 32: | |||
| redBits = 8; | |||
| greenBits = 8; | |||
| blueBits = 8; | |||
| break; | |||
| default: | |||
| free(visual); | |||
| return NULL; | |||
| } | |||
| visual->DBFlag = dbFlag; | |||
| visual->Depth = depth; | |||
| visual->GLVisual = _mesa_create_visual(GL_TRUE, /* rgb mode */ | |||
| dbFlag, /* db_flag */ | |||
| GL_FALSE, /* stereo */ | |||
| redBits, greenBits, blueBits, 8, | |||
| 0, /* index bits */ | |||
| depthSize, /* depth bits */ | |||
| stencilSize,/* stencil bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| accumSize, /* accum bits */ | |||
| 1 ); | |||
| if (!visual->GLVisual) | |||
| { | |||
| free(visual); | |||
| return NULL; | |||
| } | |||
| return visual; | |||
| } | |||
| void AMesaDestroyVisual(AMesaVisual visual) | |||
| { | |||
| _mesa_destroy_visual(visual->GLVisual); | |||
| free(visual); | |||
| } | |||
| AMesaBuffer AMesaCreateBuffer(AMesaVisual visual, | |||
| GLint width, GLint height) | |||
| { | |||
| AMesaBuffer buffer; | |||
| buffer = (AMesaBuffer)calloc(1, sizeof(struct amesa_buffer)); | |||
| if (!buffer) | |||
| return NULL; | |||
| buffer->Screen = NULL; | |||
| buffer->Background = NULL; | |||
| buffer->Active = NULL; | |||
| buffer->Width = width; | |||
| buffer->Height = height; | |||
| if (visual->DBFlag) | |||
| { | |||
| buffer->Background = create_bitmap_ex(visual->Depth, width, height); | |||
| if (!buffer->Background) | |||
| { | |||
| free(buffer); | |||
| return NULL; | |||
| } | |||
| } | |||
| buffer->GLBuffer = _mesa_create_framebuffer(visual->GLVisual); | |||
| if (!buffer->GLBuffer) | |||
| { | |||
| if (buffer->Background) destroy_bitmap(buffer->Background); | |||
| free(buffer); | |||
| return NULL; | |||
| } | |||
| return buffer; | |||
| } | |||
| void AMesaDestroyBuffer(AMesaBuffer buffer) | |||
| { | |||
| if (buffer->Screen) destroy_bitmap(buffer->Screen); | |||
| if (buffer->Background) destroy_bitmap(buffer->Background); | |||
| _mesa_unreference_framebuffer(&buffer->GLBuffer); | |||
| free(buffer); | |||
| } | |||
| AMesaContext AMesaCreateContext(AMesaVisual visual, | |||
| AMesaContext share) | |||
| { | |||
| AMesaContext context; | |||
| GLboolean direct = GL_FALSE; | |||
| context = (AMesaContext)calloc(1, sizeof(struct amesa_context)); | |||
| if (!context) | |||
| return NULL; | |||
| context->Visual = visual; | |||
| context->Buffer = NULL; | |||
| context->ClearColor = 0; | |||
| context->CurrentColor = 0; | |||
| context->GLContext = _mesa_create_context(visual->GLVisual, | |||
| share ? share->GLContext : NULL, | |||
| (void *) context, GL_FALSE ); | |||
| if (!context->GLContext) | |||
| { | |||
| free(context); | |||
| return NULL; | |||
| } | |||
| return context; | |||
| } | |||
| void AMesaDestroyContext(AMesaContext context) | |||
| { | |||
| _mesa_destroy_context(context->GLContext); | |||
| free(context); | |||
| } | |||
| GLboolean AMesaMakeCurrent(AMesaContext context, AMesaBuffer buffer) | |||
| { | |||
| if (context && buffer) { | |||
| set_color_depth(context->Visual->Depth); | |||
| if (set_gfx_mode(GFX_AUTODETECT, buffer->Width, buffer->Height, 0, 0) != 0) | |||
| return GL_FALSE; | |||
| context->Buffer = buffer; | |||
| buffer->Screen = screen; | |||
| buffer->Active = buffer->Background ? buffer->Background : screen; | |||
| setup_dd_pointers(context->GLContext); | |||
| _mesa_make_current(context->GLContext, buffer->GLBuffer); | |||
| } | |||
| else { | |||
| /* XXX I don't think you want to destroy anything here! */ | |||
| destroy_bitmap(context->Buffer->Screen); | |||
| context->Buffer->Screen = NULL; | |||
| context->Buffer->Active = NULL; | |||
| context->Buffer = NULL; | |||
| _mesa_make_current(NULL, NULL); | |||
| } | |||
| return GL_TRUE; | |||
| } | |||
| void AMesaSwapBuffers(AMesaBuffer buffer) | |||
| { | |||
| if (buffer->Background) { | |||
| blit(buffer->Background, buffer->Screen, | |||
| 0, 0, 0, 0, | |||
| buffer->Width, buffer->Height); | |||
| } | |||
| } | |||
| destroy_bitmap(context->Buffer->Screen); | |||
| context->Buffer->Screen = NULL; | |||
| context->Buffer->Active = NULL; | |||
| context->Buffer = NULL; | |||
| _mesa_make_current(NULL, NULL); | |||
| } | |||
| return GL_TRUE; | |||
| } | |||
| void AMesaSwapBuffers(AMesaBuffer buffer) | |||
| { | |||
| if (buffer->Background) { | |||
| blit(buffer->Background, buffer->Screen, | |||
| 0, 0, 0, 0, | |||
| buffer->Width, buffer->Height); | |||
| } | |||
| } | |||
| @@ -1,189 +1,189 @@ | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| #define DESTINATION(BMP, X, Y, TYPE) \ | |||
| ({ \ | |||
| BITMAP *_bmp = BMP; \ | |||
| \ | |||
| (TYPE*)(_bmp->line[_bmp->h - (Y) - 1]) + (X); \ | |||
| }) | |||
| #define IMPLEMENT_WRITE_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void write_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| if (mask) \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| d++; rgba++; mask++; \ | |||
| } \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| d++; rgba++; \ | |||
| } \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_RGB_SPAN(DEPTH, TYPE) \ | |||
| static void write_rgb_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte rgb[][3], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| if (mask) \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]); \ | |||
| d++; rgb++; mask++; \ | |||
| } \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]); \ | |||
| d++; rgb++; \ | |||
| } \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_MONO_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void write_mono_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE color = context->CurrentColor; \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = color; \ | |||
| d++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_READ_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void read_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| GLubyte rgba[][4]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| TYPE *d = DESTINATION(bmp, x, y, TYPE); \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| rgba[0][RCOMP] = getr##DEPTH(d[0]); \ | |||
| rgba[0][GCOMP] = getg##DEPTH(d[0]); \ | |||
| rgba[0][BCOMP] = getb##DEPTH(d[0]); \ | |||
| rgba[0][ACOMP] = 255; \ | |||
| \ | |||
| d++; rgba++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void write_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| const GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| rgba++; x++; y++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_MONO_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void write_mono_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE color = context->CurrentColor; \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = color; \ | |||
| x++; y++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_READ_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void read_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) \ | |||
| { \ | |||
| int color = *DESTINATION(bmp, x[0], y[0], TYPE); \ | |||
| \ | |||
| rgba[0][RCOMP] = getr##DEPTH(color); \ | |||
| rgba[0][GCOMP] = getg##DEPTH(color); \ | |||
| rgba[0][BCOMP] = getb##DEPTH(color); \ | |||
| rgba[0][ACOMP] = 255; \ | |||
| } \ | |||
| \ | |||
| x++; y++; rgba++; mask++; \ | |||
| } \ | |||
| } | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| #define DESTINATION(BMP, X, Y, TYPE) \ | |||
| ({ \ | |||
| BITMAP *_bmp = BMP; \ | |||
| \ | |||
| (TYPE*)(_bmp->line[_bmp->h - (Y) - 1]) + (X); \ | |||
| }) | |||
| #define IMPLEMENT_WRITE_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void write_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| if (mask) \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| d++; rgba++; mask++; \ | |||
| } \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| d[0] = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| d++; rgba++; \ | |||
| } \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_RGB_SPAN(DEPTH, TYPE) \ | |||
| static void write_rgb_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte rgb[][3], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| if (mask) \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]); \ | |||
| d++; rgb++; mask++; \ | |||
| } \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| while (n--) \ | |||
| { \ | |||
| d[0] = makecol##DEPTH(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP]); \ | |||
| d++; rgb++; \ | |||
| } \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_MONO_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void write_mono_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE color = context->CurrentColor; \ | |||
| TYPE *d = DESTINATION(context->Buffer->Active, x, y, TYPE); \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) d[0] = color; \ | |||
| d++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_READ_RGBA_SPAN(DEPTH, TYPE) \ | |||
| static void read_rgba_span_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, GLint x, GLint y, \ | |||
| GLubyte rgba[][4]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| TYPE *d = DESTINATION(bmp, x, y, TYPE); \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| rgba[0][RCOMP] = getr##DEPTH(d[0]); \ | |||
| rgba[0][GCOMP] = getg##DEPTH(d[0]); \ | |||
| rgba[0][BCOMP] = getb##DEPTH(d[0]); \ | |||
| rgba[0][ACOMP] = 255; \ | |||
| \ | |||
| d++; rgba++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void write_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| const GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = makecol##DEPTH(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP]); \ | |||
| rgba++; x++; y++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_WRITE_MONO_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void write_mono_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| TYPE color = context->CurrentColor; \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) *DESTINATION(bmp, x[0], y[0], TYPE) = color; \ | |||
| x++; y++; mask++; \ | |||
| } \ | |||
| } | |||
| #define IMPLEMENT_READ_RGBA_PIXELS(DEPTH, TYPE) \ | |||
| static void read_rgba_pixels_##DEPTH (const GLcontext *ctx, \ | |||
| GLuint n, \ | |||
| const GLint x[], \ | |||
| const GLint y[], \ | |||
| GLubyte rgba[][4], \ | |||
| const GLubyte mask[]) \ | |||
| { \ | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); \ | |||
| BITMAP *bmp = context->Buffer->Active; \ | |||
| \ | |||
| while (n--) \ | |||
| { \ | |||
| if (mask[0]) \ | |||
| { \ | |||
| int color = *DESTINATION(bmp, x[0], y[0], TYPE); \ | |||
| \ | |||
| rgba[0][RCOMP] = getr##DEPTH(color); \ | |||
| rgba[0][GCOMP] = getg##DEPTH(color); \ | |||
| rgba[0][BCOMP] = getb##DEPTH(color); \ | |||
| rgba[0][ACOMP] = 255; \ | |||
| } \ | |||
| \ | |||
| x++; y++; rgba++; mask++; \ | |||
| } \ | |||
| } | |||
| @@ -1,234 +1,234 @@ | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| static void clear_color_generic(GLcontext *ctx, const GLfloat color[4]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| GLubyte r, g, b; | |||
| CLAMPED_FLOAT_TO_UBYTE(r, color[0]); | |||
| CLAMPED_FLOAT_TO_UBYTE(g, color[1]); | |||
| CLAMPED_FLOAT_TO_UBYTE(b, color[2]); | |||
| context->ClearColor = makecol(r, g, b); | |||
| } | |||
| static void set_color_generic(GLcontext *ctx, | |||
| GLubyte red, GLubyte green, | |||
| GLubyte blue, GLubyte alpha) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| context->CurrentColor = makecol(red, green, blue); | |||
| } | |||
| static GLbitfield clear_generic(GLcontext *ctx, | |||
| GLbitfield mask, GLboolean all, | |||
| GLint x, GLint y, | |||
| GLint width, GLint height) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| if (mask & GL_COLOR_BUFFER_BIT) | |||
| { | |||
| if (all) | |||
| clear_to_color(context->Buffer->Active, context->ClearColor); | |||
| else | |||
| rect(context->Buffer->Active, | |||
| x, y, x+width-1, y+height-1, | |||
| context->ClearColor); | |||
| } | |||
| return mask & (~GL_COLOR_BUFFER_BIT); | |||
| } | |||
| static void write_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; mask++; rgba++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while (n--) | |||
| { | |||
| putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; rgba++; | |||
| } | |||
| } | |||
| } | |||
| static void write_rgb_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte rgb[][3], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while(n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP])); | |||
| x++; mask++; rgb++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while (n--) | |||
| { | |||
| putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP])); | |||
| x++; rgb++; | |||
| } | |||
| } | |||
| } | |||
| static void write_mono_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| int color = context->CurrentColor; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while(n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, color); | |||
| x++; mask++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while(n--) | |||
| { | |||
| putpixel(bmp, x, y, color); | |||
| x++; | |||
| } | |||
| } | |||
| } | |||
| static void read_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| GLubyte rgba[][4]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| while (n--) | |||
| { | |||
| int color = getpixel(bmp, x, y); | |||
| rgba[0][RCOMP] = getr(color); | |||
| rgba[0][GCOMP] = getg(color); | |||
| rgba[0][BCOMP] = getb(color); | |||
| rgba[0][ACOMP] = 255; | |||
| x++; rgba++; | |||
| } | |||
| } | |||
| static void write_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| const GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; y++; mask++; | |||
| } | |||
| } | |||
| static void write_mono_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| int color = context->CurrentColor; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), color); | |||
| x++; y++; mask++; | |||
| } | |||
| } | |||
| static void read_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) | |||
| { | |||
| int color = getpixel(bmp, x[0], FLIP(context, y[0])); | |||
| rgba[0][RCOMP] = getr(color); | |||
| rgba[0][GCOMP] = getg(color); | |||
| rgba[0][BCOMP] = getb(color); | |||
| rgba[0][ACOMP] = 255; | |||
| } | |||
| x++; y++; mask++; rgba++; | |||
| } | |||
| } | |||
| /* | |||
| * Mesa 3-D graphics library | |||
| * Version: 3.0 | |||
| * Copyright (C) 1995-1998 Brian Paul | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the GNU Library General Public | |||
| * License as published by the Free Software Foundation; either | |||
| * version 2 of the License, or (at your option) any later version. | |||
| * | |||
| * This library is distributed in the hope that it will be useful, | |||
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| * Library General Public License for more details. | |||
| * | |||
| * You should have received a copy of the GNU Library General Public | |||
| * License along with this library; if not, write to the Free | |||
| * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||
| */ | |||
| static void clear_color_generic(GLcontext *ctx, const GLfloat color[4]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| GLubyte r, g, b; | |||
| CLAMPED_FLOAT_TO_UBYTE(r, color[0]); | |||
| CLAMPED_FLOAT_TO_UBYTE(g, color[1]); | |||
| CLAMPED_FLOAT_TO_UBYTE(b, color[2]); | |||
| context->ClearColor = makecol(r, g, b); | |||
| } | |||
| static void set_color_generic(GLcontext *ctx, | |||
| GLubyte red, GLubyte green, | |||
| GLubyte blue, GLubyte alpha) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| context->CurrentColor = makecol(red, green, blue); | |||
| } | |||
| static GLbitfield clear_generic(GLcontext *ctx, | |||
| GLbitfield mask, GLboolean all, | |||
| GLint x, GLint y, | |||
| GLint width, GLint height) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| if (mask & GL_COLOR_BUFFER_BIT) | |||
| { | |||
| if (all) | |||
| clear_to_color(context->Buffer->Active, context->ClearColor); | |||
| else | |||
| rect(context->Buffer->Active, | |||
| x, y, x+width-1, y+height-1, | |||
| context->ClearColor); | |||
| } | |||
| return mask & (~GL_COLOR_BUFFER_BIT); | |||
| } | |||
| static void write_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; mask++; rgba++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while (n--) | |||
| { | |||
| putpixel(bmp, x, y, makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; rgba++; | |||
| } | |||
| } | |||
| } | |||
| static void write_rgb_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte rgb[][3], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while(n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP])); | |||
| x++; mask++; rgb++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while (n--) | |||
| { | |||
| putpixel(bmp, x, y, makecol(rgb[0][RCOMP], rgb[0][GCOMP], rgb[0][BCOMP])); | |||
| x++; rgb++; | |||
| } | |||
| } | |||
| } | |||
| static void write_mono_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| int color = context->CurrentColor; | |||
| y = FLIP(context, y); | |||
| if (mask) | |||
| { | |||
| while(n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x, y, color); | |||
| x++; mask++; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| while(n--) | |||
| { | |||
| putpixel(bmp, x, y, color); | |||
| x++; | |||
| } | |||
| } | |||
| } | |||
| static void read_rgba_span_generic(const GLcontext *ctx, | |||
| GLuint n, GLint x, GLint y, | |||
| GLubyte rgba[][4]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| y = FLIP(context, y); | |||
| while (n--) | |||
| { | |||
| int color = getpixel(bmp, x, y); | |||
| rgba[0][RCOMP] = getr(color); | |||
| rgba[0][GCOMP] = getg(color); | |||
| rgba[0][BCOMP] = getb(color); | |||
| rgba[0][ACOMP] = 255; | |||
| x++; rgba++; | |||
| } | |||
| } | |||
| static void write_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| const GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), makecol(rgba[0][RCOMP], rgba[0][GCOMP], rgba[0][BCOMP])); | |||
| x++; y++; mask++; | |||
| } | |||
| } | |||
| static void write_mono_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| int color = context->CurrentColor; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) putpixel(bmp, x[0], FLIP(context, y[0]), color); | |||
| x++; y++; mask++; | |||
| } | |||
| } | |||
| static void read_rgba_pixels_generic(const GLcontext *ctx, | |||
| GLuint n, | |||
| const GLint x[], | |||
| const GLint y[], | |||
| GLubyte rgba[][4], | |||
| const GLubyte mask[]) | |||
| { | |||
| AMesaContext context = (AMesaContext)(ctx->DriverCtx); | |||
| BITMAP *bmp = context->Buffer->Active; | |||
| while (n--) | |||
| { | |||
| if (mask[0]) | |||
| { | |||
| int color = getpixel(bmp, x[0], FLIP(context, y[0])); | |||
| rgba[0][RCOMP] = getr(color); | |||
| rgba[0][GCOMP] = getg(color); | |||
| rgba[0][BCOMP] = getb(color); | |||
| rgba[0][ACOMP] = 255; | |||
| } | |||
| x++; y++; mask++; rgba++; | |||
| } | |||
| } | |||
| @@ -1,250 +1,250 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver Build 5 */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DHAL.h" | |||
| /*===========================================================================*/ | |||
| /* Macros. */ | |||
| /*===========================================================================*/ | |||
| #define SRCBLEND_MAP(gl,d3d,fall) if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwSrcBlendCaps & d3d ) \ | |||
| { \ | |||
| sprintf( buffer, "SRC Blend: %s -> %s", # gl, # d3d ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwSrcBlendCaps[index] = d3d; \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| sprintf( buffer, "SRC Blend: %s -> %s", # gl, # fall ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwSrcBlendCaps[index] = fall; \ | |||
| } | |||
| #define DSTBLEND_MAP(gl,d3d,fall) if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwDestBlendCaps & d3d ) \ | |||
| { \ | |||
| sprintf( buffer, "DST Blend: %s -> %s", # gl, # d3d ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwDestBlendCaps[index] = d3d; \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| sprintf( buffer, "DST Blend: %s -> %s", # gl, # fall ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwDestBlendCaps[index] = fall; \ | |||
| } | |||
| /*===========================================================================*/ | |||
| /* I use this function to handle the fact that the D3D texture blending and */ | |||
| /* OpenGL texture blending functions don't map one to one. Also there is the*/ | |||
| /* problem with cards not supporting all the D3D functions. So I use the CAPS*/ | |||
| /* of the card to make a table of functions that will have defaults for the */ | |||
| /* unsupported functions. */ | |||
| /* So first I fill the table with the fallback function then I check to see */ | |||
| /* if the card supports the requested function. If it does I replace the */ | |||
| /* default thats already in the array. Now order does matter as I used an */ | |||
| /* enum type in D3DShared.h so that the mapping would be a little easier. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void AlphaBlendTableHAL( PMESAD3DHAL pHAL ) | |||
| { | |||
| PMESAD3DSHARED pShared = &pHAL->shared; | |||
| int index; | |||
| char buffer[128]; | |||
| DPF(( DBG_FUNC, "AlphaBlendTableHAL();" )); | |||
| /* Make the fallback for the Source blend. */ | |||
| for( index = 0; index < 14; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case s_zero: | |||
| SRCBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one: | |||
| SRCBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE ); | |||
| break; | |||
| case s_dst_color: | |||
| SRCBLEND_MAP( GL_DST_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_dst_color: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_DST_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_src_alpha: | |||
| SRCBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_src_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_dst_alpha: | |||
| SRCBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_dst_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_src_alpha_saturate: | |||
| SRCBLEND_MAP( GL_SRC_ALPHA_SATURATE, D3DBLEND_SRCALPHASAT, D3DBLEND_ONE ); | |||
| break; | |||
| case s_constant_color: | |||
| SRCBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_constant_color: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_constant_alpha: | |||
| SRCBLEND_MAP( GL_CONSTANT_ALPHA, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_constant_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| } | |||
| } | |||
| /* Make the fallback for the Destination blend. */ | |||
| for( index = 0; index < 14; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case d_zero: | |||
| DSTBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one: | |||
| DSTBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE ); | |||
| break; | |||
| case d_src_color: | |||
| DSTBLEND_MAP( GL_SRC_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_src_color: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_SRC_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_src_alpha: | |||
| DSTBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_src_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_dst_alpha: | |||
| DSTBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_dst_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_constant_color: | |||
| DSTBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_constant_color: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_constant_alpha: | |||
| DSTBLEND_MAP( GL_CONSTANT_ALPHAR, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_constant_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| } | |||
| } | |||
| /* Make the fallbacks for the texture functions. */ | |||
| for( index = 0; index < 4; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case d3dtblend_decal: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_decalalpha: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECALALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_DECALALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECALALPHA; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPA -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_modulate: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATEALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; | |||
| } | |||
| else if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_modulatealpha: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATEALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_DECALE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver Build 5 */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DHAL.h" | |||
| /*===========================================================================*/ | |||
| /* Macros. */ | |||
| /*===========================================================================*/ | |||
| #define SRCBLEND_MAP(gl,d3d,fall) if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwSrcBlendCaps & d3d ) \ | |||
| { \ | |||
| sprintf( buffer, "SRC Blend: %s -> %s", # gl, # d3d ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwSrcBlendCaps[index] = d3d; \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| sprintf( buffer, "SRC Blend: %s -> %s", # gl, # fall ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwSrcBlendCaps[index] = fall; \ | |||
| } | |||
| #define DSTBLEND_MAP(gl,d3d,fall) if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwDestBlendCaps & d3d ) \ | |||
| { \ | |||
| sprintf( buffer, "DST Blend: %s -> %s", # gl, # d3d ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwDestBlendCaps[index] = d3d; \ | |||
| } \ | |||
| else \ | |||
| { \ | |||
| sprintf( buffer, "DST Blend: %s -> %s", # gl, # fall ); \ | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), buffer )); \ | |||
| pShared->dwDestBlendCaps[index] = fall; \ | |||
| } | |||
| /*===========================================================================*/ | |||
| /* I use this function to handle the fact that the D3D texture blending and */ | |||
| /* OpenGL texture blending functions don't map one to one. Also there is the*/ | |||
| /* problem with cards not supporting all the D3D functions. So I use the CAPS*/ | |||
| /* of the card to make a table of functions that will have defaults for the */ | |||
| /* unsupported functions. */ | |||
| /* So first I fill the table with the fallback function then I check to see */ | |||
| /* if the card supports the requested function. If it does I replace the */ | |||
| /* default thats already in the array. Now order does matter as I used an */ | |||
| /* enum type in D3DShared.h so that the mapping would be a little easier. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void AlphaBlendTableHAL( PMESAD3DHAL pHAL ) | |||
| { | |||
| PMESAD3DSHARED pShared = &pHAL->shared; | |||
| int index; | |||
| char buffer[128]; | |||
| DPF(( DBG_FUNC, "AlphaBlendTableHAL();" )); | |||
| /* Make the fallback for the Source blend. */ | |||
| for( index = 0; index < 14; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case s_zero: | |||
| SRCBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one: | |||
| SRCBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE ); | |||
| break; | |||
| case s_dst_color: | |||
| SRCBLEND_MAP( GL_DST_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_dst_color: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_DST_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_src_alpha: | |||
| SRCBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_src_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_dst_alpha: | |||
| SRCBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_dst_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_src_alpha_saturate: | |||
| SRCBLEND_MAP( GL_SRC_ALPHA_SATURATE, D3DBLEND_SRCALPHASAT, D3DBLEND_ONE ); | |||
| break; | |||
| case s_constant_color: | |||
| SRCBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_constant_color: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case s_constant_alpha: | |||
| SRCBLEND_MAP( GL_CONSTANT_ALPHA, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case s_one_minus_constant_alpha: | |||
| SRCBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| } | |||
| } | |||
| /* Make the fallback for the Destination blend. */ | |||
| for( index = 0; index < 14; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case d_zero: | |||
| DSTBLEND_MAP( GL_ZERO, D3DBLEND_ZERO, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one: | |||
| DSTBLEND_MAP( GL_ONE, D3DBLEND_ONE, D3DBLEND_ONE ); | |||
| break; | |||
| case d_src_color: | |||
| DSTBLEND_MAP( GL_SRC_COLOR, D3DBLEND_SRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_src_color: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_SRC_COLOR, D3DBLEND_INVSRCCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_src_alpha: | |||
| DSTBLEND_MAP( GL_SRC_ALPHA, D3DBLEND_SRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_src_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_SRC_ALPHA, D3DBLEND_INVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_dst_alpha: | |||
| DSTBLEND_MAP( GL_DST_ALPHA, D3DBLEND_DESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_dst_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_DST_ALPHA, D3DBLEND_INVDESTALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_constant_color: | |||
| DSTBLEND_MAP( GL_CONSTANT_COLOR, D3DBLEND_DESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_constant_color: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_COLOR, D3DBLEND_INVDESTCOLOR, D3DBLEND_ONE ); | |||
| break; | |||
| case d_constant_alpha: | |||
| DSTBLEND_MAP( GL_CONSTANT_ALPHAR, D3DBLEND_BOTHSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| case d_one_minus_constant_alpha: | |||
| DSTBLEND_MAP( GL_ONE_MINUS_CONSTANT_ALPHA, D3DBLEND_BOTHINVSRCALPHA, D3DBLEND_ONE ); | |||
| break; | |||
| } | |||
| } | |||
| /* Make the fallbacks for the texture functions. */ | |||
| for( index = 0; index < 4; index++ ) | |||
| { | |||
| switch( index ) | |||
| { | |||
| case d3dtblend_decal: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECAL -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_decalalpha: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECALALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_DECALALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECALALPHA; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPA -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_DECALALPHA -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_modulate: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_MODULATEALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; | |||
| } | |||
| else if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_DECAL" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATE -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| case d3dtblend_modulatealpha: | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATEALPHA ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATEALPHA" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATEALPHA; | |||
| } | |||
| else | |||
| { | |||
| if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_MODULATE ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_MODULATE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_MODULATE; | |||
| } | |||
| else if ( pHAL->D3DHWDevDesc.dpcTriCaps.dwTextureBlendCaps & D3DTBLEND_DECAL ) | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_DECALE" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_DECAL; | |||
| } | |||
| else | |||
| { | |||
| DPF(( (DBG_CNTX_INFO|DBG_TXT_INFO), "D3DTBLEND_MODULATEALPHA -> D3DTBLEND_ADD" )); | |||
| pShared->dwTexFunc[index] = D3DTBLEND_ADD; | |||
| } | |||
| } | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| @@ -1,68 +1,68 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _D3D_HAL_INC | |||
| #define _D3D_HAL_INC | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include <stdlib.h> | |||
| #include <time.h> | |||
| #include "D3DShared.h" | |||
| #include "D3DTextureMgr.h" | |||
| #include "Debug.h" | |||
| /*===========================================================================*/ | |||
| /* Defines. */ | |||
| /*===========================================================================*/ | |||
| #define DX_RESTORE(ps) if ( (ps) && (ps)->IsLost() ) (ps)->Restore(); | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| typedef struct _d3d_hal_struct | |||
| { | |||
| MESAD3DSHARED shared; | |||
| GUID guid; | |||
| LPDIRECTDRAW lpDD; | |||
| LPDIRECTDRAW4 lpDD4; | |||
| LPDIRECT3D3 lpD3D3; | |||
| LPDIRECT3DDEVICE3 lpD3DDevice; | |||
| D3DDEVICEDESC D3DHWDevDesc; | |||
| LPDIRECTDRAWSURFACE4 lpDDSPrimary, | |||
| lpDDSRender, | |||
| lpDDSZbuffer; | |||
| LPDIRECT3DVIEWPORT3 lpViewport; | |||
| LPDIRECTDRAWCLIPPER lpClipper; | |||
| DDPIXELFORMAT ddpf, | |||
| ddpfZBuffer; | |||
| PTM_OBJECT pTMList; | |||
| } MESAD3DHAL, *PMESAD3DHAL; | |||
| /*===========================================================================*/ | |||
| /* External function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern BOOL InitTMgrHAL( PMESAD3DHAL pHAL ); | |||
| extern void TermTMgrHAL( PMESAD3DHAL pHAL ); | |||
| extern void AlphaBlendTableHAL( PMESAD3DHAL pHAL ); | |||
| extern void Solve8BitChannelPixelFormat( DDPIXELFORMAT *pddpf, PPIXELINFO pPixel ); | |||
| extern char *ErrorStringD3D( HRESULT hr ); | |||
| extern void FatalShutDown( PMESAD3DHAL pHAL ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern char *errorMsg; | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _D3D_HAL_INC | |||
| #define _D3D_HAL_INC | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include <stdlib.h> | |||
| #include <time.h> | |||
| #include "D3DShared.h" | |||
| #include "D3DTextureMgr.h" | |||
| #include "Debug.h" | |||
| /*===========================================================================*/ | |||
| /* Defines. */ | |||
| /*===========================================================================*/ | |||
| #define DX_RESTORE(ps) if ( (ps) && (ps)->IsLost() ) (ps)->Restore(); | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| typedef struct _d3d_hal_struct | |||
| { | |||
| MESAD3DSHARED shared; | |||
| GUID guid; | |||
| LPDIRECTDRAW lpDD; | |||
| LPDIRECTDRAW4 lpDD4; | |||
| LPDIRECT3D3 lpD3D3; | |||
| LPDIRECT3DDEVICE3 lpD3DDevice; | |||
| D3DDEVICEDESC D3DHWDevDesc; | |||
| LPDIRECTDRAWSURFACE4 lpDDSPrimary, | |||
| lpDDSRender, | |||
| lpDDSZbuffer; | |||
| LPDIRECT3DVIEWPORT3 lpViewport; | |||
| LPDIRECTDRAWCLIPPER lpClipper; | |||
| DDPIXELFORMAT ddpf, | |||
| ddpfZBuffer; | |||
| PTM_OBJECT pTMList; | |||
| } MESAD3DHAL, *PMESAD3DHAL; | |||
| /*===========================================================================*/ | |||
| /* External function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern BOOL InitTMgrHAL( PMESAD3DHAL pHAL ); | |||
| extern void TermTMgrHAL( PMESAD3DHAL pHAL ); | |||
| extern void AlphaBlendTableHAL( PMESAD3DHAL pHAL ); | |||
| extern void Solve8BitChannelPixelFormat( DDPIXELFORMAT *pddpf, PPIXELINFO pPixel ); | |||
| extern char *ErrorStringD3D( HRESULT hr ); | |||
| extern void FatalShutDown( PMESAD3DHAL pHAL ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern char *errorMsg; | |||
| #endif | |||
| @@ -1,84 +1,84 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef D3D_MESA_H | |||
| #define D3D_MESA_H | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include "matrix.h" | |||
| #include "context.h" | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef D3D_MESA_H | |||
| #define D3D_MESA_H | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include "matrix.h" | |||
| #include "context.h" | |||
| #include "mtypes.h" | |||
| #include "vb.h" | |||
| #include "D3DShared.h" | |||
| #include "Debug.h" | |||
| #include "NULLProcs.h" | |||
| /*===========================================================================*/ | |||
| /* Macros. */ | |||
| /*===========================================================================*/ | |||
| #define FLIP(h,y) (h-y) | |||
| /*===========================================================================*/ | |||
| /* Magic numbers. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| struct __extensions__ | |||
| { | |||
| PROC proc; | |||
| char *name; | |||
| }; | |||
| typedef GLbitfield (*ClearPROC)( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | |||
| typedef void (*WSpanRGBPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] ); | |||
| typedef void (*WSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef void (*WSpanRGBAMonoPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] ); | |||
| typedef void (*WPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef void (*WPixelsRGBAMonoPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | |||
| typedef void (*RSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | |||
| typedef void (*RPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef struct D3D_mesa_context | |||
| { | |||
| PMESAD3DSHARED pShared; | |||
| GLcontext *gl_ctx; /* The core GL/Mesa context */ | |||
| GLvisual *gl_visual; /* Describes the buffers */ | |||
| GLframebuffer *gl_buffer; /* Depth, stencil, accum, etc buffers */ | |||
| HDC hdc; | |||
| WNDPROC hOldProc; | |||
| UCHAR rClear, /* Current clear colors. */ | |||
| gClear, | |||
| bClear, | |||
| aClear, | |||
| rCurrent, /* Current rendering colors. */ | |||
| gCurrent, | |||
| bCurrent, | |||
| aCurrent; | |||
| struct D3D_mesa_context *next; | |||
| } D3DMESACONTEXT, *PD3DMESACONTEXT; | |||
| /*===========================================================================*/ | |||
| /* Extern function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern void gl_Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern D3DTLVERTEX D3DTLVertices[(VB_MAX*6)]; | |||
| #endif | |||
| #include "vb.h" | |||
| #include "D3DShared.h" | |||
| #include "Debug.h" | |||
| #include "NULLProcs.h" | |||
| /*===========================================================================*/ | |||
| /* Macros. */ | |||
| /*===========================================================================*/ | |||
| #define FLIP(h,y) (h-y) | |||
| /*===========================================================================*/ | |||
| /* Magic numbers. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| struct __extensions__ | |||
| { | |||
| PROC proc; | |||
| char *name; | |||
| }; | |||
| typedef GLbitfield (*ClearPROC)( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ); | |||
| typedef void (*WSpanRGBPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] ); | |||
| typedef void (*WSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef void (*WSpanRGBAMonoPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] ); | |||
| typedef void (*WPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef void (*WPixelsRGBAMonoPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ); | |||
| typedef void (*RSpanRGBAPROC)( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ); | |||
| typedef void (*RPixelsRGBAPROC)( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ); | |||
| typedef struct D3D_mesa_context | |||
| { | |||
| PMESAD3DSHARED pShared; | |||
| GLcontext *gl_ctx; /* The core GL/Mesa context */ | |||
| GLvisual *gl_visual; /* Describes the buffers */ | |||
| GLframebuffer *gl_buffer; /* Depth, stencil, accum, etc buffers */ | |||
| HDC hdc; | |||
| WNDPROC hOldProc; | |||
| UCHAR rClear, /* Current clear colors. */ | |||
| gClear, | |||
| bClear, | |||
| aClear, | |||
| rCurrent, /* Current rendering colors. */ | |||
| gCurrent, | |||
| bCurrent, | |||
| aCurrent; | |||
| struct D3D_mesa_context *next; | |||
| } D3DMESACONTEXT, *PD3DMESACONTEXT; | |||
| /*===========================================================================*/ | |||
| /* Extern function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern void gl_Viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern D3DTLVERTEX D3DTLVertices[(VB_MAX*6)]; | |||
| #endif | |||
| @@ -1,213 +1,213 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DHAL.h" | |||
| /*===========================================================================*/ | |||
| /* This function clears the context bound to the supplied shared context. */ | |||
| /* The function takes the D3D flags D3DCLEAR_TARGET, D3DCLEAR_STENCIL and */ | |||
| /* D3DCLEAR_ZBUFFER. Set bAll to TRUE for a full clear else supply the coord*/ | |||
| /* of the rect to be cleared relative to the window. The color is always a */ | |||
| /* 32bit value (RGBA). Fill in the z-value and stencil if needed. */ | |||
| /* */ | |||
| /* TODO: this can be redone to be called by Mesa directly. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void ClearHAL( PMESAD3DSHARED pShared, DWORD dwFlags, BOOL bAll, int x, int y, int cx, int cy, DWORD dwColor, float zv, DWORD dwStencil ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| D3DRECT d3dRect; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "CleaHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpViewport == NULL) ) | |||
| return; | |||
| #endif | |||
| if ( bAll ) | |||
| { | |||
| /* I assume my viewport is valid. */ | |||
| d3dRect.lX1 = pShared->rectV.left; | |||
| d3dRect.lY1 = pShared->rectV.top; | |||
| d3dRect.lX2 = pShared->rectV.right; | |||
| d3dRect.lY2 = pShared->rectV.bottom; | |||
| } | |||
| else | |||
| { | |||
| d3dRect.lX1 = pShared->rectV.left + x; | |||
| d3dRect.lY1 = pShared->rectV.top + y; | |||
| d3dRect.lX2 = d3dRect.lX1 + cx; | |||
| d3dRect.lY2 = d3dRect.lY1 + cy; | |||
| } | |||
| #ifdef D3D_DEBUG | |||
| rc = pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "Clear2 ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil ); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* Well this is the guts of it all. Here we rasterize the primitives that */ | |||
| /* are in their final form. OpenGL has done all the lighting, transfomations*/ | |||
| /* and clipping at this point. */ | |||
| /* */ | |||
| /* TODO: I'm not sure if I want to bother to check for errors on this call. */ | |||
| /* The overhead kills me... */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void DrawPrimitiveHAL( PMESAD3DSHARED pShared, D3DPRIMITIVETYPE dptPrimitiveType, D3DTLVERTEX *pVertices, DWORD dwCount ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "DrawPrimitveHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| DPF(( DBG_PRIM_INFO, "DP( %d )", dwCount )); | |||
| rc = pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType, | |||
| D3DFVF_TLVERTEX, | |||
| (LPVOID)pVertices, | |||
| dwCount, | |||
| (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "DrawPrimitive ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType, | |||
| D3DFVF_TLVERTEX, | |||
| (LPVOID)pVertices, | |||
| dwCount, | |||
| (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) ); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This call will handle the swapping of the buffers. Now I didn't bother */ | |||
| /* to support single buffered so this will be used for glFlush() as its all */ | |||
| /* the same. So first we do an EndScene as we are always considered to be in*/ | |||
| /* a BeginScene because when we leave we do a BeginScene. Now note that when*/ | |||
| /* the context is created in the first place we do a BeginScene also just to */ | |||
| /* get things going. The call will use either Flip/blt based on the type of */ | |||
| /* surface was created for rendering. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void SwapBuffersHAL( PMESAD3DSHARED pShared ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "SwapBuffersHAL();" )); | |||
| DPF(( DBG_ALL_PROFILE, "=================SWAP===================" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| /* Make sure we have enough info. */ | |||
| if ( pHAL->lpDDSPrimary != NULL ) | |||
| { | |||
| rc = pHAL->lpD3DDevice->EndScene(); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "EndScene ->", ErrorStringD3D(rc) ); | |||
| } | |||
| if ( pShared->bFlipable ) | |||
| { | |||
| DPF(( DBG_CNTX_PROFILE, "Swap->FLIP" )); | |||
| rc = pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT ); | |||
| } | |||
| else | |||
| { | |||
| DPF(( DBG_CNTX_PROFILE, "Swap->Blt" )); | |||
| rc = pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL ); | |||
| } | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "Blt (RENDER/PRIMARY) ->", ErrorStringD3D(rc) ); | |||
| } | |||
| rc = pHAL->lpD3DDevice->BeginScene(); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "BeginScene ->", ErrorStringD3D(rc) ); | |||
| } | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->EndScene(); | |||
| if ( pShared->bFlipable ) | |||
| pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT ); | |||
| else | |||
| pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL ); | |||
| pHAL->lpD3DDevice->BeginScene(); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This function is a very thin wrapper for the D3D call 'SetRenderState'. */ | |||
| /* Using this function requires all the types to be defined by including the */ | |||
| /* D3D header file. */ | |||
| /* */ | |||
| /* TODO: would be much better to get ride of all these calls per VBRender. */ | |||
| /* I feel I should get this call into SetRenderStates() the RenderVB. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void SetStateHAL( PMESAD3DSHARED pShared, DWORD dwType, DWORD dwState ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "SetStateHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| rc = pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "SetRenderState ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState ); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DHAL.h" | |||
| /*===========================================================================*/ | |||
| /* This function clears the context bound to the supplied shared context. */ | |||
| /* The function takes the D3D flags D3DCLEAR_TARGET, D3DCLEAR_STENCIL and */ | |||
| /* D3DCLEAR_ZBUFFER. Set bAll to TRUE for a full clear else supply the coord*/ | |||
| /* of the rect to be cleared relative to the window. The color is always a */ | |||
| /* 32bit value (RGBA). Fill in the z-value and stencil if needed. */ | |||
| /* */ | |||
| /* TODO: this can be redone to be called by Mesa directly. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void ClearHAL( PMESAD3DSHARED pShared, DWORD dwFlags, BOOL bAll, int x, int y, int cx, int cy, DWORD dwColor, float zv, DWORD dwStencil ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| D3DRECT d3dRect; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "CleaHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpViewport == NULL) ) | |||
| return; | |||
| #endif | |||
| if ( bAll ) | |||
| { | |||
| /* I assume my viewport is valid. */ | |||
| d3dRect.lX1 = pShared->rectV.left; | |||
| d3dRect.lY1 = pShared->rectV.top; | |||
| d3dRect.lX2 = pShared->rectV.right; | |||
| d3dRect.lY2 = pShared->rectV.bottom; | |||
| } | |||
| else | |||
| { | |||
| d3dRect.lX1 = pShared->rectV.left + x; | |||
| d3dRect.lY1 = pShared->rectV.top + y; | |||
| d3dRect.lX2 = d3dRect.lX1 + cx; | |||
| d3dRect.lY2 = d3dRect.lY1 + cy; | |||
| } | |||
| #ifdef D3D_DEBUG | |||
| rc = pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "Clear2 ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpViewport->Clear2( 1, &d3dRect, dwFlags, dwColor, zv, dwStencil ); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* Well this is the guts of it all. Here we rasterize the primitives that */ | |||
| /* are in their final form. OpenGL has done all the lighting, transfomations*/ | |||
| /* and clipping at this point. */ | |||
| /* */ | |||
| /* TODO: I'm not sure if I want to bother to check for errors on this call. */ | |||
| /* The overhead kills me... */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void DrawPrimitiveHAL( PMESAD3DSHARED pShared, D3DPRIMITIVETYPE dptPrimitiveType, D3DTLVERTEX *pVertices, DWORD dwCount ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "DrawPrimitveHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| DPF(( DBG_PRIM_INFO, "DP( %d )", dwCount )); | |||
| rc = pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType, | |||
| D3DFVF_TLVERTEX, | |||
| (LPVOID)pVertices, | |||
| dwCount, | |||
| (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "DrawPrimitive ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->DrawPrimitive( dptPrimitiveType, | |||
| D3DFVF_TLVERTEX, | |||
| (LPVOID)pVertices, | |||
| dwCount, | |||
| (D3DDP_DONOTCLIP | D3DDP_DONOTLIGHT) ); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This call will handle the swapping of the buffers. Now I didn't bother */ | |||
| /* to support single buffered so this will be used for glFlush() as its all */ | |||
| /* the same. So first we do an EndScene as we are always considered to be in*/ | |||
| /* a BeginScene because when we leave we do a BeginScene. Now note that when*/ | |||
| /* the context is created in the first place we do a BeginScene also just to */ | |||
| /* get things going. The call will use either Flip/blt based on the type of */ | |||
| /* surface was created for rendering. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void SwapBuffersHAL( PMESAD3DSHARED pShared ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "SwapBuffersHAL();" )); | |||
| DPF(( DBG_ALL_PROFILE, "=================SWAP===================" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| /* Make sure we have enough info. */ | |||
| if ( pHAL->lpDDSPrimary != NULL ) | |||
| { | |||
| rc = pHAL->lpD3DDevice->EndScene(); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "EndScene ->", ErrorStringD3D(rc) ); | |||
| } | |||
| if ( pShared->bFlipable ) | |||
| { | |||
| DPF(( DBG_CNTX_PROFILE, "Swap->FLIP" )); | |||
| rc = pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT ); | |||
| } | |||
| else | |||
| { | |||
| DPF(( DBG_CNTX_PROFILE, "Swap->Blt" )); | |||
| rc = pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL ); | |||
| } | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "Blt (RENDER/PRIMARY) ->", ErrorStringD3D(rc) ); | |||
| } | |||
| rc = pHAL->lpD3DDevice->BeginScene(); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "BeginScene ->", ErrorStringD3D(rc) ); | |||
| } | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->EndScene(); | |||
| if ( pShared->bFlipable ) | |||
| pHAL->lpDDSPrimary->Flip( NULL, DDFLIP_WAIT ); | |||
| else | |||
| pHAL->lpDDSPrimary->Blt( &pShared->rectW, pHAL->lpDDSRender, NULL, DDBLT_WAIT, NULL ); | |||
| pHAL->lpD3DDevice->BeginScene(); | |||
| #endif | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This function is a very thin wrapper for the D3D call 'SetRenderState'. */ | |||
| /* Using this function requires all the types to be defined by including the */ | |||
| /* D3D header file. */ | |||
| /* */ | |||
| /* TODO: would be much better to get ride of all these calls per VBRender. */ | |||
| /* I feel I should get this call into SetRenderStates() the RenderVB. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| extern "C" void SetStateHAL( PMESAD3DSHARED pShared, DWORD dwType, DWORD dwState ) | |||
| { | |||
| PMESAD3DHAL pHAL = (PMESAD3DHAL)pShared; | |||
| #ifdef D3D_DEBUG | |||
| HRESULT rc; | |||
| DPF(( DBG_FUNC, "SetStateHAL();" )); | |||
| /* Make sure we have enough info. */ | |||
| if ( (pHAL == NULL) || (pHAL->lpD3DDevice == NULL) ) | |||
| return; | |||
| rc = pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState ); | |||
| if ( FAILED(rc) ) | |||
| { | |||
| RIP( pHAL, "SetRenderState ->", ErrorStringD3D(rc) ); | |||
| } | |||
| #else | |||
| pHAL->lpD3DDevice->SetRenderState( (D3DRENDERSTATETYPE)dwType, dwState ); | |||
| #endif | |||
| } | |||
| @@ -1,62 +1,62 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _TEXTURE_MGR_INC | |||
| #define _TEXTURE_MGR_INC | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include <stdlib.h> | |||
| #include <stdlib.h> | |||
| #include "GL/gl.h" | |||
| /*========================================================================*/ | |||
| /* Defines. */ | |||
| /*========================================================================*/ | |||
| /*========================================================================*/ | |||
| /* Type defines. */ | |||
| /*========================================================================*/ | |||
| typedef struct _local_texture_object | |||
| { | |||
| DWORD dwName, | |||
| dwPriority, | |||
| dwFlags, | |||
| dwSWidth, | |||
| dwSHeight, | |||
| dwVWidth, | |||
| dwVHeight; | |||
| BOOL bLock, | |||
| bDirty; /* I only update VID on SubImage calls so the system */ | |||
| /* texture can get invalid. */ | |||
| LPDIRECT3DDEVICE3 lpD3DDevice; /* If the device changes we must get new handles... */ | |||
| LPDIRECTDRAWSURFACE4 lpDDS_System, | |||
| lpDDS_Video; | |||
| LPDIRECT3DTEXTURE2 lpD3DTexture2; | |||
| PIXELINFO pixel; | |||
| struct _local_texture_object *next; | |||
| struct _local_texture_object *prev; | |||
| } TM_OBJECT, *PTM_OBJECT; | |||
| /*========================================================================*/ | |||
| /* Function prototypes. */ | |||
| /*========================================================================*/ | |||
| void APIENTRY InitTMD3D( void *pVoid ); | |||
| void APIENTRY TermTMD3D( void *pVoid ); | |||
| /*========================================================================*/ | |||
| /* Global variables declaration. */ | |||
| /*========================================================================*/ | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _TEXTURE_MGR_INC | |||
| #define _TEXTURE_MGR_INC | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <windows.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include <stdlib.h> | |||
| #include <stdlib.h> | |||
| #include "GL/gl.h" | |||
| /*========================================================================*/ | |||
| /* Defines. */ | |||
| /*========================================================================*/ | |||
| /*========================================================================*/ | |||
| /* Type defines. */ | |||
| /*========================================================================*/ | |||
| typedef struct _local_texture_object | |||
| { | |||
| DWORD dwName, | |||
| dwPriority, | |||
| dwFlags, | |||
| dwSWidth, | |||
| dwSHeight, | |||
| dwVWidth, | |||
| dwVHeight; | |||
| BOOL bLock, | |||
| bDirty; /* I only update VID on SubImage calls so the system */ | |||
| /* texture can get invalid. */ | |||
| LPDIRECT3DDEVICE3 lpD3DDevice; /* If the device changes we must get new handles... */ | |||
| LPDIRECTDRAWSURFACE4 lpDDS_System, | |||
| lpDDS_Video; | |||
| LPDIRECT3DTEXTURE2 lpD3DTexture2; | |||
| PIXELINFO pixel; | |||
| struct _local_texture_object *next; | |||
| struct _local_texture_object *prev; | |||
| } TM_OBJECT, *PTM_OBJECT; | |||
| /*========================================================================*/ | |||
| /* Function prototypes. */ | |||
| /*========================================================================*/ | |||
| void APIENTRY InitTMD3D( void *pVoid ); | |||
| void APIENTRY TermTMD3D( void *pVoid ); | |||
| /*========================================================================*/ | |||
| /* Global variables declaration. */ | |||
| /*========================================================================*/ | |||
| #endif | |||
| @@ -1,399 +1,399 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DMesa.h" | |||
| /*===========================================================================*/ | |||
| /* This call will clear the render surface using the pixel info built from */ | |||
| /* the surface at creation time. The call uses Lock/Unlock to access the */ | |||
| /* surface. The call also special cases a full clear or a dirty rectangle. */ | |||
| /* Finally the call returns the new clear mask that reflects that the color */ | |||
| /* buffer was cleared. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: the original mask with the bits cleared that represents the buffer*/ | |||
| /* or buffers we just cleared. */ | |||
| /*===========================================================================*/ | |||
| GLbitfield ClearBuffers( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer, | |||
| *pScanLine; | |||
| int index, | |||
| index2; | |||
| DWORD dwColor; | |||
| if ( mask & GL_COLOR_BUFFER_BIT ) | |||
| { | |||
| /* Lock the surface to get the surface pointer. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. */ | |||
| dwColor = ( ((DWORD)((float)pContext->rClear * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gClear * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bClear * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| if ( all ) | |||
| { | |||
| for( index = 0, pScanLine = (UCHAR *)pddsd2->lpSurface; index < pContext->pShared->dwHeight; index++, pScanLine += pddsd2->lPitch ) | |||
| for( pBuffer = pScanLine, index2 = 0; index2 < pContext->pShared->dwWidth; index2++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| else | |||
| { | |||
| pScanLine = ((UCHAR *)pddsd2->lpSurface) + | |||
| ( (FLIP( pContext->pShared->dwHeight, (y+height)) * pddsd2->lPitch) + (x * pContext->pShared->pixel.cb) ); | |||
| for( index = 0; index < height; index++, pScanLine += pddsd2->lPitch ) | |||
| { | |||
| for( index2 = 0, pBuffer = pScanLine; index2 < width; index2++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| return (mask & ~GL_COLOR_BUFFER_BIT); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The color is solved once from the current */ | |||
| /* color components. The alpha is ignored as Mesa is doing it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Lock the surface to get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. (no alpha) */ | |||
| dwColor = ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| if ( mask[index] ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The color is solved once from the current */ | |||
| /* color components. The alpha is ignored as Mesa is doing it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WPixelsRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. I don't uses the alpha. */ | |||
| dwColor = ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| if ( mask ) | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc isn't written for speed rather its to handle the general case. */ | |||
| /* I grab each pixel from the surface and unpack the info using the PIXELINFO*/ | |||
| /* structure that was generated from the OffScreen surface pixelformat. The */ | |||
| /* function will not fill in the alpha value as Mesa I have Mesa allocate its*/ | |||
| /* own alpha channel when the context was created. I did this as I didn't */ | |||
| /* feel that it was worth the effort to try and get HW to work (bus bound). */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void RSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD *pdwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + | |||
| (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + | |||
| (x*pContext->pShared->pixel.cb); | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| pdwColor = (DWORD *)pBuffer; | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc isn't written for speed rather its to handle the general case. */ | |||
| /* I grab each pixel from the surface and unpack the info using the PIXELINFO*/ | |||
| /* structure that was generated from the OffScreen surface pixelformat. The */ | |||
| /* function will not fill in the alpha value as Mesa I have Mesa allocate its*/ | |||
| /* own alpha channel when the context was created. I did this as I didn't */ | |||
| /* feel that it was worth the effort to try and get HW to work (bus bound). */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void RPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| int index; | |||
| DWORD *pdwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| if ( mask ) | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Find the start of the pixel. Invert y for Windows. */ | |||
| pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb)); | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Find the start of the pixel. Invert y for Windows. */ | |||
| pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb)); | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "D3DMesa.h" | |||
| /*===========================================================================*/ | |||
| /* This call will clear the render surface using the pixel info built from */ | |||
| /* the surface at creation time. The call uses Lock/Unlock to access the */ | |||
| /* surface. The call also special cases a full clear or a dirty rectangle. */ | |||
| /* Finally the call returns the new clear mask that reflects that the color */ | |||
| /* buffer was cleared. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: the original mask with the bits cleared that represents the buffer*/ | |||
| /* or buffers we just cleared. */ | |||
| /*===========================================================================*/ | |||
| GLbitfield ClearBuffers( GLcontext *ctx, GLbitfield mask, GLboolean all, GLint x, GLint y, GLint width, GLint height ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer, | |||
| *pScanLine; | |||
| int index, | |||
| index2; | |||
| DWORD dwColor; | |||
| if ( mask & GL_COLOR_BUFFER_BIT ) | |||
| { | |||
| /* Lock the surface to get the surface pointer. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. */ | |||
| dwColor = ( ((DWORD)((float)pContext->rClear * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gClear * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bClear * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| if ( all ) | |||
| { | |||
| for( index = 0, pScanLine = (UCHAR *)pddsd2->lpSurface; index < pContext->pShared->dwHeight; index++, pScanLine += pddsd2->lPitch ) | |||
| for( pBuffer = pScanLine, index2 = 0; index2 < pContext->pShared->dwWidth; index2++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| else | |||
| { | |||
| pScanLine = ((UCHAR *)pddsd2->lpSurface) + | |||
| ( (FLIP( pContext->pShared->dwHeight, (y+height)) * pddsd2->lPitch) + (x * pContext->pShared->pixel.cb) ); | |||
| for( index = 0; index < height; index++, pScanLine += pddsd2->lPitch ) | |||
| { | |||
| for( index2 = 0, pBuffer = pScanLine; index2 < width; index2++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| return (mask & ~GL_COLOR_BUFFER_BIT); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGB( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgb[][3], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgb[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgb[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The color is solved once from the current */ | |||
| /* color components. The alpha is ignored as Mesa is doing it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WSpanRGBAMono( const GLcontext* ctx, GLuint n, GLint x, GLint y, const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Lock the surface to get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. (no alpha) */ | |||
| dwColor = ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + (x*pContext->pShared->pixel.cb); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| if ( mask[index] ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The alpha is ignored as Mesa does it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| if ( mask ) | |||
| { | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Pack the color components. */ | |||
| dwColor = ( ((DWORD)((float)rgba[index][RCOMP] * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][GCOMP] * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)rgba[index][BCOMP] * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc (as all others) has been written for the general case. I use */ | |||
| /* the PIXELINFO structure to pack the pixel from RGB24 to whatever the Off- */ | |||
| /* Screen render surface uses. The color is solved once from the current */ | |||
| /* color components. The alpha is ignored as Mesa is doing it in SW. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void WPixelsRGBAMono( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD dwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Solve the color once only. I don't uses the alpha. */ | |||
| dwColor = ( ((DWORD)((float)pContext->rCurrent * pContext->pShared->pixel.rScale)) << pContext->pShared->pixel.rShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->gCurrent * pContext->pShared->pixel.gScale)) << pContext->pShared->pixel.gShift ); | |||
| dwColor |= ( ((DWORD)((float)pContext->bCurrent * pContext->pShared->pixel.bScale)) << pContext->pShared->pixel.bShift ); | |||
| if ( mask ) | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Find the pixel. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb); | |||
| memcpy( pBuffer, &dwColor, pContext->pShared->pixel.cb ); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc isn't written for speed rather its to handle the general case. */ | |||
| /* I grab each pixel from the surface and unpack the info using the PIXELINFO*/ | |||
| /* structure that was generated from the OffScreen surface pixelformat. The */ | |||
| /* function will not fill in the alpha value as Mesa I have Mesa allocate its*/ | |||
| /* own alpha channel when the context was created. I did this as I didn't */ | |||
| /* feel that it was worth the effort to try and get HW to work (bus bound). */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void RSpanRGBA( const GLcontext* ctx, GLuint n, GLint x, GLint y, GLubyte rgba[][4] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| UCHAR *pBuffer; | |||
| int index; | |||
| DWORD *pdwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| /* Find the start of the span. Invert y for Windows. */ | |||
| pBuffer = (UCHAR *)pddsd2->lpSurface + | |||
| (FLIP(pContext->pShared->dwHeight,y) * pddsd2->lPitch) + | |||
| (x*pContext->pShared->pixel.cb); | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++, pBuffer += pContext->pShared->pixel.cb ) | |||
| { | |||
| pdwColor = (DWORD *)pBuffer; | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This proc isn't written for speed rather its to handle the general case. */ | |||
| /* I grab each pixel from the surface and unpack the info using the PIXELINFO*/ | |||
| /* structure that was generated from the OffScreen surface pixelformat. The */ | |||
| /* function will not fill in the alpha value as Mesa I have Mesa allocate its*/ | |||
| /* own alpha channel when the context was created. I did this as I didn't */ | |||
| /* feel that it was worth the effort to try and get HW to work (bus bound). */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void RPixelsRGBA( const GLcontext* ctx, GLuint n, const GLint x[], const GLint y[], GLubyte rgba[][4], const GLubyte mask[] ) | |||
| { | |||
| D3DMESACONTEXT *pContext = (D3DMESACONTEXT *)ctx->DriverCtx; | |||
| DDSURFACEDESC2 *pddsd2; | |||
| int index; | |||
| DWORD *pdwColor; | |||
| /* Get the surface pointer and the pitch. */ | |||
| pddsd2 = LockHAL( pContext->pShared, TRUE ); | |||
| if ( mask ) | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| if ( mask[index] ) | |||
| { | |||
| /* Find the start of the pixel. Invert y for Windows. */ | |||
| pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb)); | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| } | |||
| } | |||
| else | |||
| { | |||
| /* We store the surface pointer as a UCHAR so that pixel.cb (count in btyles) will work for all. */ | |||
| for( index = 0; index < n; index++ ) | |||
| { | |||
| /* Find the start of the pixel. Invert y for Windows. */ | |||
| pdwColor = (DWORD *)((UCHAR *)pddsd2->lpSurface + (FLIP(pContext->pShared->dwHeight,y[index]) * pddsd2->lPitch) + (x[index]*pContext->pShared->pixel.cb)); | |||
| rgba[index][RCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwRMask) >> pContext->pShared->pixel.rShift) / pContext->pShared->pixel.rScale); | |||
| rgba[index][GCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwGMask) >> pContext->pShared->pixel.gShift) / pContext->pShared->pixel.gScale); | |||
| rgba[index][BCOMP] = (GLubyte)((float)((*pdwColor & pContext->pShared->pixel.dwBMask) >> pContext->pShared->pixel.bShift) / pContext->pShared->pixel.bScale); | |||
| } | |||
| } | |||
| /* Giver back. */ | |||
| UnlockHAL( pContext->pShared, TRUE ); | |||
| } | |||
| @@ -1,143 +1,143 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "Debug.h" | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| DWORD g_DBGMask = DBG_ALL_ERROR; | |||
| /*===========================================================================*/ | |||
| /* This is your basic DPF function with printf like support. The function */ | |||
| /* also works with a global debug mask variable. I have written support that*/ | |||
| /* allows for the user's enviroment variable space to be read and set the */ | |||
| /* masks. This is done when the dll starts and is only in the debug version.*/ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void _cdecl DebugPrint( int mask, char *pszFormat, ... ) | |||
| { | |||
| char buffer[512]; | |||
| va_list args; | |||
| /* A mask of 0 will always pass. Easy to remeber. */ | |||
| if ( (mask == 0) || (mask & g_DBGMask) ) | |||
| { | |||
| va_start( args, pszFormat ); | |||
| if ( mask & DBG_ALL_ERROR ) | |||
| OutputDebugString( "MesaD3D: (ERROR)" ); | |||
| else | |||
| OutputDebugString( "MesaD3D: " ); | |||
| vsprintf( buffer, pszFormat, args ); | |||
| strcat( buffer, "\n" ); | |||
| OutputDebugString( buffer ); | |||
| va_end( args ); | |||
| } | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This call reads the users enviroment variables and sets any debug mask */ | |||
| /* that they have set to TRUE. Now the value must be "TRUE". */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void ReadDBGEnv( void ) | |||
| { | |||
| g_DBGMask = DBG_ALL_ERROR; | |||
| #define IS_VAR_SET(v) if ( getenv( # v ) && !strcmp(getenv( # v ),"TRUE") ) g_DBGMask |= v; | |||
| IS_VAR_SET( DBG_FUNC ); | |||
| IS_VAR_SET( DBG_STATES ); | |||
| IS_VAR_SET( DBG_CNTX_INFO ); | |||
| IS_VAR_SET( DBG_CNTX_WARN ); | |||
| IS_VAR_SET( DBG_CNTX_PROFILE ); | |||
| IS_VAR_SET( DBG_CNTX_ERROR ); | |||
| IS_VAR_SET( DBG_CNTX_ALL ); | |||
| IS_VAR_SET( DBG_PRIM_INFO ); | |||
| IS_VAR_SET( DBG_PRIM_WARN ); | |||
| IS_VAR_SET( DBG_PRIM_PROFILE ); | |||
| IS_VAR_SET( DBG_PRIM_ERROR ); | |||
| IS_VAR_SET( DBG_PRIM_ALL ); | |||
| IS_VAR_SET( DBG_TXT_INFO ); | |||
| IS_VAR_SET( DBG_TXT_WARN ); | |||
| IS_VAR_SET( DBG_TXT_PROFILE ); | |||
| IS_VAR_SET( DBG_TXT_ERROR ); | |||
| IS_VAR_SET( DBG_TXT_ALL ); | |||
| IS_VAR_SET( DBG_ALL_INFO ); | |||
| IS_VAR_SET( DBG_ALL_WARN ); | |||
| IS_VAR_SET( DBG_ALL_PROFILE ); | |||
| IS_VAR_SET( DBG_ALL_ERROR ); | |||
| IS_VAR_SET( DBG_ALL ); | |||
| #undef IS_VAR_SET | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This function will take a pointer to a DDSURFACEDESC2 structure & display*/ | |||
| /* the parsed information using a DPF call. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf ) | |||
| { | |||
| char buffer[256]; | |||
| /* Parse the flag type and write the string equivalent. */ | |||
| if ( pddpf->dwFlags & DDPF_ALPHA ) | |||
| strcat( buffer, "DDPF_ALPHA " ); | |||
| if ( pddpf->dwFlags & DDPF_ALPHAPIXELS ) | |||
| strcat( buffer, "DDPF_ALPHAPIXELS " ); | |||
| if ( pddpf->dwFlags & DDPF_ALPHAPREMULT ) | |||
| strcat( buffer, "DDPF_ALPHAPREMULT " ); | |||
| if ( pddpf->dwFlags & DDPF_BUMPLUMINANCE ) | |||
| strcat( buffer, "DDPF_BUMPLUMINANCE " ); | |||
| if ( pddpf->dwFlags & DDPF_BUMPDUDV ) | |||
| strcat( buffer, "DDPF_BUMPDUDV " ); | |||
| if ( pddpf->dwFlags & DDPF_COMPRESSED ) | |||
| strcat( buffer, "DDPF_COMPRESSED " ); | |||
| if ( pddpf->dwFlags & DDPF_FOURCC ) | |||
| strcat( buffer, "DDPF_FOURCC " ); | |||
| if ( pddpf->dwFlags & DDPF_LUMINANCE ) | |||
| strcat( buffer, "DDPF_LUMINANCE " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED1 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED1 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED2 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED2 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED4 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED4 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED8 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED8 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXEDTO8 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXEDTO8 " ); | |||
| if ( pddpf->dwFlags & DDPF_RGB ) | |||
| strcat( buffer, "DDPF_RGB " ); | |||
| if ( pddpf->dwFlags & DDPF_RGBTOYUV ) | |||
| strcat( buffer, "DDPF_RGBTOYUV " ); | |||
| if ( pddpf->dwFlags & DDPF_STENCILBUFFER ) | |||
| strcat( buffer, "DDPF_STENCILBUFFER " ); | |||
| if ( pddpf->dwFlags & DDPF_YUV ) | |||
| strcat( buffer, "DDPF_YUV " ); | |||
| if ( pddpf->dwFlags & DDPF_ZBUFFER ) | |||
| strcat( buffer, "DDPF_ZBUFFER " ); | |||
| if ( pddpf->dwFlags & DDPF_ZPIXELS ) | |||
| strcat( buffer, "DDPF_ZPIXELS " ); | |||
| DPF(( (DBG_TXT_INFO|DBG_CNTX_INFO),"%s", buffer )); | |||
| } | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #include "Debug.h" | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| DWORD g_DBGMask = DBG_ALL_ERROR; | |||
| /*===========================================================================*/ | |||
| /* This is your basic DPF function with printf like support. The function */ | |||
| /* also works with a global debug mask variable. I have written support that*/ | |||
| /* allows for the user's enviroment variable space to be read and set the */ | |||
| /* masks. This is done when the dll starts and is only in the debug version.*/ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void _cdecl DebugPrint( int mask, char *pszFormat, ... ) | |||
| { | |||
| char buffer[512]; | |||
| va_list args; | |||
| /* A mask of 0 will always pass. Easy to remeber. */ | |||
| if ( (mask == 0) || (mask & g_DBGMask) ) | |||
| { | |||
| va_start( args, pszFormat ); | |||
| if ( mask & DBG_ALL_ERROR ) | |||
| OutputDebugString( "MesaD3D: (ERROR)" ); | |||
| else | |||
| OutputDebugString( "MesaD3D: " ); | |||
| vsprintf( buffer, pszFormat, args ); | |||
| strcat( buffer, "\n" ); | |||
| OutputDebugString( buffer ); | |||
| va_end( args ); | |||
| } | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This call reads the users enviroment variables and sets any debug mask */ | |||
| /* that they have set to TRUE. Now the value must be "TRUE". */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void ReadDBGEnv( void ) | |||
| { | |||
| g_DBGMask = DBG_ALL_ERROR; | |||
| #define IS_VAR_SET(v) if ( getenv( # v ) && !strcmp(getenv( # v ),"TRUE") ) g_DBGMask |= v; | |||
| IS_VAR_SET( DBG_FUNC ); | |||
| IS_VAR_SET( DBG_STATES ); | |||
| IS_VAR_SET( DBG_CNTX_INFO ); | |||
| IS_VAR_SET( DBG_CNTX_WARN ); | |||
| IS_VAR_SET( DBG_CNTX_PROFILE ); | |||
| IS_VAR_SET( DBG_CNTX_ERROR ); | |||
| IS_VAR_SET( DBG_CNTX_ALL ); | |||
| IS_VAR_SET( DBG_PRIM_INFO ); | |||
| IS_VAR_SET( DBG_PRIM_WARN ); | |||
| IS_VAR_SET( DBG_PRIM_PROFILE ); | |||
| IS_VAR_SET( DBG_PRIM_ERROR ); | |||
| IS_VAR_SET( DBG_PRIM_ALL ); | |||
| IS_VAR_SET( DBG_TXT_INFO ); | |||
| IS_VAR_SET( DBG_TXT_WARN ); | |||
| IS_VAR_SET( DBG_TXT_PROFILE ); | |||
| IS_VAR_SET( DBG_TXT_ERROR ); | |||
| IS_VAR_SET( DBG_TXT_ALL ); | |||
| IS_VAR_SET( DBG_ALL_INFO ); | |||
| IS_VAR_SET( DBG_ALL_WARN ); | |||
| IS_VAR_SET( DBG_ALL_PROFILE ); | |||
| IS_VAR_SET( DBG_ALL_ERROR ); | |||
| IS_VAR_SET( DBG_ALL ); | |||
| #undef IS_VAR_SET | |||
| } | |||
| /*===========================================================================*/ | |||
| /* This function will take a pointer to a DDSURFACEDESC2 structure & display*/ | |||
| /* the parsed information using a DPF call. */ | |||
| /*===========================================================================*/ | |||
| /* RETURN: */ | |||
| /*===========================================================================*/ | |||
| void DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf ) | |||
| { | |||
| char buffer[256]; | |||
| /* Parse the flag type and write the string equivalent. */ | |||
| if ( pddpf->dwFlags & DDPF_ALPHA ) | |||
| strcat( buffer, "DDPF_ALPHA " ); | |||
| if ( pddpf->dwFlags & DDPF_ALPHAPIXELS ) | |||
| strcat( buffer, "DDPF_ALPHAPIXELS " ); | |||
| if ( pddpf->dwFlags & DDPF_ALPHAPREMULT ) | |||
| strcat( buffer, "DDPF_ALPHAPREMULT " ); | |||
| if ( pddpf->dwFlags & DDPF_BUMPLUMINANCE ) | |||
| strcat( buffer, "DDPF_BUMPLUMINANCE " ); | |||
| if ( pddpf->dwFlags & DDPF_BUMPDUDV ) | |||
| strcat( buffer, "DDPF_BUMPDUDV " ); | |||
| if ( pddpf->dwFlags & DDPF_COMPRESSED ) | |||
| strcat( buffer, "DDPF_COMPRESSED " ); | |||
| if ( pddpf->dwFlags & DDPF_FOURCC ) | |||
| strcat( buffer, "DDPF_FOURCC " ); | |||
| if ( pddpf->dwFlags & DDPF_LUMINANCE ) | |||
| strcat( buffer, "DDPF_LUMINANCE " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED1 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED1 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED2 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED2 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED4 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED4 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXED8 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXED8 " ); | |||
| if ( pddpf->dwFlags & DDPF_PALETTEINDEXEDTO8 ) | |||
| strcat( buffer, "DDPF_PALETTEINDEXEDTO8 " ); | |||
| if ( pddpf->dwFlags & DDPF_RGB ) | |||
| strcat( buffer, "DDPF_RGB " ); | |||
| if ( pddpf->dwFlags & DDPF_RGBTOYUV ) | |||
| strcat( buffer, "DDPF_RGBTOYUV " ); | |||
| if ( pddpf->dwFlags & DDPF_STENCILBUFFER ) | |||
| strcat( buffer, "DDPF_STENCILBUFFER " ); | |||
| if ( pddpf->dwFlags & DDPF_YUV ) | |||
| strcat( buffer, "DDPF_YUV " ); | |||
| if ( pddpf->dwFlags & DDPF_ZBUFFER ) | |||
| strcat( buffer, "DDPF_ZBUFFER " ); | |||
| if ( pddpf->dwFlags & DDPF_ZPIXELS ) | |||
| strcat( buffer, "DDPF_ZPIXELS " ); | |||
| DPF(( (DBG_TXT_INFO|DBG_CNTX_INFO),"%s", buffer )); | |||
| } | |||
| @@ -1,90 +1,90 @@ | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _DEBUG_H | |||
| #define _DEBUG_H | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include "D3DShared.h" | |||
| /*===========================================================================*/ | |||
| /* Magic numbers. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Macros defines. */ | |||
| /*===========================================================================*/ | |||
| #define DBG_FUNC 0x00000001 | |||
| #define DBG_STATES 0x00000002 | |||
| #define DBG_CNTX_INFO 0x00000010 | |||
| #define DBG_CNTX_WARN 0x00000020 | |||
| #define DBG_CNTX_PROFILE 0x00000040 | |||
| #define DBG_CNTX_ERROR 0x00000080 | |||
| #define DBG_CNTX_ALL 0x000000F0 | |||
| #define DBG_PRIM_INFO 0x00000100 | |||
| #define DBG_PRIM_WARN 0x00000200 | |||
| #define DBG_PRIM_PROFILE 0x00000400 | |||
| #define DBG_PRIM_ERROR 0x00000800 | |||
| #define DBG_PRIM_ALL 0x00000F00 | |||
| #define DBG_TXT_INFO 0x00001000 | |||
| #define DBG_TXT_WARN 0x00002000 | |||
| #define DBG_TXT_PROFILE 0x00004000 | |||
| #define DBG_TXT_ERROR 0x00008000 | |||
| #define DBG_TXT_ALL 0x0000F000 | |||
| #define DBG_ALL_INFO 0x11111110 | |||
| #define DBG_ALL_WARN 0x22222220 | |||
| #define DBG_ALL_PROFILE 0x44444440 | |||
| #define DBG_ALL_ERROR 0x88888880 | |||
| #define DBG_ALL 0xFFFFFFFF | |||
| #ifdef D3D_DEBUG | |||
| # define DPF(arg) DebugPrint arg | |||
| # define RIP(pH,msg,err) OutputDebugString(msg); \ | |||
| OutputDebugString(err); \ | |||
| OutputDebugString("\n"); \ | |||
| FatalShutDown(pH) | |||
| #else | |||
| # define DPF(arg) | |||
| # define RIP(pH,msg,err) FatalShutDown(pH) | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern void ReadDBGEnv( void ); | |||
| extern void _cdecl DebugPrint( int mask, char *pszFormat, ... ); | |||
| extern void DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern DWORD g_DBGMask; | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* */ | |||
| /* Mesa-3.0 DirectX 6 Driver */ | |||
| /* */ | |||
| /* By Leigh McRae */ | |||
| /* */ | |||
| /* http://www.altsoftware.com/ */ | |||
| /* */ | |||
| /* Copyright (c) 1999-1998 alt.software inc. All Rights Reserved */ | |||
| /*===========================================================================*/ | |||
| #ifndef _DEBUG_H | |||
| #define _DEBUG_H | |||
| #ifdef __cplusplus | |||
| extern "C" { | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* Includes. */ | |||
| /*===========================================================================*/ | |||
| #include <stdio.h> | |||
| #include <string.h> | |||
| #include <ddraw.h> | |||
| #include <d3d.h> | |||
| #include "D3DShared.h" | |||
| /*===========================================================================*/ | |||
| /* Magic numbers. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Macros defines. */ | |||
| /*===========================================================================*/ | |||
| #define DBG_FUNC 0x00000001 | |||
| #define DBG_STATES 0x00000002 | |||
| #define DBG_CNTX_INFO 0x00000010 | |||
| #define DBG_CNTX_WARN 0x00000020 | |||
| #define DBG_CNTX_PROFILE 0x00000040 | |||
| #define DBG_CNTX_ERROR 0x00000080 | |||
| #define DBG_CNTX_ALL 0x000000F0 | |||
| #define DBG_PRIM_INFO 0x00000100 | |||
| #define DBG_PRIM_WARN 0x00000200 | |||
| #define DBG_PRIM_PROFILE 0x00000400 | |||
| #define DBG_PRIM_ERROR 0x00000800 | |||
| #define DBG_PRIM_ALL 0x00000F00 | |||
| #define DBG_TXT_INFO 0x00001000 | |||
| #define DBG_TXT_WARN 0x00002000 | |||
| #define DBG_TXT_PROFILE 0x00004000 | |||
| #define DBG_TXT_ERROR 0x00008000 | |||
| #define DBG_TXT_ALL 0x0000F000 | |||
| #define DBG_ALL_INFO 0x11111110 | |||
| #define DBG_ALL_WARN 0x22222220 | |||
| #define DBG_ALL_PROFILE 0x44444440 | |||
| #define DBG_ALL_ERROR 0x88888880 | |||
| #define DBG_ALL 0xFFFFFFFF | |||
| #ifdef D3D_DEBUG | |||
| # define DPF(arg) DebugPrint arg | |||
| # define RIP(pH,msg,err) OutputDebugString(msg); \ | |||
| OutputDebugString(err); \ | |||
| OutputDebugString("\n"); \ | |||
| FatalShutDown(pH) | |||
| #else | |||
| # define DPF(arg) | |||
| # define RIP(pH,msg,err) FatalShutDown(pH) | |||
| #endif | |||
| /*===========================================================================*/ | |||
| /* Type defines. */ | |||
| /*===========================================================================*/ | |||
| /*===========================================================================*/ | |||
| /* Function prototypes. */ | |||
| /*===========================================================================*/ | |||
| extern void ReadDBGEnv( void ); | |||
| extern void _cdecl DebugPrint( int mask, char *pszFormat, ... ); | |||
| extern void DebugPixelFormat( char *pszSurfaceName, DDPIXELFORMAT *pddpf ); | |||
| /*===========================================================================*/ | |||
| /* Global variables. */ | |||
| /*===========================================================================*/ | |||
| extern DWORD g_DBGMask; | |||
| #ifdef __cplusplus | |||
| } | |||
| #endif | |||
| #endif | |||
| @@ -1,25 +1,25 @@ | |||
| SET DBG_FUNC=FALSE | |||
| SET DBG_CNTX_INFO=TRUE | |||
| SET DBG_CNTX_WARN=TRUE | |||
| SET DBG_CNTX_PROFILE=FALSE | |||
| SET DBG_CNTX_ERROR=TRUE | |||
| SET DBG_CNTX_ALL=TRUE | |||
| SET DBG_PRIM_INFO=FALSE | |||
| SET DBG_PRIM_WARN=FALSE | |||
| SET DBG_PRIM_PROFILE=FALSE | |||
| SET DBG_PRIM_ERROR=TRUE | |||
| SET DBG_PRIM_ALL=FALSE | |||
| SET DBG_TXT_INFO=FALSE | |||
| SET DBG_TXT_WARN=TRUE | |||
| SET DBG_TXT_PROFILE=FALSE | |||
| SET DBG_TXT_ERROR=TRUE | |||
| SET DBG_TXT_ALL=FALSE | |||
| SET DBG_ALL_INFO=FALSE | |||
| SET DBG_ALL_WARN=TRUE | |||
| SET DBG_ALL_PROFILE=FALSE | |||
| SET DBG_ALL_ERROR=TRUE | |||
| SET DBG_ALL=FALSE | |||
| SET DBG_FUNC=FALSE | |||
| SET DBG_CNTX_INFO=TRUE | |||
| SET DBG_CNTX_WARN=TRUE | |||
| SET DBG_CNTX_PROFILE=FALSE | |||
| SET DBG_CNTX_ERROR=TRUE | |||
| SET DBG_CNTX_ALL=TRUE | |||
| SET DBG_PRIM_INFO=FALSE | |||
| SET DBG_PRIM_WARN=FALSE | |||
| SET DBG_PRIM_PROFILE=FALSE | |||
| SET DBG_PRIM_ERROR=TRUE | |||
| SET DBG_PRIM_ALL=FALSE | |||
| SET DBG_TXT_INFO=FALSE | |||
| SET DBG_TXT_WARN=TRUE | |||
| SET DBG_TXT_PROFILE=FALSE | |||
| SET DBG_TXT_ERROR=TRUE | |||
| SET DBG_TXT_ALL=FALSE | |||
| SET DBG_ALL_INFO=FALSE | |||
| SET DBG_ALL_WARN=TRUE | |||
| SET DBG_ALL_PROFILE=FALSE | |||
| SET DBG_ALL_ERROR=TRUE | |||
| SET DBG_ALL=FALSE | |||
| @@ -1,101 +1,101 @@ | |||
| ############################################################################## | |||
| # | |||
| # Mesa-3.0 Makefile for DirectX 6 Driver | |||
| # | |||
| # By Leigh McRae | |||
| # | |||
| # http://www.altsoftware.com/ | |||
| # | |||
| # Copyright (c) 1999-1998 alt.software inc. All Rights Reserved | |||
| ############################################################################## | |||
| NAME= | |||
| TARGET= WGL Driver (D3DHAL) | |||
| D3D_DIR=$(MAKEDIR)\D3D | |||
| TARGET_DIR=e:\WinNT\System32 | |||
| TEMP_DIR=c:\Temp | |||
| SPACE=- | |||
| LINKER=link.exe | |||
| INCLUDE=$(SDKROOT)\include;$(INCLUDE) | |||
| LIB=$(SDKROOT)\lib;$(LIB) | |||
| ############################################################################## | |||
| CFLAGS = /c /nologo /W1 /G5 /I..\ /I..\..\Include \ | |||
| /D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__" /D "MESAD3D" | |||
| CPPFLAGS= /c /nologo /W1 /G5 /I..\ /I..\..\Include \ | |||
| /D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__" /D "MESAD3D" | |||
| !IF "$(DEBUG)" == "1" | |||
| CFLAGS = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CFLAGS) | |||
| CPPFLAGS = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CPPFLAGS) | |||
| BUILD_TYPE=debug | |||
| !ELSE | |||
| CFLAGS = /MT /Ox /D "NDEBUG" $(CFLAGS) | |||
| CPPFLAGS = /MT /Ox /D "NDEBUG" $(CPPFLAGS) | |||
| BUILD_TYPE=release | |||
| !ENDIF | |||
| ############################################################################## | |||
| SRCS_WGL = wgl.c D3Dvbrender.c DDrawPROCS.c NULLProcs.c Debug.c | |||
| SRCS_HAL = D3DInit.cpp D3DRaster.cpp D3DTextureMgr.cpp D3DUtils.cpp D3DCaps.cpp | |||
| OBJS_WGL = $(SRCS_WGL:.c=.obj) | |||
| OBJS_HAL = $(SRCS_HAL:.cpp=.obj) | |||
| WINLIBS = kernel32.lib user32.lib gdi32.lib oldnames.lib | |||
| DXLIBS = | |||
| LIBS = $(WINLIBS) $(DXLIBS) | |||
| ############################################################################### | |||
| # Primary Targets # | |||
| ############################################################################### | |||
| default: header WGL HAL footer | |||
| all: default | |||
| WGL : $(OBJS_WGL) | |||
| HAL : $(OBJS_HAL) | |||
| install : forceit | |||
| @echo $(SPACE) | |||
| @echo ======================================== | |||
| @echo Install files created. | |||
| @echo ======================================== | |||
| ############################################################################### | |||
| # Secondary Targets # | |||
| ############################################################################### | |||
| clean: | |||
| @echo ======================================== | |||
| @echo Cleaning $(TARGET) | |||
| @del *.obj | |||
| @del *.dep | |||
| @del *.exp | |||
| @del *.ncb | |||
| @del *.plg | |||
| @del *.lib | |||
| @echo ======================================== | |||
| header: | |||
| @echo ============================================================ | |||
| @echo Building $(TARGET) ($(BUILD_TYPE) version) | |||
| @echo ============================================================ | |||
| @echo $(SPACE) | |||
| footer: | |||
| @echo $(SPACE) | |||
| @echo ============================================================ | |||
| @echo DONE building $(TARGET) ($(BUILD_TYPE) version) | |||
| @echo ============================================================ | |||
| forceit: | |||
| ############################################################################## | |||
| # | |||
| # Mesa-3.0 Makefile for DirectX 6 Driver | |||
| # | |||
| # By Leigh McRae | |||
| # | |||
| # http://www.altsoftware.com/ | |||
| # | |||
| # Copyright (c) 1999-1998 alt.software inc. All Rights Reserved | |||
| ############################################################################## | |||
| NAME= | |||
| TARGET= WGL Driver (D3DHAL) | |||
| D3D_DIR=$(MAKEDIR)\D3D | |||
| TARGET_DIR=e:\WinNT\System32 | |||
| TEMP_DIR=c:\Temp | |||
| SPACE=- | |||
| LINKER=link.exe | |||
| INCLUDE=$(SDKROOT)\include;$(INCLUDE) | |||
| LIB=$(SDKROOT)\lib;$(LIB) | |||
| ############################################################################## | |||
| CFLAGS = /c /nologo /W1 /G5 /I..\ /I..\..\Include \ | |||
| /D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__" /D "MESAD3D" | |||
| CPPFLAGS= /c /nologo /W1 /G5 /I..\ /I..\..\Include \ | |||
| /D "_WIN32" /D "WIN32" /D "_WINDOWS" /D "__WIN32__" /D "__MSC__" /D "MESAD3D" | |||
| !IF "$(DEBUG)" == "1" | |||
| CFLAGS = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CFLAGS) | |||
| CPPFLAGS = /MTd /Od /Z7 /Yd /D "_DEBUG" /D "D3D_DEBUG" $(CPPFLAGS) | |||
| BUILD_TYPE=debug | |||
| !ELSE | |||
| CFLAGS = /MT /Ox /D "NDEBUG" $(CFLAGS) | |||
| CPPFLAGS = /MT /Ox /D "NDEBUG" $(CPPFLAGS) | |||
| BUILD_TYPE=release | |||
| !ENDIF | |||
| ############################################################################## | |||
| SRCS_WGL = wgl.c D3Dvbrender.c DDrawPROCS.c NULLProcs.c Debug.c | |||
| SRCS_HAL = D3DInit.cpp D3DRaster.cpp D3DTextureMgr.cpp D3DUtils.cpp D3DCaps.cpp | |||
| OBJS_WGL = $(SRCS_WGL:.c=.obj) | |||
| OBJS_HAL = $(SRCS_HAL:.cpp=.obj) | |||
| WINLIBS = kernel32.lib user32.lib gdi32.lib oldnames.lib | |||
| DXLIBS = | |||
| LIBS = $(WINLIBS) $(DXLIBS) | |||
| ############################################################################### | |||
| # Primary Targets # | |||
| ############################################################################### | |||
| default: header WGL HAL footer | |||
| all: default | |||
| WGL : $(OBJS_WGL) | |||
| HAL : $(OBJS_HAL) | |||
| install : forceit | |||
| @echo $(SPACE) | |||
| @echo ======================================== | |||
| @echo Install files created. | |||
| @echo ======================================== | |||
| ############################################################################### | |||
| # Secondary Targets # | |||
| ############################################################################### | |||
| clean: | |||
| @echo ======================================== | |||
| @echo Cleaning $(TARGET) | |||
| @del *.obj | |||
| @del *.dep | |||
| @del *.exp | |||
| @del *.ncb | |||
| @del *.plg | |||
| @del *.lib | |||
| @echo ======================================== | |||
| header: | |||
| @echo ============================================================ | |||
| @echo Building $(TARGET) ($(BUILD_TYPE) version) | |||
| @echo ============================================================ | |||
| @echo $(SPACE) | |||
| footer: | |||
| @echo $(SPACE) | |||
| @echo ============================================================ | |||
| @echo DONE building $(TARGET) ($(BUILD_TYPE) version) | |||
| @echo ============================================================ | |||
| forceit: | |||
| @@ -1,442 +1,442 @@ | |||
| ;=========================================================================== | |||
| ; | |||
| ; Mesa-3.0 DirectX 6 Driver | |||
| ; | |||
| ; By Leigh McRae | |||
| ; | |||
| ; http://www.altsoftware.com/ | |||
| ; | |||
| ; Copyright (c) 1999-1998 alt.software inc. All Rights Reserved | |||
| ;=========================================================================== | |||
| NAME OpenGL32.DLL | |||
| DESCRIPTION "Mesa-3.0 DX6 Driver Version 0.5" | |||
| EXPORTS | |||
| DllMain | |||
| glAccum | |||
| glAlphaFunc | |||
| glAreTexturesResident | |||
| glAreTexturesResidentEXT | |||
| glArrayElement | |||
| glArrayElementEXT | |||
| glBegin | |||
| glBindTexture | |||
| glBindTextureEXT | |||
| glBitmap | |||
| glBlendColorEXT | |||
| glBlendEquationEXT | |||
| glBlendFunc | |||
| glCallList | |||
| glCallLists | |||
| glClear | |||
| glClearAccum | |||
| glClearColor | |||
| glClearDepth | |||
| glClearIndex | |||
| glClearStencil | |||
| glClipPlane | |||
| glColor3b | |||
| glColor3bv | |||
| glColor3d | |||
| glColor3dv | |||
| glColor3f | |||
| glColor3fv | |||
| glColor3i | |||
| glColor3iv | |||
| glColor3s | |||
| glColor3sv | |||
| glColor3ub | |||
| glColor3ubv | |||
| glColor3ui | |||
| glColor3uiv | |||
| glColor3us | |||
| glColor3usv | |||
| glColor4b | |||
| glColor4bv | |||
| glColor4d | |||
| glColor4dv | |||
| glColor4f | |||
| glColor4fv | |||
| glColor4i | |||
| glColor4iv | |||
| glColor4s | |||
| glColor4sv | |||
| glColor4ub | |||
| glColor4ubv | |||
| glColor4ui | |||
| glColor4uiv | |||
| glColor4us | |||
| glColor4usv | |||
| glColorMask | |||
| glColorMaterial | |||
| glColorPointer | |||
| glColorPointerEXT | |||
| glColorSubTableEXT | |||
| glColorTableEXT | |||
| glCopyPixels | |||
| glCopyTexImage1D | |||
| glCopyTexImage2D | |||
| glCopyTexSubImage1D | |||
| glCopyTexSubImage2D | |||
| glCopyTexSubImage3DEXT | |||
| glCullFace | |||
| glDeleteLists | |||
| glDeleteTextures | |||
| glDeleteTexturesEXT | |||
| glDepthFunc | |||
| glDepthMask | |||
| glDepthRange | |||
| glDisable | |||
| glDisableClientState | |||
| glDrawArrays | |||
| glDrawArraysEXT | |||
| glDrawBuffer | |||
| glDrawElements | |||
| glDrawPixels | |||
| glEdgeFlag | |||
| glEdgeFlagPointer | |||
| glEdgeFlagPointerEXT | |||
| glEdgeFlagv | |||
| glEnable | |||
| glEnableClientState | |||
| glEnd | |||
| glEndList | |||
| glEvalCoord1d | |||
| glEvalCoord1dv | |||
| glEvalCoord1f | |||
| glEvalCoord1fv | |||
| glEvalCoord2d | |||
| glEvalCoord2dv | |||
| glEvalCoord2f | |||
| glEvalCoord2fv | |||
| glEvalMesh1 | |||
| glEvalMesh2 | |||
| glEvalPoint1 | |||
| glEvalPoint2 | |||
| glFeedbackBuffer | |||
| glFinish | |||
| glFlush | |||
| glFogf | |||
| glFogfv | |||
| glFogi | |||
| glFogiv | |||
| glFrontFace | |||
| glFrustum | |||
| glGenLists | |||
| glGenTextures | |||
| glGenTexturesEXT | |||
| glGetBooleanv | |||
| glGetClipPlane | |||
| glGetColorTableEXT | |||
| glGetColorTableParameterfvEXT | |||
| glGetColorTableParameterivEXT | |||
| glGetDoublev | |||
| glGetError | |||
| glGetFloatv | |||
| glGetIntegerv | |||
| glGetLightfv | |||
| glGetLightiv | |||
| glGetMapdv | |||
| glGetMapfv | |||
| glGetMapiv | |||
| glGetMaterialfv | |||
| glGetMaterialiv | |||
| glGetPixelMapfv | |||
| glGetPixelMapuiv | |||
| glGetPixelMapusv | |||
| glGetPointerv | |||
| glGetPointervEXT | |||
| glGetPolygonStipple | |||
| glGetString | |||
| glGetTexEnvfv | |||
| glGetTexEnviv | |||
| glGetTexGendv | |||
| glGetTexGenfv | |||
| glGetTexGeniv | |||
| glGetTexImage | |||
| glGetTexLevelParameterfv | |||
| glGetTexLevelParameteriv | |||
| glGetTexParameterfv | |||
| glGetTexParameteriv | |||
| glHint | |||
| glIndexd | |||
| glIndexdv | |||
| glIndexf | |||
| glIndexfv | |||
| glIndexi | |||
| glIndexiv | |||
| glIndexMask | |||
| glIndexPointer | |||
| glIndexPointerEXT | |||
| glIndexs | |||
| glIndexsv | |||
| glIndexub | |||
| glIndexubv | |||
| glInitNames | |||
| glInterleavedArrays | |||
| glIsEnabled | |||
| glIsList | |||
| glIsTexture | |||
| glIsTextureEXT | |||
| glLightf | |||
| glLightfv | |||
| glLighti | |||
| glLightiv | |||
| glLightModelf | |||
| glLightModelfv | |||
| glLightModeli | |||
| glLightModeliv | |||
| glLineStipple | |||
| glLineWidth | |||
| glListBase | |||
| glLoadIdentity | |||
| glLoadMatrixd | |||
| glLoadMatrixf | |||
| glLoadName | |||
| glLogicOp | |||
| glMap1d | |||
| glMap1f | |||
| glMap2d | |||
| glMap2f | |||
| glMapGrid1d | |||
| glMapGrid1f | |||
| glMapGrid2d | |||
| glMapGrid2f | |||
| glMaterialf | |||
| glMaterialfv | |||
| glMateriali | |||
| glMaterialiv | |||
| glMatrixMode | |||
| glMultMatrixd | |||
| glMultMatrixf | |||
| glNewList | |||
| glNormal3b | |||
| glNormal3bv | |||
| glNormal3d | |||
| glNormal3dv | |||
| glNormal3f | |||
| glNormal3fv | |||
| glNormal3i | |||
| glNormal3iv | |||
| glNormal3s | |||
| glNormal3sv | |||
| glNormalPointer | |||
| glNormalPointerEXT | |||
| glOrtho | |||
| glPassThrough | |||
| glPixelMapfv | |||
| glPixelMapuiv | |||
| glPixelMapusv | |||
| glPixelStoref | |||
| glPixelStorei | |||
| glPixelTransferf | |||
| glPixelTransferi | |||
| glPixelZoom | |||
| glPointParameterfEXT | |||
| glPointParameterfvEXT | |||
| glPointSize | |||
| glPolygonMode | |||
| glPolygonOffset | |||
| glPolygonOffsetEXT | |||
| glPolygonStipple | |||
| glPopAttrib | |||
| glPopClientAttrib | |||
| glPopMatrix | |||
| glPopName | |||
| glPrioritizeTextures | |||
| glPrioritizeTexturesEXT | |||
| glPushAttrib | |||
| glPushClientAttrib | |||
| glPushMatrix | |||
| glPushName | |||
| glRasterPos2d | |||
| glRasterPos2dv | |||
| glRasterPos2f | |||
| glRasterPos2fv | |||
| glRasterPos2i | |||
| glRasterPos2iv | |||
| glRasterPos2s | |||
| glRasterPos2sv | |||
| glRasterPos3d | |||
| glRasterPos3dv | |||
| glRasterPos3f | |||
| glRasterPos3fv | |||
| glRasterPos3i | |||
| glRasterPos3iv | |||
| glRasterPos3s | |||
| glRasterPos3sv | |||
| glRasterPos4d | |||
| glRasterPos4dv | |||
| glRasterPos4f | |||
| glRasterPos4fv | |||
| glRasterPos4i | |||
| glRasterPos4iv | |||
| glRasterPos4s | |||
| glRasterPos4sv | |||
| glReadBuffer | |||
| glReadPixels | |||
| glRectd | |||
| glRectdv | |||
| glRectf | |||
| glRectfv | |||
| glRecti | |||
| glRectiv | |||
| glRects | |||
| glRectsv | |||
| glRenderMode | |||
| glResizeBuffersMESA | |||
| glRotated | |||
| glRotatef | |||
| glScaled | |||
| glScalef | |||
| glScissor | |||
| glSelectBuffer | |||
| glShadeModel | |||
| glStencilFunc | |||
| glStencilMask | |||
| glStencilOp | |||
| glTexCoord1d | |||
| glTexCoord1dv | |||
| glTexCoord1f | |||
| glTexCoord1fv | |||
| glTexCoord1i | |||
| glTexCoord1iv | |||
| glTexCoord1s | |||
| glTexCoord1sv | |||
| glTexCoord2d | |||
| glTexCoord2dv | |||
| glTexCoord2f | |||
| glTexCoord2fv | |||
| glTexCoord2i | |||
| glTexCoord2iv | |||
| glTexCoord2s | |||
| glTexCoord2sv | |||
| glTexCoord3d | |||
| glTexCoord3dv | |||
| glTexCoord3f | |||
| glTexCoord3fv | |||
| glTexCoord3i | |||
| glTexCoord3iv | |||
| glTexCoord3s | |||
| glTexCoord3sv | |||
| glTexCoord4d | |||
| glTexCoord4dv | |||
| glTexCoord4f | |||
| glTexCoord4fv | |||
| glTexCoord4i | |||
| glTexCoord4iv | |||
| glTexCoord4s | |||
| glTexCoord4sv | |||
| glTexCoordPointer | |||
| glTexCoordPointerEXT | |||
| glTexEnvf | |||
| glTexEnvfv | |||
| glTexEnvi | |||
| glTexEnviv | |||
| glTexGend | |||
| glTexGendv | |||
| glTexGenf | |||
| glTexGenfv | |||
| glTexGeni | |||
| glTexGeniv | |||
| glTexImage1D | |||
| glTexImage2D | |||
| glTexImage3DEXT | |||
| glTexParameterf | |||
| glTexParameterfv | |||
| glTexParameteri | |||
| glTexParameteriv | |||
| glTexSubImage1D | |||
| glTexSubImage2D | |||
| glTexSubImage3DEXT | |||
| glTranslated | |||
| glTranslatef | |||
| glVertex2d | |||
| glVertex2dv | |||
| glVertex2f | |||
| glVertex2fv | |||
| glVertex2i | |||
| glVertex2iv | |||
| glVertex2s | |||
| glVertex2sv | |||
| glVertex3d | |||
| glVertex3dv | |||
| glVertex3f | |||
| glVertex3fv | |||
| glVertex3i | |||
| glVertex3iv | |||
| glVertex3s | |||
| glVertex3sv | |||
| glVertex4d | |||
| glVertex4dv | |||
| glVertex4f | |||
| glVertex4fv | |||
| glVertex4i | |||
| glVertex4iv | |||
| glVertex4s | |||
| glVertex4sv | |||
| glVertexPointer | |||
| glVertexPointerEXT | |||
| glViewport | |||
| glWindowPos2dMESA | |||
| glWindowPos2dvMESA | |||
| glWindowPos2fMESA | |||
| glWindowPos2fvMESA | |||
| glWindowPos2iMESA | |||
| glWindowPos2ivMESA | |||
| glWindowPos2sMESA | |||
| glWindowPos2svMESA | |||
| glWindowPos3dMESA | |||
| glWindowPos3dvMESA | |||
| glWindowPos3fMESA | |||
| glWindowPos3fvMESA | |||
| glWindowPos3iMESA | |||
| glWindowPos3ivMESA | |||
| glWindowPos3sMESA | |||
| glWindowPos3svMESA | |||
| glWindowPos4dMESA | |||
| glWindowPos4dvMESA | |||
| glWindowPos4fMESA | |||
| glWindowPos4fvMESA | |||
| glWindowPos4iMESA | |||
| glWindowPos4ivMESA | |||
| glWindowPos4sMESA | |||
| glWindowPos4svMESA | |||
| ; WMesaCreateContext | |||
| ; WMesaDestroyContext | |||
| ; WMesaMakeCurrent | |||
| ; WMesaPaletteChange | |||
| ; WMesaSwapBuffers | |||
| ; OSMesaCreateContext | |||
| ; OSMesaDestroyContext | |||
| ; OSMesaMakeCurrent | |||
| ; OSMesaGetCurrentContext | |||
| ; OSMesaPixelStore | |||
| ; OSMesaGetIntegerv | |||
| ; OSMesaGetDepthBuffer | |||
| wglCopyContext | |||
| wglCreateContext | |||
| wglCreateLayerContext | |||
| wglDeleteContext | |||
| ; wglDescribeLayerPlane | |||
| wglGetCurrentContext | |||
| wglGetCurrentDC | |||
| ; wglGetLayerPaletteEntries | |||
| wglGetProcAddress | |||
| wglMakeCurrent | |||
| ; wglRealizeLayerPalette | |||
| ; wglSetLayerPaletteEntries | |||
| wglShareLists | |||
| wglSwapLayerBuffers | |||
| wglUseFontBitmapsA | |||
| wglUseFontBitmapsW | |||
| wglUseFontOutlinesA | |||
| wglUseFontOutlinesW | |||
| wglChoosePixelFormat | |||
| wglDescribePixelFormat | |||
| wglGetPixelFormat | |||
| wglSetPixelFormat | |||
| wglSwapBuffers | |||
| ;=========================================================================== | |||
| ; | |||
| ; Mesa-3.0 DirectX 6 Driver | |||
| ; | |||
| ; By Leigh McRae | |||
| ; | |||
| ; http://www.altsoftware.com/ | |||
| ; | |||
| ; Copyright (c) 1999-1998 alt.software inc. All Rights Reserved | |||
| ;=========================================================================== | |||
| NAME OpenGL32.DLL | |||
| DESCRIPTION "Mesa-3.0 DX6 Driver Version 0.5" | |||
| EXPORTS | |||
| DllMain | |||
| glAccum | |||
| glAlphaFunc | |||
| glAreTexturesResident | |||
| glAreTexturesResidentEXT | |||
| glArrayElement | |||
| glArrayElementEXT | |||
| glBegin | |||
| glBindTexture | |||
| glBindTextureEXT | |||
| glBitmap | |||
| glBlendColorEXT | |||
| glBlendEquationEXT | |||
| glBlendFunc | |||
| glCallList | |||
| glCallLists | |||
| glClear | |||
| glClearAccum | |||
| glClearColor | |||
| glClearDepth | |||
| glClearIndex | |||
| glClearStencil | |||
| glClipPlane | |||
| glColor3b | |||
| glColor3bv | |||
| glColor3d | |||
| glColor3dv | |||
| glColor3f | |||
| glColor3fv | |||
| glColor3i | |||
| glColor3iv | |||
| glColor3s | |||
| glColor3sv | |||
| glColor3ub | |||
| glColor3ubv | |||
| glColor3ui | |||
| glColor3uiv | |||
| glColor3us | |||
| glColor3usv | |||
| glColor4b | |||
| glColor4bv | |||
| glColor4d | |||
| glColor4dv | |||
| glColor4f | |||
| glColor4fv | |||
| glColor4i | |||
| glColor4iv | |||
| glColor4s | |||
| glColor4sv | |||
| glColor4ub | |||
| glColor4ubv | |||
| glColor4ui | |||
| glColor4uiv | |||
| glColor4us | |||
| glColor4usv | |||
| glColorMask | |||
| glColorMaterial | |||
| glColorPointer | |||
| glColorPointerEXT | |||
| glColorSubTableEXT | |||
| glColorTableEXT | |||
| glCopyPixels | |||
| glCopyTexImage1D | |||
| glCopyTexImage2D | |||
| glCopyTexSubImage1D | |||
| glCopyTexSubImage2D | |||
| glCopyTexSubImage3DEXT | |||
| glCullFace | |||
| glDeleteLists | |||
| glDeleteTextures | |||
| glDeleteTexturesEXT | |||
| glDepthFunc | |||
| glDepthMask | |||
| glDepthRange | |||
| glDisable | |||
| glDisableClientState | |||
| glDrawArrays | |||
| glDrawArraysEXT | |||
| glDrawBuffer | |||
| glDrawElements | |||
| glDrawPixels | |||
| glEdgeFlag | |||
| glEdgeFlagPointer | |||
| glEdgeFlagPointerEXT | |||
| glEdgeFlagv | |||
| glEnable | |||
| glEnableClientState | |||
| glEnd | |||
| glEndList | |||
| glEvalCoord1d | |||
| glEvalCoord1dv | |||
| glEvalCoord1f | |||
| glEvalCoord1fv | |||
| glEvalCoord2d | |||
| glEvalCoord2dv | |||
| glEvalCoord2f | |||
| glEvalCoord2fv | |||
| glEvalMesh1 | |||
| glEvalMesh2 | |||
| glEvalPoint1 | |||
| glEvalPoint2 | |||
| glFeedbackBuffer | |||
| glFinish | |||
| glFlush | |||
| glFogf | |||
| glFogfv | |||
| glFogi | |||
| glFogiv | |||
| glFrontFace | |||
| glFrustum | |||
| glGenLists | |||
| glGenTextures | |||
| glGenTexturesEXT | |||
| glGetBooleanv | |||
| glGetClipPlane | |||
| glGetColorTableEXT | |||
| glGetColorTableParameterfvEXT | |||
| glGetColorTableParameterivEXT | |||
| glGetDoublev | |||
| glGetError | |||
| glGetFloatv | |||
| glGetIntegerv | |||
| glGetLightfv | |||
| glGetLightiv | |||
| glGetMapdv | |||
| glGetMapfv | |||
| glGetMapiv | |||
| glGetMaterialfv | |||
| glGetMaterialiv | |||
| glGetPixelMapfv | |||
| glGetPixelMapuiv | |||
| glGetPixelMapusv | |||
| glGetPointerv | |||
| glGetPointervEXT | |||
| glGetPolygonStipple | |||
| glGetString | |||
| glGetTexEnvfv | |||
| glGetTexEnviv | |||
| glGetTexGendv | |||
| glGetTexGenfv | |||
| glGetTexGeniv | |||
| glGetTexImage | |||
| glGetTexLevelParameterfv | |||
| glGetTexLevelParameteriv | |||
| glGetTexParameterfv | |||
| glGetTexParameteriv | |||
| glHint | |||
| glIndexd | |||
| glIndexdv | |||
| glIndexf | |||
| glIndexfv | |||
| glIndexi | |||
| glIndexiv | |||
| glIndexMask | |||
| glIndexPointer | |||
| glIndexPointerEXT | |||
| glIndexs | |||
| glIndexsv | |||
| glIndexub | |||
| glIndexubv | |||
| glInitNames | |||
| glInterleavedArrays | |||
| glIsEnabled | |||
| glIsList | |||
| glIsTexture | |||
| glIsTextureEXT | |||
| glLightf | |||
| glLightfv | |||
| glLighti | |||
| glLightiv | |||
| glLightModelf | |||
| glLightModelfv | |||
| glLightModeli | |||
| glLightModeliv | |||
| glLineStipple | |||
| glLineWidth | |||
| glListBase | |||
| glLoadIdentity | |||
| glLoadMatrixd | |||
| glLoadMatrixf | |||
| glLoadName | |||
| glLogicOp | |||
| glMap1d | |||
| glMap1f | |||
| glMap2d | |||
| glMap2f | |||
| glMapGrid1d | |||
| glMapGrid1f | |||
| glMapGrid2d | |||
| glMapGrid2f | |||
| glMaterialf | |||
| glMaterialfv | |||
| glMateriali | |||
| glMaterialiv | |||
| glMatrixMode | |||
| glMultMatrixd | |||
| glMultMatrixf | |||
| glNewList | |||
| glNormal3b | |||
| glNormal3bv | |||
| glNormal3d | |||
| glNormal3dv | |||
| glNormal3f | |||
| glNormal3fv | |||
| glNormal3i | |||
| glNormal3iv | |||
| glNormal3s | |||
| glNormal3sv | |||
| glNormalPointer | |||
| glNormalPointerEXT | |||
| glOrtho | |||
| glPassThrough | |||
| glPixelMapfv | |||
| glPixelMapuiv | |||
| glPixelMapusv | |||
| glPixelStoref | |||
| glPixelStorei | |||
| glPixelTransferf | |||
| glPixelTransferi | |||
| glPixelZoom | |||
| glPointParameterfEXT | |||
| glPointParameterfvEXT | |||
| glPointSize | |||
| glPolygonMode | |||
| glPolygonOffset | |||
| glPolygonOffsetEXT | |||
| glPolygonStipple | |||
| glPopAttrib | |||
| glPopClientAttrib | |||
| glPopMatrix | |||
| glPopName | |||
| glPrioritizeTextures | |||
| glPrioritizeTexturesEXT | |||
| glPushAttrib | |||
| glPushClientAttrib | |||
| glPushMatrix | |||
| glPushName | |||
| glRasterPos2d | |||
| glRasterPos2dv | |||
| glRasterPos2f | |||
| glRasterPos2fv | |||
| glRasterPos2i | |||
| glRasterPos2iv | |||
| glRasterPos2s | |||
| glRasterPos2sv | |||
| glRasterPos3d | |||
| glRasterPos3dv | |||
| glRasterPos3f | |||
| glRasterPos3fv | |||
| glRasterPos3i | |||
| glRasterPos3iv | |||
| glRasterPos3s | |||
| glRasterPos3sv | |||
| glRasterPos4d | |||
| glRasterPos4dv | |||
| glRasterPos4f | |||
| glRasterPos4fv | |||
| glRasterPos4i | |||
| glRasterPos4iv | |||
| glRasterPos4s | |||
| glRasterPos4sv | |||
| glReadBuffer | |||
| glReadPixels | |||
| glRectd | |||
| glRectdv | |||
| glRectf | |||
| glRectfv | |||
| glRecti | |||
| glRectiv | |||
| glRects | |||
| glRectsv | |||
| glRenderMode | |||
| glResizeBuffersMESA | |||
| glRotated | |||
| glRotatef | |||
| glScaled | |||
| glScalef | |||
| glScissor | |||
| glSelectBuffer | |||
| glShadeModel | |||
| glStencilFunc | |||
| glStencilMask | |||
| glStencilOp | |||
| glTexCoord1d | |||
| glTexCoord1dv | |||
| glTexCoord1f | |||
| glTexCoord1fv | |||
| glTexCoord1i | |||
| glTexCoord1iv | |||
| glTexCoord1s | |||
| glTexCoord1sv | |||
| glTexCoord2d | |||
| glTexCoord2dv | |||
| glTexCoord2f | |||
| glTexCoord2fv | |||
| glTexCoord2i | |||
| glTexCoord2iv | |||
| glTexCoord2s | |||
| glTexCoord2sv | |||
| glTexCoord3d | |||
| glTexCoord3dv | |||
| glTexCoord3f | |||
| glTexCoord3fv | |||
| glTexCoord3i | |||
| glTexCoord3iv | |||
| glTexCoord3s | |||
| glTexCoord3sv | |||
| glTexCoord4d | |||
| glTexCoord4dv | |||
| glTexCoord4f | |||
| glTexCoord4fv | |||
| glTexCoord4i | |||
| glTexCoord4iv | |||
| glTexCoord4s | |||
| glTexCoord4sv | |||
| glTexCoordPointer | |||
| glTexCoordPointerEXT | |||
| glTexEnvf | |||
| glTexEnvfv | |||
| glTexEnvi | |||
| glTexEnviv | |||
| glTexGend | |||
| glTexGendv | |||
| glTexGenf | |||
| glTexGenfv | |||
| glTexGeni | |||
| glTexGeniv | |||
| glTexImage1D | |||
| glTexImage2D | |||
| glTexImage3DEXT | |||
| glTexParameterf | |||
| glTexParameterfv | |||
| glTexParameteri | |||
| glTexParameteriv | |||
| glTexSubImage1D | |||
| glTexSubImage2D | |||
| glTexSubImage3DEXT | |||
| glTranslated | |||
| glTranslatef | |||
| glVertex2d | |||
| glVertex2dv | |||
| glVertex2f | |||
| glVertex2fv | |||
| glVertex2i | |||
| glVertex2iv | |||
| glVertex2s | |||
| glVertex2sv | |||
| glVertex3d | |||
| glVertex3dv | |||
| glVertex3f | |||
| glVertex3fv | |||
| glVertex3i | |||
| glVertex3iv | |||
| glVertex3s | |||
| glVertex3sv | |||
| glVertex4d | |||
| glVertex4dv | |||
| glVertex4f | |||
| glVertex4fv | |||
| glVertex4i | |||
| glVertex4iv | |||
| glVertex4s | |||
| glVertex4sv | |||
| glVertexPointer | |||
| glVertexPointerEXT | |||
| glViewport | |||
| glWindowPos2dMESA | |||
| glWindowPos2dvMESA | |||
| glWindowPos2fMESA | |||
| glWindowPos2fvMESA | |||
| glWindowPos2iMESA | |||
| glWindowPos2ivMESA | |||
| glWindowPos2sMESA | |||
| glWindowPos2svMESA | |||
| glWindowPos3dMESA | |||
| glWindowPos3dvMESA | |||
| glWindowPos3fMESA | |||
| glWindowPos3fvMESA | |||
| glWindowPos3iMESA | |||
| glWindowPos3ivMESA | |||
| glWindowPos3sMESA | |||
| glWindowPos3svMESA | |||
| glWindowPos4dMESA | |||
| glWindowPos4dvMESA | |||
| glWindowPos4fMESA | |||
| glWindowPos4fvMESA | |||
| glWindowPos4iMESA | |||
| glWindowPos4ivMESA | |||
| glWindowPos4sMESA | |||
| glWindowPos4svMESA | |||
| ; WMesaCreateContext | |||
| ; WMesaDestroyContext | |||
| ; WMesaMakeCurrent | |||
| ; WMesaPaletteChange | |||
| ; WMesaSwapBuffers | |||
| ; OSMesaCreateContext | |||
| ; OSMesaDestroyContext | |||
| ; OSMesaMakeCurrent | |||
| ; OSMesaGetCurrentContext | |||
| ; OSMesaPixelStore | |||
| ; OSMesaGetIntegerv | |||
| ; OSMesaGetDepthBuffer | |||
| wglCopyContext | |||
| wglCreateContext | |||
| wglCreateLayerContext | |||
| wglDeleteContext | |||
| ; wglDescribeLayerPlane | |||
| wglGetCurrentContext | |||
| wglGetCurrentDC | |||
| ; wglGetLayerPaletteEntries | |||
| wglGetProcAddress | |||
| wglMakeCurrent | |||
| ; wglRealizeLayerPalette | |||
| ; wglSetLayerPaletteEntries | |||
| wglShareLists | |||
| wglSwapLayerBuffers | |||
| wglUseFontBitmapsA | |||
| wglUseFontBitmapsW | |||
| wglUseFontOutlinesA | |||
| wglUseFontOutlinesW | |||
| wglChoosePixelFormat | |||
| wglDescribePixelFormat | |||
| wglGetPixelFormat | |||
| wglSetPixelFormat | |||
| wglSwapBuffers | |||