public UniformBinding <T> GetUniformBinding <T> (Material material, string uniformName) where T : struct { var effect = material.Effect; if (effect == null) { return(null); } var key = new UniformBindingKey(effect, uniformName, typeof(T)); lock (UniformBindings) { IUniformBinding existing; if (UniformBindings.TryGetValue(key, out existing)) { return(existing.Cast <T>()); } if (material.OwningThread != Thread.CurrentThread) { throw new InvalidOperationException("Uniform bindings must be allocated on the thread that owns the material."); } #if SDL2 UniformBinding <T> result; throw new NotImplementedException("Create uniform binding for effect"); #else var result = UniformBinding <T> .TryCreate(effect, uniformName); #endif UniformBindings.Add(key, result); return(result); } }
public bool Equals(UniformBindingKey rhs) { return((Effect == rhs.Effect) && (Type == rhs.Type) && (UniformName == rhs.UniformName)); }