public MeshSpatialObject(GraphicsState graphics, SpatialState spatial, AssetFactoryState assets, Mesh mesh, bool culling) { Graphics = graphics; Spatial = spatial; Mesh = mesh; // TextureLayer = textureLayer; VertexBuffer = new ArrayBuffer <Vertex>(graphics, BufferUsage.StructuredBufferReadOnly, mesh.Vertices, ShaderStages.Compute); WorldVertexBuffer = new ArrayBuffer <Vertex>(graphics, BufferUsage.StructuredBufferReadWrite, mesh.Vertices.Length, ShaderStages.Compute | ShaderStages.Vertex); ScreenCoordsBuffer = new ArrayBuffer <Vector3D>(graphics, BufferUsage.StructuredBufferReadWrite, mesh.Vertices.Length, ShaderStages.Compute | ShaderStages.Vertex); ParameterBuffer = new StructBuffer <Parameters>(graphics, BufferUsage.UniformBuffer, ShaderStages.Compute); // Texture = texture; FaceBuffer = new ResourcelessArrayBuffer <Face>(graphics, BufferUsage.VertexBuffer, mesh.Faces); TransformPipeline = new ComputePipeline(graphics, assets.Get <ShaderSet>("Shaders.MeshSpatialObject.Transform"), VertexBuffer, WorldVertexBuffer, ScreenCoordsBuffer, ParameterBuffer); ColorPipeline = new GraphicsPipeline(graphics, Blend.Override, DepthTest.On, culling, assets.Get <ShaderSet>("Shaders.MeshSpatialObject.Color"), graphics.IntermediateOutputDescription, WorldVertexBuffer, ScreenCoordsBuffer); Commands = new Commands(graphics); }
public GraphicsState(WindowState window) { Window = window; Stopwatch = window.Stopwatch; var syswm = new SDL_SysWMinfo(); if (SDL_GetWindowWMInfo(window.Handle, ref syswm) == SDL_bool.SDL_FALSE) { throw new SdlException($"Could not get window wminfo: {SDL_GetError()}"); } SDL_GetWindowSize(window.Handle, out var width, out var height); Device = GraphicsDevice.CreateVulkan( new GraphicsDeviceOptions(true, null, false, ResourceBindingModel.Default, true, false, false), VkSurfaceSource.CreateWin32(syswm.info.win.hinstance, syswm.info.win.window), (uint)width, (uint)height); Log.Debug("main swapchain color format is {format}", Device.MainSwapchain.Framebuffer.ColorTargets[0].Target.Format); SingleRectIndexBuffer = new ResourcelessArrayBuffer <uint>(this, BufferUsage.IndexBuffer, new uint[] { 0, 2, 3, 0, 3, 1 }.ToImmutableArray()); RandomnessTexture = new RandomnessTexture(this); }