⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r_opengl.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 3 页
字号:
// 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 + -