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