普通文本  |  50行  |  1.32 KB

// Copyright 2018 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.

// This test evaluates the speed of rebinding the texture after each draw call.

#include "main.h"
#include "texturetest.h"

namespace glbench {

class TextureRebindTest : public TextureTest {
 public:
  TextureRebindTest() {}
  virtual bool TextureMetaDataInit();
  virtual ~TextureRebindTest() {}
  virtual bool TestFunc(uint64_t iterations);
  virtual const char* Name() const { return "texture_rebind"; }
  virtual bool IsDrawTest() const { return true; }
  virtual bool IsTextureUploadTest() const { return false; }
};


bool TextureRebindTest::TextureMetaDataInit(){
    kTexelFormats.push_back(GL_RGBA);
    kTexelFormatNames[GL_RGBA] = "rgba";
    kTexelFormatSizes[GL_RGBA] = 4;
    kFlavors[TEX_IMAGE] = "teximage2d";
    return true;
}

bool TextureRebindTest::TestFunc(uint64_t iterations) {
  for (uint64_t i = 0; i < iterations; ++i) {
    for (uint64_t texture_idx = 0;
         texture_idx < kNumberOfTextures;
         texture_idx++) {
      glBindTexture(GL_TEXTURE_2D, textures_[texture_idx]);
      glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    }
  }

  return true;
}

TestBase* GetTextureRebindTest() {
  return new TextureRebindTest;
}

}  // namespace glbench