X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=meshqueue.c;h=e0e1e8c7091c7765783b311010f8da3399a1e3c2;hb=5c3dd9b83e2618808dbabdb335c4ae9f0d1c21a8;hp=d21ba627aec464dc0e7fa359d06e169319b5bb9f;hpb=30815d8dacbb62f218b03ea1e9f99fefcc4600a5;p=xonotic%2Fdarkplaces.git diff --git a/meshqueue.c b/meshqueue.c index d21ba627..e0e1e8c7 100644 --- a/meshqueue.c +++ b/meshqueue.c @@ -17,6 +17,7 @@ int trans_sortarraysize; meshqueue_t **trans_hash = NULL; meshqueue_t ***trans_hashpointer = NULL; extern cvar_t r_transparent_sortarraysize; +extern cvar_t r_transparent_sortmindist; extern cvar_t r_transparent_sortmaxdist; float mqt_viewplanedist; @@ -52,7 +53,10 @@ void R_MeshQueue_AddTransparent(const vec3_t center, void (*callback)(const enti mq->ent = ent; mq->surfacenumber = surfacenumber; mq->rtlight = rtlight; - mq->dist = DotProduct(center, r_refdef.view.forward) - mqt_viewplanedist; + if (ent && (ent->flags & RENDER_WORLDOBJECT)) + mq->dist = mqt_viewmaxdist; + else + mq->dist = DotProduct(center, r_refdef.view.forward) - mqt_viewplanedist; mq->next = NULL; mqt_viewmaxdist = max(mqt_viewmaxdist, mq->dist); } @@ -73,8 +77,10 @@ void R_MeshQueue_RenderTransparent(void) // 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_sortmaxdist.integer < 1 || r_transparent_sortmaxdist.integer > 32768) - Cvar_SetValueQuick(&r_transparent_sortmaxdist, bound(1, r_transparent_sortmaxdist.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) @@ -96,7 +102,7 @@ void R_MeshQueue_RenderTransparent(void) maxhashindex = trans_sortarraysize - 1; for (i = 0, mqt = mqt_array; i < mqt_count; i++, mqt++) { - hashindex = bound(0, (int)(min(mqt->dist, r_transparent_sortmaxdist.integer) * distscale), maxhashindex); + hashindex = bound(0, (int)(bound(0, mqt->dist - r_transparent_sortmindist.integer, r_transparent_sortmaxdist.integer) * distscale), maxhashindex); // link to tail of hash chain (to preserve render order) mqt->next = NULL; *trans_hashpointer[hashindex] = mqt;