public StencilShadowRenderer(Game game) { this.game = game; var desc = new MaterialPassDesc(); desc.ManualConstantBuffers = true; desc.ShaderFile = "StencilShadow.hlsl"; desc.BlendStates.RenderTarget[0].IsBlendEnabled = true; desc.BlendStates.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha; desc.BlendStates.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha; desc.BlendStates.RenderTarget[0].BlendOperation = BlendOperation.Add; desc.BlendStates.RenderTarget[0].SourceAlphaBlend = BlendOption.One; desc.BlendStates.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero; desc.BlendStates.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add; desc.BlendStates.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All; desc.DepthStencilStates.IsDepthEnabled = true; desc.DepthStencilStates.DepthWriteMask = DepthWriteMask.Zero; desc.DepthStencilStates.DepthComparison = Comparison.LessEqual; desc.DepthStencilStates.IsStencilEnabled = true; desc.DepthStencilStates.StencilReadMask = 1; desc.DepthStencilStates.StencilWriteMask = 1; desc.DepthStencilStates.FrontFace.FailOperation = StencilOperation.Keep; desc.DepthStencilStates.FrontFace.DepthFailOperation = StencilOperation.Keep; desc.DepthStencilStates.FrontFace.PassOperation = StencilOperation.Replace; desc.DepthStencilStates.FrontFace.Comparison = Comparison.NotEqual; desc.StencilRef = 1; pass = new MaterialPass(game.Device, desc, "StencilShadow"); buffer = Material.CreateBuffer<ShaderData>(); }
public PassHeader(string title, MaterialPassDesc desc) { InitializeComponent(); passDesc = desc; labelTitle.Text = title; labelShader.Text = desc.ShaderFile; }
public SkyBox(Game game, ShaderResourceView cubeMap, string debugName = null) { this.game = game; this.cubeMap = cubeMap; cube = game.ResourceManager.Mesh.Load(InternalResources.MESH_CUBE); MaterialPassDesc desc = new MaterialPassDesc(); desc.ManualConstantBuffers = true; desc.ShaderFile = "Skybox.hlsl"; desc.RasteriazerStates.CullMode = CullMode.Front; desc.DepthStencilStates.DepthWriteMask = DepthWriteMask.Zero; pass = new MaterialPass(game.Device, desc, debugName ?? "Skybox" + Debug.NextObjectId); buffer = Material.CreateBuffer<Data>(); }
public TexturePreviewQuad(Game game, Texture2DDescription textureDesc) { this.game = game; var passDesc = new MaterialPassDesc(); passDesc.ManualConstantBuffers = true; passDesc.ShaderFile = "TexturePreview.hlsl"; passDesc.InputElements = new InputElement[]{ new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("TEXCOORD", 0, SharpDX.DXGI.Format.R32G32_Float, 12, 0), }; pass = new MaterialPass(Game.Instance.Device, passDesc, "Preview"); BuildVertexBuffer(textureDesc); }
public Skydome(Device device) { this.device = device; sphere = Mesh.CreateSphere(); MaterialPassDesc desc = new MaterialPassDesc(); desc.ManualConstantBuffers = true; desc.ShaderFile = "Skydome.hlsl"; desc.RasteriazerStates.CullMode = CullMode.None; desc.DepthStencilStates.IsDepthEnabled = false; pass = new MaterialPass(device, desc, "Skydome"); buffer = Material.CreateBuffer<Data>(); //Game.Instance.AddControl(new Lilium.Controls.ColorPicker("Bottom", () => data.bottomColor, val => data.bottomColor = val)); //Game.Instance.AddControl(new Lilium.Controls.ColorPicker("Top", () => data.topColor, val => data.topColor = val)); }
public LineRenderer(Game game, int capacity = 128, string debugName = null) { this.game = game; this.capacity = capacity; this.debugName = debugName; vertices = new LineVertex[capacity * 2]; isDirty = true; is3DInvalid = true; Desc = new MaterialPassDesc(); Desc.ManualConstantBuffers = true; Desc.ShaderFile = InternalResources.SHADER_DEBUG_LINE; Desc.InputElements = new InputElement[]{ new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 12, 0), }; Desc.RasteriazerStates.CullMode = CullMode.None; }
public TangentSpaceBasisRenderer(List<MeshVertex> vertices) { hasTangent = vertices[0].Tangent.LengthSquared() > 0; { var lineVerticesList = new List<LineVertex>(); Action<Color> _addLine = (c) => { lineVerticesList.Add(new LineVertex(Vector3.Zero, c)); lineVerticesList.Add(new LineVertex(Vector3.Zero, c)); }; for (int i = 0; i < vertices.Count; ++i) { var v = vertices[i]; if (hasTangent) { _addLine(Color.Red); _addLine(Color.Green); } _addLine(Color.Blue); } lineVertices = lineVerticesList.ToArray(); updateLineVertices = delegate { int i = 0; int j = 0; for (i = 0; i < vertices.Count; ++i) { var v = vertices[i]; var origin = v.Position + Config.TBNOffset * v.Normal; if (hasTangent) { lineVertices[j++].Position = origin; lineVertices[j++].Position = origin + v.Tangent; lineVertices[j++].Position = origin; lineVertices[j++].Position = origin + Vector3.Cross(v.Normal, v.Tangent); } lineVertices[j++].Position = origin; lineVertices[j++].Position = origin + v.Normal; } }; } { var desc = new BufferDescription(); desc.BindFlags = BindFlags.VertexBuffer; desc.Usage = ResourceUsage.Dynamic; desc.CpuAccessFlags = CpuAccessFlags.Write; desc.OptionFlags = ResourceOptionFlags.None; desc.SizeInBytes = Utilities.SizeOf<LineVertex>() * lineVertices.Length; desc.StructureByteStride = 0; vertexBuffer = new Buffer(Game.Instance.Device, desc); } { var passDesc = new MaterialPassDesc(); passDesc.ManualConstantBuffers = true; passDesc.ShaderFile = InternalResources.SHADER_DEBUG_LINE; passDesc.InputElements = new InputElement[]{ new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 12, 0), }; pass = new MaterialPass(Game.Instance.Device, passDesc, "TangentSpaceBasisRenderer"); matrixBuffer = Material.CreateBuffer<Matrix>(); } }
public MeshPreview(Mesh mesh) { this.mesh = mesh; var game = Game.Instance; { var desc = new MaterialPassDesc(); desc.ManualConstantBuffers = true; desc.ShaderFile = "MeshPreview.hlsl"; passFill = new MaterialPass(game.Device, desc, "Preview(Fill)"); } { var desc = new MaterialPassDesc(); desc.ManualConstantBuffers = true; desc.ShaderFile = "MeshPreview.hlsl"; desc.RasteriazerStates.FillMode = FillMode.Wireframe; passWireframe = new MaterialPass(game.Device, desc, "Preview(Wireframe)"); } shaderBuffer = Material.CreateBuffer<ShaderData>(); shaderBuffer.DebugName = "Preview"; tangentRenderer = new TangentSpaceBasisRenderer(mesh.vertices); }
public void Import(ref MaterialPassDesc desc) { ShaderFile = desc.ShaderFile; VertexShaderFunction = desc.VertexShaderFunction; PixelShaderFunction = desc.PixelShaderFunction; GeometryShaderFunction = desc.GeometryShaderFunction; HullShaderFunction = desc.HullShaderFunction; DomainShaderFunction = desc.DomainShaderFunction; }
public void Export(ref MaterialPassDesc desc) { desc.ShaderFile = ShaderFile; desc.VertexShaderFunction = VertexShaderFunction; desc.PixelShaderFunction = PixelShaderFunction; desc.GeometryShaderFunction = GeometryShaderFunction; desc.HullShaderFunction = HullShaderFunction; desc.DomainShaderFunction = DomainShaderFunction; }
public void Import(MaterialPassDesc desc) { ShaderEntry.Import(ref desc); RasterizerStates.Import(ref desc.RasteriazerStates); BlendStates.Import(ref desc.BlendStates); DepthStencilStates.Import(ref desc.DepthStencilStates); StencilRef = desc.StencilRef; // Other InputElements = InputElement.Import(desc.InputElements); Textures = MaterialTexture.Import(desc.Textures); VariableValues = desc.VariableValues; }
public void Export(MaterialPassDesc desc) { ShaderEntry.Export(ref desc); RasterizerStates.Export(ref desc.RasteriazerStates); BlendStates.Export(ref desc.BlendStates); DepthStencilStates.Export(ref desc.DepthStencilStates); desc.StencilRef = StencilRef; // Other desc.InputElements = InputElement.Export(InputElements); desc.Textures = MaterialTexture.Export(Textures); desc.VariableValues = VariableValues ?? new Dictionary<string, string>(); }
public void Export(MaterialDesc desc) { desc.Passes = new List<MaterialPassDesc>(); for (int i = 0; i < Passes.Length; ++i) { var pass = new MaterialPassDesc(); Passes[i].Export(pass); desc.Passes.Add(pass); } }
public void Init() { { BuildVertices(); var desc = new BufferDescription(); desc.BindFlags = BindFlags.VertexBuffer; desc.Usage = ResourceUsage.Default; desc.CpuAccessFlags = CpuAccessFlags.None; desc.OptionFlags = ResourceOptionFlags.None; desc.SizeInBytes = Utilities.SizeOf<LineVertex>() * vertices.Length; desc.StructureByteStride = 0; vertexBuffer = Buffer.Create(Device, vertices, desc);//new Buffer(Device, desc); } { var passDesc = new MaterialPassDesc(); passDesc.ManualConstantBuffers = true; passDesc.ShaderFile = InternalResources.SHADER_DEBUG_LINE; passDesc.InputElements = new InputElement[]{ new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("COLOR", 0, SharpDX.DXGI.Format.R32G32B32A32_Float, 12, 0), }; passDesc.RasteriazerStates.CullMode = CullMode.None; passDesc.DepthStencilStates.DepthWriteMask = DepthWriteMask.Zero; pass = new MaterialPass(Game.Instance.Device, passDesc, "Grid"); matrixBuffer = Material.CreateBuffer<Matrix>(); } }
void LoadShader() { var passDesc = new MaterialPassDesc(); passDesc.ManualConstantBuffers = true; passDesc.ShaderFile = shaderFile; passDesc.InputElements = new InputElement[]{ new InputElement("POSITION", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0, 0), new InputElement("TEXCOORD", 0, SharpDX.DXGI.Format.R32G32_Float, 12, 0), }; Pass = new MaterialPass(Game.Instance.Device, passDesc, debugName); }
public void PreviewActive() { var desc = new ShaderResourceViewDescription(); desc.Format = tex.Description.Format; desc.Dimension = ShaderResourceViewDimension.TextureCube; desc.Texture2D.MipLevels = tex.Description.MipLevels; desc.Texture2D.MostDetailedMip = 0; shaderResourceView = new ShaderResourceView(mGame.Device, tex, desc); shaderResourceView.DebugName = "Preview"; if (shaderResourceView == null) return; desc.Dimension = ShaderResourceViewDimension.Texture2DArray; desc.Texture2DArray.ArraySize = 1; desc.Texture2DArray.MipLevels = tex.Description.MipLevels; desc.Texture2DArray.MostDetailedMip = 0; mFaces = new ShaderResourceView[6]; for (int i = 0; i < 6; ++i) { desc.Texture2DArray.FirstArraySlice = i; mFaces[i] = new ShaderResourceView(mGame.Device, tex, desc); } cube = mGame.ResourceManager.Mesh.Load(InternalResources.MESH_CUBE); sphere = mGame.ResourceManager.Mesh.Load(InternalResources.MESH_SPHERE); var passDesc = new MaterialPassDesc(); passDesc.ManualConstantBuffers = true; passDesc.ShaderFile = "CubemapPreview.hlsl"; passCube = new MaterialPass(Game.Instance.Device, passDesc, "Preview(Cube)"); passDesc.PixelShaderFunction = "PS_Sphere"; passSphere = new MaterialPass(mGame.Device, passDesc, "Preview(Sphere)"); skybox = new SkyBox(mGame, shaderResourceView, "Preview"); mQuad = new TexturePreviewQuad(mGame, tex.Description); Light.IsPreviewingTexture = true; }