13f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian/* 23f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * Copyright 2013 The Android Open Source Project 33f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * 43f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 53f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * you may not use this file except in compliance with the License. 63f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * You may obtain a copy of the License at 73f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * 83f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 93f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * 103f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * Unless required by applicable law or agreed to in writing, software 113f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 123f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * See the License for the specific language governing permissions and 143f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian * limitations under the License. 153f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian */ 163f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 173f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 183f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#ifndef SF_GLES20RENDERENGINE_H_ 193f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#define SF_GLES20RENDERENGINE_H_ 203f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 213f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include <stdint.h> 223f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include <sys/types.h> 233f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 243f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include <GLES2/gl2.h> 25c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews#include <Transform.h> 263f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 273f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include "RenderEngine.h" 283f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include "ProgramCache.h" 293f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#include "Description.h" 303f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 313f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 323f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopiannamespace android { 333f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 343f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 353f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopianclass String8; 363f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopianclass Mesh; 3749457ac092071a8f964f7f69156093657ccdc3d0Mathias Agopianclass Texture; 383f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 393f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopianclass GLES20RenderEngine : public RenderEngine { 403f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian GLuint mProtectedTexName; 413f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian GLint mMaxViewportDims[2]; 423f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian GLint mMaxTextureSize; 43ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint mVpWidth; 44ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint mVpHeight; 45ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian 46ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian struct Group { 47ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint texture; 48ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint fbo; 49ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint width; 50ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian GLuint height; 51ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian mat4 colorTransform; 52ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian }; 533f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 543f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian Description mState; 55ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian Vector<Group> mGroupStack; 563f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 57458197de008be8fe561286b09f4edddb2f5c540aMathias Agopian virtual void bindImageAsFramebuffer(EGLImageKHR image, 58458197de008be8fe561286b09f4edddb2f5c540aMathias Agopian uint32_t* texName, uint32_t* fbName, uint32_t* status); 59458197de008be8fe561286b09f4edddb2f5c540aMathias Agopian virtual void unbindFramebuffer(uint32_t texName, uint32_t fbName); 60458197de008be8fe561286b09f4edddb2f5c540aMathias Agopian 613f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopianpublic: 623f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian GLES20RenderEngine(); 633f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 643f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopianprotected: 653f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual ~GLES20RenderEngine(); 663f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 673f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void dump(String8& result); 68c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza virtual void setViewportAndProjection(size_t vpw, size_t vph, 699e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza Rect sourceCrop, size_t hwh, bool yswap, 709e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza Transform::orientation_flags rotation); 719d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard#ifdef USE_HWC2 729e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, 739e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza float alpha) override; 749e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza virtual void setupDimLayerBlending(float alpha) override; 755d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter 765d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter // Color management related functions and state 775d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter void setColorMode(android_color_mode mode); 785d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter void setSourceDataSpace(android_dataspace source); 795d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter void setWideColor(bool hasWideColor); 805d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter bool usesWideColor(); 815d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter 825d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter // Current color mode of display using the render engine 835d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter android_color_mode mColorMode = HAL_COLOR_MODE_NATIVE; 845d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter 855d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter // Current dataspace of layer being rendered 865d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter android_dataspace mDataSpace = HAL_DATASPACE_V0_SRGB; 875d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter 885d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter // Indicate if wide-color mode is needed or not 895d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter bool mPlatformHasWideColor = false; 905d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter bool mDisplayHasWideColor = false; 915d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter bool mUseWideColor = false; 925d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter uint64_t mWideColorFrameCount = 0; 935d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter 945d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter // Currently only supporting sRGB and DisplayP3 color spaces 955d94389241cc651e6bd327ab80eba3ad476f3724Courtney Goeltzenleuchter mat4 mSrgbToDisplayP3; 969d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard#else 979d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, 989d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard int alpha); 999d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard virtual void setupDimLayerBlending(int alpha); 1009d96de49673cb6c916bfb797aad4f4e024ea73caFabien Sanglard#endif 10149457ac092071a8f964f7f69156093657ccdc3d0Mathias Agopian virtual void setupLayerTexturing(const Texture& texture); 1023f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void setupLayerBlackedOut(); 10319733a32799f792125913e746e8644d16f8dc223Mathias Agopian virtual void setupFillWithColor(float r, float g, float b, float a); 104f008799d3753e52c10849824ff8146985ea66284Dan Stoza virtual mat4 setupColorTransform(const mat4& colorTransform); 1053f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void disableTexturing(); 1063f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void disableBlending(); 1073f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 1083f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void drawMesh(const Mesh& mesh); 1093f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 1103f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual size_t getMaxTextureSize() const; 1113f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual size_t getMaxViewportDims() const; 1123f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian}; 1133f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 1143f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 1153f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian}; // namespace android 1163f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 1173f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 1183f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#endif /* SF_GLES20RENDERENGINE_H_ */ 119