예제 #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);
        }