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>();
        }
Example #2
0
 public RenderCubemap(Game game, int size, string debugName = null)
 {
     this.mGame = game;
     this.mSize = size;
     this.Name = debugName ?? ("RenderCubemap" + Debug.NextObjectId);
     Create3D();
 }
Example #3
0
        public Postprocess(Game game, string shaderFile, RenderTexture rt = null, string name = null)
        {
            this.game = game;
            this.renderTexture = rt;
            if(name == null)
            {
                this.Name = System.IO.Path.GetFileNameWithoutExtension(shaderFile);
                this.debugName = "Postprocess " + this.Name;
            }
            else
            {
                this.debugName = this.Name = name;
            }
            this.shaderFile = shaderFile;

            var desc = SamplerStateDescription.Default();
            desc.Filter = Filter.MinMagMipPoint;
            defaultSamplerStateDescription = desc;

            LoadShader();
            BuildVertexBuffer();
            ppBuffer = Material.CreateBuffer<LiliumPostprocessData>();

            game.AddObject(this);
        }
Example #4
0
        public MainForm(Game game)
        {
            Instance = this;
            InitializeComponent();

            this.game = game;
            this.Text = game.GetType().Name;
        }
Example #5
0
        public FrustumRenderer(Game game, BoundingFrustum frustum, string debugName = null)
        {
            this.game = game;
            this.debugName = debugName ?? "FrustumRenderer " + Debug.NextObjectId;

            line = new LineRenderer(game, 12, this.debugName);
            UpdateFrustum(frustum);
        }
Example #6
0
        public CubemapPreview(Game game, ShaderResourceView view)
        {
            this.mGame = game;

            if (view != null && view.Description.Dimension == SharpDX.Direct3D.ShaderResourceViewDimension.TextureCube)
            {
                var res = view.Resource;
                tex = res.QueryInterface<Texture2D>();
                (res as IUnknown).Release();
                (tex as IUnknown).Release();

                Name = view.DebugName;
            }
        }
Example #7
0
        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>();
        }
Example #8
0
        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);
        }
Example #9
0
        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;
        }
Example #10
0
        public RenderTexture(Game game, int width, int height, int mrtCount = 1, string debugName = null)
        {
            this.game = game;

            if (mrtCount < 1) mrtCount = 1;
            this.debugName = debugName ?? "RenderTexture " + Debug.NextObjectId;
            var format = Format.R32G32B32A32_Float;
            {
                var desc = new Texture2DDescription();
                desc.Format = format;
                desc.Width = width;
                desc.Height = height;
                desc.BindFlags = BindFlags.RenderTarget | BindFlags.ShaderResource;
                desc.Usage = ResourceUsage.Default;
                desc.ArraySize = 1;
                desc.CpuAccessFlags = CpuAccessFlags.None;
                desc.MipLevels = 1;
                desc.SampleDescription.Count = 1;
                desc.SampleDescription.Quality = 0;
                desc.OptionFlags = ResourceOptionFlags.None;

                textures = new Texture2D[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    textures[i] = new Texture2D(game.Device, desc);
                    textures[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                var desc = new RenderTargetViewDescription();
                desc.Format = format;
                desc.Dimension = RenderTargetViewDimension.Texture2D;
                desc.Texture2D.MipSlice = 0;

                renderTargetViews = new RenderTargetView[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    renderTargetViews[i] = new RenderTargetView(game.Device, textures[i], desc);
                    renderTargetViews[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                shaderResourceViews = new ShaderResourceView[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    shaderResourceViews[i] = new ShaderResourceView(game.Device, textures[i]);
                    shaderResourceViews[i].DebugName = DebugName + "[" + i + "]";
                }
            }
            {
                clearColors = new Color4[mrtCount];
                for (int i = 0; i < mrtCount; ++i)
                {
                    clearColors[i] = Color4.Black;
                }
            }
            {
                var desc = new Texture2DDescription();
                desc.Format = Format.D24_UNorm_S8_UInt;
                desc.ArraySize = 1;
                desc.MipLevels = 1;
                desc.Width = width;
                desc.Height = height;
                desc.SampleDescription.Count = 1;
                desc.SampleDescription.Quality = 0;
                desc.Usage = ResourceUsage.Default;
                desc.BindFlags = BindFlags.DepthStencil;
                desc.CpuAccessFlags = CpuAccessFlags.None;
                desc.OptionFlags = ResourceOptionFlags.None;
                depthStencilTexture = new Texture2D(game.Device, desc);
                depthStencilTexture.DebugName = DebugName + "(DS)";
            }
            {
                depthStencilView = new DepthStencilView(game.Device, depthStencilTexture);
                depthStencilView.DebugName = DebugName;
            }
            vp = new SharpDX.Viewport(0, 0, width, height);

            game.AddObject(this);
        }
Example #11
0
 public RenderTexture(Game game, int mrtCount = 1, string debugName = null)
     : this(game, game.RenderViewSize.Width, game.RenderViewSize.Height, mrtCount, debugName)
 {
 }
Example #12
0
 public static void Init(Game game)
 {
     debugLineRenderer = new LineRenderer(game, 256, "Debug Line");
     debugLineRenderer.Desc.DepthStencilStates.IsDepthEnabled = false;
     debugLineRenderer.Create3D();
 }