public override void WriteData( int offset, int length, IntPtr src, bool discardWholeBuffer )
{
OpenGL.BindBuffer( All.ElementArrayBuffer, _bufferId );
GLESConfig.GlCheckError( this );
// Update the shadow buffer
if ( useShadowBuffer )
{
IntPtr destData = shadowBuffer.Lock( offset, length, discardWholeBuffer ? BufferLocking.Discard : BufferLocking.Normal );
Memory.Copy( src, destData, length );
shadowBuffer.Unlock();
}
if ( offset == 0 && length == sizeInBytes )
{
OpenGL.BufferData( All.ElementArrayBuffer, new IntPtr( sizeInBytes ), src, GLESHardwareBufferManager.GetGLUsage( usage ) );
GLESConfig.GlCheckError( this );
}
else
{
if ( discardWholeBuffer )
{
OpenGL.BufferData( All.ElementArrayBuffer, new IntPtr( sizeInBytes ), IntPtr.Zero, GLESHardwareBufferManager.GetGLUsage( usage ) );
}
// Now update the real buffer
OpenGL.BufferSubData( All.ElementArrayBuffer, new IntPtr( offset ), new IntPtr( length ), src );
GLESConfig.GlCheckError( this );
}
}