Exemplo n.º 1
0
        /// <summary>
        /// Function to save the sprite data into a stream.
        /// </summary>
        /// <param name="stream">Stream that is used to write out the sprite data.</param>
        /// <exception cref="System.ArgumentNullException">Thrown when the <paramref name="stream"/> parameter is NULL (Nothing in VB.Net).</exception>
        /// <exception cref="System.IO.IOException">Thrown when the stream parameter is not opened for writing data.</exception>
        public void Save(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (!stream.CanWrite)
            {
                throw new IOException(Resources.GOR2D_STREAM_READ_ONLY);
            }

            // Chunk the file.
            using (var chunk = new GorgonChunkWriter(stream))
            {
                // Write anchor information.
                chunk.Begin(FileHeader);

                chunk.Begin("SPRTDATA");
                chunk.Write(Anchor);
                chunk.Write(Size);
                chunk.WriteBoolean(HorizontalFlip);
                chunk.WriteBoolean(VerticalFlip);

                // Write vertex colors.
                for (int i = 0; i < Vertices.Length; i++)
                {
                    chunk.Write(Vertices[i].Color);
                }

                // Write vertex offsets.
                chunk.WriteRange(_offsets);
                chunk.End();

                // Write rendering information.
                chunk.Begin("RNDRDATA");
                chunk.Write(CullingMode);
                chunk.Write(AlphaTestValues);
                chunk.Write(Blending.AlphaOperation);
                chunk.Write(Blending.BlendOperation);
                chunk.Write(Blending.BlendFactor);
                chunk.Write(Blending.DestinationAlphaBlend);
                chunk.Write(Blending.DestinationBlend);
                chunk.Write(Blending.SourceAlphaBlend);
                chunk.Write(Blending.SourceBlend);
                chunk.Write(Blending.WriteMask);
                chunk.Write(DepthStencil.BackFace.ComparisonOperator);
                chunk.Write(DepthStencil.BackFace.DepthFailOperation);
                chunk.Write(DepthStencil.BackFace.FailOperation);
                chunk.Write(DepthStencil.BackFace.PassOperation);
                chunk.Write(DepthStencil.FrontFace.ComparisonOperator);
                chunk.Write(DepthStencil.FrontFace.DepthFailOperation);
                chunk.Write(DepthStencil.FrontFace.FailOperation);
                chunk.Write(DepthStencil.FrontFace.PassOperation);
                chunk.WriteInt32(DepthStencil.DepthBias);
                chunk.Write(DepthStencil.DepthComparison);
                chunk.WriteInt32(DepthStencil.StencilReference);
                chunk.WriteBoolean(DepthStencil.IsDepthWriteEnabled);
                chunk.WriteByte(DepthStencil.StencilReadMask);
                chunk.WriteByte(DepthStencil.StencilWriteMask);
                chunk.End();

                // Write collider information.
                if (_collider != null)
                {
                    chunk.Begin("COLLIDER");
                    _collider.WriteToChunk(chunk);
                    chunk.End();
                }

                // Write texture information.
                if (string.IsNullOrWhiteSpace(DeferredTextureName))
                {
                    return;
                }

                chunk.Begin("TXTRDATA");
                chunk.Write(TextureSampler.BorderColor);
                chunk.Write(TextureSampler.HorizontalWrapping);
                chunk.Write(TextureSampler.VerticalWrapping);
                chunk.Write(TextureSampler.TextureFilter);
                chunk.WriteString(DeferredTextureName);
                chunk.WriteRectangle(TextureRegion);
                chunk.End();
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Function to send the key frame data to the data chunk.
 /// </summary>
 /// <param name="chunk">Chunk to write.</param>
 void IKeyFrame.ToChunk(GorgonChunkWriter chunk)
 {
     chunk.WriteFloat(Time);
     chunk.WriteByte(Value);
 }