Use GL_ARB_vertex_buffer_object calls instead of gl 1.5 core calls.

This commit is contained in:
Paul Chote
2011-07-23 00:06:41 +12:00
parent f88ea4c25a
commit ac9a5efd8e

View File

@@ -22,20 +22,20 @@ namespace OpenRA.Renderer.SdlCommon
public VertexBuffer(int size)
{
Gl.glGenBuffers(1, out buffer);
Gl.glGenBuffersARB(1, out buffer);
ErrorHandler.CheckGlError();
Bind();
Gl.glBufferData(Gl.GL_ARRAY_BUFFER,
Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB,
new IntPtr(Marshal.SizeOf(typeof(T)) * size),
new T[ size ],
Gl.GL_DYNAMIC_DRAW);
Gl.GL_DYNAMIC_DRAW_ARB);
ErrorHandler.CheckGlError();
}
public void SetData(T[] data, int length)
{
Bind();
Gl.glBufferSubData(Gl.GL_ARRAY_BUFFER,
Gl.glBufferSubDataARB(Gl.GL_ARRAY_BUFFER_ARB,
IntPtr.Zero,
new IntPtr(Marshal.SizeOf(typeof(T)) * length),
data);
@@ -44,7 +44,7 @@ namespace OpenRA.Renderer.SdlCommon
public void Bind()
{
Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, buffer);
Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, buffer);
ErrorHandler.CheckGlError();
Gl.glVertexPointer(3, Gl.GL_FLOAT, Marshal.SizeOf(typeof(T)), IntPtr.Zero);
ErrorHandler.CheckGlError();
@@ -52,7 +52,7 @@ namespace OpenRA.Renderer.SdlCommon
ErrorHandler.CheckGlError();
}
void FinalizeInner() { Gl.glDeleteBuffers( 1, ref buffer ); }
void FinalizeInner() { Gl.glDeleteBuffersARB( 1, ref buffer ); }
~VertexBuffer() { Game.RunAfterTick( FinalizeInner ); }
}
}