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() : 3853390e1e8c33ebee5bb8100e846f5263ba05ff73Pablo Ceballos mDisplaySecs(0), 39f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza mEglDisplay(EGL_NO_DISPLAY), 40f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza mEglSurface(EGL_NO_SURFACE), 4153390e1e8c33ebee5bb8100e846f5263ba05ff73Pablo Ceballos mEglContext(EGL_NO_CONTEXT), 4253390e1e8c33ebee5bb8100e846f5263ba05ff73Pablo Ceballos mGlConfig(NULL) { 43f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza } 44f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 45f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual void SetUp(); 46f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual void TearDown(); 47f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 48f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual EGLint const* getConfigAttribs(); 49f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual EGLint const* getContextAttribs(); 50f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual EGLint getSurfaceWidth(); 51f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual EGLint getSurfaceHeight(); 52f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza virtual EGLSurface createWindowSurface(EGLDisplay display, EGLConfig config, 53f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza sp<ANativeWindow>& window) const; 54f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 55f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza ::testing::AssertionResult checkPixel(int x, int y, 56f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza int r, int g, int b, int a, int tolerance = 2); 57f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza ::testing::AssertionResult assertRectEq(const Rect &r1, const Rect &r2, 58f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza int tolerance = 1); 59f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 60f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza int mDisplaySecs; 61f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza sp<SurfaceComposerClient> mComposerClient; 62f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza sp<SurfaceControl> mSurfaceControl; 63f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 64f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza EGLDisplay mEglDisplay; 65f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza EGLSurface mEglSurface; 66f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza EGLContext mEglContext; 67f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza EGLConfig mGlConfig; 68f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza}; 69f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 70f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza} // namespace android 71f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza 72f3730fb8f7da368740f9e5ed2603b405aeb4be72Dan Stoza#endif 73