Example #1
0
        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);
        }
Example #2
0
        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);
        }