]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rmain.c
Win32: ioctl SIO_UDP_CONNRESET <- FALSE
[xonotic/darkplaces.git] / gl_rmain.c
index 2678359436ae07cfd34bc372f6b6f0fc23ef83e8..f603dce2283dc43421cf60ae08298963890949af 100644 (file)
@@ -2453,15 +2453,17 @@ void R_UpdateVariables(void)
                r_refdef.farclip += VectorDistance(r_refdef.worldmodel->normalmins, r_refdef.worldmodel->normalmaxs);
        r_refdef.nearclip = bound (0.001f, r_nearclip.value, r_refdef.farclip - 1.0f);
 
+       if (r_shadow_frontsidecasting.integer < 0 || r_shadow_frontsidecasting.integer > 1)
+               Cvar_SetValueQuick(&r_shadow_frontsidecasting, 1);
        r_refdef.polygonfactor = 0;
        r_refdef.polygonoffset = 0;
-       r_refdef.shadowpolygonfactor = r_refdef.polygonfactor + r_shadow_shadow_polygonfactor.value;
-       r_refdef.shadowpolygonoffset = r_refdef.polygonoffset + r_shadow_shadow_polygonoffset.value;
+       r_refdef.shadowpolygonfactor = r_refdef.polygonfactor + r_shadow_polygonfactor.value * (r_shadow_frontsidecasting.integer ? 1 : -1);
+       r_refdef.shadowpolygonoffset = r_refdef.polygonoffset + r_shadow_polygonoffset.value * (r_shadow_frontsidecasting.integer ? 1 : -1);
 
        r_refdef.rtworld = r_shadow_realtime_world.integer;
        r_refdef.rtworldshadows = r_shadow_realtime_world_shadows.integer && gl_stencil;
        r_refdef.rtdlight = (r_shadow_realtime_world.integer || r_shadow_realtime_dlight.integer) && !gl_flashblend.integer && r_dynamic.integer;
-       r_refdef.rtdlightshadows = r_refdef.rtdlight && (r_refdef.rtworld ? r_shadow_realtime_world_dlightshadows.integer : r_shadow_realtime_dlight_shadows.integer) && gl_stencil;
+       r_refdef.rtdlightshadows = r_refdef.rtdlight && r_shadow_realtime_dlight_shadows.integer && gl_stencil;
        r_refdef.lightmapintensity = r_refdef.rtworld ? r_shadow_realtime_world_lightmaps.value : 1;
        if (r_showsurfaces.integer)
        {
@@ -3223,9 +3225,7 @@ void R_UpdateTextureInfo(const entity_render_t *ent, texture_t *t)
        t->currentnumlayers = 0;
        if (!(t->currentmaterialflags & MATERIALFLAG_NODRAW))
        {
-               if (gl_lightmaps.integer)
-                       R_Texture_AddLayer(t, true, GL_ONE, GL_ZERO, TEXTURELAYERTYPE_LITTEXTURE, r_texture_white, &identitymatrix, 1, 1, 1, 1);
-               else if (!(t->currentmaterialflags & MATERIALFLAG_SKY))
+               if (!(t->currentmaterialflags & MATERIALFLAG_SKY))
                {
                        int blendfunc1, blendfunc2, depthmask;
                        if (t->currentmaterialflags & MATERIALFLAG_ADD)
@@ -4473,6 +4473,34 @@ static void R_DrawTextureSurfaceList(int texturenumsurfaces, msurface_t **textur
                R_DrawTextureSurfaceList_ShowSurfaces(texturenumsurfaces, texturesurfacelist);
                r_refdef.stats.entities_surfaces += texturenumsurfaces;
        }
+       else if (gl_lightmaps.integer)
+       {
+               rmeshstate_t m;
+               if (rsurface_mode != RSURFMODE_MULTIPASS)
+                       rsurface_mode = RSURFMODE_MULTIPASS;
+               GL_DepthRange(0, (rsurface_texture->currentmaterialflags & MATERIALFLAG_SHORTDEPTHRANGE) ? 0.0625 : 1);
+               GL_DepthTest(true);
+               GL_CullFace((rsurface_texture->currentmaterialflags & MATERIALFLAG_NOCULLFACE) ? GL_NONE : GL_FRONT); // quake is backwards, this culls back faces
+               GL_BlendFunc(GL_ONE, GL_ZERO);
+               GL_DepthMask(writedepth);
+               GL_Color(1,1,1,1);
+               GL_AlphaTest(false);
+               R_Mesh_ColorPointer(NULL, 0, 0);
+               memset(&m, 0, sizeof(m));
+               m.tex[0] = R_GetTexture(r_texture_white);
+               m.pointer_texcoord[0] = rsurface_model->surfmesh.data_texcoordlightmap2f;
+               m.pointer_texcoord_bufferobject[0] = rsurface_model->surfmesh.vbo;
+               m.pointer_texcoord_bufferoffset[0] = rsurface_model->surfmesh.vbooffset_texcoordlightmap2f;
+               R_Mesh_TextureState(&m);
+               RSurf_PrepareVerticesForBatch(rsurface_lightmode == 2, false, texturenumsurfaces, texturesurfacelist);
+               if (rsurface_lightmode == 2)
+                       RSurf_DrawBatch_GL11_VertexShade(texturenumsurfaces, texturesurfacelist, 1, 1, 1, 1, false, false);
+               else if (rsurface_uselightmaptexture)
+                       RSurf_DrawBatch_GL11_Lightmap(texturenumsurfaces, texturesurfacelist, 1, 1, 1, 1, false, false);
+               else
+                       RSurf_DrawBatch_GL11_VertexColor(texturenumsurfaces, texturesurfacelist, 1, 1, 1, 1, false, false);
+               r_refdef.stats.entities_surfaces += texturenumsurfaces;
+       }
        else if (rsurface_texture->currentmaterialflags & MATERIALFLAG_SKY)
        {
                R_DrawTextureSurfaceList_Sky(texturenumsurfaces, texturesurfacelist);