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); }
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); }
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()); }
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()); }
public static IServiceCollection AddWindowsPipeline(this IServiceCollection that) { return(PipelineExtensions.AddPipeline <JobObjectPipeline>(that)); }