public NeoDemo() { WindowCreateInfo windowCI = new WindowCreateInfo { X = 50, Y = 50, WindowWidth = 960, WindowHeight = 540, WindowInitialState = WindowState.Normal, WindowTitle = "Veldrid NeoDemo" }; GraphicsDeviceCreateInfo gdCI = new GraphicsDeviceCreateInfo(); //gdCI.Backend = GraphicsBackend.Vulkan; #if DEBUG gdCI.DebugDevice = true; #endif VeldridStartup.CreateWindowAndGraphicsDevice(ref windowCI, ref gdCI, out _window, out _gd); _window.Resized += () => _windowResized = true; CommandList initCL = _gd.ResourceFactory.CreateCommandList(); _gd.SetResourceName(initCL, "Initialization Command List"); initCL.Begin(); _scene = new Scene(_window.Width, _window.Height); _sc.SetCurrentScene(_scene, initCL); _igRenderable = new ImGuiRenderable(_window.Width, _window.Height); _resizeHandled += (w, h) => _igRenderable.WindowResized(w, h); _scene.AddRenderable(_igRenderable); _scene.AddUpdateable(_igRenderable); Skybox skybox = Skybox.LoadDefaultSkybox(); _scene.AddRenderable(skybox); AddSponzaAtriumObjects(initCL); _sc.Camera.Position = new Vector3(-80, 25, -4.3f); _sc.Camera.Yaw = -MathF.PI / 2; _sc.Camera.Pitch = -MathF.PI / 9; ShadowmapDrawer texDrawer = new ShadowmapDrawer(() => _window, () => _sc.NearShadowMapView); _resizeHandled += (w, h) => texDrawer.OnWindowResized(); texDrawer.Position = new Vector2(10, 25); _scene.AddRenderable(texDrawer); ShadowmapDrawer texDrawer2 = new ShadowmapDrawer(() => _window, () => _sc.MidShadowMapView); _resizeHandled += (w, h) => texDrawer2.OnWindowResized(); texDrawer2.Position = new Vector2(20 + texDrawer2.Size.X, 25); _scene.AddRenderable(texDrawer2); ShadowmapDrawer texDrawer3 = new ShadowmapDrawer(() => _window, () => _sc.FarShadowMapView); _resizeHandled += (w, h) => texDrawer3.OnWindowResized(); texDrawer3.Position = new Vector2(30 + (texDrawer3.Size.X * 2), 25); _scene.AddRenderable(texDrawer3); CreateAllObjects(); }
public NeoDemo() { WindowCreateInfo windowCI = new WindowCreateInfo { X = 50, Y = 50, WindowWidth = 960, WindowHeight = 540, WindowInitialState = WindowState.Normal, WindowTitle = "Veldrid NeoDemo" }; GraphicsDeviceOptions gdOptions = new GraphicsDeviceOptions(false, null, false, ResourceBindingModel.Improved, true, true, _colorSrgb); #if DEBUG gdOptions.Debug = true; #endif VeldridStartup.CreateWindowAndGraphicsDevice( windowCI, gdOptions, //VeldridStartup.GetPlatformDefaultBackend(), //GraphicsBackend.Metal, // GraphicsBackend.Vulkan, // GraphicsBackend.OpenGL, //GraphicsBackend.OpenGLES, out _window, out _gd); _window.Resized += () => _windowResized = true; Sdl2Native.SDL_Init(SDLInitFlags.GameController); Sdl2ControllerTracker.CreateDefault(out _controllerTracker); _scene = new Scene(_gd, _window, _controllerTracker); _sc.SetCurrentScene(_scene); _igRenderable = new ImGuiRenderable(_window.Width, _window.Height); _resizeHandled += (w, h) => _igRenderable.WindowResized(w, h); _scene.AddRenderable(_igRenderable); _scene.AddUpdateable(_igRenderable); Skybox skybox = Skybox.LoadDefaultSkybox(); _scene.AddRenderable(skybox); AddSponzaAtriumObjects(); _sc.Camera.Position = new Vector3(-80, 25, -4.3f); _sc.Camera.Yaw = -MathF.PI / 2; _sc.Camera.Pitch = -MathF.PI / 9; ShadowmapDrawer texDrawIndexeder = new ShadowmapDrawer(() => _window, () => _sc.NearShadowMapView); _resizeHandled += (w, h) => texDrawIndexeder.OnWindowResized(); texDrawIndexeder.Position = new Vector2(10, 25); _scene.AddRenderable(texDrawIndexeder); ShadowmapDrawer texDrawIndexeder2 = new ShadowmapDrawer(() => _window, () => _sc.MidShadowMapView); _resizeHandled += (w, h) => texDrawIndexeder2.OnWindowResized(); texDrawIndexeder2.Position = new Vector2(20 + texDrawIndexeder2.Size.X, 25); _scene.AddRenderable(texDrawIndexeder2); ShadowmapDrawer texDrawIndexeder3 = new ShadowmapDrawer(() => _window, () => _sc.FarShadowMapView); _resizeHandled += (w, h) => texDrawIndexeder3.OnWindowResized(); texDrawIndexeder3.Position = new Vector2(30 + (texDrawIndexeder3.Size.X * 2), 25); _scene.AddRenderable(texDrawIndexeder3); ShadowmapDrawer reflectionTexDrawer = new ShadowmapDrawer(() => _window, () => _sc.ReflectionColorView); _resizeHandled += (w, h) => reflectionTexDrawer.OnWindowResized(); reflectionTexDrawer.Position = new Vector2(40 + (reflectionTexDrawer.Size.X * 3), 25); _scene.AddRenderable(reflectionTexDrawer); ScreenDuplicator duplicator = new ScreenDuplicator(); _scene.AddRenderable(duplicator); _fsq = new FullScreenQuad(); _scene.AddRenderable(_fsq); CreateAllObjects(); ImGui.StyleColorsClassic(); }
public GlitchDemo() { // Window & Graphics Device // -------------------------------------------------- WindowCreateInfo windowCI = new WindowCreateInfo { X = 50, Y = 50, WindowWidth = 960, WindowHeight = 540, WindowInitialState = WindowState.Normal, WindowTitle = "Glitch Demo" }; GraphicsDeviceOptions gdOptions = new GraphicsDeviceOptions(false, null, false, ResourceBindingModel.Improved, true); #if DEBUG gdOptions.Debug = true; #endif VeldridStartup.CreateWindowAndGraphicsDevice( windowCI, gdOptions, //GraphicsBackend.Metal, //GraphicsBackend.Vulkan, GraphicsBackend.OpenGL, //GraphicsBackend.OpenGLES, out _window, out _gd); _window.Resized += () => _windowResized = true; // Project Manifest // -------------------------------------------------- ProjectManifest projectManifest; string currentDir = AppContext.BaseDirectory; string manifestName = null; foreach (var file in Directory.EnumerateFiles(currentDir + "Assets")) { if (file.EndsWith("manifest")) { if (manifestName != null) { string errorMessage = "Error: Multiple project manifests in this directory: " + currentDir; Console.WriteLine(errorMessage); throw new System.Exception(errorMessage); } manifestName = file; } } using (var fs = File.OpenRead(manifestName)) using (var sr = new StreamReader(fs)) using (var jtr = new JsonTextReader(sr)) { var js = new JsonSerializer(); try { projectManifest = js.Deserialize <ProjectManifest>(jtr); } catch (Exception e) { string errorMessage = "An error was encountered while loading the project manifest."; Console.WriteLine(errorMessage); Console.WriteLine(e); throw new System.NullReferenceException(errorMessage); } } // Initialize Game() // -------------------------------------------------- _game = new Game(); // Assembly & Asset System // -------------------------------------------------- AssemblyLoadSystem als = new AssemblyLoadSystem(); als.LoadFromProjectManifest(projectManifest, AppContext.BaseDirectory); _game.SystemRegistry.Register(als); AssetSystem assetSystem = new AssetSystem(Path.Combine(AppContext.BaseDirectory, projectManifest.AssetRoot), als.Binder); _game.SystemRegistry.Register(assetSystem); // Graphics System // -------------------------------------------------- _gs = new GraphicsSystem(_gd); _game.SystemRegistry.Register(_gs); // Scene // -------------------------------------------------- _scene = new Scene(_gd, _window.Width, _window.Height); // [For Debugging] - Custom SceneAsset Serializer // -------------------------------------------------- SceneAsset programaticSceneAsset = new SceneAsset(); programaticSceneAsset.Name = "MainMenu"; // Custom GameObject (for camera & skybox) GameObject go1 = new GameObject(); go1.Name = "PlayerCamera"; go1.Enabled = true; // Add custom camera to GameObject Camera camera = new Camera(); camera.WindowHeight = _window.Height; camera.WindowWidth = _window.Width; go1.AddComponent(camera); go1.Transform.LocalPosition = new Vector3(0f, 0f, 0f); // Add custom skybox to GameObject Skybox skybox = Skybox.LoadDefaultSkybox(_game.SystemRegistry); go1.AddComponent(skybox); // Custom GameObject (for sphere mesh) GameObject go2 = new GameObject(); go2.Name = "My Sphere"; go2.Enabled = true; // Add custom sphere MeshRenderer component to GameObject Vector3 scale2 = new Vector3(1f); Vector3 offset2 = new Vector3(0f, 0f, -5f); Quaternion rotation2 = Quaternion.Identity; var meshAssetID2 = new AssetID("Internal:SphereModel"); var meshAssetRef2 = new AssetRef <MeshData>(meshAssetID2); var textureAssetID2 = new AssetID("Textures/rust.jpg"); var textureAssetRef2 = new AssetRef <ImageSharpTexture>(textureAssetID2); go2.Transform.LocalPosition = offset2; go2.Transform.LocalRotation = rotation2; go2.Transform.LocalScale = scale2; MeshRenderer meshrenderer2 = new MeshRenderer(meshAssetRef2, textureAssetRef2); go2.AddComponent(meshrenderer2); // Custom GameObject (for plane mesh) GameObject go3 = new GameObject(); go3.Name = "My Plane Model"; go3.Enabled = true; // Add custom Plane MeshRenderer component to GameObject Vector3 scale3 = new Vector3(10f); Vector3 offset3 = new Vector3(0f, -1f, -5f); Quaternion rotation3 = Quaternion.Identity; var meshAssetID3 = new AssetID("Internal:PlaneModel"); var meshAssetRef3 = new AssetRef <MeshData>(meshAssetID3); var textureAssetID3 = new AssetID("Textures/Wood.png"); var textureAssetRef3 = new AssetRef <ImageSharpTexture>(textureAssetID3); go3.Transform.LocalPosition = offset3; go3.Transform.LocalRotation = rotation3; go3.Transform.LocalScale = scale3; MeshRenderer meshrenderer3 = new MeshRenderer(meshAssetRef3, textureAssetRef3); go3.AddComponent(meshrenderer3); // Custom GameObject (another sphere mesh) GameObject go4 = new GameObject(); go4.Name = "Another Sphere"; go4.Enabled = true; Vector3 scale4 = new Vector3(0.5f); Vector3 offset4 = new Vector3(2f, -0.5f, -3f); Quaternion rotation4 = Quaternion.Identity; var meshAssetID4 = new AssetID("Internal:SphereModel"); var meshAssetRef4 = new AssetRef <MeshData>(meshAssetID4); var textureAssetID4 = new AssetID("Textures/rust.jpg"); var textureAssetRef4 = new AssetRef <ImageSharpTexture>(textureAssetID4); go4.Transform.LocalPosition = offset4; go4.Transform.LocalRotation = rotation4; go4.Transform.LocalScale = scale4; MeshRenderer meshrenderer4 = new MeshRenderer(meshAssetRef4, textureAssetRef4); go4.AddComponent(meshrenderer4); // Add custom GameObject to SceneAsset SerializedGameObject sgo1 = new SerializedGameObject(go1); SerializedGameObject sgo2 = new SerializedGameObject(go2); SerializedGameObject sgo3 = new SerializedGameObject(go3); SerializedGameObject sgo4 = new SerializedGameObject(go4); programaticSceneAsset.GameObjects = new SerializedGameObject[4]; programaticSceneAsset.GameObjects[0] = sgo1; programaticSceneAsset.GameObjects[1] = sgo2; programaticSceneAsset.GameObjects[2] = sgo3; programaticSceneAsset.GameObjects[3] = sgo4; // Serialize SceneAsset LooseFileDatabase lfd = new LooseFileDatabase("/Assets"); StringWriter stringwriter = new StringWriter(new StringBuilder()); using (StreamWriter file = File.CreateText(@"DebugSceneAsset.json")) { JsonSerializer serializer = lfd.DefaultSerializer; serializer.Serialize(file, programaticSceneAsset); } // Scene Assets // -------------------------------------------------- SceneAsset sceneAsset; AssetID mainSceneID = projectManifest.OpeningScene.ID; if (mainSceneID.IsEmpty) { var scenes = assetSystem.Database.GetAssetsOfType(typeof(SceneAsset)); if (!scenes.Any()) { Console.WriteLine("No scenes were available to load."); throw new System.Exception("No scenes were available to load."); } else { mainSceneID = scenes.First(); } } var readSceneFromProgramaticAsset = true; sceneAsset = assetSystem.Database.LoadAsset <SceneAsset>(mainSceneID); _scene.LoadSceneAsset(readSceneFromProgramaticAsset ? programaticSceneAsset : sceneAsset); _gs.SetCurrentScene(_scene); // GUI // -------------------------------------------------- _igRenderable = new ImGuiRenderable(_window.Width, _window.Height); _resizeHandled += (w, h) => _igRenderable.WindowResized(w, h); _scene.AddRenderable(_igRenderable); _scene.AddUpdateable(_igRenderable); // Duplicate Screen (for post-processing filters) // -------------------------------------------------- ScreenDuplicator duplicator = new ScreenDuplicator(); _scene.AddRenderable(duplicator); // TODO: rename FullScreenQuad to FinalBufferObject or something _fsq = new FullScreenQuad(); _scene.AddRenderable(_fsq); CreateAllObjects(); }
public NeoDemo() { WindowCreateInfo windowCI = new WindowCreateInfo { X = 50, Y = 50, WindowWidth = 960, WindowHeight = 540, WindowInitialState = WindowState.Normal, WindowTitle = "Veldrid NeoDemo" }; RenderContextCreateInfo rcCI = new RenderContextCreateInfo(); rcCI.DebugContext = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); VeldridStartup.CreateWindowAndRenderContext(ref windowCI, ref rcCI, out _window, out _rc); _window.Resized += () => _windowResized = true; _sc.CreateDeviceObjects(_rc); CommonMaterials.CreateAllDeviceObjects(_rc); _scene = new Scene(_window.Width, _window.Height); _sc.SetCurrentScene(_scene); _igRenderable = new ImGuiRenderable(_window.Width, _window.Height); _resizeHandled += (w, h) => _igRenderable.WindowResized(w, h); _igRenderable.CreateDeviceObjects(_rc); _scene.AddRenderable(_igRenderable); _scene.AddUpdateable(_igRenderable); InfiniteGrid grid = new InfiniteGrid(); grid.CreateDeviceObjects(_rc); _scene.AddRenderable(grid); Skybox skybox = Skybox.LoadDefaultSkybox(); skybox.CreateDeviceObjects(_rc); _scene.AddRenderable(skybox); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(10, 10, 10, 10), new Vector3(0, 0, -5), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(5, 5, 5, 5f), new Vector3(-3, -9, 2), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Box(27, 3, 27, 27f), new Vector3(-5, -16, 5), Quaternion.Identity, Vector3.One); AddTexturedMesh( "Textures/spnza_bricks_a_diff.png", PrimitiveShapes.Plane(100, 100, 5), new Vector3(0, -20, 0), Quaternion.Identity, Vector3.One); ShadowmapDrawer texDrawer = new ShadowmapDrawer(_window, () => _sc.NearShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(10, 25); _scene.AddRenderable(texDrawer); texDrawer = new ShadowmapDrawer(_window, () => _sc.MidShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(20 + texDrawer.Size.X, 25); _scene.AddRenderable(texDrawer); texDrawer = new ShadowmapDrawer(_window, () => _sc.FarShadowMapBinding); texDrawer.CreateDeviceObjects(_rc); texDrawer.Position = new Vector2(30 + (texDrawer.Size.X * 2), 25); _scene.AddRenderable(texDrawer); }