예제 #1
0
    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));
 }