예제 #1
0
            private static void Json(ref WritableBuffer outputBuffer)
            {
                var writer = new WritableBufferWriter(outputBuffer);

                // HTTP 1.1 OK
                writer.Write(_http11OK);

                // Server headers
                writer.Write(_headerServer);

                // Date header
                writer.Write(_dateHeaderValueManager.GetDateHeaderValues().Bytes);
                writer.Write(_crlf);

                // Content-Type header
                writer.Write(_headerContentTypeJson);
                writer.Write(_crlf);

                var jsonPayload = JsonSerializer.SerializeUnsafe(new { message = "Hello, World!" });

                // Content-Length header
                writer.Write(_headerContentLength);
                PipelineExtensions.WriteNumeric(ref writer, (ulong)jsonPayload.Count);
                writer.Write(_crlf);

                // End of headers
                writer.Write(_crlf);

                // Body
                writer.Write(jsonPayload.Array, jsonPayload.Offset, jsonPayload.Count);
            }
예제 #2
0
        private void OnRenderImage(RenderTexture source, RenderTexture destination)
        {
            if (workflow == Workflow.Selective && PipelineProperties.xrEnabled)
            {
                Graphics.Blit(source, destination);
                return;
            }

            _commandBuffer.Clear();

            _tmpRenderDimension.width  = RenderingCamera.pixelWidth;
            _tmpRenderDimension.height = RenderingCamera.pixelHeight;
            _tmpContext.UpdateRenderContext(RenderingCamera, effect.renderTextureFormat, 0, _tmpRenderDimension);
            _tmpTexture = PipelineExtensions.GetTemporary(_tmpContext, effect.renderTextureFormat);
            effect.Build(source, _tmpTexture, this, _commandBuffer, RenderingCamera);

            Graphics.ExecuteCommandBuffer(_commandBuffer);

            //Additional copy is need when rendering using commandbuffer and OnRenderImage to avoid warnings / flipped image
            //For now stick with the builtin blit, this could be optimized some day by allowing compute shaders in the final glow pass
            //and using pixel shaders for the final blit
            Graphics.Blit(_tmpTexture, destination);

            RenderTexture.ReleaseTemporary(_tmpTexture);
        }
예제 #3
0
            private static void PlainText(ref WritableBuffer outputBuffer)
            {
                var writer = new WritableBufferWriter(outputBuffer);

                // HTTP 1.1 OK
                writer.Write(_http11OK);

                // Server headers
                writer.Write(_headerServer);

                // Date header
                writer.Write(_dateHeaderValueManager.GetDateHeaderValues().Bytes);
                writer.Write(_crlf);

                // Content-Type header
                writer.Write(_headerContentTypeText);
                writer.Write(_crlf);

                // Content-Length header
                writer.Write(_headerContentLength);
                PipelineExtensions.WriteNumeric(ref writer, (ulong)_plainTextBody.Length);
                writer.Write(_crlf);

                // End of headers
                writer.Write(_crlf);

                // Body
                writer.Write(_plainTextBody);
            }
        public void WriteHeader(AsciiString name, ulong value)
        {
            Output.Write(name);
            var output = new WritableBufferWriter(Output);

            PipelineExtensions.WriteNumeric(ref output, value);
            Output.Write(_crlf);
        }
        public void WriteAsciiNoValidationWritesOnlyOneBytePerChar(string input)
        {
            // WriteAscii doesn't validate if characters are in the ASCII range
            // but it shouldn't produce more than one byte per character
            var writerBuffer = _pipe.Writer.Alloc();
            var writer       = new WritableBufferWriter(writerBuffer);

            PipelineExtensions.WriteAsciiNoValidation(ref writer, input);
            writerBuffer.FlushAsync().GetAwaiter().GetResult();
            var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();

            Assert.Equal(input.Length, reader.Buffer.Length);
        }
        public void WritesNumericToAscii(ulong number)
        {
            var writerBuffer = _pipe.Writer.Alloc();
            var writer       = new WritableBufferWriter(writerBuffer);

            PipelineExtensions.WriteNumeric(ref writer, number);
            writerBuffer.FlushAsync().GetAwaiter().GetResult();

            var reader   = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();
            var numAsStr = number.ToString();
            var expected = Encoding.ASCII.GetBytes(numAsStr);

            AssertExtensions.Equal(expected, reader.Buffer.Slice(0, numAsStr.Length).ToArray());
        }
