Example #1
0
 public GLBuffer CreateBuffer(string bufferName, BufferTarget target)
 {
     this.Bind();
     GLBuffer buffer = new GLBuffer(target);
     this.arrays.Add(bufferName, buffer);
     return buffer;
 }
Example #2
0
 internal GLBuffer(int bufferHandle, BufferTarget bufferTarget, BufferUsageHint bufferUsageHint, int size)
 {
     Handle = bufferHandle;
     Target = bufferTarget;
     UsageHint = bufferUsageHint;
     Size = size;
 }
Example #3
0
 public static int CreateBuffer(ushort[] data, BufferTarget target = BufferTarget.ArrayBuffer, BufferUsageHint hint = BufferUsageHint.StaticDraw)
 {
     var buffer = GenBuffer(target);
     var size = data.Length * sizeof(ushort);
     GL.BufferData(target, new IntPtr(size), data, hint);
     return buffer;
 }
Example #4
0
 public static int CreateBuffer(Vertex[] data, BufferTarget target = BufferTarget.ArrayBuffer, BufferUsageHint hint = BufferUsageHint.StaticDraw)
 {
     var buffer = GenBuffer(target);
     var size = data.Length * Vertex.SizeInBytes;
     GL.BufferData(target, new IntPtr(size), data, hint);
     return buffer;
 }
Example #5
0
 public static IBuffer Buffer(this IContextObjectFactory factory, BufferTarget creationTarget, int sizeInBytes, BufferUsageHint usageHint, Array initialData)
 {
     var handle = GCHandle.Alloc(initialData, GCHandleType.Pinned);
      var result = factory.Buffer(creationTarget, sizeInBytes, usageHint, handle.AddrOfPinnedObject());
      handle.Free();
      return result;
 }
Example #6
0
 public Buffer(BufferTarget type)
 {
     int temp;
     GL.GenBuffers(1, out temp);
     Id = temp;
     Type = type;
 }
Example #7
0
        public BufferObject(BufferTarget target)
        {
            this.target = target;

            GL.GenBuffers(1, out glId);
            GL.BindBuffer(target, glId);
        }
        public VertexBufferObject(VertexBufferType type, VertexBufferUsageHint hint)
        {
            GL.GenBuffers(1, out buffer_id);

            buffer_target = (BufferTarget)type;

            buffer_hint = (BufferUsageHint)hint;
        }
        public static void BindBuffer(BufferTarget target, int id)
        {
            if (target == BufferTarget.TransformFeedbackBuffer) throw new Exception("Incorrect Function Called, Use Overload for TransformFeedbackBuffers");
            if (boundBuffers[target][0].Count == 0) boundBuffers[target][0].Push(0);

            if (boundBuffers[target][0].Peek() != id || id == 0) GL.BindBuffer(target, id);
            boundBuffers[target][0].Push(id);
        }
Example #10
0
 internal GLVertexBuffer(BufferTarget target, VertexAttribPointerType glType, int stride, int size)
 {
     this.stride = stride;
     this.size = size;
     this.glType = glType;
     this.target = target;
     OGL.GenBuffers(1, out bufferId);
 }
Example #11
0
        public static GLBuffer Allocate(BufferTarget bufferTarget, BufferUsageHint bufferUsageHint, byte[] data)
        {
            int handle = GL.GenBuffer();
            GL.BindBuffer(bufferTarget, handle);
            GL.BufferData(bufferTarget, (IntPtr)data.Length, data, bufferUsageHint);
            GL.BindBuffer(bufferTarget, 0);

            return new GLBuffer(handle, bufferTarget, bufferUsageHint, data.Length);
        }
Example #12
0
        public static GLBuffer Allocate(BufferTarget bufferTarget, BufferUsageHint bufferUsageHint, int size)
        {
            int handle = GL.GenBuffer();
            GL.BindBuffer(bufferTarget, handle);
            GL.BufferData(bufferTarget, (IntPtr)size, IntPtr.Zero, bufferUsageHint);
            GL.BindBuffer(bufferTarget, 0);

            return new GLBuffer(handle, bufferTarget, bufferUsageHint, size);
        }
Example #13
0
 public GLBufferLockedBytes(GLBufferObject buffer, BufferTarget target, BufferAccess access, IntPtr pointer, int offset, int size)
 {
     fTarget = target;
     fBuffer = buffer;
     fOffset = offset;
     fSize = size;
     fAccess = access;
     fLockingThread = Thread.CurrentThread;
     fData = pointer;
 }
 internal void Resize(BufferTarget bufferTarget, int size)
 {
   if(!VBOexists(bufferTarget))
   {
     VBOobjects.Add(bufferTarget, new VBO(bufferTarget));
   }
   Bind();
   VBOobjects[bufferTarget].Resize(size);
   UnBind();
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="VBO"/> class.
 /// </summary>
 /// <param name="bufferTarget">Logical type of data in VBO</param>
 /// <param name="bufferUsageHint">The buffer usage hint.</param>
 /// <param name="size">The size.</param>
 internal VBO(BufferTarget bufferTarget, BufferUsageHint bufferUsageHint = BufferUsageHint.DynamicDraw, int size = 0)
 {
   GL.GenBuffers(1, out _vbo);
   _bufferTarget = bufferTarget;
   GL.BindBuffer(_bufferTarget, _vbo);
   GL.BufferData(_bufferTarget, new IntPtr(size), new IntPtr(0), bufferUsageHint);
   GL.BindBuffer(_bufferTarget, 0);
   _currentSize = size;
   _bufferUsageHint = bufferUsageHint;
 }
Example #16
0
        public MappingBuffer(BufferTarget bufferTarget, uint bufferObject, MapBufferAccess access)
        {
            // TODO: Complete member initialization
            this.bufferTarget = bufferTarget;
            this.bufferObject = bufferObject;

            GL.BindBuffer(bufferTarget, bufferObject);

            this.BufferPointer = GL.MapBuffer(bufferTarget, access);
        }
 /// <summary>
 /// Changes stored data
 /// </summary>
 /// <param name="bufferTarget">The VBO type in VAO.</param>
 /// <param name="dataBuffer">The vertex buffer.</param>
 /// <param name="offset">Buffer offset </param>
 /// <returns>True if data changes successful</returns>
 internal bool ChangeData(BufferTarget bufferTarget, float[,] dataBuffer, int offset = 0)
 {
   if(!VBOexists(bufferTarget))
   {
     VBOobjects.Add(bufferTarget, new VBO(bufferTarget));
   }
   Bind();
   bool result = VBOobjects[bufferTarget].ChangeDataInVBO(dataBuffer, offset);
   UnBind();
   return result;
 }
Example #18
0
 public static void BindBuffer(BufferTarget bufferTarget, int bufferId)
 {
     if (boundBuffers.ContainsKey(bufferTarget) == false)
     {
         boundBuffers.Add(bufferTarget, bufferId);
         GL.BindBuffer(bufferTarget, bufferId);
     }
     else if (boundBuffers[bufferTarget] != bufferId)
     {
         boundBuffers[bufferTarget] = bufferId;
         GL.BindBuffer(bufferTarget, bufferId);
     }
 }
Example #19
0
        public Buffer(IContext context, BufferTarget target, int sizeInBytes, BufferUsageHint usage, IntPtr initialData)
        {
            this.context = context;
            this.target = target;
            this.sizeInBytes = sizeInBytes;
            this.usage = usage;

            uint handleProxy;
            GL.GenBuffers(1, &handleProxy);
            handle = handleProxy;

            context.Bindings.Buffers.ByTarget(target).Set(this);
            GL.BufferData((int)target, (IntPtr)sizeInBytes, initialData, (int)usage);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="VAO"/> class.
 /// </summary>
 /// <param name="bufferTargets">The VBO data types.</param>
 /// <param name="VBObufferUsageHint">The VBO buffer usage hint.</param>
 /// <param name="VBOsize">The VBO size.</param>
 public VAO(BufferTarget[] bufferTargets = null, BufferUsageHint VBObufferUsageHint = BufferUsageHint.DynamicDraw,
            int VBOsize = 0)
 {
   GL.GenVertexArrays(1, out _vao);
   GL.BindVertexArray(_vao);
   if(bufferTargets != null)
   {
     foreach(var buffer in bufferTargets.Where(x => !VBOobjects.ContainsKey(x)))
     {
       VBOobjects.Add(buffer, new VBO(buffer, VBObufferUsageHint, VBOsize));
     }
   }
   GL.BindVertexArray(0);
 }
Example #21
0
        public GLBufferObject(GraphicsInterface gi, BufferTarget target, BufferUsage usage, IntPtr dataPtr, int size)
            :base(gi)
        {
            fBufferTarget = target;

            // Generate the buffer ID
            gi.GenBufferID(out fBufferID);

            // Bind the buffer so subsequent calls apply to that buffer
            Bind();

            if (size > 0)
                AllocateStorage(dataPtr, size, usage);

            Unbind();
        }
        public void Recreate(IntPtr dataPointer)
        {
            if ((ViewFlags & BufferFlags.VertexBuffer) == BufferFlags.VertexBuffer)
            {
                BufferTarget = BufferTarget.ArrayBuffer;
            }
            else if ((ViewFlags & BufferFlags.IndexBuffer) == BufferFlags.IndexBuffer)
            {
                BufferTarget = BufferTarget.ElementArrayBuffer;
            }
            else if ((ViewFlags & BufferFlags.UnorderedAccess) == BufferFlags.UnorderedAccess)
            {
#if SILICONSTUDIO_XENKO_GRAPHICS_API_OPENGLES
                throw new NotSupportedException("GLES not support UnorderedAccess buffer");
#else
                BufferTarget = BufferTarget.ShaderStorageBuffer;
#endif
            }
            else if ((ViewFlags & BufferFlags.ShaderResource) == BufferFlags.ShaderResource && GraphicsDevice.HasTextureBuffers)
            {
#if SILICONSTUDIO_XENKO_GRAPHICS_API_OPENGLES
                Internal.Refactor.ThrowNotImplementedException();
#else
                BufferTarget = BufferTarget.TextureBuffer;
#endif
            }

            if ((ViewFlags & BufferFlags.ConstantBuffer) == BufferFlags.ConstantBuffer)
            {
                BufferTarget = BufferTarget.UniformBuffer;

                // Special case: ConstantBuffer are stored CPU side
                StagingData = Marshal.AllocHGlobal(Description.SizeInBytes);
            }
            else if (Description.Usage == GraphicsResourceUsage.Dynamic)
            {
#if SILICONSTUDIO_XENKO_GRAPHICS_API_OPENGLES
                if (GraphicsDevice.IsOpenGLES2)
                {
                    // OpenGL ES might not always support MapBuffer (TODO: Use MapBufferOES if available)
                    StagingData = Marshal.AllocHGlobal(Description.SizeInBytes);
                }
#endif
            }

            Init(dataPointer);
        }
Example #23
0
        public void Recreate(IntPtr dataPointer)
        {
            if ((ViewFlags & BufferFlags.VertexBuffer) == BufferFlags.VertexBuffer)
            {
                bufferTarget = BufferTarget.ArrayBuffer;
            }
            else if ((ViewFlags & BufferFlags.IndexBuffer) == BufferFlags.IndexBuffer)
            {
                bufferTarget = BufferTarget.ElementArrayBuffer;
            }
            else if ((ViewFlags & BufferFlags.UnorderedAccess) == BufferFlags.UnorderedAccess)
            {
#if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLES
                throw new NotSupportedException("GLES not support UnorderedAccess buffer");
#else
                bufferTarget = BufferTarget.ShaderStorageBuffer;
#endif
            }

            if ((ViewFlags & BufferFlags.ConstantBuffer) == BufferFlags.ConstantBuffer)
            {
#if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLES
                // Special case: ConstantBuffer are faked with a byte array on OpenGL ES 2.0.
                if (GraphicsDevice.IsOpenGLES2)
                    StagingData = Marshal.AllocHGlobal(Description.SizeInBytes);
                else
#endif
                {
                    bufferTarget = BufferTarget.UniformBuffer;
                }
            }
            else if (Description.Usage == GraphicsResourceUsage.Dynamic)
            {
#if SILICONSTUDIO_PARADOX_GRAPHICS_API_OPENGLES
                if (GraphicsDevice.IsOpenGLES2)
                {
                    // OpenGL ES might not always support MapBuffer (TODO: Use MapBufferOES if available)
                    StagingData = Marshal.AllocHGlobal(Description.SizeInBytes);
                }
#endif
            }

            Init(dataPointer);
        }
Example #24
0
        public static void BufferData(BufferTarget target, int size, IntPtr data, BufferUsageHint usage)
        {
#if USE_OPENGL
            if (openGlHardwareAvailable)
            {
                if (glHasBufferObjects)
                {
                    OpenTK.Graphics.OpenGL.GL.BufferData((OpenTK.Graphics.OpenGL.BufferTarget)target, (IntPtr)size, data, (OpenTK.Graphics.OpenGL.BufferUsageHint)usage);
                }
                else
                {
                    byte[] dataCopy = new byte[size];
                    unsafe
                    {
                        for (int i = 0; i < size; i++)
                        {
                            dataCopy[i] = ((byte *)data)[i];
                        }
                    }

                    switch (target)
                    {
                    case BufferTarget.ArrayBuffer:
                        if (currentArrayBufferIndex == 0)
                        {
                            throw new Exception("You don't have a ArrayBuffer set.");
                        }
                        bufferData[currentArrayBufferIndex] = dataCopy;
                        break;

                    case BufferTarget.ElementArrayBuffer:
                        if (currentElementArrayBufferIndex == 0)
                        {
                            throw new Exception("You don't have an EllementArrayBuffer set.");
                        }
                        bufferData[currentElementArrayBufferIndex] = dataCopy;
                        break;

                    default:
                        throw new NotImplementedException();
                    }
                }
            }
#else
            if (glHasBufferObjects)
            {
                OpenTK.Graphics.ES11.GL.BufferData((OpenTK.Graphics.ES11.All)target, (IntPtr)size, data, (OpenTK.Graphics.ES11.All)usage);
            }
            else
            {
                byte[] dataCopy = new byte[size];
                unsafe
                {
                    for (int i = 0; i < size; i++)
                    {
                        dataCopy[i] = ((byte *)data)[i];
                    }
                }

                switch (target)
                {
                case BufferTarget.ArrayBuffer:
                    if (currentArrayBufferIndex == 0)
                    {
                        throw new Exception("You don't have a ArrayBuffer set.");
                    }
                    bufferData[currentArrayBufferIndex] = dataCopy;
                    break;

                case BufferTarget.ElementArrayBuffer:
                    if (currentElementArrayBufferIndex == 0)
                    {
                        throw new Exception("You don't have an EllementArrayBuffer set.");
                    }
                    bufferData[currentElementArrayBufferIndex] = dataCopy;
                    break;

                default:
                    throw new NotImplementedException();
                }
            }
#endif
        }
Example #25
0
 public virtual void BindBuffer(BufferTarget bufferTarget, int id)
 {
     GL.BindBuffer(bufferTarget, id);
 }
Example #26
0
 public static void BindBuffer(BufferTarget bufferTarget, int id)
 {
     Wrapper.BindBuffer(bufferTarget, id);
 }
Example #27
0
 /// <summary>
 /// Allocates memory for both buffer objects and initializes the first buffer with the given data.
 /// The second buffer is left uninitialized.
 /// </summary>
 /// <param name="target">The BufferTarget to use when binding the buffers.</param>
 /// <param name="data">The data to upload to the first buffer and allocate enough memory for in the second buffer.</param>
 /// <param name="usageHint">The usage hint for both buffer objects.</param>
 public void Init(BufferTarget target, T[] data, BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
 {
     Ping.Init(target, data, usageHint);
     Pong.Init(target, data.Length, usageHint);
 }
Example #28
0
 /// <summary>
 /// Allocates memory for both buffer objects without initializing it.
 /// </summary>
 /// <param name="target">The BufferTarget to use when binding the buffers.</param>
 /// <param name="elementCount">The number of elements for each buffer to allocate memory for.</param>
 /// <param name="usageHint">The usage hint for both buffer objects.</param>
 public void Init(BufferTarget target, int elementCount, BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
 {
     Ping.Init(target, elementCount, usageHint);
     Pong.Init(target, elementCount, usageHint);
 }
Example #29
0
 public Buffer(Clyde clyde, BufferTarget type, BufferUsageHint usage, Span <byte> initialize,
               string name = null)
     : this(clyde, type, usage, name)
 {
     Reallocate(initialize);
 }
Example #30
0
        }                                              // Тип VBO

        public VBO(BufferTarget type = BufferTarget.ArrayBuffer)
        {
            Type = type;
            AcquireHandle();
        }
Example #31
0
 /// <summary>
 /// 把客户端(CPU)上的当前Buffer Object映射到服务端(GPU)的内存上。
 /// </summary>
 /// <param name="target"></param>
 /// <returns></returns>
 public static bool UnmapBuffer(BufferTarget target)
 {
     return GetDelegateFor<glUnmapBuffer>()((uint)target);
 }
Example #32
0
		public static void BindBuffer(BufferTarget target, int buffer)
		{
#if USE_OPENGL
			if (openGlHardwareAvailable)
			{
				if (glHasBufferObjects)
				{
					OpenTK.Graphics.OpenGL.GL.BindBuffer((OpenTK.Graphics.OpenGL.BufferTarget)target, buffer);
				}
				else
				{
					switch (target)
					{
						case BufferTarget.ArrayBuffer:
							currentArrayBufferIndex = buffer;
							break;

						case BufferTarget.ElementArrayBuffer:
							currentElementArrayBufferIndex = buffer;
							break;

						default:
							throw new NotImplementedException();
					}
				}
			}
#else
			if (glHasBufferObjects)
			{
				OpenTK.Graphics.ES11.GL.BindBuffer((OpenTK.Graphics.ES11.All)target, buffer);
			}
			else
			{
				switch (target)
				{
					case BufferTarget.ArrayBuffer:
						currentArrayBufferIndex = buffer;
						break;

					case BufferTarget.ElementArrayBuffer:
						currentElementArrayBufferIndex = buffer;
						break;

					default:
						throw new NotImplementedException();
				}
			}
#endif
		}
Example #33
0
 /// <summary>
 /// Overwrites part of the buffer with the given data at the given offset.
 /// Writes all data available in data.
 /// </summary>
 /// <param name="bufferTarget">The BufferTarget to use when binding the buffer.</param>
 /// <param name="data">The data to be transfered into the buffer.</param>
 /// <param name="offset">The index to the first element of the buffer to be overwritten.</param>
 public void SubData(BufferTarget bufferTarget, T[] data, int offset)
 {
     SubData(bufferTarget, data, offset, data.Length);
 }
Example #34
0
 /// <summary>
 /// Allocates buffer memory and uploads given data to it.
 /// </summary>
 /// <param name="bufferTarget">The BufferTarget to use when binding the buffer.</param>
 /// <param name="data">The data to be transfered into the buffer.</param>
 /// <param name="usageHint">The usage hint of the buffer object.</param>
 public void Init(BufferTarget bufferTarget, T[] data, BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
 {
     Init(bufferTarget, data.Length, data, usageHint);
     ActiveElementCount  = data.Length;
     CurrentElementIndex = 0;
 }
Example #35
0
 /// <summary>
 /// Binds the vertex buffer object.
 /// </summary>
 /// <param name="target">The target.</param>
 public void Bind(BufferTarget target = BufferTarget.ArrayBuffer)
 {
     GL.BindBuffer(target, this);
 }
 public IBuffer Buffer(BufferTarget creationTarget, int sizeInBytes, BufferUsageHint usage, IntPtr initialData = default(IntPtr))
 {
     return(new Buffer(context, creationTarget, sizeInBytes, usage, initialData));
 }
Example #37
0
 public void Bind(BufferTarget t)
 {
     GL.BindBuffer(t, GLObject);
     CurrentTarget = t;
 }
Example #38
0
 /// <summary>
 /// 把服务端(GPU)上的当前Buffer Object映射到客户端(CPU)的内存上。
 /// </summary>
 /// <param name="target"></param>
 /// <param name="access"></param>
 /// <returns></returns>
 public static IntPtr MapBuffer(BufferTarget target, MapBufferAccess access)
 {
     return GetDelegateFor<glMapBuffer>()((uint)target, (uint)access);
 }
Example #39
0
 public Buffer(Clyde clyde, BufferTarget type, BufferUsageHint usage, Span <T> initialize, string name = null)
     : base(clyde, type, usage, MemoryMarshal.AsBytes(initialize), name)
 {
 }
Example #40
0
 public VertexBuffer(BufferTarget bufferTarget)
 {
     _target = bufferTarget;
     _vbo    = GL.GenBuffer();
 }
Example #41
0
 /// <summary>
 /// Creates a new instance of <see cref="GLBuffer"/>
 /// </summary>
 /// <param name="type">The type of the <see cref="GLBuffer"/></param>
 public GLBuffer(BufferTarget type)
 {
     Target       = type;
     ObjectHandle = GL.GenBuffer();
 }
Example #42
0
 /// <summary>
 /// Checks, have we VBO with specified data or not
 /// </summary>
 /// <param name="bufferTarget">The VBO type.</param>
 /// <returns>True, if we have VBO with specified data</returns>
 internal bool VBOexists(BufferTarget bufferTarget)
 {
     return(VBOobjects.ContainsKey(bufferTarget));
 }
Example #43
0
 public Buffer(Clyde clyde, BufferTarget type, BufferUsageHint usage, int size, string name = null)
     : this(clyde, type, usage, name)
 {
     Reallocate(size);
 }
Example #44
0
 public void set_buffer <T>(BufferTarget target, Buffer <T> buffer) where T : struct
 {
     GL.BindVertexArray(gl_handle);
     GL.BindBuffer(target, buffer.gl_handle);
     GL.BindVertexArray(NullHandle);
 }
Example #45
0
 public static void BindBuffer(BufferTarget bufferTarget, uint buffer)
 {
     InvokeExtensionFunction <glBindBuffer>()((uint)bufferTarget, buffer);
 }
Example #46
0
 public static void BindBuffer(BufferTarget target, int buffer)
 {
     Interop.Calli((int)target, buffer, BindBufferAddress);
 }
Example #47
0
 /// <summary>
 /// Uploads the vertex buffer to the GPU.
 /// </summary>
 /// <param name="target">The target.</param>
 /// <param name="usageHint">The usage hint.</param>
 public void BufferData(
     BufferTarget target       = BufferTarget.ArrayBuffer,
     BufferUsageHint usageHint = BufferUsageHint.StreamDraw)
 {
     GL.BufferData(target, (IntPtr)(VertexSize * Count), vertices, usageHint);
 }
Example #48
0
 public static void BufferData(BufferTarget target, IntPtr size, IntPtr data, BufferUsage usage)
 {
     Interop.Calli((int)target, size, data, (int)usage, BufferDataAddress);
 }
Example #49
0
 /// <summary>
 /// Allocates buffer memory without initializing it.
 /// </summary>
 /// <param name="bufferTarget">The BufferTarget to use when binding the buffer.</param>
 /// <param name="elementCount">The number of elements to allocate memory for.</param>
 /// <param name="usageHint">The usage hint of the buffer object.</param>
 public void Init(BufferTarget bufferTarget, int elementCount, BufferUsageHint usageHint = BufferUsageHint.StaticDraw)
 {
     Init(bufferTarget, elementCount, null, usageHint);
     ActiveElementCount  = 0;
     CurrentElementIndex = 0;
 }
Example #50
0
 public static void BufferSubData(BufferTarget target, IntPtr offset, IntPtr size, IntPtr data)
 {
     Interop.Calli((int)target, offset, size, data, BufferSubDataAddress);
 }
Example #51
0
 /// <summary>
 /// Clear the buffer to default values.
 /// </summary>
 /// <param name="bufferTarget">The BufferTarget to use when binding the buffer.</param>
 public void Clear(BufferTarget bufferTarget)
 {
     SubData(bufferTarget, new T[ElementCount], 0, ElementCount);
 }
Example #52
0
 public VAO(string bufferName, int bufferSize = 4, BufferTarget bufferTarget = BufferTarget.ShaderStorageBuffer) : base(bufferName, bufferSize, bufferTarget)
 {
     throw new NotImplementedException();
 }
 //ARB_copy_buffer
 /// <summary>
 /// Copies between two buffers from bound readbuffer to bound writebuffer.
 /// Note that this doesn't have to be CopyReadBuffer or CopyWriteBuffer, it can be between ArrayBuffer and UniformBuffer.
 /// </summary>
 /// <param name="readOffset">Offset in bytes from start of buffer bound to readtarget</param>
 /// <param name="writeOffset">Offset in bytes from start of buffer bound to writetarget.</param>
 /// <param name="Size">Size in bytes to copy from read to write.</param>
 /// <param name="readTarget">Buffer target to read from, doesn't have to be CopyReadBuffer</param>
 /// <param name="writeTarget">Buffer target to write to, doesn't have to be CopyWriteBuffer</param>
 public static void CopyBufferSubDataARB(long readOffset, long writeOffset, long Size, BufferTarget readTarget = BufferTarget.CopyReadBuffer, BufferTarget writeTarget = BufferTarget.CopyWriteBuffer)
 {
     Delegates.glCopyBufferSubdataARB(readTarget, writeTarget, (IntPtr)readOffset, (IntPtr)writeOffset, (IntPtr)Size);
 }
Example #54
0
 public void Bind(BufferTarget target)
 {
     GL.BindBuffer(target, id);
 }
Example #55
0
		public static void BufferData(BufferTarget target, int size, IntPtr data, BufferUsageHint usage)
		{
#if USE_OPENGL
			if (openGlHardwareAvailable)
			{
				if(glHasBufferObjects)
				{
					OpenTK.Graphics.OpenGL.GL.BufferData((OpenTK.Graphics.OpenGL.BufferTarget)target, (IntPtr)size, data, (OpenTK.Graphics.OpenGL.BufferUsageHint)usage);
				}
				else
				{
					byte[] dataCopy = new byte[size];
					unsafe
					{
						for (int i = 0; i < size; i++)
						{
							dataCopy[i] = ((byte*)data)[i];
						}
					}

					switch (target)
					{
						case BufferTarget.ArrayBuffer:
							if(currentArrayBufferIndex == 0)
							{
								throw new Exception("You don't have a ArrayBuffer set.");
							}
							bufferData[currentArrayBufferIndex] = dataCopy;
							break;

						case BufferTarget.ElementArrayBuffer:
							if(currentElementArrayBufferIndex == 0)
							{
								throw new Exception("You don't have an EllementArrayBuffer set.");
							}
							bufferData[currentElementArrayBufferIndex] = dataCopy;
							break;

						default:
							throw new NotImplementedException();
					}
				}
			}
#else
			if (glHasBufferObjects)
			{
				OpenTK.Graphics.ES11.GL.BufferData((OpenTK.Graphics.ES11.All)target, (IntPtr)size, data, (OpenTK.Graphics.ES11.All)usage);
			}
			else
			{
				byte[] dataCopy = new byte[size];
				unsafe
				{
					for (int i = 0; i < size; i++)
					{
						dataCopy[i] = ((byte*)data)[i];
					}
				}

				switch (target)
				{
					case BufferTarget.ArrayBuffer:
						if (currentArrayBufferIndex == 0)
						{
							throw new Exception("You don't have a ArrayBuffer set.");
						}
						bufferData[currentArrayBufferIndex] = dataCopy;
						break;

					case BufferTarget.ElementArrayBuffer:
						if (currentElementArrayBufferIndex == 0)
						{
							throw new Exception("You don't have an EllementArrayBuffer set.");
						}
						bufferData[currentElementArrayBufferIndex] = dataCopy;
						break;

					default:
						throw new NotImplementedException();
				}
			}
#endif
		}
Example #56
0
 public void BufferData(BufferTarget target, BufferUsageHint usage, Vector3[] vertices)
 {
     Bind(target);
     GL.BufferData <Vector3>(target, new IntPtr(vertices.Length * Vector3.SizeInBytes), vertices, usage);
 }
Example #57
0
 /// <summary>
 /// 选择一个VBO作为当前VBO。
 /// </summary>
 /// <param name="target"></param>
 /// <param name="id"></param>
 public static void BindBuffer(BufferTarget target, uint id)
 {
     GL.BindBuffer((uint)target, id);
 }
Example #58
0
 public StaticBuffer(int elementSize, T[] data, BufferTarget target) : base(elementSize, target)
 {
     Data = data;
 }
Example #59
0
 /// <summary>
 /// 设置当前VBO的数据。
 /// </summary>
 /// <param name="target"></param>
 /// <param name="data"></param>
 /// <param name="usage"></param>
 public static void BufferData(BufferTarget target, UnmanagedArrayBase data, BufferUsage usage)
 {
     GetDelegateFor<glBufferData>()((uint)target, data.ByteLength, data.Header, (uint)usage);
 }
Example #60
0
 protected VertexBuffer(int vertexBufferId, BufferTarget target) : this(vertexBufferId, ColoredTexturedVertex.Size)
 {
     Id     = vertexBufferId;
     Target = target;
 }