Exemple #1
0
        /// <summary>
        /// テクニック名の追加
        /// </summary>
        /// <param name="idx">テクニックインデックス</param>
        /// <param name="name">idxのパラメーター名</param>
        /// <param name="type">name 型のタイプ</param>
        /// <param name="arySize">typeが配列の場合、そのサイズ</param>
        /// <returns></returns>
        public int RegisterAddPara(int idx, string name, UtilValueType type, int arySize = 0)
        {
            MCUtilValueEX    p = new MCUtilValueEX();
            MC_EFF_VALUE_MGR pTmp;

            if (m_TPars.Count <= idx)
            {
                throw new Exception("RegisterAddPara(" + idx + "," + name + ") テクニックインデックスが不正です");
            }

            pTmp = m_TPars[idx];

            if (pTmp.index.ContainsKey(name))
            {
                throw new Exception("RegisterAddPara(" + idx + "," + name + ") 変数が既に登録されています");
            }



            switch (type)
            {
            case UtilValueType.FLOAT:
            case UtilValueType.ARY_FLOAT:
            case UtilValueType.BOOL:
            case UtilValueType.ARY_BOOL:
            case UtilValueType.INT:
            case UtilValueType.ARY_INT:
                p.sv = m_spCoreEffect.GetVariableByName(name).AsScalar();
                if (!p.sv.IsValid)
                {
                    return(-1);
                }
                break;

            case UtilValueType.FLOAT2:
            case UtilValueType.FLOAT3:
                p.vv = m_spCoreEffect.GetVariableByName(name).AsVector();
                if (!p.vv.IsValid)
                {
                    return(-1);
                }
                break;

            case UtilValueType.FLOAT4x4:
                p.mv = m_spCoreEffect.GetVariableByName(name).AsMatrix();
                if (!p.mv.IsValid)
                {
                    return(-1);
                }
                break;
            }
            p.Create(type, arySize);

            pTmp.item.Add(p);
            pTmp.index.Add(name, pTmp.item.Count - 1);
            return(pTmp.item.Count - 1);
        }
        /// <summary>
        /// idx の順番通りの MCUtilValue を作る
        /// </summary>
        /// <param name="idx">インデックス値</param>
        /// <param name="type">型の種類</param>
        /// <param name="arySize">配列のサイズ。デフォルトで0(配列でない)</param>
        /// <returns>
        /// 成功した場合、0以上の層の値を返す。
        /// 失敗した場合、-1を返す。
        /// </returns>
        public bool Create(int idx, UtilValueType type, int arySize = 0)
        {
            if (m_values.ContainsKey(idx))
            {
                return(false);
            }

            m_values.Add(idx, new MCUtilValue());

            return(m_values[idx].Create(type, arySize));
        }
Exemple #3
0
 /// <summary>
 /// 確認
 /// </summary>
 /// <param name="idx">登録テクニックのインデックス</param>
 /// <param name="n">パラメーター番号</param>
 /// <param name="type">指定パラメーターの変数の種類</param>
 /// <returns></returns>
 private bool Check(int idx, int n, UtilValueType type)
 {
     if (m_TPars.Count <= idx)
     {
         return(false);
     }
     if (m_TPars[idx].item.Count <= n)
     {
         return(false);
     }
     if (m_TPars[idx].item[n].GetUtilValueType() != type)
     {
         return(false);
     }
     return(true);
 }
        /// <summary>指定した型で変数を作成する</summary>
        /// <param name="t">型のタイプ</param>
        /// <param name="aryNum">tが配列の場合、そのサイズ</param>
        /// <return>trueを返す</return>
        public bool Create(UtilValueType t, int aryNum = 0)
        {
            m_type = t;
            if (m_type == UtilValueType.FLOAT)
            {
                m_size  = sizeof(float);
                m_float = new float[1];
            }
            else if (m_type == UtilValueType.FLOAT2 || m_type == UtilValueType.VEC_F2)
            {
                m_size  = sizeof(float) * 2;
                m_float = new float[2];
            }
            else if (m_type == UtilValueType.FLOAT3 || m_type == UtilValueType.VEC_F3)
            {
                m_size  = sizeof(float) * 3;
                m_float = new float[3];
            }
            else if (m_type == UtilValueType.FLOAT4 || m_type == UtilValueType.VEC_F4)
            {
                m_size  = sizeof(float) * 4;
                m_float = new float[4];
            }
            else if (m_type == UtilValueType.INT)
            {
                m_size = sizeof(Int32);
                m_int  = new Int32[1];
            }
            else if (m_type == UtilValueType.BOOL)
            {
                m_size = sizeof(bool);
                m_bool = new bool[1];
            }
            else if (m_type == UtilValueType.DOUBLE)
            {
                m_size   = sizeof(double);
                m_double = new double[1];
            }
            else if (m_type == UtilValueType.FLOAT4x4)
            {
                m_size  = sizeof(float) * 16;
                m_float = new float[16];
            }
            else if (m_type == UtilValueType.ARY_FLOAT)
            {
                if (aryNum < 1)
                {
                    return(false);
                }
                m_float  = new float[aryNum];
                m_size   = sizeof(float) * aryNum;
                m_aryNum = aryNum;
            }
            else if (m_type == UtilValueType.ARY_BOOL)
            {
                if (aryNum < 1)
                {
                    return(false);
                }
                m_bool   = new bool[aryNum];
                m_size   = sizeof(bool) * aryNum;
                m_aryNum = aryNum;
            }
            else if (m_type == UtilValueType.ARY_INT)
            {
                if (aryNum < 1)
                {
                    return(false);
                }
                m_int    = new Int32[aryNum];
                m_size   = sizeof(Int32) * aryNum;
                m_aryNum = aryNum;
            }
            else if (m_type == UtilValueType.ARY_DOUBLE)
            {
                if (aryNum < 1)
                {
                    return(false);
                }
                m_double = new double[aryNum];
                m_size   = sizeof(double) * aryNum;
                m_aryNum = aryNum;
            }
            else if (m_type == UtilValueType.ARY_FLOAT4x4)
            {
                if (aryNum < 1)
                {
                    return(false);
                }
                m_float  = new float[16 * aryNum];
                m_size   = sizeof(float) * aryNum * 16;
                m_aryNum = aryNum;
            }


            return(m_float != null);
        }
 /// <summary>コンストラクタ</summary>
 public MCUtilValue()
 {
     m_type   = UtilValueType.NONE;
     m_size   = 0;
     m_aryNum = 0;
 }