+void R_DrawBBoxMesh(vec3_t mins, vec3_t maxs, float cr, float cg, float cb, float ca)
+{
+ int i;
+ float *v, *c, f1, f2, diff[3];
+ rmeshbufferinfo_t m;
+ m.numtriangles = 12;
+ m.numverts = 8;
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
+ Matrix4x4_CreateIdentity(&m.matrix);
+ if (R_Mesh_Draw_GetBuffer(&m, false))
+ {
+ m.vertex[ 0] = mins[0];m.vertex[ 1] = mins[1];m.vertex[ 2] = mins[2];
+ m.vertex[ 4] = maxs[0];m.vertex[ 5] = mins[1];m.vertex[ 6] = mins[2];
+ m.vertex[ 8] = mins[0];m.vertex[ 9] = maxs[1];m.vertex[10] = mins[2];
+ m.vertex[12] = maxs[0];m.vertex[13] = maxs[1];m.vertex[14] = mins[2];
+ m.vertex[16] = mins[0];m.vertex[17] = mins[1];m.vertex[18] = maxs[2];
+ m.vertex[20] = maxs[0];m.vertex[21] = mins[1];m.vertex[22] = maxs[2];
+ m.vertex[24] = mins[0];m.vertex[25] = maxs[1];m.vertex[26] = maxs[2];
+ m.vertex[28] = maxs[0];m.vertex[29] = maxs[1];m.vertex[30] = maxs[2];
+ m.color[ 0] = m.color[ 4] = m.color[ 8] = m.color[12] = m.color[16] = m.color[20] = m.color[24] = m.color[28] = cr * m.colorscale;
+ m.color[ 1] = m.color[ 5] = m.color[ 9] = m.color[13] = m.color[17] = m.color[21] = m.color[25] = m.color[29] = cg * m.colorscale;
+ m.color[ 2] = m.color[ 6] = m.color[10] = m.color[14] = m.color[18] = m.color[22] = m.color[26] = m.color[30] = cb * m.colorscale;
+ m.color[ 3] = m.color[ 7] = m.color[11] = m.color[15] = m.color[19] = m.color[23] = m.color[27] = m.color[31] = ca;
+ if (fogenabled)
+ {
+ for (i = 0, v = m.vertex, c = m.color;i < m.numverts;i++, v += 4, c += 4)
+ {
+ VectorSubtract(v, r_origin, diff);
+ f2 = exp(fogdensity/DotProduct(diff, diff));
+ f1 = 1 - f2;
+ f2 *= m.colorscale;
+ c[0] = c[0] * f1 + fogcolor[0] * f2;
+ c[1] = c[1] * f1 + fogcolor[1] * f2;
+ c[2] = c[2] * f1 + fogcolor[2] * f2;
+ }
+ }
+ R_Mesh_Render();
+ }
+}
+
+void R_DrawNoModelCallback(const void *calldata1, int calldata2)
+{
+ const entity_render_t *ent = calldata1;
+ int i;
+ float f1, f2, *c, diff[3];
+ rmeshbufferinfo_t m;
+ memset(&m, 0, sizeof(m));
+ if (ent->flags & EF_ADDITIVE)
+ {
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE;
+ }
+ else if (ent->alpha < 1)
+ {
+ m.blendfunc1 = GL_SRC_ALPHA;
+ m.blendfunc2 = GL_ONE_MINUS_SRC_ALPHA;
+ }
+ else
+ {
+ m.blendfunc1 = GL_ONE;
+ m.blendfunc2 = GL_ZERO;
+ }
+ m.numtriangles = 8;
+ m.numverts = 6;
+ m.matrix = ent->matrix;
+ if (R_Mesh_Draw_GetBuffer(&m, false))
+ {
+ m.index[ 0] = 5;m.index[ 1] = 2;m.index[ 2] = 0;
+ m.index[ 3] = 5;m.index[ 4] = 1;m.index[ 5] = 2;
+ m.index[ 6] = 5;m.index[ 7] = 0;m.index[ 8] = 3;
+ m.index[ 9] = 5;m.index[10] = 3;m.index[11] = 1;
+ m.index[12] = 0;m.index[13] = 2;m.index[14] = 4;
+ m.index[15] = 2;m.index[16] = 1;m.index[17] = 4;
+ m.index[18] = 3;m.index[19] = 0;m.index[20] = 4;
+ m.index[21] = 1;m.index[22] = 3;m.index[23] = 4;
+ m.vertex[ 0] = -16;m.vertex[ 1] = 0;m.vertex[ 2] = 0;
+ m.vertex[ 4] = 16;m.vertex[ 5] = 0;m.vertex[ 6] = 0;
+ m.vertex[ 8] = 0;m.vertex[ 9] = -16;m.vertex[10] = 0;
+ m.vertex[12] = 0;m.vertex[13] = 16;m.vertex[14] = 0;
+ m.vertex[16] = 0;m.vertex[17] = 0;m.vertex[18] = -16;
+ m.vertex[20] = 0;m.vertex[21] = 0;m.vertex[22] = 16;
+ m.color[ 0] = 0.00f;m.color[ 1] = 0.00f;m.color[ 2] = 0.50f;m.color[ 3] = ent->alpha;
+ m.color[ 4] = 0.00f;m.color[ 5] = 0.00f;m.color[ 6] = 0.50f;m.color[ 7] = ent->alpha;
+ m.color[ 8] = 0.00f;m.color[ 9] = 0.50f;m.color[10] = 0.00f;m.color[11] = ent->alpha;
+ m.color[12] = 0.00f;m.color[13] = 0.50f;m.color[14] = 0.00f;m.color[15] = ent->alpha;
+ m.color[16] = 0.50f;m.color[17] = 0.00f;m.color[18] = 0.00f;m.color[19] = ent->alpha;
+ m.color[20] = 0.50f;m.color[21] = 0.00f;m.color[22] = 0.00f;m.color[23] = ent->alpha;
+ if (fogenabled)
+ {
+ VectorSubtract(ent->origin, r_origin, diff);
+ f2 = exp(fogdensity/DotProduct(diff, diff));
+ f1 = 1 - f2;
+ for (i = 0, c = m.color;i < m.numverts;i++, c += 4)
+ {
+ c[0] = (c[0] * f1 + fogcolor[0] * f2) * m.colorscale;
+ c[1] = (c[1] * f1 + fogcolor[1] * f2) * m.colorscale;
+ c[2] = (c[2] * f1 + fogcolor[2] * f2) * m.colorscale;
+ }
+ }
+ else
+ {
+ for (i = 0, c = m.color;i < m.numverts;i++, c += 4)
+ {
+ c[0] *= m.colorscale;
+ c[1] *= m.colorscale;
+ c[2] *= m.colorscale;
+ }
+ }
+ R_Mesh_Render();
+ }
+}
+
+void R_DrawNoModel(entity_render_t *ent)
+{
+ //if ((ent->effects & EF_ADDITIVE) || (ent->alpha < 1))
+ R_MeshQueue_AddTransparent(ent->origin, R_DrawNoModelCallback, ent, 0);
+ //else
+ // R_DrawNoModelCallback(ent, 0);
+}
+