void __cdecl volTransformThreadFunction (void *pExpandDlgParam) { int nStatus; EXPAND_VOL_THREAD_PARAMS *pParam=(EXPAND_VOL_THREAD_PARAMS *)pExpandDlgParam; HWND hwndDlg = (HWND) pParam->hwndDlg; nStatus = ExpandVolume (hwndDlg, (wchar_t*)pParam->szVolumeName, pParam->pVolumePassword, pParam->VolumePkcs5, pParam->VolumePim, pParam->newSize, pParam->bInitFreeSpace ); if (nStatus!=ERR_SUCCESS && nStatus!=ERR_USER_ABORT) handleError (hwndDlg, nStatus, SRC_POS); bVolTransformThreadCancel = FALSE; PostMessage (hwndDlg, TC_APPMSG_VOL_TRANSFORM_THREAD_ENDED, 0, nStatus); _endthread (); }
/* ============= R_AddShadowCaster Polygons must be added in front to back order! ============= */ svnode_t *R_AddShadowCaster(svnode_t *node, vec3_t *v, int vnum, msurface_t *surf,int depth) { int sign; int signs[MAX_POLY_VERT],signs2[MAX_POLY_VERT]; vec3_t v1[MAX_POLY_VERT],v2[MAX_POLY_VERT]; int vnum1,vnum2; int i; if (depth > 1500) { Con_Printf("to deep\n"); return NULL; } if (vnum == 0) return NULL; sign = 0; for (i=0; i<vnum; i++) { sign |= signs[i] = Epsilon_Sign (DotProduct (v[i], node->splitplane->normal)- node->splitplane->dist); } if (sign == 1) { if (node->children[0] != NULL) { R_AddShadowCaster (node->children[0], v, vnum, surf, depth+1); } else { svBsp_NumCutPolys++; } } else if (sign == 2) { if (node->children[1] != NULL) { R_AddShadowCaster (node->children[1], v, vnum, surf, depth+1); } else { node->children[1] = ExpandVolume(v, signs, vnum, surf); if (surf->visframe != r_lightTimestamp) { //Store it out as visible surf->shadowchain = shadowchain; surf->visframe = r_lightTimestamp; surf->polys->lightTimestamp = r_lightTimestamp; shadowchain = surf; svBsp_NumKeptPolys++; } } } else if (sign == 3) { SplitPolygon(&v[0], &signs[0], vnum, node->splitplane, &v1[0], &vnum1, &v2[0], &vnum2); if (node->children[0] != NULL) { R_AddShadowCaster (node->children[0], v1, vnum1, surf, depth+1); } else { svBsp_NumCutPolys++; } if (vnum2 == 0) return NULL; if (node->children[1] != NULL) { R_AddShadowCaster (node->children[1], v2, vnum2, surf, depth+1); } else { node->children[1] = ExpandVolume (v2, signs2, vnum2, surf); if (surf->visframe != r_lightTimestamp) { //Store it out as visible surf->shadowchain = shadowchain; surf->visframe = r_lightTimestamp; surf->polys->lightTimestamp = r_lightTimestamp; shadowchain = surf; svBsp_NumKeptPolys++; } } } return NULL; }