Exemplo n.º 1
0
        public override void WriteData(int offset, int length, BufferBase src, bool discardWholeBuffer)
        {
            //Update the shadow buffer
            if (useShadowBuffer)
            {
                var destData = shadowBuffer.Lock(offset, length, discardWholeBuffer ? BufferLocking.Discard : BufferLocking.Normal);
                src = destData;
                shadowBuffer.Unlock();
            }

            if (offset == 0 && length == sizeInBytes)
            {
                GL.BufferData(GLenum.ArrayBuffer, new IntPtr(sizeInBytes), src.Pin(), GLES2HardwareBufferManager.GetGLUsage(usage));
                GLES2Config.GlCheckError(this);
            }
            else
            {
                if (discardWholeBuffer)
                {
                    GL.BufferData(GLenum.ArrayBuffer, new IntPtr(sizeInBytes), IntPtr.Zero, GLES2HardwareBufferManager.GetGLUsage(usage));
                    GLES2Config.GlCheckError(this);
                }
                GL.BufferSubData(GLenum.ArrayBuffer, new IntPtr(offset), new IntPtr(length), src.Pin());
                GLES2Config.GlCheckError(this);
            }
        }
		public override void WriteData( int offset, int length, BufferBase src, bool discardWholeBuffer )
		{
			//Update the shadow buffer
			if ( useShadowBuffer )
			{
				var destData = shadowBuffer.Lock( offset, length, discardWholeBuffer ? BufferLocking.Discard : BufferLocking.Normal );
				src = destData;
				shadowBuffer.Unlock();
			}
			
			if ( offset == 0 && length == sizeInBytes )
			{
				GL.BufferData( GLenum.ArrayBuffer, new IntPtr( sizeInBytes ), src.Pin(), GLESHardwareBufferManager.GetGLUsage( usage ) );
				GLESConfig.GlCheckError( this );
			}
			else
			{
				if ( discardWholeBuffer )
				{
					GL.BufferData( GLenum.ArrayBuffer, new IntPtr( sizeInBytes ), IntPtr.Zero, GLESHardwareBufferManager.GetGLUsage( usage ) );
					GLESConfig.GlCheckError( this );
				}
				GL.BufferSubData( GLenum.ArrayBuffer, new IntPtr( offset ), new IntPtr( length ), src.Pin() );
				GLESConfig.GlCheckError( this );
			}
		}
Exemplo n.º 3
0
		/// <summary>
		///
		/// </summary>
		/// <param name="offset"></param>
		/// <param name="length"></param>
		/// <param name="dest"></param>
		public override void ReadData( int offset, int length, BufferBase dest )
		{
			if ( useShadowBuffer )
			{
				// lock the buffer for reading
				var src = shadowBuffer.Lock( offset, length, BufferLocking.ReadOnly );

				// copy that data in there
				Memory.Copy( src, dest, length );

				// unlock the buffer
				shadowBuffer.Unlock();
			}
			else
			{
				Gl.glBindBufferARB( Gl.GL_ARRAY_BUFFER_ARB, this.bufferID );

				Gl.glGetBufferSubDataARB( Gl.GL_ARRAY_BUFFER_ARB, new IntPtr( offset ), new IntPtr( length ), dest.Pin() );
				// TAO 2.0
				dest.UnPin();
				//Gl.glGetBufferSubDataARB(
				//    Gl.GL_ARRAY_BUFFER_ARB,
				//    offset,
				//    length,
				//    dest );
			}
		}
Exemplo n.º 4
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_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_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 ) );
			}

			Gl.glBufferSubDataARB( Gl.GL_ARRAY_BUFFER_ARB, new IntPtr( offset ), new IntPtr( length ), src.Pin() ); // TAO 2.0
			src.UnPin();
			//Gl.glBufferSubDataARB(
			//    Gl.GL_ARRAY_BUFFER_ARB,
			//    offset,
			//    length,
			//    src );
		}
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="length"></param>
        /// <param name="dest"></param>
        public override void ReadData(int offset, int length, BufferBase dest)
        {
            if (useShadowBuffer)
            {
                // lock the buffer for reading
                var src = shadowBuffer.Lock(offset, length, BufferLocking.ReadOnly);

                // copy that data in there
                Memory.Copy(src, dest, length);

                // unlock the buffer
                shadowBuffer.Unlock();
            }
            else
            {
                Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, this.bufferID);

                Gl.glGetBufferSubDataARB(Gl.GL_ARRAY_BUFFER_ARB, new IntPtr(offset), new IntPtr(length), dest.Pin());
                // TAO 2.0
                dest.UnPin();
                //Gl.glGetBufferSubDataARB(
                //    Gl.GL_ARRAY_BUFFER_ARB,
                //    offset,
                //    length,
                //    dest );
            }
        }
Exemplo n.º 6
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_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_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 ) );
            }

            Gl.glBufferSubDataARB(Gl.GL_ARRAY_BUFFER_ARB, new IntPtr(offset), new IntPtr(length), src.Pin()); // TAO 2.0
            src.UnPin();
            //Gl.glBufferSubDataARB(
            //    Gl.GL_ARRAY_BUFFER_ARB,
            //    offset,
            //    length,
            //    src );
        }
Exemplo n.º 7
0
 public static unsafe Col3b *ToCol3BPointer(this BufferBase buffer)
 {
     return((Col3b *)buffer.Pin());
 }
Exemplo n.º 8
0
 public static unsafe TextureLightMap *ToTextureLightMapPointer(this BufferBase buffer)
 {
     return((TextureLightMap *)buffer.Pin());
 }