internal Renderer(RenderScene scene, Logger logger = null)
        {
            if (scene == null)
            {
                throw new ArgumentNullException(nameof(scene));
            }

            this.scene = scene;
            this.specializationContainer = new SpecializationContainer(logger);
            this.pushDataContainer       = new PushDataContainer(
                stages: ShaderStages.Vertex | ShaderStages.Fragment, logger);
            this.logger = logger;
        }
            public Item(
                int order,
                bool depthClamp,
                bool depthBias,
                IInternalRenderObject renderObject,
                SpecializationContainer specializationContainer,
                PushDataContainer pushDataContainer,
                ShaderProgram vertProg,
                ShaderProgram fragProg,
                Device logicalDevice,
                string debugName = null)
            {
                this.order                   = order;
                this.renderObject            = renderObject;
                this.specializationContainer = specializationContainer;
                this.pushDataContainer       = pushDataContainer;
                this.depthClamp              = depthClamp;
                this.depthBias               = depthBias;
                this.debugName               = debugName;

                vertModule = vertProg.CreateModule(logicalDevice);
                fragModule = fragProg.CreateModule(logicalDevice);
            }