/// <summary> /// /// </summary> /// <param name="offset"></param> /// <param name="length"></param> /// <param name="src"></param> /// <param name="discardWholeBuffer"></param> public override void WriteData(int offset, int length, IntPtr src, bool discardWholeBuffer) { Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, bufferID); if (useShadowBuffer) { // lock the buffer for reading IntPtr dest = shadowBuffer.Lock(offset, length, discardWholeBuffer ? BufferLocking.Discard : BufferLocking.Normal); // copy that data in there Memory.Copy(src, dest, length); // unlock the buffer shadowBuffer.Unlock(); } if (discardWholeBuffer) { Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum(usage)); } Gl.glBufferSubDataARB( Gl.GL_ARRAY_BUFFER_ARB, offset, length, src); }
///<summary> ///</summary> ///<param name="offset"> </param> ///<param name="length"> </param> ///<param name="src"> </param> ///<param name="discardWholeBuffer"> </param> public override void WriteData(int offset, int length, BufferBase src, bool discardWholeBuffer) { Gl.glBindBufferARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, this._bufferId); if (useShadowBuffer) { // lock the buffer for reading var dest = shadowBuffer.Lock(offset, length, discardWholeBuffer ? BufferLocking.Discard : BufferLocking.Normal); // copy that data in there Memory.Copy(src, dest, length); // unlock the buffer shadowBuffer.Unlock(); } if (discardWholeBuffer) { Gl.glBufferDataARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr(sizeInBytes), IntPtr.Zero, GLHelper.ConvertEnum(usage)); } Gl.glBufferSubDataARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr(offset), new IntPtr(length), src.Pin()); src.UnPin(); }
public GLHardwareVertexBuffer(int vertexSize, int numVertices, BufferUsage usage, bool useShadowBuffer) : base(vertexSize, numVertices, usage, false, useShadowBuffer) { bufferID = 0; Gl.glGenBuffersARB(1, out bufferID); if (bufferID == 0) { throw new Exception("Cannot create GL vertex buffer"); } Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, bufferID); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum(usage)); }
/// <summary> /// Constructor. /// </summary> /// <param name="manager"> the HardwareBufferManager instance that created this buffer. </param> /// <param name="type"> Index type (16 or 32 bit). </param> /// <param name="numIndices"> Number of indices in the buffer. </param> /// <param name="usage"> Usage flags. </param> /// <param name="useShadowBuffer"> Should this buffer be backed by a software shadow buffer? </param> public GLHardwareIndexBuffer(HardwareBufferManagerBase manager, IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer) : base(manager, type, numIndices, usage, false, useShadowBuffer) { // generate the buffer Gl.glGenBuffersARB(1, out this._bufferId); if (this._bufferId == 0) { throw new Exception("OGL: Cannot create GL index buffer"); } Gl.glBindBufferARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, this._bufferId); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, new IntPtr(sizeInBytes), IntPtr.Zero, GLHelper.ConvertEnum(usage)); LogManager.Instance.Write("OGL: Created IndexBuffer[{0}].", this._bufferId); }
/// <summary> /// Constructor. /// </summary> /// <param name="type">Index type (16 or 32 bit).</param> /// <param name="numIndices">Number of indices in the buffer.</param> /// <param name="usage">Usage flags.</param> /// <param name="useShadowBuffer">Should this buffer be backed by a software shadow buffer?</param> public GLHardwareIndexBuffer(IndexType type, int numIndices, BufferUsage usage, bool useShadowBuffer) : base(type, numIndices, usage, false, useShadowBuffer) { // generate the buffer Gl.glGenBuffersARB(1, out bufferID); if (bufferID == 0) { throw new Exception("Cannot create GL index buffer"); } Gl.glBindBufferARB(Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, bufferID); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB( Gl.GL_ELEMENT_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum(usage)); }
public GLHardwareVertexBuffer(HardwareBufferManagerBase manager, VertexDeclaration vertexDeclaration, int numVertices, BufferUsage usage, bool useShadowBuffer) : base(manager, vertexDeclaration, numVertices, usage, false, useShadowBuffer) { this.bufferID = 0; Gl.glGenBuffersARB(1, out this.bufferID); if (this.bufferID == 0) { throw new Exception("Cannot create GL vertex buffer"); } Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, this.bufferID); // initialize this buffer. we dont have data yet tho Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, new IntPtr(sizeInBytes), IntPtr.Zero, GLHelper.ConvertEnum(usage)); // TAO 2.0 //Gl.glBufferDataARB( Gl.GL_ARRAY_BUFFER_ARB, sizeInBytes, IntPtr.Zero, GLHelper.ConvertEnum( usage ) ); }