1 // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This test evaluates the speed of using the same textures to draw repeatedly.
6 // It uploads a series of textures initially. On subsequent iterations, it uses
7 // those uploaded textures to draw.
8
9 #include "base/logging.h"
10
11 #include "texturetest.h"
12 #include "main.h"
13
14 namespace glbench {
15
16 class TextureReuseTest : public TextureTest {
17 public:
TextureReuseTest()18 TextureReuseTest() {}
~TextureReuseTest()19 virtual ~TextureReuseTest() {}
20 virtual bool TestFunc(uint64_t iterations);
Name() const21 virtual const char* Name() const { return "texture_reuse"; }
IsDrawTest() const22 virtual bool IsDrawTest() const { return true; }
23 };
24
TestFunc(uint64_t iterations)25 bool TextureReuseTest::TestFunc(uint64_t iterations) {
26 glGetError();
27
28 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
29 glFlush();
30
31 for (uint64_t i = 0; i < iterations; ++i) {
32 glBindTexture(GL_TEXTURE_2D, textures_[i % kNumberOfTextures]);
33 switch (flavor_) {
34 case TEX_IMAGE:
35 glTexImage2D(GL_TEXTURE_2D, 0, texel_gl_format_, width_, height_,
36 0, texel_gl_format_, GL_UNSIGNED_BYTE,
37 pixels_[i % kNumberOfTextures].get());
38 break;
39 case TEX_SUBIMAGE:
40 glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_,
41 texel_gl_format_, GL_UNSIGNED_BYTE,
42 pixels_[i % kNumberOfTextures].get());
43 break;
44 }
45
46 // After having uploaded |kNumberOfTextures| textures, use each of them to
47 // draw once before uploading new textures.
48 if ((i % kNumberOfTextures) == (kNumberOfTextures - 1)) {
49 for (int j = 0; j < kNumberOfTextures; ++j) {
50 glBindTexture(GL_TEXTURE_2D, textures_[j]);
51 glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
52 }
53 }
54 }
55
56 return true;
57 }
58
GetTextureReuseTest()59 TestBase* GetTextureReuseTest() {
60 return new TextureReuseTest;
61 }
62
63 } // namespace glbench
64