1cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza/*
2cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * Copyright 2013 The Android Open Source Project
3cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza *
4cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * Licensed under the Apache License, Version 2.0 (the "License");
5cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * you may not use this file except in compliance with the License.
6cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * You may obtain a copy of the License at
7cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza *
8cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza *      http://www.apache.org/licenses/LICENSE-2.0
9cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza *
10cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * Unless required by applicable law or agreed to in writing, software
11cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * distributed under the License is distributed on an "AS IS" BASIS,
12cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * See the License for the specific language governing permissions and
14cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza * limitations under the License.
15cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza */
16cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza
17f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#ifndef ANDROID_GL_TEST_H
18f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#define ANDROID_GL_TEST_H
19f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
20f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#include <gtest/gtest.h>
21f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
22f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#include <gui/SurfaceComposerClient.h>
23f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
24f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#include <EGL/egl.h>
25f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#include <GLES/gl.h>
26f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
27f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stozanamespace android {
28f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
29f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stozaclass GLTest : public ::testing::Test {
30cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stozapublic:
31cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza    static void loadShader(GLenum shaderType, const char* pSource,
32cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza            GLuint* outShader);
33cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza    static void createProgram(const char* pVertexSource,
34cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza            const char* pFragmentSource, GLuint* outPgm);
35cb1fcdedaaf95acabeac6a2d5bff423d6ca62296Dan Stoza
36f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stozaprotected:
37f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    GLTest() :
38f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza            mEglDisplay(EGL_NO_DISPLAY),
39f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza            mEglSurface(EGL_NO_SURFACE),
40f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza            mEglContext(EGL_NO_CONTEXT) {
41f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    }
42f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
43f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual void SetUp();
44f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual void TearDown();
45f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
46f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual EGLint const* getConfigAttribs();
47f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual EGLint const* getContextAttribs();
48f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual EGLint getSurfaceWidth();
49f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual EGLint getSurfaceHeight();
50f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    virtual EGLSurface createWindowSurface(EGLDisplay display, EGLConfig config,
51f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza                                           sp<ANativeWindow>& window) const;
52f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
53f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    ::testing::AssertionResult checkPixel(int x, int y,
54f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza            int r, int g, int b, int a, int tolerance = 2);
55f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    ::testing::AssertionResult assertRectEq(const Rect &r1, const Rect &r2,
56f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza            int tolerance = 1);
57f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
58f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    int mDisplaySecs;
59f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    sp<SurfaceComposerClient> mComposerClient;
60f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    sp<SurfaceControl> mSurfaceControl;
61f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
62f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    EGLDisplay mEglDisplay;
63f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    EGLSurface mEglSurface;
64f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    EGLContext mEglContext;
65f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza    EGLConfig  mGlConfig;
66f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza};
67f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
68f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza} // namespace android
69f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza
70f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#endif
71