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