📄 r_opengl.c
字号:
// Emacs style mode select -*- C++ -*-//-----------------------------------------------------------------------------//// $Id: r_opengl.c,v 1.48 2001/05/03 21:54:15 hurdler Exp $//// Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program 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 General Public License for more details.////// $Log: r_opengl.c,v $// Revision 1.48 2001/05/03 21:54:15 hurdler// fix bis//// Revision 1.47 2001/05/03 20:05:57 hurdler// small opengl fix//// Revision 1.46 2001/04/28 17:03:05 hurdler// small fix for debug version and OS!=win32//// Revision 1.45 2001/04/28 15:19:32 hurdler// fix PF_Occlude/PF_NoDepthTest//// Revision 1.44 2001/03/09 21:53:56 metzgermeister// *** empty log message ***//// Revision 1.43 2001/02/28 17:50:56 bpereira// no message//// Revision 1.42 2001/02/24 13:35:22 bpereira// no message//// Revision 1.41 2001/02/19 17:45:20 hurdler// Fix the problem of fullbright with Matrox's drivers under Linux//// Revision 1.40 2001/02/10 13:26:06 hurdler// no message//// Revision 1.39 2001/01/25 18:56:28 bpereira// no message//// Revision 1.38 2001/01/05 18:19:29 hurdler// add renderer version checking//// Revision 1.37 2000/11/27 17:22:07 hurdler// fix a small bug with GeForce based cards//// Revision 1.36 2000/11/02 19:49:39 bpereira// no message//// Revision 1.35 2000/10/22 14:17:17 hurdler// Adjust version string//// Revision 1.34 2000/10/04 16:27:56 hurdler// Implement hardware texture memory stats//// Revision 1.33 2000/10/01 01:00:29 hurdler// Fix a bug with PF_Invisible//// Revision 1.32 2000/09/28 20:57:21 bpereira// no message//// Revision 1.31 2000/09/10 10:48:56 metzgermeister// *** empty log message ***//// Revision 1.30 2000/08/10 19:58:04 bpereira// no message//// Revision 1.29 2000/08/10 14:19:19 hurdler// add waitvbl, fix sky problem//// Revision 1.28 2000/07/01 09:23:50 bpereira// no message//// Revision 1.27 2000/06/08 19:41:53 hurdler// my changes before splitting (can be reverted in development branch)//// Revision 1.26 2000/05/10 17:43:48 kegetys// Sprites are drawn using PF_Environment//// Revision 1.25 2000/05/09 20:53:27 hurdler// definitively fix the colormap//// Revision 1.24 2000/05/05 18:00:06 bpereira// no message//// Revision 1.23 2000/04/30 10:30:10 bpereira// no message//// Revision 1.22 2000/04/28 00:09:22 hurdler// Full support of coronas in splitscreen mode//// Revision 1.21 2000/04/27 23:42:30 hurdler// Change coronas' code for MiniGL compatibility//// Revision 1.20 2000/04/27 17:52:32 hurdler// colormap code in hardware mode is now the default//// Revision 1.19 2000/04/24 15:20:40 hurdler// Support colormap for text//// Revision 1.18 2000/04/23 15:07:37 hurdler// quick bug fix//// Revision 1.17 2000/04/23 12:55:24 hurdler// support filter mode in OpenGL//// Revision 1.16 2000/04/22 16:48:56 hurdler// no message//// Revision 1.15 2000/04/22 16:48:00 hurdler// support skin color//// Revision 1.14 2000/04/19 10:54:43 hurdler// no message//// Revision 1.13 2000/04/18 16:07:47 hurdler// better support of decals//// Revision 1.12 2000/04/18 14:49:25 hurdler// fix a bug for Mesa 3.1 and previous//// Revision 1.11 2000/04/18 12:45:09 hurdler// change a little coronas' code//// Revision 1.10 2000/04/16 18:38:07 bpereira// no message//// Revision 1.9 2000/04/14 23:31:02 hurdler// fix the bug of near clipping plane at startup//// Revision 1.8 2000/04/14 16:37:12 hurdler// some nice changes for coronas//// Revision 1.7 2000/04/11 01:00:23 hurdler// Better coronas support//// Revision 1.6 2000/04/09 17:18:24 hurdler// modified coronas' code for 16 bits video mode//// Revision 1.5 2000/04/06 20:51:57 hurdler// add support for new coronas//// Revision 1.4 2000/03/29 19:39:49 bpereira// no message//// Revision 1.3 2000/03/07 03:31:14 hurdler// fix linux compilation//// Revision 1.2 2000/02/27 00:42:11 hurdler// fix CR+LF problem//// Revision 1.1.1.1 2000/02/22 20:32:33 hurdler// Initial import into CVS (v1.29 pr3)////// DESCRIPTION:// OpenGL API for Doom Legacy////-----------------------------------------------------------------------------#ifdef __WIN32__#include <windows.h>#pragma warning (disable : 4244)#endif#ifdef LINUX#include <unistd.h>#endif#include <stdarg.h>#include <math.h>#include "r_opengl.h"// ==========================================================================// CONSTANTS// ==========================================================================// With OpenGL 1.1+, the first texture should be 1#define NOTEXTURE_NUM 1 // small white texture#define FIRST_TEX_AVAIL (NOTEXTURE_NUM + 1)#define N_PI_DEMI (1.5707963268f) // PI/2#define ASPECT_RATIO (1.0f) //(320.0f/200.0f)#define FAR_CLIPPING_PLANE 6000.0ffloat NEAR_CLIPPING_PLANE = 0.9f;#define MIPMAP_MASK 0x0100// **************************************************************************// GLOBALS// **************************************************************************static GLuint NextTexAvail = FIRST_TEX_AVAIL;static GLuint tex_downloaded = 0;static GLfloat fov = 90.0;static GLuint pal_col = 0;static FRGBAFloat const_pal_col;static FBITFIELD CurrentPolyFlags;static FTextureInfo* gr_cachetail = NULL;static FTextureInfo* gr_cachehead = NULL;RGBA_t myPaletteData[256];GLint screen_width; // used by Draw2DLine()GLint screen_height;GLbyte screen_depth;GLint textureformatGL;GLint min_filter = GL_LINEAR;GLint mag_filter = GL_LINEAR;const GLubyte *gl_extensions;//Hurdler: 04/10/2000: added for the kick ass coronas as Boris wanted ;-)#ifndef MINI_GL_COMPATIBILITYstatic GLdouble modelMatrix[16];static GLdouble projMatrix[16];static GLint viewport[4]; #endif#ifdef USE_PALETTED_TEXTURE PFNGLCOLORTABLEEXTPROC glColorTableEXT; GLboolean usePalettedTexture; GLubyte palette_tex[768];#endif// shortcut for ((float)1/i)static const GLfloat byte2float[256] = { 0.000000f, 0.003922f, 0.007843f, 0.011765f, 0.015686f, 0.019608f, 0.023529f, 0.027451f, 0.031373f, 0.035294f, 0.039216f, 0.043137f, 0.047059f, 0.050980f, 0.054902f, 0.058824f, 0.062745f, 0.066667f, 0.070588f, 0.074510f, 0.078431f, 0.082353f, 0.086275f, 0.090196f, 0.094118f, 0.098039f, 0.101961f, 0.105882f, 0.109804f, 0.113725f, 0.117647f, 0.121569f, 0.125490f, 0.129412f, 0.133333f, 0.137255f, 0.141176f, 0.145098f, 0.149020f, 0.152941f, 0.156863f, 0.160784f, 0.164706f, 0.168627f, 0.172549f, 0.176471f, 0.180392f, 0.184314f, 0.188235f, 0.192157f, 0.196078f, 0.200000f, 0.203922f, 0.207843f, 0.211765f, 0.215686f, 0.219608f, 0.223529f, 0.227451f, 0.231373f, 0.235294f, 0.239216f, 0.243137f, 0.247059f, 0.250980f, 0.254902f, 0.258824f, 0.262745f, 0.266667f, 0.270588f, 0.274510f, 0.278431f, 0.282353f, 0.286275f, 0.290196f, 0.294118f, 0.298039f, 0.301961f, 0.305882f, 0.309804f, 0.313726f, 0.317647f, 0.321569f, 0.325490f, 0.329412f, 0.333333f, 0.337255f, 0.341176f, 0.345098f, 0.349020f, 0.352941f, 0.356863f, 0.360784f, 0.364706f, 0.368627f, 0.372549f, 0.376471f, 0.380392f, 0.384314f, 0.388235f, 0.392157f, 0.396078f, 0.400000f, 0.403922f, 0.407843f, 0.411765f, 0.415686f, 0.419608f, 0.423529f, 0.427451f, 0.431373f, 0.435294f, 0.439216f, 0.443137f, 0.447059f, 0.450980f, 0.454902f, 0.458824f, 0.462745f, 0.466667f, 0.470588f, 0.474510f, 0.478431f, 0.482353f, 0.486275f, 0.490196f, 0.494118f, 0.498039f, 0.501961f, 0.505882f, 0.509804f, 0.513726f, 0.517647f, 0.521569f, 0.525490f, 0.529412f, 0.533333f, 0.537255f, 0.541177f, 0.545098f, 0.549020f, 0.552941f, 0.556863f, 0.560784f, 0.564706f, 0.568627f, 0.572549f, 0.576471f, 0.580392f, 0.584314f, 0.588235f, 0.592157f, 0.596078f, 0.600000f, 0.603922f, 0.607843f, 0.611765f, 0.615686f, 0.619608f, 0.623529f, 0.627451f, 0.631373f, 0.635294f, 0.639216f, 0.643137f, 0.647059f, 0.650980f, 0.654902f, 0.658824f, 0.662745f, 0.666667f, 0.670588f, 0.674510f, 0.678431f, 0.682353f, 0.686275f, 0.690196f, 0.694118f, 0.698039f, 0.701961f, 0.705882f, 0.709804f, 0.713726f, 0.717647f, 0.721569f, 0.725490f, 0.729412f, 0.733333f, 0.737255f, 0.741177f, 0.745098f, 0.749020f, 0.752941f, 0.756863f, 0.760784f, 0.764706f, 0.768627f, 0.772549f, 0.776471f, 0.780392f, 0.784314f, 0.788235f, 0.792157f, 0.796078f, 0.800000f, 0.803922f, 0.807843f, 0.811765f, 0.815686f, 0.819608f, 0.823529f, 0.827451f, 0.831373f, 0.835294f, 0.839216f, 0.843137f, 0.847059f, 0.850980f, 0.854902f, 0.858824f, 0.862745f, 0.866667f, 0.870588f, 0.874510f, 0.878431f, 0.882353f, 0.886275f, 0.890196f, 0.894118f, 0.898039f, 0.901961f, 0.905882f, 0.909804f, 0.913726f, 0.917647f, 0.921569f, 0.925490f, 0.929412f, 0.933333f, 0.937255f, 0.941177f, 0.945098f, 0.949020f, 0.952941f, 0.956863f, 0.960784f, 0.964706f, 0.968628f, 0.972549f, 0.976471f, 0.980392f, 0.984314f, 0.988235f, 0.992157f, 0.996078f, 1.000000};static I_Error_t I_Error_GL = NULL;// -----------------+// DBG_Printf : Output error messages to debug log if DEBUG_TO_FILE is defined,// : else do nothing// Returns :// -----------------+void DBG_Printf( LPCTSTR lpFmt, ... ){#ifdef DEBUG_TO_FILE char str[4096]; va_list arglist;#ifdef __WIN32__ DWORD bytesWritten; va_start (arglist, lpFmt); vsprintf (str, lpFmt, arglist); //FIXME: having a vsnprintf va_end (arglist); if( logstream != INVALID_HANDLE_VALUE ) WriteFile( logstream, str, lstrlen(str), &bytesWritten, NULL );#else va_start (arglist, lpFmt); vsnprintf (str, 4096, lpFmt, arglist); va_end (arglist); if( logstream!=-1 ) write( logstream, str, strlen(str) );#endif#endif}// -----------------+// SetNoTexture : Disable texture// -----------------+static void SetNoTexture( void ){ // Set small white texture. if( tex_downloaded != NOTEXTURE_NUM ) { glBindTexture( GL_TEXTURE_2D, NOTEXTURE_NUM ); tex_downloaded = NOTEXTURE_NUM; }}// -----------------+// SetModelView :// -----------------+void SetModelView( GLint w, GLint h ){ DBG_Printf( "SetModelView(): %dx%d\n", w, h ); screen_width = w; screen_height = h; glViewport( 0, 0, w, h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); gluPerspective( fov, ASPECT_RATIO, NEAR_CLIPPING_PLANE, FAR_CLIPPING_PLANE); glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); //glScalef(1.0f, 320.0f/200.0f, 1.0f); // gr_scalefrustum (ORIGINAL_ASPECT) // added for new coronas' code (without depth buffer)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -