Пример #1
0
        //---------------------------------------------------------------
        #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();
        }
Пример #2
0
        /// <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;
            }
        }