// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BENCH_GL_TEXTURETEST_H_
#define BENCH_GL_TEXTURETEST_H_

#include <memory>

#include "testbase.h"
#include "utils.h"

namespace glbench {

namespace {

const int kNumberOfTextures = 8;

}  // namespace

class TextureTest : public TestBase {
 public:
  TextureTest() {}
  virtual ~TextureTest() {}
  virtual bool TestFunc(uint64_t iterations) = 0;
  virtual bool Run();
  virtual const char* Name() const = 0;
  virtual const char* Unit() const { return "mtexel_sec"; }

  enum UpdateFlavor {
    TEX_IMAGE,
    TEX_SUBIMAGE
  };

 protected:
  GLuint width_;
  GLuint height_;
  GLuint program_;
  int texsize_;
  std::unique_ptr<char[]> pixels_[kNumberOfTextures];
  GLuint textures_[kNumberOfTextures];
  UpdateFlavor flavor_;
  GLenum texel_gl_format_;
  DISALLOW_COPY_AND_ASSIGN(TextureTest);
};

} // namespace glbench

#endif  // BENCH_GL_TEXTURETEST_H_