Home | History | Annotate | Download | only in tests
      1 // Copyright (c) 2012 The Chromium 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 #include <GLES2/gl2.h>
      6 #include <GLES2/gl2ext.h>
      7 
      8 #include "gpu/command_buffer/tests/gl_manager.h"
      9 #include "gpu/command_buffer/tests/gl_test_utils.h"
     10 #include "testing/gmock/include/gmock/gmock.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace gpu {
     14 
     15 class GLTest : public testing::Test {
     16  protected:
     17   virtual void SetUp() {
     18     gl_.Initialize(GLManager::Options());
     19   }
     20 
     21   virtual void TearDown() {
     22     gl_.Destroy();
     23   }
     24 
     25   GLManager gl_;
     26 };
     27 
     28 // Test that GL is at least minimally working.
     29 TEST_F(GLTest, Basic) {
     30   glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
     31   glClear(GL_COLOR_BUFFER_BIT);
     32   uint8 expected[] = { 0, 255, 0, 255, };
     33   EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected));
     34   GLTestHelper::CheckGLError("no errors", __LINE__);
     35 }
     36 
     37 TEST_F(GLTest, BasicFBO) {
     38   GLuint tex = 0;
     39   glGenTextures(1, &tex);
     40   GLuint fbo = 0;
     41   glGenFramebuffers(1, &fbo);
     42   glBindTexture(GL_TEXTURE_2D, tex);
     43   scoped_ptr<uint8[]> pixels(new uint8 [16*16*4]);
     44   memset(pixels.get(), 0, 16*16*4);
     45   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE,
     46                pixels.get());
     47   glGenerateMipmap(GL_TEXTURE_2D);
     48   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
     49   glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
     50   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     51   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     52   glBindFramebuffer(GL_FRAMEBUFFER, fbo);
     53   glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
     54                          tex, 0);
     55   EXPECT_EQ(static_cast<GLenum>(GL_FRAMEBUFFER_COMPLETE),
     56             glCheckFramebufferStatus(GL_FRAMEBUFFER));
     57   glClearColor(0.0f, 1.0f, 0.0f, 1.0f);
     58   glClear(GL_COLOR_BUFFER_BIT);
     59   uint8 expected[] = { 0, 255, 0, 255, };
     60   EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 16, 16, 0, expected));
     61   glDeleteFramebuffers(1, &fbo);
     62   glDeleteTextures(1, &tex);
     63   GLTestHelper::CheckGLError("no errors", __LINE__);
     64 }
     65 
     66 TEST_F(GLTest, SimpleShader) {
     67   static const char* v_shader_str =
     68       "attribute vec4 a_Position;\n"
     69       "void main()\n"
     70       "{\n"
     71       "   gl_Position = a_Position;\n"
     72       "}\n";
     73   static const char* f_shader_str =
     74       "precision mediump float;\n"
     75       "void main()\n"
     76       "{\n"
     77       "  gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
     78       "}\n";
     79 
     80   GLuint program = GLTestHelper::LoadProgram(v_shader_str, f_shader_str);
     81   glUseProgram(program);
     82   GLuint position_loc = glGetAttribLocation(program, "a_Position");
     83 
     84   GLTestHelper::SetupUnitQuad(position_loc);
     85 
     86   uint8 expected_clear[] = { 127, 0, 255, 0, };
     87   glClearColor(0.5f, 0.0f, 1.0f, 0.0f);
     88   glClear(GL_COLOR_BUFFER_BIT);
     89   EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 1, expected_clear));
     90   uint8 expected_draw[] = { 0, 255, 0, 255, };
     91   glDrawArrays(GL_TRIANGLES, 0, 6);
     92   EXPECT_TRUE(GLTestHelper::CheckPixels(0, 0, 1, 1, 0, expected_draw));
     93 }
     94 
     95 TEST_F(GLTest, GetString) {
     96   EXPECT_STREQ(
     97       "OpenGL ES 2.0 Chromium",
     98       reinterpret_cast<const char*>(glGetString(GL_VERSION)));
     99   EXPECT_STREQ(
    100       "OpenGL ES GLSL ES 1.0 Chromium",
    101       reinterpret_cast<const char*>(glGetString(GL_SHADING_LANGUAGE_VERSION)));
    102   EXPECT_STREQ(
    103       "Chromium",
    104       reinterpret_cast<const char*>(glGetString(GL_RENDERER)));
    105   EXPECT_STREQ(
    106       "Chromium",
    107       reinterpret_cast<const char*>(glGetString(GL_VENDOR)));
    108 }
    109 
    110 }  // namespace gpu
    111 
    112