1//
2// Copyright 2014 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7// ImageIndex.h: A helper struct for indexing into an Image array
8
9#ifndef LIBGLESV2_IMAGE_INDEX_H_
10#define LIBGLESV2_IMAGE_INDEX_H_
11
12#include "angle_gl.h"
13
14namespace gl
15{
16
17struct ImageIndex
18{
19    GLenum type;
20    GLint mipIndex;
21    GLint layerIndex;
22
23    ImageIndex(const ImageIndex &other);
24    ImageIndex &operator=(const ImageIndex &other);
25
26    bool hasLayer() const { return layerIndex != ENTIRE_LEVEL; }
27
28    static ImageIndex Make2D(GLint mipIndex);
29    static ImageIndex MakeCube(GLenum target, GLint mipIndex);
30    static ImageIndex Make2DArray(GLint mipIndex, GLint layerIndex);
31    static ImageIndex Make3D(GLint mipIndex, GLint layerIndex = ENTIRE_LEVEL);
32
33    static const GLint ENTIRE_LEVEL = static_cast<GLint>(-1);
34
35  private:
36    ImageIndex(GLenum typeIn, GLint mipIndexIn, GLint layerIndexIn);
37};
38
39}
40
41#endif // LIBGLESV2_IMAGE_INDEX_H_
42