Files
android_development/tools/emulator/opengl/host/libs/libOpenglRender/WindowSurface.h
Guy Zadickario 8c962dce6c opengles emulator: replace the readback at end of frame with blit
That replaces the readback to host we do at the end of each frame
with two blits on the GPU, one to copy the pixels into a texture
and another to render the texture to another in order to flip
the image.

Change-Id: I7e0e10493d38944d0b613e245023f34236d3dfc4
2011-08-16 10:52:19 +03:00

73 lines
2.0 KiB
C++

/*
* 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_WINDOWSURFACE_H
#define _LIBRENDER_WINDOWSURFACE_H
#include "ColorBuffer.h"
#include "RenderContext.h"
#include "FBConfig.h"
#include "SmartPtr.h"
#include "FixedBuffer.h"
#include <EGL/egl.h>
#include <GLES/gl.h>
enum SurfaceBindType {
SURFACE_BIND_READ,
SURFACE_BIND_DRAW,
SURFACE_BIND_READDRAW
};
class WindowSurface
{
public:
static WindowSurface *create(int p_config, int p_width, int p_height);
~WindowSurface();
EGLSurface getEGLSurface() const { return m_eglSurface; }
void setColorBuffer(ColorBufferPtr p_colorBuffer);
void flushColorBuffer();
void bind(RenderContextPtr p_ctx, SurfaceBindType p_bindType);
private:
WindowSurface();
void copyToColorBuffer(); // copy pbuffer content with readback+download
void blitToColorBuffer(); // copy pbuffer content with texload and blit
bool resizePbuffer(unsigned int p_width, unsigned int p_height);
private:
GLuint m_fbObj; // GLES Framebuffer object (when EGLimage is used)
GLuint m_depthRB;
GLuint m_stencilRB;
EGLSurface m_eglSurface;
ColorBufferPtr m_attachedColorBuffer;
RenderContextPtr m_readContext;
RenderContextPtr m_drawContext;
GLuint m_width;
GLuint m_height;
GLuint m_pbufWidth;
GLuint m_pbufHeight;
bool m_useEGLImage;
bool m_useBindToTexture;
FixedBuffer m_xferBuffer;
FixedBuffer m_xUpdateBuf;
const FBConfig *m_fbconf;
};
typedef SmartPtr<WindowSurface> WindowSurfacePtr;
#endif