Exemplo n.º 1
0
    public Scene(IArchiveDirectory dataDir, Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, TrackedDeviceBufferManager trackedDeviceBufferManager, ControllerManager controllerManager)
    {
        var textureCache = new TextureCache(device);

        toneMappingSettings = new ToneMappingSettings();
        iblEnvironment      = new ImageBasedLightingEnvironment(device, standardSamplers, dataDir, InitialSettings.Environment, InitialSettings.EnvironmentRotation);
        backdrop            = new Backdrop(device, shaderCache);
        floor = new PlayspaceFloor(device, shaderCache);
        renderModelRenderer = new RenderModelRenderer(device, shaderCache, trackedDeviceBufferManager);
        primitiveRenderer   = new MeshRenderer(device, shaderCache, Matrix.Translation(0, 1.25f, 0), GeometricPrimitiveFactory.MakeSphere(0.5f, 100).AsTriMesh());

        var shapeNormalsLoader   = new ShapeNormalsLoader(dataDir, device, textureCache);
        var figureRendererLoader = new FigureRendererLoader(dataDir, device, shaderCache, textureCache);
        var figureLoader         = new FigureLoader(dataDir, device, shaderCache, shapeNormalsLoader, figureRendererLoader);

        actor = Actor.Load(dataDir, device, shaderCache, controllerManager, figureLoader);

        var iblMenu = LightingEnvironmentMenu.MakeMenuLevel(dataDir, iblEnvironment);
        var toneMappingMenuLevel    = new ToneMappingMenuLevel(toneMappingSettings);
        var renderSettingsMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Lighting Enviroment", iblMenu),
            new SubLevelMenuItem("Tone Mapping", toneMappingMenuLevel),
            new FloorVisibilityToggleMenuItem(floor)
            );
        var scenePersistenceMenuLevel = ScenePersistenceMenuLevel.Make(this);
        var appMenuLevel = new StaticMenuLevel(
            new SubLevelMenuItem("Save/Load", scenePersistenceMenuLevel),
            new SubLevelMenuItem("Render Settings", renderSettingsMenuLevel)
            );

        var rootMenuLevel = new CombinedMenuLevel(appMenuLevel, actor.MenuLevel);

        menu = new Menu(device, shaderCache, trackedDeviceBufferManager, controllerManager, rootMenuLevel);
    }
    public ImageBasedLightingEnvironment(Device device, StandardSamplers standardSamplers, IArchiveDirectory dataDir, string environmentName, float rotation)
    {
        this.device           = device;
        this.standardSamplers = standardSamplers;
        this.dataDir          = dataDir;

        constantBufferManager = new ConstantBufferManager <ShaderConstants>(device);

        EnvironmentName = environmentName;
        Rotation        = rotation;
    }
    public FramePreparer(IArchiveDirectory dataDir, Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, Size2 targetSize)
    {
        this.standardSamplers = standardSamplers;

        deferredContext = new DeviceContext(device);
        viewProjectionTransformBufferManager = new ViewProjectionConstantBufferManager(device);
        passController             = new RenderPassController(device, shaderCache, targetSize);
        masker                     = new HiddenAreaMasker(device, shaderCache);
        trackedDeviceBufferManager = new TrackedDeviceBufferManager(device);
        controllerManager          = new ControllerManager();
        scene = new Scene(dataDir, device, shaderCache, standardSamplers, trackedDeviceBufferManager, controllerManager);
    }
    public void Run()
    {
        var dataDir          = UnpackedArchiveDirectory.Make(new DirectoryInfo("work"));
        var device           = new Device(DriverType.Hardware, DeviceCreationFlags.None, FeatureLevel.Level_11_1);
        var shaderCache      = new ShaderCache(device);
        var standardSamplers = new StandardSamplers(device);
        var targetSize       = new Size2(1024, 1024);

        using (var framePreparer = new FramePreparer(dataDir, device, shaderCache, standardSamplers, targetSize)) {
            OpenVRExtensions.Init(EVRApplicationType.VRApplication_Other);
            Run(framePreparer);
            OpenVR.Shutdown();
        }
    }
    public void Run()
    {
        Device      device      = new Device(SharpDX.Direct3D.DriverType.Hardware, DeviceCreationFlags.Debug);
        ShaderCache shaderCache = new ShaderCache(device);

        var stamdardSamplers = new StandardSamplers(device);

        var dataDir     = UnpackedArchiveDirectory.Make(CommonPaths.WorkDir);
        var environment = new ImageBasedLightingEnvironment(device, stamdardSamplers, dataDir, "ruins", 0);

        DeviceContext context = device.ImmediateContext;

        Vector4[] samplePositions =
        {
            new Vector4(+1,  0,  0, 0),
            new Vector4(-1,  0,  0, 0),
            new Vector4(0,  +1,  0, 0),
            new Vector4(0,  -1,  0, 0),
            new Vector4(0,   0, +1, 0),
            new Vector4(0,   0, -1, 0),
        };

        var inBufferView = BufferUtilities.ToStructuredBufferView(device, samplePositions);

        ComputeShader shader = shaderCache.GetComputeShader <SampleCubeMapApp>("demos/cubemapsampler/SampleCubeMap");

        var outBuffer = new StageableStructuredBufferManager <Vector4>(device, samplePositions.Length);

        context.ComputeShader.Set(shader);
        environment.Apply(context.ComputeShader);
        context.ComputeShader.SetShaderResource(1, inBufferView);
        context.ComputeShader.SetUnorderedAccessView(0, outBuffer.View);

        context.Dispatch(samplePositions.Length, 1, 1);
        context.ClearState();

        Vector4[] results = outBuffer.ReadContents(context);

        for (int i = 0; i < samplePositions.Length; ++i)
        {
            Console.WriteLine(samplePositions[i]);
            Console.WriteLine("\t" + results[i].X);
            Console.WriteLine("\t" + results[i].Y);
            Console.WriteLine("\t" + results[i].Z);
            Console.WriteLine("\t" + results[i].W);
        }
    }
    public CompanionWindow(Device device, ShaderCache shaderCache, StandardSamplers standardSamplers, string title, IArchiveDirectory dataDir)
    {
        this.device           = device;
        this.standardSamplers = standardSamplers;

        form = new RenderForm(title);

        // SwapChain description
        var desc = new SwapChainDescription()
        {
            BufferCount     = 1,
            ModeDescription =
                new ModeDescription(form.ClientSize.Width, form.ClientSize.Height,
                                    default(Rational), Format.R8G8B8A8_UNorm_SRgb),
            IsWindowed        = true,
            OutputHandle      = form.Handle,
            SampleDescription = new SampleDescription(1, 0),
            SwapEffect        = SwapEffect.Discard,      //TODO: consider using flip
            Usage             = Usage.RenderTargetOutput
        };

        using (var factory = new Factory1()) {
            factory.MakeWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll);
            swapChain = new SwapChain(factory, device, desc);
        }

        form.UserResized += OnUserResized;

        SetupBackbufferAndViewport();

        copyFromSourceVertexShader = shaderCache.GetVertexShader <CompanionWindow>("viewer/companion-window/CopyFromSource");
        copyFromSourcePixelShader  = shaderCache.GetPixelShader <CompanionWindow>("viewer/companion-window/CopyFromSource");

        uiBlendState = MakeUiBlendState(device);

        aspectRatiosBufferManager = new ConstantBufferManager <AspectRatios>(device);

        overlay = Overlay.Load(device, shaderCache, dataDir.Subdirectory("ui").File("put-on-headset-overlay.dds"));

        form.KeyPress  += OnKeyPress;
        form.MouseDown += OnMouseDown;
        form.MouseUp   += OnMouseUp;
        form.MouseMove += OnMouseMove;


        DebugInitialize();
    }
Exemplo n.º 7
0
    public VRApp(IArchiveDirectory dataDir, string title)
    {
        OpenVRExtensions.Init();

        device           = CreateDevice();
        shaderCache      = new ShaderCache(device);
        standardSamplers = new StandardSamplers(device);

        companionWindow = new CompanionWindow(device, shaderCache, standardSamplers, title, dataDir);

        immediateContext = device.ImmediateContext;

        timeKeeper = new OpenVRTimeKeeper();

        hiddenAreaMeshes = new HiddenAreaMeshes(device);

        Size2 targetSize = OpenVR.System.GetRecommendedRenderTargetSize();

        framePreparer      = new FramePreparer(dataDir, device, shaderCache, standardSamplers, targetSize);
        asyncFramePreparer = new AsyncFramePreparer(framePreparer);
    }