- memset(hash, 0, sizeof(hash));
- for (i = 0;i < 4096;i++)
- hashpointer[i] = &hash[i];
- distscale = 4095.0f / max(mqt_viewmaxdist, 4095);
- for (i = 0, mqt = mqt_array;i < mqt_count;i++, mqt++)
+
+ // check for bad cvars
+ if (r_transparent_sortarraysize.integer < 1 || r_transparent_sortarraysize.integer > 32768)
+ Cvar_SetValueQuick(&r_transparent_sortarraysize, bound(1, r_transparent_sortarraysize.integer, 32768));
+ if (r_transparent_sortmindist.integer < 1 || r_transparent_sortmindist.integer >= r_transparent_sortmaxdist.integer)
+ Cvar_SetValueQuick(&r_transparent_sortmindist, 0);
+ if (r_transparent_sortmaxdist.integer < r_transparent_sortmindist.integer || r_transparent_sortmaxdist.integer > 32768)
+ Cvar_SetValueQuick(&r_transparent_sortmaxdist, bound(r_transparent_sortmindist.integer, r_transparent_sortmaxdist.integer, 32768));
+
+ // update hash array
+ if (trans_sortarraysize != r_transparent_sortarraysize.integer)
+ {
+ trans_sortarraysize = r_transparent_sortarraysize.integer;
+ if (trans_hash)
+ Mem_Free(trans_hash);
+ trans_hash = (meshqueue_t **)Mem_Alloc(cls.permanentmempool, sizeof(meshqueue_t *) * trans_sortarraysize);
+ if (trans_hashpointer)
+ Mem_Free(trans_hashpointer);
+ trans_hashpointer = (meshqueue_t ***)Mem_Alloc(cls.permanentmempool, sizeof(meshqueue_t **) * trans_sortarraysize);
+ }
+
+ // build index
+ memset(trans_hash, 0, sizeof(meshqueue_t *) * trans_sortarraysize);
+ for (i = 0; i < trans_sortarraysize; i++)
+ trans_hashpointer[i] = &trans_hash[i];
+ distscale = (trans_sortarraysize - 1) / min(mqt_viewmaxdist, r_transparent_sortmaxdist.integer);
+ maxhashindex = trans_sortarraysize - 1;
+ for (i = 0, mqt = mqt_array; i < mqt_count; i++, mqt++)