/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/

#ifndef plWaveSetShaderConsts_inc
#define plWaveSetShaderConsts_inc

// Notice there can be skips for multi-vector consts (e.g. matrices).
namespace plGridVS
{
    enum {
        kLocalToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kWaterTint                  = 4,
        kFrequency                  = 5,
        kPhase                      = 6,
        kAmplitude                  = 7,
        kDirectionX                 = 8,
        kDirectionY                 = 9,
        kUTransform                 = 10,
        kVTransform                 = 11,
        kScrunch                    = 12,
        kSinConsts                  = 13,
        kCosConsts                  = 14,
        kPiConsts                   = 15,
        kNumericConsts              = 16,
        kCameraPos                  = 17,
        kWindRot                    = 18,
        kEnvAdjust                  = 19,
        kEnvTint                    = 20,

        kNumConsts
    };
};

namespace plFixedVS
{
    enum {
        kWorldToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kWaterTint                  = 4,
        kFrequency                  = 5,
        kPhase                      = 6,
        kAmplitude                  = 7,
        kDirectionX                 = 8,
        kDirectionY                 = 9,
        kUTransform                 = 10,
        kVTransform                 = 11,
        kScrunch                    = 12,
        kSinConsts                  = 13,
        kCosConsts                  = 14,
        kPiConsts                   = 15,
        kNumericConsts              = 16,
        kCameraPos                  = 17,
        kWindRot                    = 18,
        kEnvAdjust                  = 19,
        kEnvTint                    = 20,
        kLocalToWorld               = 21,
        kL2WRow0                        = 21,
        kL2WRow1                        = 22,
        kL2WRow2                        = 23,
        kLengths                    = 24,
        kWaterLevel                 = 25,
        kDepthFalloff               = 26,
        kMinAtten                   = 27,
        kFogSet                     = 28,

        kNumConsts
    };
};

namespace plFixedVS7
{
    enum {
        kWorldToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kWaterTint                  = 4,
        kFrequency                  = 5,
        kPhase                      = 6,
        kAmplitude                  = 7,
        kDirectionX                 = 8,
        kDirectionY                 = 9,
        kUVScale                    = 10,
        kSpecAtten                  = 11,
        kScrunch                    = 12, // UNUSED
        kSinConsts                  = 13,
        kCosConsts                  = 14,
        kPiConsts                   = 15,
        kNumericConsts              = 16,
        kCameraPos                  = 17,
        kWindRot                    = 18,
        kEnvAdjust                  = 19,
        kEnvTint                    = 20,
        kLocalToWorld               = 21,
        kL2WRow0                        = 21,
        kL2WRow1                        = 22,
        kL2WRow2                        = 23,
        kLengths                    = 24,
        kWaterLevel                 = 25,
        kDepthFalloff               = 26,
        kMinAtten                   = 27,
        kFogSet                     = 28,
        kDirXK                      = 29,
        kDirYK                      = 30,
        kDirXW                      = 31,
        kDirYW                      = 32,
        kWK                         = 33,
        kDirXSqKW                   = 34,
        kDirXDirYKW                 = 35,
        kDirYSqKW                   = 36,

        kNumConsts
    };
};

namespace plShoreVS
{
    enum {
        kWorldToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kShoreTint                  = 4,
        kFrequency                  = 5,
        kPhase                      = 6,
        kAmplitude                  = 7,
        kDirectionX                 = 8,
        kDirectionY                 = 9,
        kIncline                    = 10,
        kFogSet                     = 11,
        kScrunch                    = 12, // UNUSED
        kSinConsts                  = 13,
        kCosConsts                  = 14,
        kPiConsts                   = 15,
        kNumericConsts              = 16,
        kQADirX                     = 17, // Q * Dir.x * A
        kQADirY                     = 18, // Q * Dir.y * A
        kTex0Transform              = 19,
        kTex0_Row0                      = 19,
        kTex0_Row1                      = 20,
        kTex0_Row2                      = 21,
        kTex1Transform              = 22, // UNUSED
        kTex1_Row0                      = 22,
        kTex1_Row1                      = 23,
        kTex1_Row2                      = 24,
        kLocalToWorld               = 25,
        kL2WRow0                        = 26,
        kL2WRow1                        = 27,
        kL2WRow2                        = 28,
        kLengths                    = 29,
        kWaterLevel                 = 30,
        kDepthFalloff               = 31,
        kMinAtten                   = 32,

        kNumConsts
    };
};

namespace plGraphVS
{
    enum {
        kNumericConsts              = 0,
        kFrequency                  = 1,
        kPhase                      = 2,
        kAmplitude                  = 3,
        kPiConsts                   = 4,
        kCosConsts                  = 5,
        kUVWConsts                  = 6,
        kColor                      = 7,

        kNumConsts
    };
};

namespace plGraphPS
{
    enum {

        kNumConsts
    };
};

