Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        ///<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();
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        /// <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 ) );
        }