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,
69c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews            Rect sourceCrop, size_t hwh, bool yswap, Transform::orientation_flags rotation);
703f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void setupLayerBlending(bool premultipliedAlpha, bool opaque, int alpha);
713f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void setupDimLayerBlending(int alpha);
7249457ac092071a8f964f7f69156093657ccdc3d0Mathias Agopian    virtual void setupLayerTexturing(const Texture& texture);
733f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void setupLayerBlackedOut();
7419733a32799f792125913e746e8644d16f8dc223Mathias Agopian    virtual void setupFillWithColor(float r, float g, float b, float a);
753f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void disableTexturing();
763f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void disableBlending();
773f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian
783f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual void drawMesh(const Mesh& mesh);
793f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian
80ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian    virtual void beginGroup(const mat4& colorTransform);
81ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian    virtual void endGroup();
82ff2ed70fa30f04b90dd1a2c06ec2319e157152d7Mathias Agopian
833f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual size_t getMaxTextureSize() const;
843f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian    virtual size_t getMaxViewportDims() const;
853f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian};
863f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian
873f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// ---------------------------------------------------------------------------
883f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian}; // namespace android
893f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian// ---------------------------------------------------------------------------
903f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian
913f84483382be2d528918cc1a6fbc6a7d68e0b181Mathias Agopian#endif /* SF_GLES20RENDERENGINE_H_ */
92