Home | History | Annotate | Download | only in src
      1 // Copyright (c) 2010 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 updating a single texture and using it to
      6 // draw after each upload.
      7 
      8 #include "base/logging.h"
      9 
     10 #include "texturetest.h"
     11 #include "main.h"
     12 
     13 namespace glbench {
     14 
     15 class TextureUpdateTest : public TextureTest {
     16  public:
     17   TextureUpdateTest() {}
     18   virtual ~TextureUpdateTest() {}
     19   virtual bool TestFunc(uint64_t iterations);
     20   virtual const char* Name() const { return "texture_update"; }
     21   virtual bool IsDrawTest() const { return true; }
     22 };
     23 
     24 bool TextureUpdateTest::TestFunc(uint64_t iterations) {
     25   glGetError();
     26 
     27   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
     28   glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
     29   glFlush();
     30   for (uint64_t i = 0; i < iterations; ++i) {
     31     switch (flavor_) {
     32       case TEX_IMAGE:
     33         glTexImage2D(GL_TEXTURE_2D, 0, texel_gl_format_, width_, height_,
     34                      0, texel_gl_format_, GL_UNSIGNED_BYTE,
     35                      pixels_[i % kNumberOfTextures].get());
     36         break;
     37       case TEX_SUBIMAGE:
     38         glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width_, height_,
     39                         texel_gl_format_, GL_UNSIGNED_BYTE,
     40                         pixels_[i % kNumberOfTextures].get());
     41         break;
     42     }
     43     glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
     44   }
     45   return true;
     46 }
     47 
     48 TestBase* GetTextureUpdateTest() {
     49   return new TextureUpdateTest;
     50 }
     51 
     52 } // namespace glbench
     53