diff --git a/CMakeLists.txt b/CMakeLists.txt index 2fa4ad53..2e38c234 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -755,7 +755,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 a2e84147..6a8ceb6d 100644 --- a/src/client/refresh/gl1/gl1_surf.c +++ b/src/client/refresh/gl1/gl1_surf.c @@ -1196,9 +1196,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 @@ -1208,6 +1208,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/gl1/header/model.h b/src/client/refresh/gl1/header/model.h index 2eda331d..43b296ec 100644 --- a/src/client/refresh/gl1/header/model.h +++ b/src/client/refresh/gl1/header/model.h @@ -59,6 +59,7 @@ typedef struct msurface_s glpoly_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;