~ Moved code around in files. SM.Base: + PostProcessing-system + OnInitialization() for Scenes. + Shader-Extensions + Added option to not react while unfocused to the window. + Added Screenshots to the window. + Connected the log system to the SM.OGL-action system. ~ Replaced IShader with abstract MaterialShader. ~ When a log compression folder doesn't exist, it will create one. SM.OGL: + Added support for UniformArrays + Added ShaderPreProcessing + Added Shader Extensions. + Added Debug actions. + SM.OGL settings ~ Framebuffer Size is automaticly changed, when the window and scale is set. SM2D: + Added easy shader drawing.
50 lines
No EOL
1.3 KiB
C#
50 lines
No EOL
1.3 KiB
C#
#region usings
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
#endregion
|
|
|
|
namespace SM.OGL.Shaders
|
|
{
|
|
public class UniformArray : IUniform
|
|
{
|
|
internal UniformCollection collection;
|
|
|
|
internal Dictionary<string, int> Offsets = new Dictionary<string, int>();
|
|
internal int Size;
|
|
|
|
internal bool Struct = false;
|
|
public int Location { get; internal set; }
|
|
public GenericShader Parent { get; internal set; }
|
|
public string Name { get; internal set; }
|
|
|
|
public UniformArray()
|
|
{
|
|
collection = new UniformCollection()
|
|
{
|
|
ParentShader = Parent
|
|
};
|
|
}
|
|
|
|
public void Set(Action<int, Uniform> setAction)
|
|
{
|
|
for (var i = 0; i < Size; i++) setAction(i, new Uniform(Location + i));
|
|
}
|
|
|
|
public void Set(Func<int, UniformCollection, bool> setAction)
|
|
{
|
|
collection.ParentShader ??= Parent;
|
|
|
|
for (var i = 0; i < Size; i++)
|
|
{
|
|
collection.KeyString = $"{Name}[{i}]";
|
|
|
|
foreach (var pair in Offsets)
|
|
collection.Set(pair.Key, new Uniform(Location + pair.Value + i));
|
|
|
|
if (!setAction(i, collection)) break;
|
|
}
|
|
}
|
|
}
|
|
} |