19c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis/* 29c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Copyright (C) 2012 The Android Open Source Project 39c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * 49c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Licensed under the Apache License, Version 2.0 (the "License"); 59c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * you may not use this file except in compliance with the License. 69c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * You may obtain a copy of the License at 79c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * 89c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * http://www.apache.org/licenses/LICENSE-2.0 99c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * 109c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * Unless required by applicable law or agreed to in writing, software 119c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * distributed under the License is distributed on an "AS IS" BASIS, 129c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * See the License for the specific language governing permissions and 149c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis * limitations under the License. 159c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis */ 169c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 179c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <gui/GLConsumer.h> 18e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h> 19b7daa0dadebdb043d63e585975a128c5fc087168Mathias Agopian#include <gui/SurfaceControl.h> 209c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 219c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <EGL/egl.h> 229c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <GLES2/gl2.h> 239c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 249c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisnamespace android { 259c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 269c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass SurfaceComposerClient; 279c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass SurfaceControl; 289c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 299c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisenum { MAX_SHADER_LINES = 128 }; 309c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 319c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisstruct ShaderDesc { 329c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* name; 339c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* vertexShader[MAX_SHADER_LINES]; 349c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* fragmentShader[MAX_SHADER_LINES]; 359c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis}; 369c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 379c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass GLHelper { 389c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 399c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennispublic: 409c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 419c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis enum { DITHER_KERNEL_SIZE = 4 }; 429c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 439c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLHelper(); 449c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 459c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis ~GLHelper(); 469c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 479c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool setUp(const ShaderDesc* shaderDescs, size_t numShaders); 489c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 499c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis void tearDown(); 509c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 519c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool makeCurrent(EGLSurface surface); 529c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 539c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createSurfaceTexture(uint32_t w, uint32_t h, 549c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer>* surfaceTexture, EGLSurface* surface, 559c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint* name); 569c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 579c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createWindowSurface(uint32_t w, uint32_t h, 589c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<SurfaceControl>* surfaceControl, EGLSurface* surface); 599c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 609c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis void destroySurface(EGLSurface* surface); 619c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 629c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool swapBuffers(EGLSurface surface); 639c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 649c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool getShaderProgram(const char* name, GLuint* outPgm); 659c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 669c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool getDitherTexture(GLuint* outTexName); 679c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 689c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisprivate: 699c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 709c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createNamedSurfaceTexture(GLuint name, uint32_t w, uint32_t h, 719c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer>* surfaceTexture, EGLSurface* surface); 729c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 739c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool computeWindowScale(uint32_t w, uint32_t h, float* scale); 749c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 759c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool setUpShaders(const ShaderDesc* shaderDescs, size_t numShaders); 769c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 779c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLDisplay mDisplay; 789c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLContext mContext; 799c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLSurface mDummySurface; 809c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer> mDummyGLConsumer; 819c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLConfig mConfig; 829c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 839c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<SurfaceComposerClient> mSurfaceComposerClient; 849c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 859c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint* mShaderPrograms; 869c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const ShaderDesc* mShaderDescs; 879c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis size_t mNumShaders; 889c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 899c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint mDitherTexture; 909c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis}; 919c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 929c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis} // namespace android 93