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."); } }
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; }
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; } } }
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; } } } }