emulator: opengl: Back-port GLES emulation from the master tree.
The modules here are only built when BUILD_EMULATOR_OPENGL is defined to true in your environment or your BoardConfig.mk (see tools/emulator/opengl/Android.mk) Change-Id: I5f32c35b4452fb5a7b4d5f9fc5870ec1da6032e6
This commit is contained in:
128
tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h
Normal file
128
tools/emulator/opengl/host/libs/libOpenglRender/FrameBuffer.h
Normal file
@@ -0,0 +1,128 @@
|
||||
/*
|
||||
* Copyright (C) 2011 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 _LIBRENDER_FRAMEBUFFER_H
|
||||
#define _LIBRENDER_FRAMEBUFFER_H
|
||||
|
||||
#include "libOpenglRender/render_api.h"
|
||||
#include "ColorBuffer.h"
|
||||
#include "RenderContext.h"
|
||||
#include "WindowSurface.h"
|
||||
#include <utils/threads.h>
|
||||
#include <map>
|
||||
#include <EGL/egl.h>
|
||||
#include <stdint.h>
|
||||
|
||||
typedef uint32_t HandleType;
|
||||
typedef std::map<HandleType, RenderContextPtr> RenderContextMap;
|
||||
typedef std::map<HandleType, WindowSurfacePtr> WindowSurfaceMap;
|
||||
typedef std::map<HandleType, ColorBufferPtr> ColorBufferMap;
|
||||
|
||||
struct FrameBufferCaps
|
||||
{
|
||||
bool hasGL2;
|
||||
bool has_eglimage_texture_2d;
|
||||
bool has_eglimage_renderbuffer;
|
||||
EGLint eglMajor;
|
||||
EGLint eglMinor;
|
||||
};
|
||||
|
||||
class FrameBuffer
|
||||
{
|
||||
public:
|
||||
static bool initialize(int width, int height);
|
||||
static bool setupSubWindow(FBNativeWindowType p_window,
|
||||
int x, int y,
|
||||
int width, int height, float zRot);
|
||||
static bool removeSubWindow();
|
||||
static void finalize();
|
||||
static FrameBuffer *getFB() { return s_theFrameBuffer; }
|
||||
|
||||
const FrameBufferCaps &getCaps() const { return m_caps; }
|
||||
|
||||
int getWidth() const { return m_width; }
|
||||
int getHeight() const { return m_height; }
|
||||
|
||||
HandleType createRenderContext(int p_config, HandleType p_share, bool p_isGL2 = false);
|
||||
HandleType createWindowSurface(int p_config, int p_width, int p_height);
|
||||
HandleType createColorBuffer(int p_width, int p_height, GLenum p_internalFormat);
|
||||
void DestroyRenderContext(HandleType p_context);
|
||||
void DestroyWindowSurface(HandleType p_surface);
|
||||
void DestroyColorBuffer(HandleType p_colorbuffer);
|
||||
|
||||
bool bindContext(HandleType p_context, HandleType p_drawSurface, HandleType p_readSurface);
|
||||
bool setWindowSurfaceColorBuffer(HandleType p_surface, HandleType p_colorbuffer);
|
||||
bool flushWindowSurfaceColorBuffer(HandleType p_surface);
|
||||
bool bindColorBufferToTexture(HandleType p_colorbuffer);
|
||||
bool bindColorBufferToRenderbuffer(HandleType p_colorbuffer);
|
||||
bool updateColorBuffer(HandleType p_colorbuffer,
|
||||
int x, int y, int width, int height,
|
||||
GLenum format, GLenum type, void *pixels);
|
||||
|
||||
bool post(HandleType p_colorbuffer, bool needLock = true);
|
||||
bool repost();
|
||||
|
||||
EGLDisplay getDisplay() const { return m_eglDisplay; }
|
||||
EGLNativeWindowType getSubWindow() const { return m_subWin; }
|
||||
bool bind_locked();
|
||||
bool unbind_locked();
|
||||
|
||||
void setDisplayRotation(float zRot) {
|
||||
m_zRot = zRot;
|
||||
repost();
|
||||
}
|
||||
|
||||
private:
|
||||
FrameBuffer(int p_width, int p_height);
|
||||
~FrameBuffer();
|
||||
HandleType genHandle();
|
||||
bool bindSubwin_locked();
|
||||
void initGLState();
|
||||
|
||||
private:
|
||||
static FrameBuffer *s_theFrameBuffer;
|
||||
static HandleType s_nextHandle;
|
||||
int m_x;
|
||||
int m_y;
|
||||
int m_width;
|
||||
int m_height;
|
||||
android::Mutex m_lock;
|
||||
FBNativeWindowType m_nativeWindow;
|
||||
FrameBufferCaps m_caps;
|
||||
EGLDisplay m_eglDisplay;
|
||||
RenderContextMap m_contexts;
|
||||
WindowSurfaceMap m_windows;
|
||||
ColorBufferMap m_colorbuffers;
|
||||
|
||||
EGLSurface m_eglSurface;
|
||||
EGLContext m_eglContext;
|
||||
EGLSurface m_pbufSurface;
|
||||
EGLContext m_pbufContext;
|
||||
|
||||
EGLContext m_prevContext;
|
||||
EGLSurface m_prevReadSurf;
|
||||
EGLSurface m_prevDrawSurf;
|
||||
EGLNativeWindowType m_subWin;
|
||||
EGLNativeDisplayType m_subWinDisplay;
|
||||
EGLConfig m_eglConfig;
|
||||
HandleType m_lastPostedColorBuffer;
|
||||
float m_zRot;
|
||||
bool m_eglContextInitialized;
|
||||
|
||||
int m_statsNumFrames;
|
||||
long long m_statsStartTime;
|
||||
bool m_fpsStats;
|
||||
};
|
||||
#endif
|
||||
Reference in New Issue
Block a user