示例#1
0
        public void SetParameter(String paramName, bool isSemantic, Color value)
        {
            if (IsValid)
            {
                IEffectParameter param = null;

                if (isSemantic)
                {
                    param = _effect.Parameters.GetParameterBySemantic(paramName);
                }
                else
                {
                    param = _effect.Parameters[paramName];
                }

                if (param == null)
                {
                    return;
                }

                Vector4 v = value.ToVector4();

                param.SetValue(v);
                _cachedParameters[paramName] = new MaterialParameter(param, paramName, isSemantic, v);
            }
            else
            {
                throw new ArgumentNullException("Material does not have a valid effect loaded, cannot set parameter. Call LoadEffect() first.");
            }
        }
示例#2
0
 public MaterialParameter(MaterialParameter param, IEffectParameter replacement) {
     _type = param.ParameterType;
     _cachedParameter = replacement;
     _name = param.Name;
     _isSemantic = param.IsSemantic;
     _singleValue = param.SingleValue;
     _intValue = param.IntValue;
     _boolValue = param.BoolValue;
     _vector2Value = param.Vector2Value;
     _vector3Value = param.Vector3Value;
     _vector4Value = param.Vector4Value;
     _textureValue = param.TextureValue;
     _matrixValue = param.MatrixValue;
 }
示例#3
0
        private void CloneParameters(Material clone)
        {
            foreach (KeyValuePair <String, MaterialParameter> kv in _cachedParameters)
            {
                MaterialParameter param = kv.Value;
                switch (param.ParameterType)
                {
                case MaterialParameterType.Bool:
                    clone.SetParameter(param.Name, param.IsSemantic, param.BoolValue);
                    break;

                case MaterialParameterType.Int32:
                    clone.SetParameter(param.Name, param.IsSemantic, param.IntValue);
                    break;

                case MaterialParameterType.Single:
                    clone.SetParameter(param.Name, param.IsSemantic, param.SingleValue);
                    break;

                case MaterialParameterType.Texture:
                    clone.SetParameter(param.Name, param.IsSemantic, param.TextureValue);
                    break;

                case MaterialParameterType.Vector2:
                    clone.SetParameter(param.Name, param.IsSemantic, param.Vector2Value);
                    break;

                case MaterialParameterType.Vector3:
                    clone.SetParameter(param.Name, param.IsSemantic, param.Vector3Value);
                    break;

                case MaterialParameterType.Vector4:
                    clone.SetParameter(param.Name, param.IsSemantic, param.Vector4Value);
                    break;

                case MaterialParameterType.Matrix:
                    clone.SetParameter(param.Name, param.IsSemantic, param.MatrixValue);
                    break;
                }
            }
        }
示例#4
0
 private void RecomputeSortID()
 {
     if (_effect == null)
     {
         _sortID = -1;
         return;
     }
     _sortID = _effect.ResourceID * 32;
     foreach (KeyValuePair <String, MaterialParameter> kv in _cachedParameters)
     {
         MaterialParameter param = kv.Value;
         if (param.ParameterType == MaterialParameterType.Texture)
         {
             Texture tex = param.TextureValue;
             if (tex != null)
             {
                 _sortID += tex.ResourceID;
             }
         }
     }
 }