X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=gl_rsurf.c;h=2d0f4795316ea88aa4cbbb70e52cd83086a4af13;hb=c017de26a4650cbaf220f82c7ca3b8c3e8be94ba;hp=8d9ad7563558e12714c61a7878d922feb638f5c2;hpb=b5e0050ece6d4c82a840550b498ab86b30f3e968;p=xonotic%2Fdarkplaces.git diff --git a/gl_rsurf.c b/gl_rsurf.c index 8d9ad756..2d0f4795 100644 --- a/gl_rsurf.c +++ b/gl_rsurf.c @@ -31,7 +31,6 @@ cvar_t r_lockvisibility = {0, "r_lockvisibility", "0", "disables visibility upda cvar_t r_useportalculling = {0, "r_useportalculling", "2", "improve framerate with r_novis 1 by using portal culling - still not as good as compiled visibility data in the map, but it helps (a value of 2 forces use of this even with vis data, which improves framerates in maps without too much complexity, but hurts in extremely complex maps, which is why 2 is not the default mode)"}; cvar_t r_usesurfaceculling = {0, "r_usesurfaceculling", "1", "skip off-screen surfaces (1 = cull surfaces if the map is likely to benefit, 2 = always cull surfaces)"}; cvar_t r_q3bsp_renderskydepth = {0, "r_q3bsp_renderskydepth", "0", "draws sky depth masking in q3 maps (as in q1 maps), this means for example that sky polygons can hide other things"}; -extern cvar_t vid_sRGB; /* =============== @@ -122,7 +121,7 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface) } } - if(vid_sRGB.integer && !vid.sRGBcapable3D) + if(vid_sRGB.integer && vid_sRGB_fallback.integer && !vid.sRGB3D) Image_MakesRGBColorsFromLinear_Lightmap(templight, templight, size); R_UpdateTexture(surface->lightmaptexture, templight, surface->lightmapinfo->lightmaporigin[0], surface->lightmapinfo->lightmaporigin[1], 0, smax, tmax, 1); @@ -166,7 +165,7 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface) } } -void R_StainNode (mnode_t *node, dp_model_t *model, const vec3_t origin, float radius, const float fcolor[8]) +static void R_StainNode (mnode_t *node, dp_model_t *model, const vec3_t origin, float radius, const float fcolor[8]) { float ndist, a, ratio, maxdist, maxdist2, maxdist3, invradius, sdtable[256], td, dist2; msurface_t *surface, *endsurface; @@ -394,7 +393,7 @@ void R_DrawPortals(void) VectorAdd(center, portal->points[i].position, center); f = ixtable[portal->numpoints]; VectorScale(center, f, center); - R_MeshQueue_AddTransparent(center, R_DrawPortal_Callback, (entity_render_t *)portal, leafnum, rsurface.rtlight); + R_MeshQueue_AddTransparent(MESHQUEUE_SORT_DISTANCE, center, R_DrawPortal_Callback, (entity_render_t *)portal, leafnum, rsurface.rtlight); } } } @@ -581,7 +580,6 @@ void R_Q1BSP_DrawSky(entity_render_t *ent) R_DrawModelSurfaces(ent, true, true, false, false, false); } -extern void R_Water_AddWaterPlane(msurface_t *surface, int entno); void R_Q1BSP_DrawAddWaterPlanes(entity_render_t *ent) { int i, j, n, flagsmask; @@ -647,7 +645,7 @@ void R_Q1BSP_DrawDepth(entity_render_t *ent) GL_BlendFunc(GL_ONE, GL_ZERO); GL_DepthMask(true); // R_Mesh_ResetTextureState(); - R_SetupShader_DepthOrShadow(false); + R_SetupShader_DepthOrShadow(false, false); if (ent == r_refdef.scene.worldentity) R_DrawWorldSurfaces(false, false, true, false, false); else @@ -1184,7 +1182,7 @@ static void R_Q1BSP_CallRecursiveGetLightInfo(r_q1bsp_getlightinfo_t *info, qboo static msurface_t *r_q1bsp_getlightinfo_surfaces; -int R_Q1BSP_GetLightInfo_comparefunc(const void *ap, const void *bp) +static int R_Q1BSP_GetLightInfo_comparefunc(const void *ap, const void *bp) { int a = *(int*)ap; int b = *(int*)bp; @@ -1518,11 +1516,26 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface for (l = k;l < kend;l++) { surface = batchsurfacelist[l]; - tempcenter[0] = (surface->mins[0] + surface->maxs[0]) * 0.5f; - tempcenter[1] = (surface->mins[1] + surface->maxs[1]) * 0.5f; - tempcenter[2] = (surface->mins[2] + surface->maxs[2]) * 0.5f; + if (r_transparent_sortsurfacesbynearest.integer) + { + tempcenter[0] = bound(surface->mins[0], rsurface.localvieworigin[0], surface->maxs[0]); + tempcenter[1] = bound(surface->mins[1], rsurface.localvieworigin[1], surface->maxs[1]); + tempcenter[2] = bound(surface->mins[2], rsurface.localvieworigin[2], surface->maxs[2]); + } + else + { + tempcenter[0] = (surface->mins[0] + surface->maxs[0]) * 0.5f; + tempcenter[1] = (surface->mins[1] + surface->maxs[1]) * 0.5f; + tempcenter[2] = (surface->mins[2] + surface->maxs[2]) * 0.5f; + } Matrix4x4_Transform(&rsurface.matrix, tempcenter, center); - R_MeshQueue_AddTransparent(rsurface.texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_refdef.view.origin : center, R_Q1BSP_DrawLight_TransparentCallback, ent, surface - rsurface.modelsurfaces, rsurface.rtlight); + if (ent->transparent_offset) // transparent offset + { + center[0] += r_refdef.view.forward[0]*ent->transparent_offset; + center[1] += r_refdef.view.forward[1]*ent->transparent_offset; + center[2] += r_refdef.view.forward[2]*ent->transparent_offset; + } + R_MeshQueue_AddTransparent((rsurface.texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST) ? MESHQUEUE_SORT_HUD : ((rsurface.entity->flags & RENDER_WORLDOBJECT) ? MESHQUEUE_SORT_SKY : MESHQUEUE_SORT_DISTANCE), center, R_Q1BSP_DrawLight_TransparentCallback, ent, surface - rsurface.modelsurfaces, rsurface.rtlight); } continue; } @@ -1537,7 +1550,7 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface } //Made by [515] -void R_ReplaceWorldTexture (void) +static void R_ReplaceWorldTexture (void) { dp_model_t *m; texture_t *t; @@ -1573,7 +1586,6 @@ void R_ReplaceWorldTexture (void) if ((skinframe = R_SkinFrame_LoadExternal(newt, TEXF_MIPMAP | TEXF_ALPHA | TEXF_PICMIP, true))) { // t->skinframes[0] = skinframe; - t->currentskinframe = skinframe; t->currentskinframe = skinframe; Con_Printf("%s replaced with %s\n", r, newt); } @@ -1587,7 +1599,7 @@ void R_ReplaceWorldTexture (void) } //Made by [515] -void R_ListWorldTextures (void) +static void R_ListWorldTextures (void) { dp_model_t *m; texture_t *t;