//--------------------------------------------------------------- #endregion //--------------------------------------------------------------- //--------------------------------------------------------------- #region Methods //--------------------------------------------------------------- private void Bind() { BinormalStream.Bind(); BoneIndicesStream.Bind(); BoneWeightsStream.Bind(); SoftwareBoneIndicesStream.Bind(); SoftwareBoneWeightsStream.Bind(); ColorStream.Bind(); CompressedNormalStream.Bind(); FloatStream.Bind(); IndexStream16.Bind(); IndexStream32.Bind(); IntStream.Bind(); NormalStream.Bind(); PositionStream.Bind(); PositionStream2.Bind(); PositionStream4.Bind(); TangentStream.Bind(); TextureStream.Bind(); }
/// <summary> /// Prepares a mesh for being used as a shadow Volume. /// </summary> /// <remarks>In fact the geometry is doubled and an FloatStream is added that contains 1.0f for /// vertices that are used for the near cap and 0.0f for the far cap.</remarks> /// <param name="mesh">The mesh to prepare.</param> public static void PrepareMesh(Mesh mesh) { SubSets subSets = mesh.SubSets; for (int iSubSet = 0; iSubSet < subSets.Count; iSubSet++) { VertexUnit vu = subSets[iSubSet].VertexUnit; IGraphicsStream[] streams = new IGraphicsStream[vu.StreamCount + 1]; for (int iStream = 0; iStream < vu.StreamCount; iStream++) { IGraphicsStream fromStream = vu[iStream]; IGraphicsStream toStream = null; using (Purple.Profiling.Profiler.Instance.Sample("Clone")) { toStream = fromStream.Clone(); } using (Purple.Profiling.Profiler.Instance.Sample("Resize")) { toStream.Resize(fromStream.Size * 2); } using (Purple.Profiling.Profiler.Instance.Sample("CopyTo")) { fromStream.Data.CopyTo(toStream.Data, fromStream.Size); } streams[iStream] = toStream; } using (Purple.Profiling.Profiler.Instance.Sample("FloatStream")) { FloatStream floatStream = new FloatStream(vu.Size * 2); for (int i = 0; i < vu.Size; i++) { floatStream[i] = 1.0f; floatStream[i + vu.Size] = 0.0f; } streams[vu.StreamCount] = floatStream; } vu = new VertexUnit(streams); subSets[iSubSet].VertexUnit = vu; } }