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); 719e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza#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; 759e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza#else 769e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, 779e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza int alpha); 783f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void setupDimLayerBlending(int alpha); 799e56aa0fdb5f7121b9b975c6c16db103ea4d2fe9Dan Stoza#endif 8049457ac092071a8f964f7f69156093657ccdc3d0Mathias Agopian virtual void setupLayerTexturing(const Texture& texture); 813f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void setupLayerBlackedOut(); 8219733a32799f792125913e746e8644d16f8dc223Mathias Agopian virtual void setupFillWithColor(float r, float g, float b, float a); 83f008799d3753e52c10849824ff8146985ea66284Dan Stoza virtual mat4 setupColorTransform(const mat4& colorTransform); 843f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void disableTexturing(); 853f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void disableBlending(); 863f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 873f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual void drawMesh(const Mesh& mesh); 883f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 893f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual size_t getMaxTextureSize() const; 903f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian virtual size_t getMaxViewportDims() const; 913f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian}; 923f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 933f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 943f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian}; // namespace android 953f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// --------------------------------------------------------------------------- 963f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian 973f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#endif /* SF_GLES20RENDERENGINE_H_ */ 98