diff --git a/source/Makefile.am b/source/Makefile.am index 03605d4..c805ec7 100644 --- a/source/Makefile.am +++ b/source/Makefile.am @@ -190,7 +190,8 @@ nuq_x11_DEPENDENCIES=libqfsys.a libqfsnd.a libqfcd.a libqfnet.a # ogl_SOURCES= gl_draw.c gl_mesh.c gl_part.c gl_refrag.c gl_rlight.c \ gl_rmain.c gl_rmisc.c gl_rsurf.c gl_screen.c gl_view.c \ - gl_warp.c gl_model_alias.c gl_model_brush.c gl_model_sprite.c + gl_warp.c gl_model_alias.c gl_model_brush.c gl_model_fullbright.c \ + gl_model_sprite.c # # ... 3Dfx Voodoo 1 and 2 SVGAlib-based console GL diff --git a/source/gl_model_alias.c b/source/gl_model_alias.c index ae65b20..eda2564 100644 --- a/source/gl_model_alias.c +++ b/source/gl_model_alias.c @@ -139,56 +139,24 @@ void Mod_FloodFillSkin( byte *skin, int skinwidth, int skinheight ) } } +int Mod_Fullbright(byte *skin, int width, int height, char *name); + void *Mod_LoadSkin (byte *skin, int skinsize, int snum, int gnum, qboolean group) { - int j; char name[32]; + int fbtexnum; Mod_FloodFillSkin( skin, pheader->mdl.skinwidth, pheader->mdl.skinheight ); - // This block is GL fullbright support for objects... - { - int pixels; - byte *ptexel; - - // Check for fullbright pixels.. - pixels = pheader->mdl.skinwidth * pheader->mdl.skinheight; - ptexel = (byte *)(skin + 1); - - for (j=0 ; j= 256-32) { - loadmodel->hasfullbrights = true; - break; - } - } - - if (loadmodel->hasfullbrights) { - byte *ptexels; - - //ptexels = Hunk_Alloc(s); - ptexels = malloc(pixels); - - if (group) { - snprintf(name, sizeof(name), "fb_%s_%i_%i", loadmodel->name,snum,gnum); - } else { - snprintf(name, sizeof(name), "fb_%s_%i", loadmodel->name,snum); - } - Con_DPrintf("FB Model ID: '%s'\n", name); - for (j=0 ; j= 256-32) { - ptexels[j] = ptexel[j]; - } else { - ptexels[j] = 255; - } - } - pheader->gl_fb_texturenum[snum][gnum] = - GL_LoadTexture (name, pheader->mdl.skinwidth, - pheader->mdl.skinheight, ptexels, true, true, 1); - - free(ptexels); - } + if (group) { + snprintf(name, sizeof(name), "fb_%s_%i_%i", loadmodel->name,snum,gnum); + } else { + snprintf(name, sizeof(name), "fb_%s_%i", loadmodel->name,snum); + } + fbtexnum = Mod_Fullbright(skin+1, pheader->mdl.skinwidth, pheader->mdl.skinheight, name); + if ((loadmodel->hasfullbrights=(fbtexnum!=-1))) { + pheader->gl_fb_texturenum[snum][gnum] = fbtexnum; } - if (group) { snprintf(name, sizeof(name), "%s_%i_%i", loadmodel->name,snum,gnum); } else { diff --git a/source/gl_model_brush.c b/source/gl_model_brush.c index 50cecf8..db149ee 100644 --- a/source/gl_model_brush.c +++ b/source/gl_model_brush.c @@ -48,7 +48,7 @@ extern byte *mod_base; const int mod_lightmap_bytes = 3; void -Mod_LoadMMNearest(miptex_t *mt, texture_t *tx) +Mod_ProcessTexture(miptex_t *mt, texture_t *tx) { texture_mode = GL_LINEAR_MIPMAP_NEAREST; //_LINEAR; tx->gl_texturenum = GL_LoadTexture (mt->name, tx->width, tx->height, (byte *)(tx+1), true, false, 1); diff --git a/source/gl_model_fullbright.c b/source/gl_model_fullbright.c new file mode 100644 index 0000000..a8009ac --- /dev/null +++ b/source/gl_model_fullbright.c @@ -0,0 +1,79 @@ +/* + gl_model_fullbright.c + + model loading and caching + + Copyright (C) 1996-1997 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: + + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307, USA + + $Id$ +*/ + +// models are the only shared resource between a client and server running +// on the same machine. + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "r_local.h" +#include "sys.h" +#include "console.h" +#include "qendian.h" +#include "checksum.h" +#include "glquake.h" + +int Mod_Fullbright (byte *skin, int width, int height, char *name) +{ + int j; + int pixels; + qboolean hasfullbrights = false; + int texnum; + + // Check for fullbright pixels.. + pixels = width * height; + + for (j=0 ; j= 256-32) { + hasfullbrights = true; + break; + } + } + + if (hasfullbrights) { + byte *ptexels; + + //ptexels = Hunk_Alloc(s); + ptexels = malloc(pixels); + + Con_DPrintf("FB Model ID: '%s'\n", name); + for (j=0 ; j= 256-32) { + ptexels[j] = skin[j]; + } else { + ptexels[j] = 255; + } + } + texnum = GL_LoadTexture (name, width, height, ptexels, true, true, 1); + free(ptexels); + return texnum; + } + return -1; +} diff --git a/source/model_brush.c b/source/model_brush.c index ca3ce39..2ac0cf9 100644 --- a/source/model_brush.c +++ b/source/model_brush.c @@ -48,7 +48,7 @@ extern byte mod_novis[]; extern const int mod_lightmap_bytes; -void Mod_LoadMMNearest(miptex_t *mt, texture_t *tx); +void Mod_ProcessTexture (miptex_t *mt, texture_t *tx); void Mod_LoadLighting (lump_t *l); /* @@ -196,7 +196,7 @@ void Mod_LoadTextures (lump_t *l) R_InitSky (tx); else { - Mod_LoadMMNearest(mt, tx); + Mod_ProcessTexture(mt, tx); } } diff --git a/source/sw_model_brush.c b/source/sw_model_brush.c index 57bca61..25466fc 100644 --- a/source/sw_model_brush.c +++ b/source/sw_model_brush.c @@ -49,7 +49,7 @@ GL_SubdivideSurface (msurface_t *fa) } void -Mod_LoadMMNearest(miptex_t *mt, texture_t *tx) +Mod_ProcessTexture (miptex_t *mt, texture_t *tx) { }