/*
 * Copyright 2016 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef GLIMP_GLES_CULL_FACE_STATE_H_
#define GLIMP_GLES_CULL_FACE_STATE_H_

namespace glimp {
namespace gles {

// Describes GL cull face state, which can be modified via commands like
// glCullFace().
//   https://www.khronos.org/opengles/sdk/docs/man/xhtml/glCullFace.xml
struct CullFaceState {
  // When enabled, the initial face culling value should be kBack.
  enum Mode {
    kFront,
    kBack,
    kFrontAndBack,
    kModeInvalid,
  };

  // Default state is face culling off.
  CullFaceState() : enabled(false), mode(kBack) {}

  Mode mode;
  bool enabled;
};

}  // namespace gles
}  // namespace glimp

#endif  // GLIMP_GLES_CULL_FACE_STATE_H_
