Axiom.Animating.Pose.GetHardwareVertexBuffer C# (CSharp) Method

GetHardwareVertexBuffer() public method

Get a hardware vertex buffer version of the vertex offsets.
public GetHardwareVertexBuffer ( int numVertices ) : HardwareVertexBuffer
numVertices int
return Axiom.Graphics.HardwareVertexBuffer
		public HardwareVertexBuffer GetHardwareVertexBuffer( int numVertices )
		{
			if ( vertexBuffer == null )
			{
				// Create buffer
                VertexDeclaration decl = HardwareBufferManager.Instance.CreateVertexDeclaration();
                decl.AddElement(0, 0, VertexElementType.Float3, VertexElementSemantic.Position);

				vertexBuffer = HardwareBufferManager.Instance.CreateVertexBuffer( decl, numVertices, BufferUsage.StaticWriteOnly, false );

				// lock the vertex buffer
				IntPtr ipBuf = vertexBuffer.Lock( BufferLocking.Discard );

				unsafe
				{
					float* buffer = (float*)ipBuf.ToPointer();
					for ( int i = 0; i < numVertices * 3; i++ )
						buffer[ i ] = 0f;

					// Set each vertex
					foreach ( KeyValuePair<int, Vector3> pair in vertexOffsetMap )
					{
						int offset = 3 * pair.Key;
						Vector3 v = pair.Value;
						buffer[ offset++ ] = v.x;
						buffer[ offset++ ] = v.y;
						buffer[ offset ] = v.z;
					}
					vertexBuffer.Unlock();
				}
			}
			return vertexBuffer;
		}

Usage Example

Example #1
0
 /// <summary> Utility method for applying pose animation </summary>
 public void ApplyPoseToVertexData(Pose pose, VertexData data, float influence)
 {
     if (this.targetMode == VertexAnimationTargetMode.Hardware)
     {
         // Hardware
         // If target mode is hardware, need to bind our pose buffer
         // to a target texcoord
         Debug.Assert(data.HWAnimationDataList.Count == 0, "Haven't set up hardware vertex animation elements!");
         // no use for TempBlendedBufferInfo here btw
         // Set pose target as required
         var hwIndex = data.HWAnimDataItemsUsed++;
         // If we try to use too many poses, ignore extras
         if (hwIndex < data.HWAnimationDataList.Count)
         {
             var animData = data.HWAnimationDataList[hwIndex];
             data.vertexBufferBinding.SetBinding(animData.TargetVertexElement.Source,
                                                 pose.GetHardwareVertexBuffer(data.vertexCount));
             // save final influence in parametric
             animData.Parametric = influence;
         }
     }
     else
     {
         // Software
         Mesh.SoftwareVertexPoseBlend(influence, pose.VertexOffsetMap, data);
     }
 }
All Usage Examples Of Axiom.Animating.Pose::GetHardwareVertexBuffer