diff --git a/OpenRA.Game/Graphics/IGraphicsDevice.cs b/OpenRA.Game/Graphics/IGraphicsDevice.cs index 8c54c606c2..3cfd8fe645 100755 --- a/OpenRA.Game/Graphics/IGraphicsDevice.cs +++ b/OpenRA.Game/Graphics/IGraphicsDevice.cs @@ -82,6 +82,7 @@ namespace OpenRA void Bind(); void SetData(T[] vertices, int length); void SetData(T[] vertices, int start, int length); + void SetData(IntPtr data, int start, int length); } public interface IShader diff --git a/OpenRA.Renderer.Null/NullGraphicsDevice.cs b/OpenRA.Renderer.Null/NullGraphicsDevice.cs index 98c05946e3..699a3c3933 100644 --- a/OpenRA.Renderer.Null/NullGraphicsDevice.cs +++ b/OpenRA.Renderer.Null/NullGraphicsDevice.cs @@ -105,6 +105,7 @@ namespace OpenRA.Renderer.Null public void Bind() { } public void SetData(T[] vertices, int length) { } public void SetData(T[] vertices, int start, int length) { } + public void SetData(IntPtr data, int start, int length) { } public void Dispose() { } } } diff --git a/OpenRA.Renderer.Sdl2/VertexBuffer.cs b/OpenRA.Renderer.Sdl2/VertexBuffer.cs index 5ecd000b83..c4445504fd 100644 --- a/OpenRA.Renderer.Sdl2/VertexBuffer.cs +++ b/OpenRA.Renderer.Sdl2/VertexBuffer.cs @@ -48,6 +48,16 @@ namespace OpenRA.Renderer.Sdl2 ErrorHandler.CheckGlError(); } + public void SetData(IntPtr data, int start, int length) + { + Bind(); + GL.BufferSubData(BufferTarget.ArrayBuffer, + new IntPtr(VertexSize * start), + new IntPtr(VertexSize * length), + data); + ErrorHandler.CheckGlError(); + } + public void Bind() { GL.BindBuffer(BufferTarget.ArrayBuffer, buffer);