diff --git a/src/Graphics/Effect/Effect.cs b/src/Graphics/Effect/Effect.cs index 7cf82f1..df69f93 100644 --- a/src/Graphics/Effect/Effect.cs +++ b/src/Graphics/Effect/Effect.cs @@ -1066,27 +1066,26 @@ namespace Microsoft.Xna.Framework.Graphics List memList = new List(); unsafe { - MojoShader.MOJOSHADER_symbolStructMember* mem; + MojoShader.MOJOSHADER_symbolStructMember* mem = (MojoShader.MOJOSHADER_symbolStructMember*) param.value.type.members; IntPtr curOffset = IntPtr.Zero; for (int j = 0; j < param.value.type.member_count; j += 1) { - mem = (MojoShader.MOJOSHADER_symbolStructMember*) param.value.type.members; memList.Add(new EffectParameter( - Marshal.PtrToStringAnsi(mem->name), + Marshal.PtrToStringAnsi(mem[j].name), null, - (int) mem->info.rows, - (int) mem->info.columns, - (int) mem->info.elements, + (int) mem[j].info.rows, + (int) mem[j].info.columns, + (int) mem[j].info.elements, XNAClass[(int) param.value.type.parameter_class], XNAType[(int) param.value.type.parameter_type], null, // FIXME: Nested structs! -flibit null, curOffset )); - uint memSize = mem->info.rows + mem->info.columns; - if (mem->info.elements > 0) + uint memSize = mem[j].info.rows + mem[j].info.columns; + if (mem[j].info.elements > 0) { - memSize *= mem->info.elements; + memSize *= mem[j].info.elements; } curOffset += (int) memSize * 4; } diff --git a/src/Graphics/Effect/EffectParameter.cs b/src/Graphics/Effect/EffectParameter.cs index dafece6..91ec318 100644 --- a/src/Graphics/Effect/EffectParameter.cs +++ b/src/Graphics/Effect/EffectParameter.cs @@ -107,6 +107,7 @@ namespace Microsoft.Xna.Framework.Graphics ColumnCount = columnCount; if (elementCount > 0) { + int curOffset = 0; List elements = new List(elementCount); for (int i = 0; i < elementCount; i += 1) { @@ -114,7 +115,6 @@ namespace Microsoft.Xna.Framework.Graphics if (structureMembers != null) { List memList = new List(); - int curOffset = 0; for (int j = 0; j < structureMembers.Count; j += 1) { int memElems = 0; @@ -132,14 +132,14 @@ namespace Microsoft.Xna.Framework.Graphics structureMembers[j].ParameterType, null, // FIXME: Nested structs! -flibit structureMembers[j].Annotations, - new IntPtr(data.ToInt64() + (j * 4 * curOffset)) + new IntPtr(data.ToInt64() + curOffset) )); int memSize = structureMembers[j].RowCount * structureMembers[j].ColumnCount; if (memElems > 0) { memSize *= memElems; } - curOffset += memSize; + curOffset += memSize * 4; } elementMembers = new EffectParameterCollection(memList); }