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(); }
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); }