- add sources.
[platform/framework/web/crosswalk.git] / src / gpu / command_buffer / tests / gl_unittests.cc
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