X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=gl_rmisc.c;h=d570e3b2b67107c75b2ab23ec8b607c4346cbfa2;hb=a43126de2e9f940ee5b409f0086ef9e0d47c7f92;hp=68c782a2dbdc95366bc13e3c4281472dbdef7264;hpb=8dcce44300385b12c46d494c06aadcfa35a8bc14;p=xonotic%2Fdarkplaces.git diff --git a/gl_rmisc.c b/gl_rmisc.c index 68c782a2..d570e3b2 100644 --- a/gl_rmisc.c +++ b/gl_rmisc.c @@ -22,41 +22,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" - -/* -================== -R_InitTextures -================== -*/ -void R_InitTextures (void) -{ - int x,y, m; - byte *dest; - -// create a simple checkerboard texture for the default - r_notexture_mip = Hunk_AllocName (sizeof(texture_t) + 16*16+8*8+4*4+2*2, "notexture"); - - r_notexture_mip->width = r_notexture_mip->height = 16; - r_notexture_mip->offsets[0] = sizeof(texture_t); - r_notexture_mip->offsets[1] = r_notexture_mip->offsets[0] + 16*16; - r_notexture_mip->offsets[2] = r_notexture_mip->offsets[1] + 8*8; - r_notexture_mip->offsets[3] = r_notexture_mip->offsets[2] + 4*4; - r_notexture_mip->transparent = FALSE; - - for (m=0 ; m<4 ; m++) - { - dest = (byte *)r_notexture_mip + r_notexture_mip->offsets[m]; - for (y=0 ; y< (16>>m) ; y++) - for (x=0 ; x< (16>>m) ; x++) - { - if ( (y< (8>>m) ) ^ (x< (8>>m) ) ) - *dest++ = 0; - else - *dest++ = 0xff; - } - } -} - /* =============== R_Envmap_f @@ -68,6 +33,9 @@ void R_Envmap_f (void) { byte buffer[256*256*4]; + if (!r_render.value) + return; + glDrawBuffer (GL_FRONT); glReadBuffer (GL_FRONT); envmap = true; @@ -125,212 +93,39 @@ void R_Envmap_f (void) void R_InitParticles (void); -/* -=============== -R_Init -=============== -*/ -void R_Init (void) -{ - extern byte *hunk_base; -// extern cvar_t gl_finish; +void gl_misc_start(void) +{ +} - Cmd_AddCommand ("timerefresh", R_TimeRefresh_f); - Cmd_AddCommand ("envmap", R_Envmap_f); - Cmd_AddCommand ("pointfile", R_ReadPointFile_f); - -// Cvar_RegisterVariable (&r_norefresh); -// Cvar_RegisterVariable (&r_lightmap); - Cvar_RegisterVariable (&r_drawentities); - Cvar_RegisterVariable (&r_drawviewmodel); -// Cvar_RegisterVariable (&r_shadows); - Cvar_RegisterVariable (&r_wateralpha); -// Cvar_RegisterVariable (&r_dynamic); - Cvar_RegisterVariable (&r_novis); - Cvar_RegisterVariable (&r_speeds); - Cvar_RegisterVariable (&r_waterripple); // LordHavoc: added waterripple - -// Cvar_RegisterVariable (&gl_cull); -// Cvar_RegisterVariable (&gl_affinemodels); -// Cvar_RegisterVariable (&gl_polyblend); -// Cvar_RegisterVariable (&gl_flashblend); - Cvar_RegisterVariable (&gl_playermip); -// Cvar_RegisterVariable (&gl_nocolors); - -// Cvar_RegisterVariable (&gl_keeptjunctions); -// Cvar_RegisterVariable (&gl_reporttjunctions); - - R_InitParticles (); - - playertextures = texture_extension_number; - texture_extension_number += 64; // LordHavoc: increased number of players from 16 to 64 +void gl_misc_shutdown(void) +{ } -qboolean VID_Is8bit(void); -void GL_Upload8_EXT (byte *data, int width, int height, qboolean mipmap, qboolean alpha); +void gl_misc_newmap(void) +{ +} /* =============== -R_TranslatePlayerSkin - -Translates a skin texture by the per-player color lookup +R_Init =============== */ -void R_TranslatePlayerSkin (int playernum) -{ - int top, bottom; - byte translate[256]; - unsigned translate32[256]; - int i, j, s; - model_t *model; - aliashdr_t *paliashdr; - byte *original; - unsigned pixels[512*256], *out; - unsigned scaled_width, scaled_height; - int inwidth, inheight; - byte *inrow; - unsigned frac, fracstep; - extern byte **player_8bit_texels_tbl; - - top = cl.scores[playernum].colors & 0xf0; - bottom = (cl.scores[playernum].colors &15)<<4; - - for (i=0 ; i<256 ; i++) - translate[i] = i; - - for (i=0 ; i<16 ; i++) - { - // LordHavoc: corrected color ranges - if (top < 128 || (top >= 224 && top < 240)) // the artists made some backwards ranges. sigh. - translate[TOP_RANGE+i] = top+i; - else - translate[TOP_RANGE+i] = top+15-i; - - // LordHavoc: corrected color ranges - if (bottom < 128 || (bottom >= 224 && bottom < 240)) - translate[BOTTOM_RANGE+i] = bottom+i; - else - translate[BOTTOM_RANGE+i] = bottom+15-i; - } - - // - // locate the original skin pixels - // - currententity = &cl_entities[1+playernum]; - model = currententity->model; - if (!model) - return; // player doesn't have a model yet - if (model->type != mod_alias) - return; // only translate skins on alias models - - paliashdr = (aliashdr_t *)Mod_Extradata (model); - s = paliashdr->skinwidth * paliashdr->skinheight; - if (currententity->skinnum < 0 || currententity->skinnum >= paliashdr->numskins) - { - Con_Printf("(%d): Invalid player skin #%d\n", playernum, currententity->skinnum); - original = (byte *)paliashdr + paliashdr->texels[0]; - } - else - original = (byte *)paliashdr + paliashdr->texels[currententity->skinnum]; - if (s & 3) - Sys_Error ("R_TranslateSkin: s&3"); - - inwidth = paliashdr->skinwidth; - inheight = paliashdr->skinheight; - - // because this happens during gameplay, do it fast - // instead of sending it through gl_upload 8 - glBindTexture(GL_TEXTURE_2D, playertextures + playernum); - -#if 0 - byte translated[320*200]; - - for (i=0 ; iskinwidth, paliashdr->skinheight, false, false, true); -#else - scaled_width = gl_max_size.value < 512 ? gl_max_size.value : 512; - scaled_height = gl_max_size.value < 256 ? gl_max_size.value : 256; - - // allow users to crunch sizes down even more if they want - scaled_width >>= (int)gl_playermip.value; - scaled_height >>= (int)gl_playermip.value; - - if (VID_Is8bit()) - { // 8bit texture upload - byte *out2; - - out2 = (byte *)pixels; - memset(pixels, 0, sizeof(pixels)); - fracstep = inwidth*0x10000/scaled_width; - for (i=0 ; i> 1; - for (j=0 ; j>16]]; - frac += fracstep; - out2[j+1] = translate[inrow[frac>>16]]; - frac += fracstep; - out2[j+2] = translate[inrow[frac>>16]]; - frac += fracstep; - out2[j+3] = translate[inrow[frac>>16]]; - frac += fracstep; - } - } - - GL_Upload8_EXT ((byte *)pixels, scaled_width, scaled_height, false, false); - return; - } - - for (i=0 ; i<256 ; i++) - translate32[i] = d_8to24table[translate[i]]; - - out = pixels; - fracstep = inwidth*0x10000/scaled_width; - for (i=0 ; i> 1; - for (j=0 ; j>16]]; - frac += fracstep; - out[j+1] = translate32[inrow[frac>>16]]; - frac += fracstep; - out[j+2] = translate32[inrow[frac>>16]]; - frac += fracstep; - out[j+3] = translate32[inrow[frac>>16]]; - frac += fracstep; - } - } - glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, scaled_width, scaled_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); -#endif +void GL_Misc_Init (void) +{ + Cmd_AddCommand ("envmap", R_Envmap_f); + Cmd_AddCommand ("timerefresh", R_TimeRefresh_f); + R_RegisterModule("GL_Misc", gl_misc_start, gl_misc_shutdown, gl_misc_newmap); } -void R_ClearParticles (void); -void GL_BuildLightmaps (void); +extern void R_ClearParticles (void); +extern void GL_BuildLightmaps (void); /* =============== R_NewMap =============== */ -void SHOWLMP_clear(); void R_NewMap (void) { int i; @@ -339,29 +134,14 @@ void R_NewMap (void) d_lightstylevalue[i] = 264; // normal light value memset (&r_worldentity, 0, sizeof(r_worldentity)); - r_worldentity.model = cl.worldmodel; + r_worldentity.render.model = cl.worldmodel; currententity = &r_worldentity; -// clear out efrags in case the level hasn't been reloaded -// FIXME: is this one short? - for (i=0 ; inumleafs ; i++) - cl.worldmodel->leafs[i].efrags = NULL; - r_viewleaf = NULL; - R_ClearParticles (); + R_Modules_NewMap(); GL_BuildLightmaps (); - // identify sky texture - skytexturenum = -1; - for (i=0 ; inumtextures ; i++) - { - if (!cl.worldmodel->textures[i]) - continue; - if (!strncmp(cl.worldmodel->textures[i]->name,"sky",3) ) - skytexturenum = i; - cl.worldmodel->textures[i]->texturechain = NULL; - } SHOWLMP_clear(); } @@ -373,25 +153,26 @@ R_TimeRefresh_f For program optimization ==================== */ +qboolean intimerefresh = 0; void R_TimeRefresh_f (void) { int i; float start, stop, time; - start = Sys_FloatTime (); - for (i=0 ; i<128 ; i++) + intimerefresh = 1; + start = Sys_DoubleTime (); + for (i = 0;i < 128;i++) { + r_refdef.viewangles[0] = 0; r_refdef.viewangles[1] = i/128.0*360.0; + r_refdef.viewangles[2] = 0; SCR_UpdateScreen(); } - stop = Sys_FloatTime (); + stop = Sys_DoubleTime (); + intimerefresh = 0; time = stop-start; Con_Printf ("%f seconds (%f fps)\n", time, 128/time); } -void D_FlushCaches (void) -{ -} -