mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-03-31 23:41:25 +00:00
Räume gl_draw.c ein weiteres Mal auf
This commit is contained in:
parent
7270f2d423
commit
7c3b6fa412
1 changed files with 278 additions and 280 deletions
|
@ -1,415 +1,413 @@
|
|||
/*
|
||||
Copyright (C) 1997-2001 Id Software, Inc.
|
||||
* Copyright (C) 1997-2001 Id Software, Inc.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
|
||||
// draw.c
|
||||
/* draw.c */
|
||||
|
||||
#include "header/local.h"
|
||||
|
||||
image_t *draw_chars;
|
||||
image_t *draw_chars;
|
||||
|
||||
extern qboolean scrap_dirty;
|
||||
void Scrap_Upload (void);
|
||||
extern qboolean scrap_dirty;
|
||||
void Scrap_Upload ( void );
|
||||
extern unsigned r_rawpalette [ 256 ];
|
||||
|
||||
|
||||
/*
|
||||
===============
|
||||
Draw_InitLocal
|
||||
===============
|
||||
*/
|
||||
void Draw_InitLocal (void)
|
||||
void
|
||||
Draw_InitLocal ( void )
|
||||
{
|
||||
// load console characters (don't bilerp characters)
|
||||
draw_chars = GL_FindImage ("pics/conchars.pcx", it_pic);
|
||||
/* load console characters (don't bilerp characters) */
|
||||
draw_chars = GL_FindImage( "pics/conchars.pcx", it_pic );
|
||||
GL_Bind( draw_chars->texnum );
|
||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
|
||||
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
================
|
||||
Draw_Char
|
||||
|
||||
Draws one 8*8 graphics character with 0 being transparent.
|
||||
It can be clipped to the top of the screen to allow the console to be
|
||||
smoothly scrolled off.
|
||||
================
|
||||
*/
|
||||
void Draw_Char (int x, int y, int num)
|
||||
* Draws one 8*8 graphics character with 0 being transparent.
|
||||
* It can be clipped to the top of the screen to allow the console to be
|
||||
* smoothly scrolled off.
|
||||
*/
|
||||
void
|
||||
Draw_Char ( int x, int y, int num )
|
||||
{
|
||||
int row, col;
|
||||
float frow, fcol, size;
|
||||
int row, col;
|
||||
float frow, fcol, size;
|
||||
|
||||
num &= 255;
|
||||
|
||||
if ( (num&127) == 32 )
|
||||
return; // space
|
||||
|
||||
if (y <= -8)
|
||||
return; // totally off screen
|
||||
if ( ( num & 127 ) == 32 )
|
||||
{
|
||||
return; /* space */
|
||||
}
|
||||
|
||||
row = num>>4;
|
||||
col = num&15;
|
||||
if ( y <= -8 )
|
||||
{
|
||||
return; /* totally off screen */
|
||||
}
|
||||
|
||||
frow = row*0.0625;
|
||||
fcol = col*0.0625;
|
||||
row = num >> 4;
|
||||
col = num & 15;
|
||||
|
||||
frow = row * 0.0625;
|
||||
fcol = col * 0.0625;
|
||||
size = 0.0625;
|
||||
|
||||
GL_Bind (draw_chars->texnum);
|
||||
GL_Bind( draw_chars->texnum );
|
||||
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (fcol, frow);
|
||||
qglVertex2f (x, y);
|
||||
qglTexCoord2f (fcol + size, frow);
|
||||
qglVertex2f (x+8, y);
|
||||
qglTexCoord2f (fcol + size, frow + size);
|
||||
qglVertex2f (x+8, y+8);
|
||||
qglTexCoord2f (fcol, frow + size);
|
||||
qglVertex2f (x, y+8);
|
||||
qglEnd ();
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( fcol, frow );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( fcol + size, frow );
|
||||
qglVertex2f( x + 8, y );
|
||||
qglTexCoord2f( fcol + size, frow + size );
|
||||
qglVertex2f( x + 8, y + 8 );
|
||||
qglTexCoord2f( fcol, frow + size );
|
||||
qglVertex2f( x, y + 8 );
|
||||
qglEnd();
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_FindPic
|
||||
=============
|
||||
*/
|
||||
image_t *Draw_FindPic (char *name)
|
||||
image_t *
|
||||
Draw_FindPic ( char *name )
|
||||
{
|
||||
image_t *gl;
|
||||
char fullname[MAX_QPATH];
|
||||
char fullname [ MAX_QPATH ];
|
||||
|
||||
if (name[0] != '/' && name[0] != '\\')
|
||||
if ( ( name [ 0 ] != '/' ) && ( name [ 0 ] != '\\' ) )
|
||||
{
|
||||
Com_sprintf (fullname, sizeof(fullname), "pics/%s.pcx", name);
|
||||
gl = GL_FindImage (fullname, it_pic);
|
||||
Com_sprintf( fullname, sizeof ( fullname ), "pics/%s.pcx", name );
|
||||
gl = GL_FindImage( fullname, it_pic );
|
||||
}
|
||||
else
|
||||
gl = GL_FindImage (name+1, it_pic);
|
||||
{
|
||||
gl = GL_FindImage( name + 1, it_pic );
|
||||
}
|
||||
|
||||
return gl;
|
||||
return ( gl );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_GetPicSize
|
||||
=============
|
||||
*/
|
||||
void Draw_GetPicSize (int *w, int *h, char *pic)
|
||||
void
|
||||
Draw_GetPicSize ( int *w, int *h, char *pic )
|
||||
{
|
||||
image_t *gl;
|
||||
|
||||
gl = Draw_FindPic (pic);
|
||||
if (!gl)
|
||||
gl = Draw_FindPic( pic );
|
||||
|
||||
if ( !gl )
|
||||
{
|
||||
*w = *h = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
*w = gl->width;
|
||||
*h = gl->height;
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_StretchPic
|
||||
=============
|
||||
*/
|
||||
void Draw_StretchPic (int x, int y, int w, int h, char *pic)
|
||||
void
|
||||
Draw_StretchPic ( int x, int y, int w, int h, char *pic )
|
||||
{
|
||||
image_t *gl;
|
||||
|
||||
gl = Draw_FindPic (pic);
|
||||
if (!gl)
|
||||
gl = Draw_FindPic( pic );
|
||||
|
||||
if ( !gl )
|
||||
{
|
||||
ri.Con_Printf (PRINT_ALL, "Can't find pic: %s\n", pic);
|
||||
ri.Con_Printf( PRINT_ALL, "Can't find pic: %s\n", pic );
|
||||
return;
|
||||
}
|
||||
|
||||
if (scrap_dirty)
|
||||
Scrap_Upload ();
|
||||
if ( scrap_dirty )
|
||||
{
|
||||
Scrap_Upload();
|
||||
}
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha)
|
||||
qglDisable (GL_ALPHA_TEST);
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha )
|
||||
{
|
||||
qglDisable( GL_ALPHA_TEST );
|
||||
}
|
||||
|
||||
GL_Bind (gl->texnum);
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (gl->sl, gl->tl);
|
||||
qglVertex2f (x, y);
|
||||
qglTexCoord2f (gl->sh, gl->tl);
|
||||
qglVertex2f (x+w, y);
|
||||
qglTexCoord2f (gl->sh, gl->th);
|
||||
qglVertex2f (x+w, y+h);
|
||||
qglTexCoord2f (gl->sl, gl->th);
|
||||
qglVertex2f (x, y+h);
|
||||
qglEnd ();
|
||||
GL_Bind( gl->texnum );
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( gl->sl, gl->tl );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( gl->sh, gl->tl );
|
||||
qglVertex2f( x + w, y );
|
||||
qglTexCoord2f( gl->sh, gl->th );
|
||||
qglVertex2f( x + w, y + h );
|
||||
qglTexCoord2f( gl->sl, gl->th );
|
||||
qglVertex2f( x, y + h );
|
||||
qglEnd();
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha)
|
||||
qglEnable (GL_ALPHA_TEST);
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha )
|
||||
{
|
||||
qglEnable( GL_ALPHA_TEST );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_Pic
|
||||
=============
|
||||
*/
|
||||
void Draw_Pic (int x, int y, char *pic)
|
||||
void
|
||||
Draw_Pic ( int x, int y, char *pic )
|
||||
{
|
||||
image_t *gl;
|
||||
|
||||
gl = Draw_FindPic (pic);
|
||||
if (!gl)
|
||||
gl = Draw_FindPic( pic );
|
||||
|
||||
if ( !gl )
|
||||
{
|
||||
ri.Con_Printf (PRINT_ALL, "Can't find pic: %s\n", pic);
|
||||
ri.Con_Printf( PRINT_ALL, "Can't find pic: %s\n", pic );
|
||||
return;
|
||||
}
|
||||
if (scrap_dirty)
|
||||
Scrap_Upload ();
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha)
|
||||
qglDisable (GL_ALPHA_TEST);
|
||||
if ( scrap_dirty )
|
||||
{
|
||||
Scrap_Upload();
|
||||
}
|
||||
|
||||
GL_Bind (gl->texnum);
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (gl->sl, gl->tl);
|
||||
qglVertex2f (x, y);
|
||||
qglTexCoord2f (gl->sh, gl->tl);
|
||||
qglVertex2f (x+gl->width, y);
|
||||
qglTexCoord2f (gl->sh, gl->th);
|
||||
qglVertex2f (x+gl->width, y+gl->height);
|
||||
qglTexCoord2f (gl->sl, gl->th);
|
||||
qglVertex2f (x, y+gl->height);
|
||||
qglEnd ();
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha )
|
||||
{
|
||||
qglDisable( GL_ALPHA_TEST );
|
||||
}
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha)
|
||||
qglEnable (GL_ALPHA_TEST);
|
||||
GL_Bind( gl->texnum );
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( gl->sl, gl->tl );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( gl->sh, gl->tl );
|
||||
qglVertex2f( x + gl->width, y );
|
||||
qglTexCoord2f( gl->sh, gl->th );
|
||||
qglVertex2f( x + gl->width, y + gl->height );
|
||||
qglTexCoord2f( gl->sl, gl->th );
|
||||
qglVertex2f( x, y + gl->height );
|
||||
qglEnd();
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !gl->has_alpha )
|
||||
{
|
||||
qglEnable( GL_ALPHA_TEST );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_TileClear
|
||||
|
||||
This repeats a 64*64 tile graphic to fill the screen around a sized down
|
||||
refresh window.
|
||||
=============
|
||||
*/
|
||||
void Draw_TileClear (int x, int y, int w, int h, char *pic)
|
||||
* This repeats a 64*64 tile graphic to fill
|
||||
* the screen around a sized down
|
||||
* refresh window.
|
||||
*/
|
||||
void
|
||||
Draw_TileClear ( int x, int y, int w, int h, char *pic )
|
||||
{
|
||||
image_t *image;
|
||||
image_t *image;
|
||||
|
||||
image = Draw_FindPic (pic);
|
||||
if (!image)
|
||||
image = Draw_FindPic( pic );
|
||||
|
||||
if ( !image )
|
||||
{
|
||||
ri.Con_Printf (PRINT_ALL, "Can't find pic: %s\n", pic);
|
||||
ri.Con_Printf( PRINT_ALL, "Can't find pic: %s\n", pic );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !image->has_alpha)
|
||||
qglDisable (GL_ALPHA_TEST);
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !image->has_alpha )
|
||||
{
|
||||
qglDisable( GL_ALPHA_TEST );
|
||||
}
|
||||
|
||||
GL_Bind (image->texnum);
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (x/64.0, y/64.0);
|
||||
qglVertex2f (x, y);
|
||||
qglTexCoord2f ( (x+w)/64.0, y/64.0);
|
||||
qglVertex2f (x+w, y);
|
||||
qglTexCoord2f ( (x+w)/64.0, (y+h)/64.0);
|
||||
qglVertex2f (x+w, y+h);
|
||||
qglTexCoord2f ( x/64.0, (y+h)/64.0 );
|
||||
qglVertex2f (x, y+h);
|
||||
qglEnd ();
|
||||
GL_Bind( image->texnum );
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( x / 64.0, y / 64.0 );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( ( x + w ) / 64.0, y / 64.0 );
|
||||
qglVertex2f( x + w, y );
|
||||
qglTexCoord2f( ( x + w ) / 64.0, ( y + h ) / 64.0 );
|
||||
qglVertex2f( x + w, y + h );
|
||||
qglTexCoord2f( x / 64.0, ( y + h ) / 64.0 );
|
||||
qglVertex2f( x, y + h );
|
||||
qglEnd();
|
||||
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !image->has_alpha)
|
||||
qglEnable (GL_ALPHA_TEST);
|
||||
if ( ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) ) && !image->has_alpha )
|
||||
{
|
||||
qglEnable( GL_ALPHA_TEST );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_Fill
|
||||
|
||||
Fills a box of pixels with a single color
|
||||
=============
|
||||
*/
|
||||
void Draw_Fill (int x, int y, int w, int h, int c)
|
||||
* Fills a box of pixels with a single color
|
||||
*/
|
||||
void
|
||||
Draw_Fill ( int x, int y, int w, int h, int c )
|
||||
{
|
||||
union
|
||||
{
|
||||
unsigned c;
|
||||
byte v[4];
|
||||
unsigned c;
|
||||
byte v [ 4 ];
|
||||
} color;
|
||||
|
||||
if ( (unsigned)c > 255)
|
||||
ri.Sys_Error (ERR_FATAL, "Draw_Fill: bad color");
|
||||
if ( (unsigned) c > 255 )
|
||||
{
|
||||
ri.Sys_Error( ERR_FATAL, "Draw_Fill: bad color" );
|
||||
}
|
||||
|
||||
qglDisable (GL_TEXTURE_2D);
|
||||
qglDisable( GL_TEXTURE_2D );
|
||||
|
||||
color.c = d_8to24table[c];
|
||||
qglColor3f (color.v[0]/255.0,
|
||||
color.v[1]/255.0,
|
||||
color.v[2]/255.0);
|
||||
color.c = d_8to24table [ c ];
|
||||
qglColor3f( color.v [ 0 ] / 255.0,
|
||||
color.v [ 1 ] / 255.0,
|
||||
color.v [ 2 ] / 255.0 );
|
||||
|
||||
qglBegin (GL_QUADS);
|
||||
qglBegin( GL_QUADS );
|
||||
|
||||
qglVertex2f (x,y);
|
||||
qglVertex2f (x+w, y);
|
||||
qglVertex2f (x+w, y+h);
|
||||
qglVertex2f (x, y+h);
|
||||
qglVertex2f( x, y );
|
||||
qglVertex2f( x + w, y );
|
||||
qglVertex2f( x + w, y + h );
|
||||
qglVertex2f( x, y + h );
|
||||
|
||||
qglEnd ();
|
||||
qglColor3f (1,1,1);
|
||||
qglEnable (GL_TEXTURE_2D);
|
||||
qglEnd();
|
||||
qglColor3f( 1, 1, 1 );
|
||||
qglEnable( GL_TEXTURE_2D );
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
||||
/*
|
||||
================
|
||||
Draw_FadeScreen
|
||||
|
||||
================
|
||||
*/
|
||||
void Draw_FadeScreen (void)
|
||||
void
|
||||
Draw_FadeScreen ( void )
|
||||
{
|
||||
qglEnable (GL_BLEND);
|
||||
qglDisable (GL_TEXTURE_2D);
|
||||
qglColor4f (0, 0, 0, 0.8);
|
||||
qglBegin (GL_QUADS);
|
||||
qglEnable( GL_BLEND );
|
||||
qglDisable( GL_TEXTURE_2D );
|
||||
qglColor4f( 0, 0, 0, 0.8 );
|
||||
qglBegin( GL_QUADS );
|
||||
|
||||
qglVertex2f (0,0);
|
||||
qglVertex2f (vid.width, 0);
|
||||
qglVertex2f (vid.width, vid.height);
|
||||
qglVertex2f (0, vid.height);
|
||||
qglVertex2f( 0, 0 );
|
||||
qglVertex2f( vid.width, 0 );
|
||||
qglVertex2f( vid.width, vid.height );
|
||||
qglVertex2f( 0, vid.height );
|
||||
|
||||
qglEnd ();
|
||||
qglColor4f (1,1,1,1);
|
||||
qglEnable (GL_TEXTURE_2D);
|
||||
qglDisable (GL_BLEND);
|
||||
qglEnd();
|
||||
qglColor4f( 1, 1, 1, 1 );
|
||||
qglEnable( GL_TEXTURE_2D );
|
||||
qglDisable( GL_BLEND );
|
||||
}
|
||||
|
||||
|
||||
//====================================================================
|
||||
|
||||
|
||||
/*
|
||||
=============
|
||||
Draw_StretchRaw
|
||||
=============
|
||||
*/
|
||||
extern unsigned r_rawpalette[256];
|
||||
|
||||
void Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data)
|
||||
void
|
||||
Draw_StretchRaw ( int x, int y, int w, int h, int cols, int rows, byte *data )
|
||||
{
|
||||
unsigned image32[256*256];
|
||||
unsigned char image8[256*256];
|
||||
int i, j, trows;
|
||||
byte *source;
|
||||
int frac, fracstep;
|
||||
float hscale;
|
||||
int row;
|
||||
float t;
|
||||
unsigned image32 [ 256 * 256 ];
|
||||
unsigned char image8 [ 256 * 256 ];
|
||||
int i, j, trows;
|
||||
byte *source;
|
||||
int frac, fracstep;
|
||||
float hscale;
|
||||
int row;
|
||||
float t;
|
||||
|
||||
GL_Bind (0);
|
||||
GL_Bind( 0 );
|
||||
|
||||
if (rows<=256)
|
||||
if ( rows <= 256 )
|
||||
{
|
||||
hscale = 1;
|
||||
trows = rows;
|
||||
}
|
||||
else
|
||||
{
|
||||
hscale = rows/256.0;
|
||||
hscale = rows / 256.0;
|
||||
trows = 256;
|
||||
}
|
||||
t = rows*hscale / 256 - 1.0/512.0;
|
||||
|
||||
t = rows * hscale / 256 - 1.0 / 512.0;
|
||||
|
||||
if ( !qglColorTableEXT )
|
||||
{
|
||||
unsigned *dest;
|
||||
|
||||
for (i=0 ; i<trows ; i++)
|
||||
for ( i = 0; i < trows; i++ )
|
||||
{
|
||||
row = (int)(i*hscale);
|
||||
if (row > rows)
|
||||
break;
|
||||
source = data + cols*row;
|
||||
dest = &image32[i*256];
|
||||
fracstep = cols*0x10000/256;
|
||||
frac = fracstep >> 1;
|
||||
for (j=0 ; j<256 ; j++)
|
||||
row = (int) ( i * hscale );
|
||||
|
||||
if ( row > rows )
|
||||
{
|
||||
dest[j] = r_rawpalette[source[frac>>16]];
|
||||
break;
|
||||
}
|
||||
|
||||
source = data + cols * row;
|
||||
dest = &image32 [ i * 256 ];
|
||||
fracstep = cols * 0x10000 / 256;
|
||||
frac = fracstep >> 1;
|
||||
|
||||
for ( j = 0; j < 256; j++ )
|
||||
{
|
||||
dest [ j ] = r_rawpalette [ source [ frac >> 16 ] ];
|
||||
frac += fracstep;
|
||||
}
|
||||
}
|
||||
|
||||
qglTexImage2D (GL_TEXTURE_2D, 0, gl_tex_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, image32);
|
||||
qglTexImage2D( GL_TEXTURE_2D, 0, gl_tex_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, image32 );
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned char *dest;
|
||||
|
||||
for (i=0 ; i<trows ; i++)
|
||||
for ( i = 0; i < trows; i++ )
|
||||
{
|
||||
row = (int)(i*hscale);
|
||||
if (row > rows)
|
||||
break;
|
||||
source = data + cols*row;
|
||||
dest = &image8[i*256];
|
||||
fracstep = cols*0x10000/256;
|
||||
frac = fracstep >> 1;
|
||||
for (j=0 ; j<256 ; j++)
|
||||
row = (int) ( i * hscale );
|
||||
|
||||
if ( row > rows )
|
||||
{
|
||||
dest[j] = source[frac>>16];
|
||||
break;
|
||||
}
|
||||
|
||||
source = data + cols * row;
|
||||
dest = &image8 [ i * 256 ];
|
||||
fracstep = cols * 0x10000 / 256;
|
||||
frac = fracstep >> 1;
|
||||
|
||||
for ( j = 0; j < 256; j++ )
|
||||
{
|
||||
dest [ j ] = source [ frac >> 16 ];
|
||||
frac += fracstep;
|
||||
}
|
||||
}
|
||||
|
||||
qglTexImage2D( GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_COLOR_INDEX8_EXT,
|
||||
256, 256,
|
||||
0,
|
||||
GL_COLOR_INDEX,
|
||||
GL_UNSIGNED_BYTE,
|
||||
image8 );
|
||||
qglTexImage2D( GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_COLOR_INDEX8_EXT,
|
||||
256, 256,
|
||||
0,
|
||||
GL_COLOR_INDEX,
|
||||
GL_UNSIGNED_BYTE,
|
||||
image8 );
|
||||
}
|
||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
if ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) )
|
||||
qglDisable (GL_ALPHA_TEST);
|
||||
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
|
||||
qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
||||
|
||||
qglBegin (GL_QUADS);
|
||||
qglTexCoord2f (1.0/512.0, 1.0/512.0);
|
||||
qglVertex2f (x, y);
|
||||
qglTexCoord2f (511.0/512.0, 1.0/512.0);
|
||||
qglVertex2f (x+w, y);
|
||||
qglTexCoord2f (511.0/512.0, t);
|
||||
qglVertex2f (x+w, y+h);
|
||||
qglTexCoord2f (1.0/512.0, t);
|
||||
qglVertex2f (x, y+h);
|
||||
qglEnd ();
|
||||
if ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) )
|
||||
{
|
||||
qglDisable( GL_ALPHA_TEST );
|
||||
}
|
||||
|
||||
if ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) )
|
||||
qglEnable (GL_ALPHA_TEST);
|
||||
qglBegin( GL_QUADS );
|
||||
qglTexCoord2f( 1.0 / 512.0, 1.0 / 512.0 );
|
||||
qglVertex2f( x, y );
|
||||
qglTexCoord2f( 511.0 / 512.0, 1.0 / 512.0 );
|
||||
qglVertex2f( x + w, y );
|
||||
qglTexCoord2f( 511.0 / 512.0, t );
|
||||
qglVertex2f( x + w, y + h );
|
||||
qglTexCoord2f( 1.0 / 512.0, t );
|
||||
qglVertex2f( x, y + h );
|
||||
qglEnd();
|
||||
|
||||
if ( ( gl_config.renderer == GL_RENDERER_MCD ) || ( gl_config.renderer & GL_RENDERER_RENDITION ) )
|
||||
{
|
||||
qglEnable( GL_ALPHA_TEST );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue