GLHelper.h revision e3c697fb929c856b59fa56a8e05a2a7eba187c3d
17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2012 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) * 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) * See the License for the specific language governing permissions and 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <gui/GraphicBufferAlloc.h> 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <gui/GLConsumer.h> 1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <gui/Surface.h> 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <EGL/egl.h> 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <GLES2/gl2.h> 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android { 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class SurfaceComposerClient; 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class SurfaceControl; 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)enum { MAX_SHADER_LINES = 128 }; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ShaderDesc { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* name; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* vertexShader[MAX_SHADER_LINES]; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* fragmentShader[MAX_SHADER_LINES]; 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class GLHelper { 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)public: 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) enum { DITHER_KERNEL_SIZE = 4 }; 4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GLHelper(); 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ~GLHelper(); 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool setUp(const ShaderDesc* shaderDescs, size_t numShaders); 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void tearDown(); 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool makeCurrent(EGLSurface surface); 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool createSurfaceTexture(uint32_t w, uint32_t h, 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) sp<GLConsumer>* surfaceTexture, EGLSurface* surface, 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GLuint* name); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool createWindowSurface(uint32_t w, uint32_t h, 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) sp<SurfaceControl>* surfaceControl, EGLSurface* surface); 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void destroySurface(EGLSurface* surface); 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool swapBuffers(EGLSurface surface); 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool getShaderProgram(const char* name, GLuint* outPgm); 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool getDitherTexture(GLuint* outTexName); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)private: 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool createNamedSurfaceTexture(GLuint name, uint32_t w, uint32_t h, 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) sp<GLConsumer>* surfaceTexture, EGLSurface* surface); 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool computeWindowScale(uint32_t w, uint32_t h, float* scale); 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool setUpShaders(const ShaderDesc* shaderDescs, size_t numShaders); 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) sp<GraphicBufferAlloc> mGraphicBufferAlloc; 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EGLDisplay mDisplay; 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EGLContext mContext; 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) EGLSurface mDummySurface; 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch sp<GLConsumer> mDummyGLConsumer; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EGLConfig mConfig; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<SurfaceComposerClient> mSurfaceComposerClient; 864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 8768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) GLuint* mShaderPrograms; 8868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const ShaderDesc* mShaderDescs; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t mNumShaders; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GLuint mDitherTexture; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace android 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch