RenderStack 11.06.1
Public Member Functions | Static Public Member Functions | Public Attributes | Properties
RenderStack.Graphics.Buffer Class Reference

Abstraction for OpenGL buffer objects. Currently supports vertex and index buffers. More...

List of all members.

Public Member Functions

void OnDeserializedGraphicsContexThread ()
void Dispose ()
 Buffer ()
void GLGen ()
 Buffer (BufferTarget target, BufferUsageHint usageHint)
 Buffer (BufferTarget target, BufferUsageHint usageHint, long bufferSize)
 Buffer (BufferTarget target, BufferUsageHint usageHint, DrawElementsType indexType, BeginMode beginMode)
void BeginEdit ()
void EndEdit ()
void Use ()
void SetAllFloat (Attribute attribute, int count, float[] inValues)
void Write (byte[] data)
void Set (Attribute attribute, params int[] values)
void Set (Attribute attribute, params uint[] values)
void Set (Attribute attribute, params float[] values)
void Set (Attribute attribute, Vector2 value)
void Set (Attribute attribute, Vector3 value)
void Set (Attribute attribute, Vector4 value)
void Position (Vector3 value)
void Position (Vector3 value, int index)
void Normal (Vector3 value)
void Normal (Vector3 value, int index)
void TexCoord (Vector2 value)
void TexCoord (Vector2 value, int index)
void Point (UInt32 index0)
void Line (UInt32 index0, UInt32 index1)
void Triangle (UInt32 index0, UInt32 index1, UInt32 index2)
void Quad (UInt32 index0, UInt32 index1, UInt32 index2, UInt32 index3)

Static Public Member Functions

static void FinalizeDeserializations ()
static int SizeOfType (DrawElementsType type)
static void FinalizeEndEdits ()

Public Attributes

uint CurrentIndex = 0

Properties

VertexFormat VertexFormat [get]
BufferTarget BufferTarget [get]
UInt32 BufferObject [get]
DrawElementsType DrawElementsType [get]
UInt32 Count [get]
BeginMode BeginMode [get]
long Size [get]
long StreamPosition [get]

Detailed Description

Note:
Current functionality is somewhat stable. New functionality may need introduce some changes.

Definition at line 58 of file Buffer.cs.


Constructor & Destructor Documentation

RenderStack.Graphics.Buffer.Buffer ( )

Definition at line 176 of file Buffer.cs.

        {
            GLGen();
        }
RenderStack.Graphics.Buffer.Buffer ( BufferTarget  target,
BufferUsageHint  usageHint 
)

Definition at line 190 of file Buffer.cs.

        {
            bufferTarget = target;
            bufferUsageHint = usageHint;
            GLGen();
        }
RenderStack.Graphics.Buffer.Buffer ( BufferTarget  target,
BufferUsageHint  usageHint,
long  bufferSize 
)

Definition at line 200 of file Buffer.cs.

        {
            bufferTarget = target;
            bufferUsageHint = usageHint;
            size = bufferSize;
            GLGen();

            GL.BufferData(
                BufferTarget,
                (System.IntPtr)(bufferSize),
                (System.IntPtr)(0),
                bufferUsageHint
            );
        }
RenderStack.Graphics.Buffer.Buffer ( BufferTarget  target,
BufferUsageHint  usageHint,
DrawElementsType  indexType,
BeginMode  beginMode 
)

Definition at line 219 of file Buffer.cs.

        {
            this.bufferTarget       = target;
            this.bufferUsageHint    = usageHint;
            this.drawElementsType   = indexType;
            this.beginMode          = beginMode;
            GLGen();
        }

Member Function Documentation

static void RenderStack.Graphics.Buffer.FinalizeDeserializations ( ) [static]

Definition at line 97 of file Buffer.cs.

        {
            lock(deserializations)
            {
                foreach(var buffer in deserializations)
                {
                    buffer.OnDeserializedGraphicsContexThread();
                }
                deserializations.Clear();
            }
        }
void RenderStack.Graphics.Buffer.OnDeserializedGraphicsContexThread ( )

Definition at line 109 of file Buffer.cs.

References RenderStack.Graphics.GhostManager.Gen().

        {
            GL.GenBuffers(1, out bufferObject);
            GhostManager.Gen();
            GL.BindBuffer(BufferTarget, BufferObject);

            byte[] array = memoryStream.ToArray();

            GL.BufferData(
                BufferTarget,
                (System.IntPtr)array.Length,
                array,
                bufferUsageHint
            );

            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            memoryStream.SetLength(0);
        }
static int RenderStack.Graphics.Buffer.SizeOfType ( DrawElementsType  type) [static]

Definition at line 146 of file Buffer.cs.

        {
            switch(type)
            {
                case DrawElementsType.UnsignedByte:   return 1;
                case DrawElementsType.UnsignedInt:    return 4;
                case DrawElementsType.UnsignedShort:  return 2;
                default: throw new System.Exception("Invalid typeCode");
            }
        }
void RenderStack.Graphics.Buffer.Dispose ( )

Definition at line 162 of file Buffer.cs.

References RenderStack.Graphics.GhostManager.Add().

        {
            if(!disposed)
            {
                if(bufferObject != 0)
                {
                    GhostManager.Add(new BufferGhost(bufferObject));
                    bufferObject = 0;
                }
                GC.SuppressFinalize(this);
                disposed = true;
            }
        }
void RenderStack.Graphics.Buffer.GLGen ( )

Definition at line 181 of file Buffer.cs.

References RenderStack.Graphics.GhostManager.Gen().

        {
            if(OpenTK.Graphics.GraphicsContext.CurrentContext != null)
            {
                GL.GenBuffers(1, out bufferObject);
                GhostManager.Gen();
            }
        }
void RenderStack.Graphics.Buffer.BeginEdit ( )

Definition at line 233 of file Buffer.cs.

Referenced by RenderStack.Mesh.GeometryMesh.BuildMeshFromGeometry(), RenderStack.UI.NinePatch.NinePatch(), RenderStack.UI.NinePatch.Place(), and RenderStack.UI.FontStyle.Print().

        {
            if(BufferTarget == BufferTarget.ArrayBuffer)
            {
                stride = vertexFormat.Stride;
            }
            else if(BufferTarget == BufferTarget.ElementArrayBuffer)
            {
                stride = SizeOfType(DrawElementsType);
            }
            else
            {
                throw new System.Exception("Invalid buffer stride exception");
            }

            CurrentIndex = 0;

            memoryStream = memoryStream ?? new MemoryStream();
            writer = writer ?? new BinaryWriter(memoryStream);
        }
static void RenderStack.Graphics.Buffer.FinalizeEndEdits ( ) [static]

Definition at line 255 of file Buffer.cs.

        {
            lock(delayedEndEdits)
            {
                foreach(var buffer in delayedEndEdits)
                {
                    buffer.GLGen();
                    buffer.EndEdit();
                }
                delayedEndEdits.Clear();
            }
        }
void RenderStack.Graphics.Buffer.EndEdit ( )

Definition at line 268 of file Buffer.cs.

Referenced by RenderStack.UI.NinePatch.NinePatch(), RenderStack.UI.NinePatch.Place(), and RenderStack.UI.FontStyle.Print().

        {
            if(OpenTK.Graphics.GraphicsContext.CurrentContext == null)
            {
                lock(delayedEndEdits)
                {
                    delayedEndEdits.Add(this);
                    return;
                }
            }

            long currentSize = CurrentIndex * stride;

            count = CurrentIndex;
            size  = currentSize;

            if(currentSize == 0)
            {
                return;
            }

            GL.BindBuffer(BufferTarget, BufferObject);

            byte[] array = memoryStream.ToArray();

            GL.BufferData(
                BufferTarget,
                (System.IntPtr)array.Length,
                array,
                bufferUsageHint
            );

            memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
            memoryStream.SetLength(0);
        }
void RenderStack.Graphics.Buffer.Use ( )

Definition at line 304 of file Buffer.cs.

        {
            GL.BindBuffer(BufferTarget, BufferObject);
        }
void RenderStack.Graphics.Buffer.SetAllFloat ( Attribute  attribute,
int  count,
float[]  inValues 
)

Definition at line 309 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Dimension, RenderStack.Graphics.Attribute.Offset, and RenderStack.Graphics.Attribute.Stride().

        {
            IntPtr VideoMemoryIntPtr = GL.MapBuffer(BufferTarget, BufferAccess.WriteOnly);
            unsafe
            {
                fixed(float* inMemory = &inValues[0])
                {
                    byte* VideoMemory = (byte*)VideoMemoryIntPtr.ToPointer();
                    for(int i = 0; i < count; ++i)
                    {
                        byte*   bLocation = &VideoMemory[i * attribute.Stride() + attribute.Offset];
                        float*  fLocation = (float*)bLocation;
                        for(int j = 0; j < attribute.Dimension; i++) 
                        {
                            fLocation[j] = inMemory[i * attribute.Dimension + j];
                        }
                    }
                }
            }
            GL.UnmapBuffer(BufferTarget);
        }
void RenderStack.Graphics.Buffer.Write ( byte[]  data)

Definition at line 333 of file Buffer.cs.

        {
            writer.Write(data);
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
params int[]  values 
)

Definition at line 337 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, and RenderStack.Graphics.VertexFormat.Stride.

Referenced by RenderStack.UI.NinePatch.Place(), and RenderStack.UI.FontStyle.Print().

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            foreach(int value in values)
            {
                writer.Write(value);
            }
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
params uint[]  values 
)

Definition at line 345 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, and RenderStack.Graphics.VertexFormat.Stride.

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            foreach(uint value in values)
            {
                writer.Write(value);
            }
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
params float[]  values 
)

Definition at line 353 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, and RenderStack.Graphics.VertexFormat.Stride.

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            foreach(float value in values)
            {
                writer.Write(value);
            }
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
Vector2  value 
)

Definition at line 361 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, RenderStack.Graphics.VertexFormat.Stride, RenderStack.Math.Vector2.X, and RenderStack.Math.Vector2.Y.

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            writer.Write(value.X);
            writer.Write(value.Y);
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
Vector3  value 
)

Definition at line 367 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, RenderStack.Graphics.VertexFormat.Stride, RenderStack.Math.Vector3.X, RenderStack.Math.Vector3.Y, and RenderStack.Math.Vector3.Z.

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            writer.Write(value.X);
            writer.Write(value.Y);
            writer.Write(value.Z);
        }
void RenderStack.Graphics.Buffer.Set ( Attribute  attribute,
Vector4  value 
)

Definition at line 374 of file Buffer.cs.

References RenderStack.Graphics.Attribute.Offset, RenderStack.Graphics.VertexFormat.Stride, RenderStack.Math.Vector4.W, RenderStack.Math.Vector4.X, RenderStack.Math.Vector4.Y, and RenderStack.Math.Vector4.Z.

        {
            writer.Seek((int)CurrentIndex * VertexFormat.Stride + attribute.Offset, System.IO.SeekOrigin.Begin);
            writer.Write(value.X);
            writer.Write(value.Y);
            writer.Write(value.Z);
            writer.Write(value.W);
        }
void RenderStack.Graphics.Buffer.Position ( Vector3  value)

Definition at line 382 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.Position, 0);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.Position ( Vector3  value,
int  index 
)

Definition at line 387 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.Position, index);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.Normal ( Vector3  value)

Definition at line 392 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.Normal, 0);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.Normal ( Vector3  value,
int  index 
)

Definition at line 397 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.Normal, index);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.TexCoord ( Vector2  value)

Definition at line 402 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.TexCoord, 0);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.TexCoord ( Vector2  value,
int  index 
)

Definition at line 407 of file Buffer.cs.

References RenderStack.Graphics.VertexFormat.FindAttribute().

        {
            var attribute = VertexFormat.FindAttribute(VertexUsage.TexCoord, index);
            Set(attribute, value);
        }
void RenderStack.Graphics.Buffer.Point ( UInt32  index0)

Definition at line 455 of file Buffer.cs.

        {
            SetIndex(CurrentIndex, index0);
        }
void RenderStack.Graphics.Buffer.Line ( UInt32  index0,
UInt32  index1 
)

Definition at line 459 of file Buffer.cs.

        {
            SetIndex(CurrentIndex + 0, index0);
            SetIndex(CurrentIndex + 1, index1);
        }
void RenderStack.Graphics.Buffer.Triangle ( UInt32  index0,
UInt32  index1,
UInt32  index2 
)

Definition at line 464 of file Buffer.cs.

        {
            SetIndex(CurrentIndex + 0, index0);
            SetIndex(CurrentIndex + 1, index1);
            SetIndex(CurrentIndex + 2, index2);
        }
void RenderStack.Graphics.Buffer.Quad ( UInt32  index0,
UInt32  index1,
UInt32  index2,
UInt32  index3 
)

Definition at line 470 of file Buffer.cs.

Referenced by RenderStack.UI.NinePatch.NinePatch(), and RenderStack.UI.FontStyle.Print().

        {
            SetIndex(CurrentIndex + 0, index0);
            SetIndex(CurrentIndex + 1, index1);
            SetIndex(CurrentIndex + 2, index2);
            SetIndex(CurrentIndex + 3, index0);
            SetIndex(CurrentIndex + 4, index2);
            SetIndex(CurrentIndex + 5, index3);
        }

Member Data Documentation


Property Documentation

VertexFormat RenderStack.Graphics.Buffer.VertexFormat [get]
BufferTarget RenderStack.Graphics.Buffer.BufferTarget [get]

Definition at line 74 of file Buffer.cs.

Referenced by RenderStack.Mesh.Mesh.FindOrCreateIndexBuffer().

UInt32 RenderStack.Graphics.Buffer.BufferObject [get]

Definition at line 75 of file Buffer.cs.

DrawElementsType RenderStack.Graphics.Buffer.DrawElementsType [get]

Definition at line 76 of file Buffer.cs.

Referenced by RenderStack.Mesh.Mesh.FindOrCreateIndexBuffer().

UInt32 RenderStack.Graphics.Buffer.Count [get]

Definition at line 77 of file Buffer.cs.

BeginMode RenderStack.Graphics.Buffer.BeginMode [get]

Definition at line 78 of file Buffer.cs.

Referenced by RenderStack.Mesh.Mesh.FindOrCreateIndexBuffer().

long RenderStack.Graphics.Buffer.Size [get]

Definition at line 79 of file Buffer.cs.

long RenderStack.Graphics.Buffer.StreamPosition [get]

Definition at line 331 of file Buffer.cs.


The documentation for this class was generated from the following file: