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/GraphicBufferAlloc.h> 189c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <gui/GLConsumer.h> 19e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/Surface.h> 20b7daa0dadebdb043d63e585975a128c5fc087168Mathias Agopian#include <gui/SurfaceControl.h> 219c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 229c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <EGL/egl.h> 239c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis#include <GLES2/gl2.h> 249c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 259c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisnamespace android { 269c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 279c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass SurfaceComposerClient; 289c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass SurfaceControl; 299c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 309c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisenum { MAX_SHADER_LINES = 128 }; 319c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 329c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisstruct ShaderDesc { 339c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* name; 349c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* vertexShader[MAX_SHADER_LINES]; 359c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const char* fragmentShader[MAX_SHADER_LINES]; 369c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis}; 379c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 389c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisclass GLHelper { 399c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 409c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennispublic: 419c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 429c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis enum { DITHER_KERNEL_SIZE = 4 }; 439c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 449c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLHelper(); 459c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 469c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis ~GLHelper(); 479c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 489c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool setUp(const ShaderDesc* shaderDescs, size_t numShaders); 499c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 509c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis void tearDown(); 519c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 529c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool makeCurrent(EGLSurface surface); 539c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 549c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createSurfaceTexture(uint32_t w, uint32_t h, 559c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer>* surfaceTexture, EGLSurface* surface, 569c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint* name); 579c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 589c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createWindowSurface(uint32_t w, uint32_t h, 599c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<SurfaceControl>* surfaceControl, EGLSurface* surface); 609c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 619c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis void destroySurface(EGLSurface* surface); 629c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 639c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool swapBuffers(EGLSurface surface); 649c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 659c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool getShaderProgram(const char* name, GLuint* outPgm); 669c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 679c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool getDitherTexture(GLuint* outTexName); 689c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 699c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennisprivate: 709c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 719c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool createNamedSurfaceTexture(GLuint name, uint32_t w, uint32_t h, 729c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer>* surfaceTexture, EGLSurface* surface); 739c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 749c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool computeWindowScale(uint32_t w, uint32_t h, float* scale); 759c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 769c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis bool setUpShaders(const ShaderDesc* shaderDescs, size_t numShaders); 779c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 789c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GraphicBufferAlloc> mGraphicBufferAlloc; 799c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 809c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLDisplay mDisplay; 819c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLContext mContext; 829c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLSurface mDummySurface; 839c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<GLConsumer> mDummyGLConsumer; 849c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis EGLConfig mConfig; 859c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 869c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis sp<SurfaceComposerClient> mSurfaceComposerClient; 879c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 889c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint* mShaderPrograms; 899c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis const ShaderDesc* mShaderDescs; 909c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis size_t mNumShaders; 919c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 929c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis GLuint mDitherTexture; 939c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis}; 949c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis 959c183f2493222000fa512d927cfde3f4c748eda0Jamie Gennis} // namespace android 96