diff --git a/CMakeLists.txt b/CMakeLists.txt index 72377b13..5e16f05e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -748,7 +748,7 @@ set_target_properties(q2ded PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/release ) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") - target_link_libraries(q2ded ${yquake2LinkerFlags}) + target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ZLibLinkerFlags} ws2_32 winmm) else() target_link_libraries(q2ded ${yquake2LinkerFlags} ${yquake2ServerLinkerFlags} ${yquake2ZLibLinkerFlags}) endif() diff --git a/src/client/refresh/gl1/gl1_surf.c b/src/client/refresh/gl1/gl1_surf.c index 3732317b..64559d8a 100644 --- a/src/client/refresh/gl1/gl1_surf.c +++ b/src/client/refresh/gl1/gl1_surf.c @@ -1120,9 +1120,9 @@ R_GetBrushesLighting(void) for (k = 0; k < currentmodel->nummodelsurfaces; k++, surf++) { if (surf->texinfo->flags & (SURF_TRANS33 | SURF_TRANS66 | SURF_WARP) - || surf->flags & SURF_DRAWTURB) + || surf->flags & SURF_DRAWTURB || surf->lmchain_frame == r_framecount) { - continue; + continue; // either not affected by light, or already in the chain } // find which side of the node we are on @@ -1132,6 +1132,7 @@ R_GetBrushesLighting(void) if (((surf->flags & SURF_PLANEBACK) && (dot < -BACKFACE_EPSILON)) || (!(surf->flags & SURF_PLANEBACK) && (dot > BACKFACE_EPSILON))) { + surf->lmchain_frame = r_framecount; // don't add this twice to the chain surf->lightmapchain = gl_lms.lightmap_surfaces[surf->lightmaptexturenum]; gl_lms.lightmap_surfaces[surf->lightmaptexturenum] = surf; } diff --git a/src/client/refresh/ref_shared.h b/src/client/refresh/ref_shared.h index 42424216..624e2d4f 100644 --- a/src/client/refresh/ref_shared.h +++ b/src/client/refresh/ref_shared.h @@ -247,6 +247,7 @@ typedef struct msurface_s mpoly_t *polys; /* multiple if warped */ struct msurface_s *texturechain; struct msurface_s *lightmapchain; + int lmchain_frame; // avoids adding this surface twice to the lightmap chain mtexinfo_t *texinfo;