internal GBufferTechnique(
            RenderScene scene,
            Logger logger = null)
        {
            if (scene == null)
            {
                throw new NullReferenceException(nameof(scene));
            }
            this.scene = scene;

            //Create buffer for storing camera transformations
            cameraBuffer = new Memory.HostBuffer(
                scene.LogicalDevice, scene.MemoryPool, BufferUsages.UniformBuffer,
                size: CameraData.SIZE * scene.SwapchainCount);

            //Create renderer for rendering into the g-buffer targets
            renderer = new Renderer(scene, logger);
            renderer.AddSpecialization(scene.SwapchainCount);
            renderer.AddSpecialization(false); //NOT IsShadow
            swapchainIndexPushDataBinding = renderer.AddPushData <int>();
        }