Ejemplo n.º 1
0
        private static void Render(ISrvBindable textureArraySRV, ISrvBindable depthRead)
        {
            RC.VertexShader.Set(m_vs);
            if (MyRender11.Settings.DisplayTransparencyHeatMap)
            {
                if (MyRender11.DebugOverrides.OIT)
                {
                    RC.PixelShader.Set(m_psDebugUniformAccumOIT);
                }
                else
                {
                    RC.PixelShader.Set(m_psDebugUniformAccum);
                }
            }
            else
            {
                if (MyRender11.DebugOverrides.OIT)
                {
                    RC.PixelShader.Set(m_psOIT);
                }
                else
                {
                    RC.PixelShader.Set(m_ps);
                }
            }

            RC.SetVertexBuffer(0, null);
            RC.SetIndexBuffer(m_ib);
            RC.SetPrimitiveTopology(PrimitiveTopology.TriangleList);

            RC.AllShaderStages.SetConstantBuffer(1, m_activeListConstantBuffer);

            RC.AllShaderStages.SetSrv(0, depthRead);
            RC.PixelShader.SetSrvs(1, textureArraySRV);

            RC.VertexShader.SetSrv(0, m_particleBuffer);
            RC.VertexShader.SetSrv(1, m_emitterStructuredBuffer);
            RC.VertexShader.SetSrv(2, m_aliveIndexBuffer);
            ISrvBindable skybox = MyRender11.IsIntelBrokenCubemapsWorkaround
                ? MyGeneratedTextureManager.IntelFallbackCubeTex
                : (ISrvBindable)MyManagers.EnvironmentProbe.Cubemap;

            RC.VertexShader.SetSrv(MyCommon.SKYBOX_IBL_SLOT, skybox);

            // bind render target?
            if (!MyStereoRender.Enable)
            {
                RC.DrawIndexedInstancedIndirect(m_indirectDrawArgsBuffer, 0);
            }
            else
            {
                MyStereoRender.DrawIndexedInstancedIndirectGPUParticles(RC, m_indirectDrawArgsBuffer, 0);
            }

            MyRender11.ProcessDebugOutput();
            RC.VertexShader.SetSrv(MyCommon.SKYBOX_IBL_SLOT, null);
            RC.AllShaderStages.SetSrv(0, null);
        }
Ejemplo n.º 2
0
        private static void Render(SharpDX.Direct3D11.ShaderResourceView textureArraySRV, MyBindableResource depthRead)
        {
            RC.SetVS(m_vs);
            if (MyRender11.DebugOverrides.OIT)
            {
                RC.SetPS(m_psOIT);
            }
            else
            {
                RC.SetPS(m_ps);
            }

            RC.SetVB(0, null, 0);
            RC.SetIB(m_ib.Buffer, SharpDX.DXGI.Format.R32_UInt);
            RC.DeviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;

            RC.SetCB(1, m_activeListConstantBuffer);

            RC.BindSRV(0, depthRead);
            RC.DeviceContext.PixelShader.SetShaderResources(1, textureArraySRV);

            RC.VSBindRawSRV(0, m_particleBuffer);
            RC.VSBindRawSRV(1, m_aliveIndexBuffer);
            RC.VSBindRawSRV(2, m_emitterStructuredBuffer);
            RC.DeviceContext.VertexShader.SetShaderResource(MyCommon.SKYBOX_IBL_SLOT,
                                                            MyRender11.IsIntelBrokenCubemapsWorkaround ? Resources.MyTextures.GetView(Resources.MyTextures.IntelFallbackCubeTexId) : MyEnvironmentProbe.Instance.cubemapPrefiltered.SRV);
            RC.DeviceContext.VertexShader.SetShaderResource(MyCommon.SKYBOX2_IBL_SLOT,
                                                            Resources.MyTextures.GetView(Resources.MyTextures.GetTexture(MyRender11.Environment.NightSkyboxPrefiltered, Resources.MyTextureEnum.CUBEMAP, true)));

            // bind render target?
            if (!MyStereoRender.Enable)
            {
                RC.DeviceContext.DrawIndexedInstancedIndirect(m_indirectDrawArgsBuffer.Buffer, 0);
            }
            else
            {
                MyStereoRender.DrawIndexedInstancedIndirectGPUParticles(RC, m_indirectDrawArgsBuffer.Buffer, 0);
            }

            MyRender11.ProcessDebugOutput();
            RC.DeviceContext.PixelShader.SetShaderResource(MyCommon.SKYBOX_IBL_SLOT, null);
            RC.DeviceContext.PixelShader.SetShaderResource(MyCommon.SKYBOX2_IBL_SLOT, null);
        }