예제 #1
0
        private void RenderBatchesInSingleShot(List <Batch> batches, Effect effect,
                                               SetupPreviousLayerDepthHandler setupPreviousLayerDepthHandler)
        {
            Debug.Assert(batches != null && effect != null && setupPreviousLayerDepthHandler != null && batches.Count > 0);

            setupPreviousLayerDepthHandler.Invoke(effect);

            var technique = effect.GetTechniqueByName(FillGBufferTechniqueName);

            if (!technique.IsValid)
            {
                return;
            }

            for (int i = 0; i < technique.Description.PassCount; ++i)
            {
                foreach (Batch batch in batches)
                {
                    Debug.Assert(batch.Effect == effect);

                    batch.SetupPerBatchParameters(viewerForBatches);
                    technique.GetPassByIndex(i).Apply();
                    batch.SetupAndDraw();
                }
            }
        }
예제 #2
0
        public void RenderPreparedBatches(SetupPreviousLayerDepthHandler setupPreviousLayerDepthHandler)
        {
            Debug.Assert(setupPreviousLayerDepthHandler != null);

            Effect lastEffect = null;
            foreach (Batch batch in batchesToRender)
            {
                if (batch.Effect != lastEffect && lastEffect != null)
                {
                    RenderBatchesInSingleShot(batchesToRenderInSingleShot, lastEffect, setupPreviousLayerDepthHandler);
                    batchesToRenderInSingleShot.Clear();
                }

                batchesToRenderInSingleShot.Add(batch);
                lastEffect = batch.Effect;
            }

            if (lastEffect != null)
            {
                RenderBatchesInSingleShot(batchesToRenderInSingleShot, lastEffect, setupPreviousLayerDepthHandler);
                batchesToRenderInSingleShot.Clear();
            }
        }
예제 #3
0
        public void RenderPreparedBatches(SetupPreviousLayerDepthHandler setupPreviousLayerDepthHandler)
        {
            Debug.Assert(setupPreviousLayerDepthHandler != null);

            Effect lastEffect = null;

            foreach (Batch batch in batchesToRender)
            {
                if (batch.Effect != lastEffect && lastEffect != null)
                {
                    RenderBatchesInSingleShot(batchesToRenderInSingleShot, lastEffect, setupPreviousLayerDepthHandler);
                    batchesToRenderInSingleShot.Clear();
                }

                batchesToRenderInSingleShot.Add(batch);
                lastEffect = batch.Effect;
            }

            if (lastEffect != null)
            {
                RenderBatchesInSingleShot(batchesToRenderInSingleShot, lastEffect, setupPreviousLayerDepthHandler);
                batchesToRenderInSingleShot.Clear();
            }
        }
예제 #4
0
        private void RenderBatchesInSingleShot(List<Batch> batches, Effect effect,
            SetupPreviousLayerDepthHandler setupPreviousLayerDepthHandler)
        {
            Debug.Assert(batches != null && effect != null && setupPreviousLayerDepthHandler != null && batches.Count > 0);

            setupPreviousLayerDepthHandler.Invoke(effect);

            var technique = effect.GetTechniqueByName(FillGBufferTechniqueName);
            if (!technique.IsValid)
                return;

            for (int i = 0; i < technique.Description.PassCount; ++i)
            {
                foreach (Batch batch in batches)
                {
                    Debug.Assert(batch.Effect == effect);

                    batch.SetupPerBatchParameters(viewerForBatches);
                    technique.GetPassByIndex(i).Apply();
                    batch.SetupAndDraw();
                }
            }
        }