using System; using System.Collections.Generic; using OpenTK; namespace BizHawk.Bizware.BizwareGL { /// /// represents a pipeline uniform... /// and one of those can represent multiple shader uniforms!! /// public class PipelineUniform { internal PipelineUniform(Pipeline owner) { Owner = owner; //Opaque = info.Opaque; //SamplerIndex = info.SamplerIndex; } internal void AddUniformInfo(UniformInfo ui) { _UniformInfos.Add(ui); } public IEnumerable UniformInfos => _UniformInfos; readonly List _UniformInfos = new List(); /// the first and only /// more than one exists public UniformInfo Sole { get { if (_UniformInfos.Count != 1) throw new InvalidOperationException(); return _UniformInfos[0]; } } public Pipeline Owner { get; } public void Set(Matrix4 mat, bool transpose = false) { Owner?.Owner.SetPipelineUniformMatrix(this, mat, transpose); } public void Set(Vector4 vec) { Owner?.Owner.SetPipelineUniform(this, vec); } public void Set(Vector2 vec) { Owner?.Owner.SetPipelineUniform(this, vec); } public void Set(float f) { Owner?.Owner.SetPipelineUniform(this, f); } public void Set(Vector4[] vecs) { Owner?.Owner.SetPipelineUniform(this, vecs); } public void Set(ref Matrix4 mat, bool transpose = false) { Owner?.Owner.SetPipelineUniformMatrix(this, ref mat, transpose); } public void Set(bool value) { Owner?.Owner.SetPipelineUniform(this, value); } public void Set(Texture2d tex) { Owner?.Owner.SetPipelineUniformSampler(this, tex); } } }