private static void Initialize(string name) { if (cntr == 0) { TerrainTileMesh.Create(2, TerrainTileEdge.None, out var indices); indexBuffer = new StreamableBuffer(name + "_indices", (ulong)indices.Length * sizeof(uint), BufferUsage.Index); paramBuffer = new StreamableBuffer(name + "_params", 4096, BufferUsage.Uniform); indexCount = (uint)indices.Length; unsafe { var i_ptr = (uint *)indexBuffer.BeginBufferUpdate(); for (int i = 0; i < indices.Length; i++) { i_ptr[i] = indices[i]; } indexBuffer.EndBufferUpdate(); } vertexShader = new SpecializedShader() { Name = name + "_Vert", Shader = ShaderSource.Load(ShaderType.VertexShader, "PlanetTerrain/vertex.glsl"), SpecializationData = null }; fragmentShader = new SpecializedShader() { Name = name + "_Frag", Shader = ShaderSource.Load(ShaderType.FragmentShader, "UVRenderer/fragment.glsl"), SpecializationData = null, }; } }
static void Main(string[] args) { Engine.AppName = "Test"; Engine.EnableValidation = true; Engine.Initialize(); var graph = new FrameGraph(0); Engine.RenderGraph = graph; vertS = new SpecializedShader() { Name = "FST_Vert", Shader = ShaderSource.Load(ShaderType.VertexShader, "FullScreenTriangle/vertex.glsl"), SpecializationData = null }; fragS = new SpecializedShader() { Name = "UVR_Frag", Shader = ShaderSource.Load(ShaderType.FragmentShader, "FullScreenTriangle/clear_frag.glsl"), SpecializationData = null, }; depthImages = new Image[GraphicsDevice.MaxFramesInFlight]; depthImageViews = new ImageView[GraphicsDevice.MaxFramesInFlight]; for (int i = 0; i < GraphicsDevice.MaxFramesInFlight; i++) { depthImages[i] = new Image($"depthImage_{i}") { Cubemappable = false, Width = GraphicsDevice.Width, Height = GraphicsDevice.Height, Depth = 1, Dimensions = 2, InitialLayout = ImageLayout.Undefined, Layers = 1, Levels = 1, MemoryUsage = MemoryUsage.GpuOnly, Usage = ImageUsage.DepthAttachment | ImageUsage.Sampled, Format = ImageFormat.Depth32f, }; depthImages[i].Build(0); depthImageViews[i] = new ImageView($"depthImageView_{i}") { BaseLayer = 0, BaseLevel = 0, Format = ImageFormat.Depth32f, LayerCount = 1, LevelCount = 1, ViewType = ImageViewType.View2D, }; depthImageViews[i].Build(depthImages[i]); } planetBuffers = new StreamableBuffer("planetBuffer", 2049 * 2049 * 2 * 6, BufferUsage.Storage); unsafe { var us_ptr = (ushort *)planetBuffers.BeginBufferUpdate(); for (int i = 0; i < 6; i++) { using (FileStream fs = File.OpenRead($"face_eroded_{i}.bin")) using (BinaryReader br = new BinaryReader(fs)) for (int j = 0; j < 2049 * 2049; j++) { us_ptr[j] = br.ReadUInt16(); } us_ptr += 2049 * 2049; } planetBuffers.EndBufferUpdate(); } planet = new Planet("terrain_", "planetBuffer", 6000, null); Engine.OnRebuildGraph += Engine_OnRebuildGraph; Engine.OnRender += Engine_OnRender; Engine.OnUpdate += Engine_OnUpdate; Engine.Start(0); }
static void Main(string[] args) { Engine.AppName = "Test"; Engine.EnableValidation = true; Engine.RebuildShaders = true; Engine.Initialize(); var graph = new FrameGraph(0); Engine.RenderGraph = graph; int trace_side = 1024; var objLoaderFactory = new ObjLoaderFactory(); var objLoader = objLoaderFactory.Create(); using (var fs = File.OpenRead("sponza.obj")) { var obj_loaded = objLoader.Load(fs); ulong idxCount = 0; for (int i = 0; i < obj_loaded.Groups.Count; i++) { idxCount += (ulong)obj_loaded.Groups[i].Faces.Count * 3; } vertexBuffer = new StreamableBuffer("vbo", (ulong)obj_loaded.Vertices.Count * 3 * sizeof(float), BufferUsage.Storage); indexBuffer = new StreamableBuffer("ibo", idxCount * sizeof(uint), BufferUsage.Index | BufferUsage.Storage); rayIntersections = new RayIntersections("rayInter", (uint)trace_side * (uint)trace_side, 0); geometry = new RayGeometry("rayGeom", (uint)obj_loaded.Vertices.Count); unsafe { float *fp = (float *)vertexBuffer.BeginBufferUpdate(); for (int i = 0; i < obj_loaded.Vertices.Count; i++) { fp[0] = obj_loaded.Vertices[i].X; fp[1] = obj_loaded.Vertices[i].Y; fp[2] = obj_loaded.Vertices[i].Z; fp += 3; } vertexBuffer.EndBufferUpdate(); uint *ui = (uint *)indexBuffer.BeginBufferUpdate(); for (int i = 0; i < obj_loaded.Groups.Count; i++) { for (int j = 0; j < obj_loaded.Groups[i].Faces.Count; j++) { ui[0] = (uint)(obj_loaded.Groups[i].Faces[j][0].VertexIndex - 1); ui[1] = (uint)(obj_loaded.Groups[i].Faces[j][1].VertexIndex - 1); ui[2] = (uint)(obj_loaded.Groups[i].Faces[j][2].VertexIndex - 1); ui += 3; } } indexBuffer.EndBufferUpdate(); float *rp = (float *)rayIntersections.RayBuffer.BeginBufferUpdate(); for (uint x = 0; x < trace_side; x++) { for (uint y = 0; y < trace_side; y++) { //uint i = 0; //for(int j = 0; j < 15; j++) //{ // i |= ((x & (1u << j)) << j) | ((y & (1u << j)) << (j + 1)); //} //i *= 8; uint i = ((uint)trace_side * y + x) * 8; rp[i + 0] = 0.0f; rp[i + 1] = 15.0f; rp[i + 2] = 0.0f; rp[i + 4] = -1.0f; rp[i + 5] = -1.0f + (2.0f / trace_side) * y; rp[i + 6] = -1.0f + (2.0f / trace_side) * x; rp[i + 3] = 0.001f; rp[i + 7] = 100000.0f; } } rayIntersections.RayBuffer.EndBufferUpdate(); geometry.SetupBuild(0, (uint)(idxCount / 3), vertexBuffer.LocalBuffer, 0, indexBuffer.LocalBuffer, 0, false); } } vertS = new SpecializedShader() { Name = "FST_Vert", Shader = ShaderSource.Load(ShaderType.VertexShader, "FullScreenTriangle/vertex.glsl"), SpecializationData = null }; fragS = new SpecializedShader() { Name = "UVR_Frag", Shader = ShaderSource.Load(ShaderType.FragmentShader, "FullScreenTriangle/clear_frag.glsl"), SpecializationData = null, }; depthImages = new Image[GraphicsDevice.MaxFramesInFlight]; depthImageViews = new ImageView[GraphicsDevice.MaxFramesInFlight]; for (int i = 0; i < GraphicsDevice.MaxFramesInFlight; i++) { depthImages[i] = new Image($"depthImage_{i}") { Cubemappable = false, Width = GraphicsDevice.Width, Height = GraphicsDevice.Height, Depth = 1, Dimensions = 2, InitialLayout = ImageLayout.Undefined, Layers = 1, Levels = 1, MemoryUsage = MemoryUsage.GpuOnly, Usage = ImageUsage.DepthAttachment | ImageUsage.Sampled, Format = ImageFormat.Depth32f, }; depthImages[i].Build(0); depthImageViews[i] = new ImageView($"depthImageView_{i}") { BaseLayer = 0, BaseLevel = 0, Format = ImageFormat.Depth32f, LayerCount = 1, LevelCount = 1, ViewType = ImageViewType.View2D, }; depthImageViews[i].Build(depthImages[i]); } Engine.OnRebuildGraph += Engine_OnRebuildGraph; Engine.OnRender += Engine_OnRender; Engine.OnUpdate += Engine_OnUpdate; Engine.Start(0); }
static void Main(string[] args) { GraphicsDevice.AppName = "Vulkan Test"; GraphicsDevice.EnableValidation = true; GraphicsDevice.RebuildShaders = true; GraphicsDevice.Init(); graph = new FrameGraph(0); var vertS = new SpecializedShader() { Name = "FST_Vert", Shader = ShaderSource.Load(ShaderType.VertexShader, "FullScreenTriangle/vertex.glsl"), SpecializationData = null }; var fragS = new SpecializedShader() { Name = "UVR_Frag", Shader = ShaderSource.Load(ShaderType.FragmentShader, "UVRenderer/fragment.glsl"), SpecializationData = null, }; graph.RegisterShader(vertS); graph.RegisterShader(fragS); for (int i = 0; i < GraphicsDevice.MaxFramesInFlight; i++) { var out_img = GraphicsDevice.DefaultFramebuffer[i].ColorAttachments[0]; graph.RegisterResource(out_img); } var gpass = new GraphicsPass("main_pass") { Shaders = new string[] { vertS.Name, fragS.Name }, ViewportWidth = GraphicsDevice.Width, ViewportHeight = GraphicsDevice.Height, ViewportDynamic = false, DepthWriteEnable = false, CullMode = CullMode.None, RenderLayout = new RenderLayout() { Color = new RenderLayoutEntry[] { new RenderLayoutEntry() { DesiredLayout = ImageLayout.ColorAttachmentOptimal, FirstLoadStage = PipelineStage.ColorAttachOut, Format = GraphicsDevice.DefaultFramebuffer[GraphicsDevice.CurrentFrameID].ColorAttachments[0].Format, LastStoreStage = PipelineStage.ColorAttachOut, LoadOp = AttachmentLoadOp.DontCare, StoreOp = AttachmentStoreOp.Store, }, }, Depth = null, }, DescriptorSetup = new DescriptorSetup() { Descriptors = null, PushConstants = null, }, }; graph.RegisterGraphicsPass(gpass); graph.GatherDescriptors(); GraphicsDevice.Window.Render += Window_Render; GraphicsDevice.Window.Run(60); /* * var fbuf = new Framegraph(0); * fbuf.RegisterAttachment(new AttachmentInfo() * { * Name = "output", * BaseSize = SizeClass.ScreenRelative, * SizeX = 1, * SizeY = 1, * Format = ImageFormat.B8G8R8A8Unorm, * Layers = 1, * UseMipMaps = false, * Usage = ImageUsage.ColorAttachment | ImageUsage.Sampled, * }); * fbuf.RegisterAttachment(new AttachmentInfo() * { * Name = "output_dpth", * BaseSize = SizeClass.ScreenRelative, * SizeX = 1, * SizeY = 1, * Format = ImageFormat.Depth32f, * Layers = 1, * UseMipMaps = false, * Usage = ImageUsage.DepthAttachment | ImageUsage.TransferSrc, * }); * fbuf.RegisterShaderParams(new ShaderParameterSet() * { * Name = "output_shader_params", * Buffers = null, * SampledAttachments = null, * Textures = null, * }); * fbuf.RegisterPass(new GraphicsPass() * { * Name = "main_pass", * CullMode = CullMode.None, * DepthAttachment = new AttachmentUsageInfo() * { * Name = "output_dpth", * Usage = AttachmentUsage.WriteOnly * }, * AttachmentUsage = new AttachmentUsageInfo[]{ * new AttachmentUsageInfo(){ * Name = "output", * Usage = AttachmentUsage.WriteOnly * } * }, * DepthClamp = false, * DepthTest = DepthTest.Always, * EnableBlending = false, * LineWidth = 1, * PassDependencies = null, * RasterizerDiscard = false, * Shaders = new ShaderSource[] { vert, frag }, * Topology = PrimitiveType.Triangle, * DrawCmd = new PlainDrawCmd() * { * BaseInstance = 0, * BaseVertex = 0, * InstanceCount = 1, * VertexCount = 3 * } * }); * fbuf.SetOutputPass("output"); * fbuf.Compile(); * while (!GraphicsDevice.Window.IsExiting) * { * fbuf.Execute(true); * GraphicsDevice.Window.PollEvents(); * }*/ }
static void Main(string[] args) { Engine.AppName = "Kokoro.PlanetGen.Gpu"; Engine.EnableValidation = true; Engine.RebuildShaders = true; Engine.Initialize(); var graph = new FrameGraph(0); Engine.RenderGraph = graph; dropletCache = new GpuBuffer("dropletCache") { Usage = BufferUsage.Storage | BufferUsage.TransferSrc, MemoryUsage = MemoryUsage.GpuOnly, Mapped = false, }; dropletCache.Build(0); //Generate a heightmap heightMap = new HeightMapGen("heightMap", terrainSide); //Populate particle buffer //Iterate particle simulation vertS = new SpecializedShader() { Name = "FST_Vert", Shader = ShaderSource.Load(ShaderType.VertexShader, "FullScreenTriangle/vertex.glsl"), SpecializationData = null }; fragS = new SpecializedShader() { Name = "UVR_Frag", Shader = ShaderSource.Load(ShaderType.FragmentShader, "FullScreenTriangle/clear_frag.glsl"), SpecializationData = null, }; depthImages = new Image[GraphicsDevice.MaxFramesInFlight]; depthImageViews = new ImageView[GraphicsDevice.MaxFramesInFlight]; for (int i = 0; i < GraphicsDevice.MaxFramesInFlight; i++) { depthImages[i] = new Image($"depthImage_{i}") { Cubemappable = false, Width = GraphicsDevice.Width, Height = GraphicsDevice.Height, Depth = 1, Dimensions = 2, InitialLayout = ImageLayout.Undefined, Layers = 1, Levels = 1, MemoryUsage = MemoryUsage.GpuOnly, Usage = ImageUsage.DepthAttachment | ImageUsage.Sampled, Format = ImageFormat.Depth32f, }; depthImages[i].Build(0); depthImageViews[i] = new ImageView($"depthImageView_{i}") { BaseLayer = 0, BaseLevel = 0, Format = ImageFormat.Depth32f, LayerCount = 1, LevelCount = 1, ViewType = ImageViewType.View2D, }; depthImageViews[i].Build(depthImages[i]); } Engine.OnRebuildGraph += Engine_OnRebuildGraph; Engine.OnRender += Engine_OnRender; Engine.OnUpdate += Engine_OnUpdate; Engine.Start(0); }