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// Helper functions for GL.
6
7#ifndef GPU_COMMAND_BUFFER_TESTS_GL_TEST_UTILS_H_
8#define GPU_COMMAND_BUFFER_TESTS_GL_TEST_UTILS_H_
9
10#include <GLES2/gl2.h>
11#include "base/basictypes.h"
12
13class GLTestHelper {
14 public:
15  static const uint8 kCheckClearValue = 123u;
16
17  static bool HasExtension(const char* extension);
18  static bool CheckGLError(const char* msg, int line);
19
20  // Compiles a shader.
21  // Returns shader, 0 on failure..
22  static GLuint LoadShader(GLenum type, const char* shaderSrc);
23
24  // Attaches 2 shaders and links them to a program.
25  // Returns program, 0 on failure..
26  static GLuint SetupProgram(GLuint vertex_shader, GLuint fragment_shader);
27
28  // Compiles 2 shaders, attaches and links them to a program
29  // Returns program, 0 on failure.
30  static GLuint LoadProgram(
31      const char* vertex_shader_source,
32      const char* fragment_shader_source);
33
34  // Make a unit quad with position only.
35  // Returns the created buffer.
36  static GLuint SetupUnitQuad(GLint position_location);
37
38  // Make a 6 vertex colors.
39  // Returns the created buffer.
40  static GLuint SetupColorsForUnitQuad(
41      GLint location, const GLfloat color[4], GLenum usage);
42
43  // Checks an area of pixels for a color.
44  static bool CheckPixels(
45      GLint x, GLint y, GLsizei width, GLsizei height, GLint tolerance,
46      const uint8* color);
47
48  // Uses ReadPixels to save an area of the current FBO/Backbuffer.
49  static bool SaveBackbufferAsBMP(const char* filename, int width, int height);
50
51  // Run unit tests.
52  static int RunTests(int argc, char** argv);
53};
54
55#endif  // GPU_COMMAND_BUFFER_TESTS_GL_TEST_UTILS_H_
56