From cde32060ec6cb4e2e98445aafa7f2f33310d7faf Mon Sep 17 00:00:00 2001 From: "SND\\AstrorEnales_cp" Date: Sun, 19 Aug 2012 15:22:21 +0000 Subject: [PATCH] Forgot the buffer write for unset parameters --- .../Shader/ParameterBuffer.cs | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/RenderSystems/ANX.RenderSystem.Windows.Metro/Shader/ParameterBuffer.cs b/RenderSystems/ANX.RenderSystem.Windows.Metro/Shader/ParameterBuffer.cs index 41490a98..5a1d7ae9 100644 --- a/RenderSystems/ANX.RenderSystem.Windows.Metro/Shader/ParameterBuffer.cs +++ b/RenderSystems/ANX.RenderSystem.Windows.Metro/Shader/ParameterBuffer.cs @@ -181,12 +181,28 @@ namespace ANX.RenderSystem.Windows.Metro.Shader MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); - foreach (byte[] data in setData) - { - if (data != null) - { - writer.Write(data); - } + for(int index = 0; index < setData.Length; index++) + { + byte[] data = (byte[])setData[index]; + if (data != null) + { + writer.Write(data); + } + else + { + var parameter = parentEffect.shader.Parameters[index]; + if (parameter.Type.ToLower().Contains("texture")) + continue; + + int size = GetParameterTypeSize(parameter.Type); + foreach (int dimension in parameter.TypeDimensions) + { + size *= dimension; + } + + size *= parameter.ArraySize; + writer.Write(new byte[size]); + } } byte[] streamBytes = stream.ToArray(); @@ -208,6 +224,23 @@ namespace ANX.RenderSystem.Windows.Metro.Shader } #endregion + private int GetParameterTypeSize(string type) + { + if (type == "float" || + type == "int" || + type == "uint" || + type == "dword") + return 4; + if (type == "double") + return 8; + if (type == "bool") + return 1; + if (type == "half") + return 2; + + throw new NotImplementedException("Parameter type " + type + " has no size value!"); + } + #region Dispose public void Dispose() {