1 // Copyright 2014 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.
6 #include <GLES2/gl2ext.h>
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"
15 class GLTest
: public testing::Test
{
17 virtual void SetUp() {
18 gl_
.Initialize(GLManager::Options());
21 virtual void TearDown() {
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__
);
37 TEST_F(GLTest
, BasicFBO
) {
39 glGenTextures(1, &tex
);
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
,
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
,
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__
);
66 TEST_F(GLTest
, SimpleShader
) {
67 static const char* v_shader_str
=
68 "attribute vec4 a_Position;\n"
71 " gl_Position = a_Position;\n"
73 static const char* f_shader_str
=
74 "precision mediump float;\n"
77 " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
80 GLuint program
= GLTestHelper::LoadProgram(v_shader_str
, f_shader_str
);
81 glUseProgram(program
);
82 GLuint position_loc
= glGetAttribLocation(program
, "a_Position");
84 GLTestHelper::SetupUnitQuad(position_loc
);
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
));
95 TEST_F(GLTest
, GetString
) {
97 "OpenGL ES 2.0 Chromium",
98 reinterpret_cast<const char*>(glGetString(GL_VERSION
)));
100 "OpenGL ES GLSL ES 1.0 Chromium",
101 reinterpret_cast<const char*>(glGetString(GL_SHADING_LANGUAGE_VERSION
)));
104 reinterpret_cast<const char*>(glGetString(GL_RENDERER
)));
107 reinterpret_cast<const char*>(glGetString(GL_VENDOR
)));