namespace plFixedPS
{
    enum {
        kDir0                       = 0,
        kDir1                       = 1,
        kDir2                       = 2,
        kDir3                       = 3,

        kNumConsts
    };
};

namespace plBumpPS
{
    enum {
        kWave0                      = 0,
        kWave1                      = 1,
        kWave2                      = 2,
        kWave3                      = 3,
        kHalfOne                    = 4,
        kBias                       = 5,

        kNumConsts
    };
};

namespace plBumpVS
{
    enum {
        kUXform0            = 0,
        kUXform1            = 1,
        kUXform2            = 2,
        kUXform3            = 3,

        kNumbers            = 4,

        kNumConsts
    };
};

namespace plBiasPS
{
    enum {

        kNumConsts
    };
};

namespace plBiasVS
{
    enum {
        kTexU0          = 0,
        kTexV0          = 1,

        kTexU1          = 2,
        kTexV1          = 3,

        kNumbers        = 4,

        kScaleBias      = 5,

        kNumConsts
    };
};

namespace plCompPS
{
    enum {


        kNumConsts
    };
};

namespace plCompVS
{
    enum {
        kTex0Transform              = 0,
        kTex0_Row0                      = 0,
        kTex0_Row1                      = 1,
        kTex1Transform              = 2,
        kTex1_Row0                      = 2,
        kTex1_Row1                      = 3,
        kTex2Transform              = 4,
        kTex2_Row0                      = 4,
        kTex2_Row1                      = 5,
        kTex3Transform              = 6,
        kTex3_Row0                      = 6,
        kTex3_Row1                      = 7,

        kNumbers            = 8,

        kNumConsts
    };
};

namespace plRipVS // closely related to plFixedVS and plShoreVS
{
    enum {
        kWorldToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kFogSet                     = 4,
        kFrequency                  = 5,
        kPhase                      = 6,
        kAmplitude                  = 7,
        kDirectionX                 = 8,
        kDirectionY                 = 9,
        kQADirX                     = 10,
        kQADirY                     = 11,
        kScrunch                    = 12, // UNUSED
        kSinConsts                  = 13,
        kCosConsts                  = 14,
        kPiConsts                   = 15,
        kNumericConsts              = 16,
        kCameraPos                  = 17,
        kWindRot                    = 18, // UNUSED
        kTex0Transform              = 19, // UNUSED
        kTex0_Row0                      = 19,
        kTex0_Row1                      = 20,
        kTex0_Row2                      = 21,
        kTex1Transform              = 22, // UNUSED
        kTex1_Row0                      = 22,
        kTex1_Row1                      = 23,
        kTex1_Row2                      = 24,
        kLocalToWorld               = 25,
        kL2WRow0                        = 26,
        kL2WRow1                        = 27,
        kL2WRow2                        = 28,
        kLengths                    = 29,
        kWaterLevel                 = 30,
        kDepthFalloff               = 31,
        kMinAtten                   = 32,
        kTexConsts                  = 33,
        kLifeConsts                 = 34,
        kRampBias                   = 35,

        kNumConsts
    };
};

namespace plWaveDecVS // closely related to plFixedVS and plShoreVS
{
    enum {
        kWorldToNDC                 = 0,
        kProjRow0                       = 0,
        kProjRow1                       = 1,
        kProjRow2                       = 2,
        kProjRow3                       = 3,
        kFrequency                  = 4,
        kPhase                      = 5,
        kAmplitude                  = 6,
        kDirectionX                 = 7,
        kDirectionY                 = 8,
        kScrunch                    = 9, // UNUSED
        kSinConsts                  = 10,
        kCosConsts                  = 11,
        kPiConsts                   = 12,
        kNumericConsts              = 13,
        kTex0Transform              = 14, 
        kTex0_Row0                      = 14,
        kTex0_Row1                      = 15,
        kTex1Transform              = 16,
        kTex1_Row0                      = 16,
        kTex1_Row1                      = 17,
        kLocalToWorld               = 18,
        kL2WRow0                        = 18,
        kL2WRow1                        = 19,
        kL2WRow2                        = 20,
        kLengths                    = 21,
        kWaterLevel                 = 22,
        kDepthFalloff               = 23,
        kMinAtten                   = 24,
        kBias                       = 25, // Only using one slot
        kMatColor                   = 26,
        kCameraPos                  = 27, // Only used by DecalEnv
        kEnvAdjust                  = 28, // Only used by DecalEnv
        kFogSet                     = 29,
        kQADirX                     = 30,
        kQADirY                     = 31,

        kDirXW                      = 32, // Only used by DecalEnv
        kDirYW                      = 33, // Only used by DecalEnv
        kWK                         = 34, // Only used by DecalEnv
        kDirXSqKW                   = 35, // Only used by DecalEnv
        kDirXDirYKW                 = 36, // Only used by DecalEnv
        kDirYSqKW                   = 37, // Only used by DecalEnv

        kNumConsts
    };
};


#endif // plWaveSetShaderConsts_inc