예제 #7
0
        private void OnRenderImage(RenderTexture source, RenderTexture destination)
        {
            if (workflow == Workflow.Selective && PipelineProperties.xrEnabled)
            {
                Graphics.Blit(source, destination);
                return;
            }

            _tmpDimension.width  = renderingCamera.pixelWidth;
            _tmpDimension.height = renderingCamera.pixelHeight;

            _tmpContext.UpdateRenderContext(renderingCamera, _effect.renderTextureFormat, source.depth, _tmpDimension);
            _tmpTexture = PipelineExtensions.GetTemporary(_tmpContext, _effect.renderTextureFormat);

            _effect.Build(source, _tmpTexture, this, renderingCamera);

            Graphics.Blit(_tmpTexture, destination);
            RenderTexture.ReleaseTemporary(_tmpTexture);
        }
        public void EncodesAsAscii(string input, byte[] expected)
        {
            var writerBuffer = _pipe.Writer.Alloc();
            var writer       = new WritableBufferWriter(writerBuffer);

            PipelineExtensions.WriteAsciiNoValidation(ref writer, input);
            writerBuffer.FlushAsync().GetAwaiter().GetResult();
            var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();

            if (expected.Length > 0)
            {
                AssertExtensions.Equal(
                    expected,
                    reader.Buffer.ToArray());
            }
            else
            {
                Assert.Equal(0, reader.Buffer.Length);
            }
        }
        public void WriteAsciiNoValidation()
        {
            const byte maxAscii     = 0x7f;
            var        writerBuffer = _pipe.Writer.Alloc();
            var        writer       = new WritableBufferWriter(writerBuffer);

            for (var i = 0; i < maxAscii; i++)
            {
                PipelineExtensions.WriteAsciiNoValidation(ref writer, new string((char)i, 1));
            }
            writerBuffer.FlushAsync().GetAwaiter().GetResult();

            var reader = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();
            var data   = reader.Buffer.Slice(0, maxAscii).ToArray();

            for (var i = 0; i < maxAscii; i++)
            {
                Assert.Equal(i, data[i]);
            }
        }
        public void WritesNumericAcrossSpanBoundaries(int gapSize)
        {
            var writerBuffer = _pipe.Writer.Alloc(100);
            var writer       = new WritableBufferWriter(writerBuffer);
            // almost fill up the first block
            var spacer = new byte[writer.Span.Length - gapSize];

            writer.Write(spacer);

            var bufferLength = writer.Span.Length;

            PipelineExtensions.WriteNumeric(ref writer, ulong.MaxValue);
            Assert.NotEqual(bufferLength, writer.Span.Length);

            writerBuffer.FlushAsync().GetAwaiter().GetResult();

            var reader      = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();
            var numAsString = ulong.MaxValue.ToString();
            var written     = reader.Buffer.Slice(spacer.Length, numAsString.Length);

            Assert.False(written.IsSingleSpan, "The buffer should cross spans");
            AssertExtensions.Equal(Encoding.ASCII.GetBytes(numAsString), written.ToArray());
        }
        public void WritesAsciiAcrossBlockBoundaries(int stringLength, int gapSize)
        {
            var testString   = new string(' ', stringLength);
            var writerBuffer = _pipe.Writer.Alloc(100);
            var writer       = new WritableBufferWriter(writerBuffer);
            // almost fill up the first block
            var spacer = new byte[writer.Span.Length - gapSize];

            writer.Write(spacer);
            Assert.Equal(gapSize, writer.Span.Length);

            var bufferLength = writer.Span.Length;

            PipelineExtensions.WriteAsciiNoValidation(ref writer, testString);
            Assert.NotEqual(bufferLength, writer.Span.Length);

            writerBuffer.FlushAsync().GetAwaiter().GetResult();

            var reader  = _pipe.Reader.ReadAsync().GetAwaiter().GetResult();
            var written = reader.Buffer.Slice(spacer.Length, stringLength);

            Assert.False(written.IsSingleSpan, "The buffer should cross spans");
            AssertExtensions.Equal(Encoding.ASCII.GetBytes(testString), written.ToArray());
        }
예제 #12
0
 public static IServiceCollection AddWindowsPipeline(this IServiceCollection that)
 {
     return(PipelineExtensions.AddPipeline <JobObjectPipeline>(that));
 }