diff --git a/Source/Core/Rendering/RenderDevice.cs b/Source/Core/Rendering/RenderDevice.cs index f6dcf3a12947d7f95f453225832ec149c4f40b26..47a84bd99764f0c74b5240734919a350e002cac6 100755 --- a/Source/Core/Rendering/RenderDevice.cs +++ b/Source/Core/Rendering/RenderDevice.cs @@ -276,7 +276,8 @@ namespace CodeImp.DoomBuilder.Rendering public void SetBufferData(VertexBuffer buffer, int length, VertexFormat format) { - RenderDevice_SetVertexBufferData(Handle, buffer.Handle, IntPtr.Zero, length * (format == VertexFormat.Flat ? FlatVertex.Stride : WorldVertex.Stride), format); + int stride = (format == VertexFormat.Flat) ? FlatVertex.Stride : WorldVertex.Stride; + RenderDevice_SetVertexBufferData(Handle, buffer.Handle, IntPtr.Zero, length * stride, format); } public void SetBufferData(VertexBuffer buffer, FlatVertex[] data) @@ -291,18 +292,18 @@ namespace CodeImp.DoomBuilder.Rendering public void SetBufferSubdata(VertexBuffer buffer, long destOffset, FlatVertex[] data) { - RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, data.Length * Marshal.SizeOf<FlatVertex>()); + RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset * FlatVertex.Stride, data, data.Length * FlatVertex.Stride); } public void SetBufferSubdata(VertexBuffer buffer, long destOffset, WorldVertex[] data) { - RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, data.Length * Marshal.SizeOf<WorldVertex>()); + RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset * WorldVertex.Stride, data, data.Length * WorldVertex.Stride); } - public void SetBufferSubdata(VertexBuffer buffer, long destOffset, FlatVertex[] data, long offset, long size) + public void SetBufferSubdata(VertexBuffer buffer, FlatVertex[] data, long size) { - if (data.Length < size || size < 0) throw new ArgumentOutOfRangeException("size"); - RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, destOffset, data, size * Marshal.SizeOf<FlatVertex>()); + if (size < 0 || size > data.Length) throw new ArgumentOutOfRangeException("size"); + RenderDevice_SetVertexBufferSubdata(Handle, buffer.Handle, 0, data, size * FlatVertex.Stride); } public void SetPixels(Texture texture, System.Drawing.Bitmap bitmap) diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index 96bb8065840d5f1b6a057bad0b6f2fcb2e99466a..25e409077d147996d4340d6d1c3de4707cddb337 100755 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -1283,7 +1283,7 @@ namespace CodeImp.DoomBuilder.Rendering if(buffercount == locksize) { // Write to buffer - graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw! graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2); @@ -1295,7 +1295,7 @@ namespace CodeImp.DoomBuilder.Rendering } // Write to buffer - if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw what's still remaining if(buffercount > 0) @@ -1422,7 +1422,7 @@ namespace CodeImp.DoomBuilder.Rendering if(buffercount == locksize) { // Write to buffer - graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw! graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2); @@ -1435,7 +1435,7 @@ namespace CodeImp.DoomBuilder.Rendering } // Write to buffer - graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw what's still remaining if(buffercount > 0) graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2); @@ -1466,7 +1466,7 @@ namespace CodeImp.DoomBuilder.Rendering if(buffercount == locksize) { // Write to buffer - graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw! graphics.Draw(PrimitiveType.TriangleList, 0, buffercount * 2); @@ -1478,7 +1478,7 @@ namespace CodeImp.DoomBuilder.Rendering } // Write to buffer - if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, 0, verts, 0, buffercount * 6); + if(buffercount > 0) graphics.SetBufferSubdata(thingsvertices, verts, buffercount * 6); // Draw what's still remaining if(buffercount > 0) diff --git a/Source/Core/Rendering/SurfaceManager.cs b/Source/Core/Rendering/SurfaceManager.cs index 5177dad0a0fbe3c7f6fcd3756e05bd3d6433af4f..ab8d6bff515b112bf167257fd566ce8fd9f64859 100755 --- a/Source/Core/Rendering/SurfaceManager.cs +++ b/Source/Core/Rendering/SurfaceManager.cs @@ -147,8 +147,8 @@ namespace CodeImp.DoomBuilder.Rendering { if(e.bufferindex == i) { - General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset * FlatVertex.Stride, e.floorvertices); - General.Map.Graphics.SetBufferSubdata(b, (e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices); + General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset, e.floorvertices); + General.Map.Graphics.SetBufferSubdata(b, e.vertexoffset + e.floorvertices.Length, e.ceilvertices); } } @@ -326,8 +326,8 @@ namespace CodeImp.DoomBuilder.Rendering if(!resourcesunloaded) { // Fill buffer - General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset * FlatVertex.Stride, e.floorvertices); - General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], (vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices); + General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset, e.floorvertices); + General.Map.Graphics.SetBufferSubdata(set.buffers[bufferindex], vertexoffset + e.floorvertices.Length, e.ceilvertices); } // Set the new location in the buffer @@ -448,8 +448,8 @@ namespace CodeImp.DoomBuilder.Rendering if(!resourcesunloaded) { VertexBuffer vb = set.buffers[e.bufferindex]; - General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset * FlatVertex.Stride, e.floorvertices); - General.Map.Graphics.SetBufferSubdata(vb, (e.vertexoffset + e.floorvertices.Length) * FlatVertex.Stride, e.ceilvertices); + General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset, e.floorvertices); + General.Map.Graphics.SetBufferSubdata(vb, e.vertexoffset + e.floorvertices.Length, e.ceilvertices); } } } diff --git a/Source/Core/VisualModes/VisualSector.cs b/Source/Core/VisualModes/VisualSector.cs index 3dd6c3d8642706537cf02fb054f1d27ef3cde0c9..8a04708d064cd98d592ea914fdeb258a446794bc 100755 --- a/Source/Core/VisualModes/VisualSector.cs +++ b/Source/Core/VisualModes/VisualSector.cs @@ -145,7 +145,7 @@ namespace CodeImp.DoomBuilder.VisualModes { if((g.Vertices != null) && (g.Vertices.Length > 0)) { - graphics.SetBufferSubdata(geobuffer, v * WorldVertex.Stride, g.Vertices); + graphics.SetBufferSubdata(geobuffer, v, g.Vertices); g.VertexOffset = v; v += g.Vertices.Length; }