C++程序  |  58行  |  1.92 KB

/*
 * Copyright (C) 2013 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
#ifndef RENDERER_H
#define RENDERER_H

#include <EGL/egl.h>
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>

class Renderer {
public:
    Renderer(EGLNativeWindowType window, bool offscreen);
    virtual bool setUp(int workload);
    virtual bool tearDown();
    bool eglSetUp();
    void eglTearDown();

    bool draw();
    virtual void drawWorkload() = 0;
    virtual ~Renderer() {};
    static const int OFFSCREEN_INNER_FRAMES = 100;
    static const int OFFSCREEN_GRID_SIZE = 10;
    bool mOffscreen;
protected:
    EGLDisplay mEglDisplay;
    EGLSurface mEglSurface;
    EGLContext mEglContext;
    EGLConfig mGlConfig;
    GLuint mProgramId;
    EGLint mWidth;
    EGLint mHeight;
    int mFboWidth;// Frame buffer width
    int mFboHeight;// Frame buffer height
    GLuint mFboId;// Frame buffer id
    GLuint mFboDepthId;// Depth buffer id
    GLuint mFboTexId;// Frame buffer texture id
    GLuint mFboProgId;// Frame buffer program id
    GLuint mFboTexUniformHandle;// Frame buffer texture uniform handle
    GLuint mFboXOffsetUniformHandle;// Frame buffer x offset uniform handle
    GLuint mFboYOffsetUniformHandle;// Frame buffer y offset uniform handle
    GLuint mFboPositionHandle;// Frame buffer position handle
    GLuint mFboTexCoordHandle;// Frame buffer texture coordinate handle
private:
    EGLNativeWindowType mWindow;
};
#endif