public void Update(DeviceContext context) { PlayAreaRect value; HmdQuad_t rect = default(HmdQuad_t); if (OpenVR.Chaperone.GetPlayAreaRect(ref rect)) { value = new PlayAreaRect { corner0 = rect.vCorners0.Convert(), corner1 = rect.vCorners1.Convert(), corner2 = rect.vCorners3.Convert(), corner3 = rect.vCorners2.Convert() }; } else { float halfSize = 1.5f; value = new PlayAreaRect { corner0 = new Vector3(-halfSize, 0, +halfSize), corner1 = new Vector3(+halfSize, 0, +halfSize), corner2 = new Vector3(-halfSize, 0, -halfSize), corner3 = new Vector3(+halfSize, 0, -halfSize), }; } playAreaRectBuffer.Update(context, value); }
public OcclusionInfo[] Run(DeviceContext context, ShaderResourceView vertexInfos) { context.ClearState(); context.ComputeShader.Set(shader); context.ComputeShader.SetConstantBuffer(0, hemispherePointsAndWeightsConstantBuffer); context.ComputeShader.SetShaderResources(0, rasterCacheView, facesView, transparenciesView, vertexMasksView, faceMasksView, vertexInfos); context.ComputeShader.SetUnorderedAccessView(0, outputBufferManager.View); for (int baseVertexIdx = 0; baseVertexIdx < vertexCount; baseVertexIdx += BatchSize) { ArraySegment segment = new ArraySegment(baseVertexIdx, Math.Max(vertexCount - baseVertexIdx, BatchSize)); segmentBufferManager.Update(context, segment); context.ComputeShader.SetConstantBuffer(1, segmentBufferManager.Buffer); context.Dispatch(1, IntegerUtils.RoundUp(BatchSize, ShaderNumThreads / RasterRowCount), 1); context.Flush(); } return(outputBufferManager.ReadContents(context)); }
public void Predraw(DeviceContext context) { Matrix3x3 rotation = InitialTransform * Matrix3x3.RotationY(Rotation); constantBufferManager.Update(context, new ShaderConstants { rotationColumn1 = rotation.Column1, rotationColumn2 = rotation.Column2, rotationColumn3 = rotation.Column3 }); }
public void Display(Texture2D sourceTexture, Matrix sourceProjectionMatrix, Action renderUi) { var context = device.ImmediateContext; float sourceAspectRatio = sourceProjectionMatrix.M22 / sourceProjectionMatrix.M11; aspectRatiosBufferManager.Update(context, new AspectRatios { companionWindowAspectRatio = aspectRatio, sourceAspectRatio = sourceAspectRatio }); context.ClearState(); context.Rasterizer.SetViewport(viewport); context.OutputMerger.SetRenderTargets(backBufferView); context.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip; context.VertexShader.Set(copyFromSourceVertexShader); context.VertexShader.SetConstantBuffer(0, aspectRatiosBufferManager.Buffer); context.PixelShader.Set(copyFromSourcePixelShader); standardSamplers.Apply(context.PixelShader); using (var sourceView = new ShaderResourceView(device, sourceTexture)) { context.PixelShader.SetShaderResource(0, sourceView); } context.Draw(4, 0); context.OutputMerger.SetBlendState(uiBlendState); renderUi(); if (shareHmdView) { overlay.Draw(context); } swapChain.Present(0, 0); }
public void Prepare(DeviceContext context, ToneMappingSettings toneMappingSettings) { constantsBuffer.Update(context, GenerateConstants(toneMappingSettings)); }