+
+ /* alpha set|const A */
+ if ( alpha && ( !Q_stricmp( token, "set" ) || !Q_stricmp( token, "const" ) ) ) {
+ cm->type = CM_ALPHA_SET;
+ GetTokenAppend( shaderText, qfalse );
+ cm->data[ 0 ] = atof( token );
+ }
+
+ /* color|rgb set|const ( X Y Z ) */
+ else if ( !Q_stricmp( token, "set" ) || !Q_stricmp( token, "const" ) ) {
+ cm->type = CM_COLOR_SET;
+ Parse1DMatrixAppend( shaderText, 3, cm->data );
+ if ( colorsRGB ) {
+ cm->data[0] = Image_LinearFloatFromsRGBFloat( cm->data[0] );
+ cm->data[1] = Image_LinearFloatFromsRGBFloat( cm->data[1] );
+ cm->data[2] = Image_LinearFloatFromsRGBFloat( cm->data[2] );
+ }
+ }
+
+ /* alpha scale A */
+ else if ( alpha && !Q_stricmp( token, "scale" ) ) {
+ cm->type = CM_ALPHA_SCALE;
+ GetTokenAppend( shaderText, qfalse );
+ cm->data[ 0 ] = atof( token );
+ }
+
+ /* color|rgb scale ( X Y Z ) */
+ else if ( !Q_stricmp( token, "scale" ) ) {
+ cm->type = CM_COLOR_SCALE;
+ Parse1DMatrixAppend( shaderText, 3, cm->data );
+ }
+
+ /* dotProduct ( X Y Z ) */
+ else if ( !Q_stricmp( token, "dotProduct" ) ) {
+ cm->type = CM_COLOR_DOT_PRODUCT + alpha;
+ Parse1DMatrixAppend( shaderText, 3, cm->data );
+ }
+
+ /* dotProductScale ( X Y Z MIN MAX ) */
+ else if ( !Q_stricmp( token, "dotProductScale" ) ) {
+ cm->type = CM_COLOR_DOT_PRODUCT_SCALE + alpha;
+ Parse1DMatrixAppend( shaderText, 5, cm->data );
+ }
+
+ /* dotProduct2 ( X Y Z ) */
+ else if ( !Q_stricmp( token, "dotProduct2" ) ) {
+ cm->type = CM_COLOR_DOT_PRODUCT_2 + alpha;
+ Parse1DMatrixAppend( shaderText, 3, cm->data );
+ }
+
+ /* dotProduct2scale ( X Y Z MIN MAX ) */
+ else if ( !Q_stricmp( token, "dotProduct2scale" ) ) {
+ cm->type = CM_COLOR_DOT_PRODUCT_2_SCALE + alpha;
+ Parse1DMatrixAppend( shaderText, 5, cm->data );
+ }
+
+ /* volume */
+ else if ( !Q_stricmp( token, "volume" ) ) {
+ /* special stub mode for flagging volume brushes */
+ cm->type = CM_VOLUME;
+ }
+
+ /* unknown */
+ else{
+ Sys_FPrintf( SYS_WRN, "WARNING: Unknown colorMod method: %s\n", token );