+/*
+VolumeColorMods() - ydnar
+applies brush/volumetric color/alpha modulation to vertexes
+*/
+
+static void VolumeColorMods( entity_t *e, mapDrawSurface_t *ds )
+{
+ int i, j;
+ float d;
+ brush_t *b;
+ plane_t *plane;
+
+
+ /* early out */
+ if( e->colorModBrushes == NULL )
+ return;
+
+ /* iterate brushes */
+ for( b = e->colorModBrushes; b != NULL; b = b->nextColorModBrush )
+ {
+ /* worldspawn alpha brushes affect all, grouped ones only affect original entity */
+ if( b->entityNum != 0 && b->entityNum != ds->entityNum )
+ continue;
+
+ /* test bbox */
+ if( b->mins[ 0 ] > ds->maxs[ 0 ] || b->maxs[ 0 ] < ds->mins[ 0 ] ||
+ b->mins[ 1 ] > ds->maxs[ 1 ] || b->maxs[ 1 ] < ds->mins[ 1 ] ||
+ b->mins[ 2 ] > ds->maxs[ 2 ] || b->maxs[ 2 ] < ds->mins[ 2 ] )
+ continue;
+
+ /* iterate verts */
+ for( i = 0; i < ds->numVerts; i++ )
+ {
+ /* iterate planes */
+ for( j = 0; j < b->numsides; j++ )
+ {
+ /* point-plane test */
+ plane = &mapplanes[ b->sides[ j ].planenum ];
+ d = DotProduct( ds->verts[ i ].xyz, plane->normal ) - plane->dist;
+ if( d > 1.0f )
+ break;
+ }
+
+ /* apply colormods */
+ if( j == b->numsides )
+ ColorMod( b->contentShader->colorMod, 1, &ds->verts[ i ] );
+ }
+ }
+}
+
+
+