/// <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)); }
/// <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; }