BizHawk/Bizware/BizHawk.Bizware.BizwareGL/PipelineUniform.cs

91 lines
2.2 KiB
C#
Raw Normal View History

2014-01-27 00:02:21 +00:00
using System;
using System.Collections.Generic;
using OpenTK;
2014-01-27 00:02:21 +00:00
namespace BizHawk.Bizware.BizwareGL
{
2015-08-20 23:35:53 +00:00
/// <summary>
/// represents a pipeline uniform...
/// and one of those can represent multiple shader uniforms!!
/// </summary>
2014-01-27 00:02:21 +00:00
public class PipelineUniform
{
2015-08-20 23:35:53 +00:00
internal PipelineUniform(Pipeline owner)
2014-01-27 00:02:21 +00:00
{
Owner = owner;
2015-08-20 23:35:53 +00:00
//Opaque = info.Opaque;
//SamplerIndex = info.SamplerIndex;
2014-01-27 00:02:21 +00:00
}
2015-08-20 23:35:53 +00:00
internal void AddUniformInfo(UniformInfo ui)
{
_UniformInfos.Add(ui);
}
public IEnumerable<UniformInfo> UniformInfos { get { return _UniformInfos; } }
List<UniformInfo> _UniformInfos = new List<UniformInfo>();
2014-01-27 00:02:21 +00:00
2015-08-20 23:35:53 +00:00
/// <summary>
/// Returns the sole UniformInfo or throws an exception if there's more than one
/// </summary>
public UniformInfo Sole
{
get
{
if (_UniformInfos.Count != 1) throw new InvalidOperationException();
return _UniformInfos[0];
}
}
public Pipeline Owner { get; private set; }
public void Set(Matrix4 mat, bool transpose = false)
2014-01-27 00:02:21 +00:00
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
2014-01-27 00:02:21 +00:00
Owner.Owner.SetPipelineUniformMatrix(this, mat, transpose);
}
public void Set(Vector4 vec)
2014-01-27 00:02:21 +00:00
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
2014-01-27 00:02:21 +00:00
Owner.Owner.SetPipelineUniform(this, vec);
}
public void Set(Vector2 vec)
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
Owner.Owner.SetPipelineUniform(this, vec);
}
public void Set(float f)
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
Owner.Owner.SetPipelineUniform(this, f);
}
public void Set(Vector4[] vecs)
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
Owner.Owner.SetPipelineUniform(this, vecs);
}
public void Set(ref Matrix4 mat, bool transpose = false)
2014-01-27 00:02:21 +00:00
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
2014-01-27 00:02:21 +00:00
Owner.Owner.SetPipelineUniformMatrix(this, ref mat, transpose);
}
public void Set(bool value)
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
Owner.Owner.SetPipelineUniform(this, value);
}
2014-01-27 00:02:21 +00:00
public void Set(Texture2d tex)
{
2015-08-20 23:35:53 +00:00
if (Owner == null) return; //uniform was optimized out
Owner.Owner.SetPipelineUniformSampler(this, tex);
2014-01-27 00:02:21 +00:00
}
}
}