// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.ui.gfx;

// These are all of the types of parameters that can be set to configure a
// |Renderer|.
union RendererParam {
  ShadowTechnique shadow_technique;
  RenderFrequency render_frequency;
};

// Represents the shadow algorithm that the |Renderer| should use when lighting
// the scene.
enum ShadowTechnique {
  // No shadows.
  UNSHADOWED = 0;
  // Default.  Screen-space, depth-buffer based shadows; SSDO-ish.
  SCREEN_SPACE = 1;
  // Basic shadow map.
  SHADOW_MAP = 2;
  // Moment shadow map (see http://momentsingraphics.de).
  MOMENT_SHADOW_MAP = 3;
};

enum RenderFrequency {
  // Render only on when requested (i.e. when something triggers it).
  // Default behavior.
  WHEN_REQUESTED = 0;
  // Render one frame after another regardless of it it's needed.
  CONTINUOUSLY = 1;
};
