public void Initialize(GraphicsDevice device, CommandList commandList, RenderableInitialize initialize) { if (_graphicsDevice != null) { return; } _graphicsDevice = device; var factory = device.ResourceFactory; var deviceTexture = _skyboxTexture.CreateDeviceTexture(device, factory); _skyboxTexture = null; TextureView textureView = factory.CreateTextureView(new TextureViewDescription(deviceTexture)); _vb = factory.CreateBuffer(new BufferDescription(VertexPosition.SizeInBytes * (uint)s_vertices.Length, BufferUsage.VertexBuffer)); device.UpdateBuffer(_vb, 0, s_vertices); _ib = factory.CreateBuffer(new BufferDescription(sizeof(ushort) * (uint)s_indices.Length, BufferUsage.IndexBuffer)); device.UpdateBuffer(_ib, 0, s_indices); VertexLayoutDescription[] vertexLayouts = new VertexLayoutDescription[] { new VertexLayoutDescription( new VertexElementDescription("Position", VertexElementSemantic.TextureCoordinate, VertexElementFormat.Float3)) }; _layout = factory.CreateResourceLayout(new ResourceLayoutDescription( new ResourceLayoutElementDescription("Projection", ResourceKind.UniformBuffer, ShaderStages.Vertex), new ResourceLayoutElementDescription("View", ResourceKind.UniformBuffer, ShaderStages.Vertex), new ResourceLayoutElementDescription("CubeTexture", ResourceKind.TextureReadOnly, ShaderStages.Fragment), new ResourceLayoutElementDescription("CubeSampler", ResourceKind.Sampler, ShaderStages.Fragment))); GraphicsPipelineDescription pd = new GraphicsPipelineDescription( BlendStateDescription.SingleAlphaBlend, //device.IsDepthRangeZeroToOne ? DepthStencilStateDescription.DepthOnlyGreaterEqual : DepthStencilStateDescription.DepthOnlyLessEqual, new DepthStencilStateDescription(false, false, ComparisonKind.LessEqual), new RasterizerStateDescription(FaceCullMode.Back, PolygonFillMode.Solid, FrontFace.Clockwise, true, true), PrimitiveTopology.TriangleList, new ShaderSetDescription( vertexLayouts, factory.CreateFromSpirv( new ShaderDescription(ShaderStages.Vertex, Encoding.UTF8.GetBytes(SkyboxShader.VertexCode), "main"), new ShaderDescription(ShaderStages.Fragment, Encoding.UTF8.GetBytes(SkyboxShader.FragmentCode), "main"))), new ResourceLayout[] { _layout }, device.SwapchainFramebuffer.OutputDescription); _pipeline = factory.CreateGraphicsPipeline(ref pd); _resourceSet = factory.CreateResourceSet(new ResourceSetDescription( _layout, initialize.Renderer.ProjectionBuffer, initialize.Renderer.ViewBuffer, textureView, device.Aniso4xSampler)); }
public virtual void Initialize(GraphicsDevice device, CommandList commandList, RenderableInitialize initialize) { }