summaryrefslogtreecommitdiffstats
path: root/opengl/libagl
diff options
context:
space:
mode:
authorArne Coucheron <arco68@gmail.com>2011-12-18 07:24:45 +0100
committerArne Coucheron <arco68@gmail.com>2011-12-19 07:11:11 +0100
commit78c1d400ae7b50efbf48da8198022f877de60bb8 (patch)
tree2850a53b7c84f0fe7366b64ebd6cdb2690a8f6f6 /opengl/libagl
parent6abe6e0aab530f74f18fa9d4a92c50aaf1c3b653 (diff)
downloadframeworks_base-78c1d400ae7b50efbf48da8198022f877de60bb8.zip
frameworks_base-78c1d400ae7b50efbf48da8198022f877de60bb8.tar.gz
frameworks_base-78c1d400ae7b50efbf48da8198022f877de60bb8.tar.bz2
opengl/libs/EGL: Bring back eglRenderBufferANDROID extention
This change brings back the eglGetRenderBufferANDROID extension Define EGL_EGLEXT_PROTOTYPES in order to be able to use this extension. Revert "cleanup EGL a bit. remove unused extension." This reverts commit 9d75f1341524910b00d35dd4eeb426d7e7791f6e. Change-Id: I8b3805157cb1f72af507bc823d16910b738cec4c
Diffstat (limited to 'opengl/libagl')
-rw-r--r--opengl/libagl/Android.mk3
-rw-r--r--opengl/libagl/egl.cpp42
2 files changed, 45 insertions, 0 deletions
diff --git a/opengl/libagl/Android.mk b/opengl/libagl/Android.mk
index ce55093..33ecbe8 100644
--- a/opengl/libagl/Android.mk
+++ b/opengl/libagl/Android.mk
@@ -47,6 +47,9 @@ endif
ifeq ($(TARGET_HAVE_TEGRA_ERRATA_657451),true)
LOCAL_CFLAGS += -DHAVE_TEGRA_ERRATA_657451
endif
+ifeq ($(BOARD_USES_QCOM_HARDWARE),true)
+ LOCAL_CFLAGS += -DQCOM_HARDWARE
+endif
LOCAL_C_INCLUDES += bionic/libc/private
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/egl
diff --git a/opengl/libagl/egl.cpp b/opengl/libagl/egl.cpp
index 6d4098c..4c6d306 100644
--- a/opengl/libagl/egl.cpp
+++ b/opengl/libagl/egl.cpp
@@ -165,6 +165,9 @@ struct egl_surface_t
virtual EGLint getSwapBehavior() const;
virtual EGLBoolean swapBuffers();
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
+#ifdef QCOM_HARDWARE
+ virtual EGLClientBuffer getRenderBuffer() const;
+#endif
protected:
GGLSurface depth;
};
@@ -208,6 +211,11 @@ EGLBoolean egl_surface_t::setSwapRectangle(
{
return EGL_FALSE;
}
+#ifdef QCOM_HARDWARE
+EGLClientBuffer egl_surface_t::getRenderBuffer() const {
+ return 0;
+}
+#endif
// ----------------------------------------------------------------------------
@@ -233,6 +241,9 @@ struct egl_window_surface_v2_t : public egl_surface_t
virtual EGLint getRefreshRate() const;
virtual EGLint getSwapBehavior() const;
virtual EGLBoolean setSwapRectangle(EGLint l, EGLint t, EGLint w, EGLint h);
+#ifdef QCOM_HARDWARE
+ virtual EGLClientBuffer getRenderBuffer() const;
+#endif
private:
status_t lock(ANativeWindowBuffer* buf, int usage, void** vaddr);
@@ -571,6 +582,13 @@ EGLBoolean egl_window_surface_v2_t::setSwapRectangle(
return EGL_TRUE;
}
+#ifdef QCOM_HARDWARE
+EGLClientBuffer egl_window_surface_v2_t::getRenderBuffer() const
+{
+ return buffer;
+}
+#endif
+
EGLBoolean egl_window_surface_v2_t::bindDrawSurface(ogles_context_t* gl)
{
GGLSurface buffer;
@@ -800,6 +818,9 @@ static char const * const gExtensionsString =
// "KHR_image_pixmap "
"EGL_ANDROID_image_native_buffer "
"EGL_ANDROID_swap_rectangle "
+#ifdef QCOM_HARDWARE
+ "EGL_ANDROID_get_render_buffer "
+#endif
;
// ----------------------------------------------------------------------------
@@ -852,6 +873,10 @@ static const extention_map_t gExtentionMap[] = {
(__eglMustCastToProperFunctionPointerType)&eglDestroyImageKHR },
{ "eglSetSwapRectangleANDROID",
(__eglMustCastToProperFunctionPointerType)&eglSetSwapRectangleANDROID },
+#ifdef QCOM_HARDWARE
+ { "eglGetRenderBufferANDROID",
+ (__eglMustCastToProperFunctionPointerType)&eglGetRenderBufferANDROID },
+#endif
};
/*
@@ -2077,3 +2102,20 @@ EGLBoolean eglSetSwapRectangleANDROID(EGLDisplay dpy, EGLSurface draw,
return EGL_TRUE;
}
+
+#ifdef QCOM_HARDWARE
+EGLClientBuffer eglGetRenderBufferANDROID(EGLDisplay dpy, EGLSurface draw)
+{
+ if (egl_display_t::is_valid(dpy) == EGL_FALSE)
+ return setError(EGL_BAD_DISPLAY, (EGLClientBuffer)0);
+
+ egl_surface_t* d = static_cast<egl_surface_t*>(draw);
+ if (!d->isValid())
+ return setError(EGL_BAD_SURFACE, (EGLClientBuffer)0);
+ if (d->dpy != dpy)
+ return setError(EGL_BAD_DISPLAY, (EGLClientBuffer)0);
+
+ // post the surface
+ return d->getRenderBuffer();
+}
+#endif