aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/opengl/host/include/libOpenglRender
diff options
context:
space:
mode:
authorJesse Hall <jessehall@google.com>2012-05-09 15:45:23 -0700
committerJesse Hall <jessehall@google.com>2012-05-10 10:06:56 -0700
commitab800d7b0188e840407a61fa931f678d2ef46de6 (patch)
tree7fd509cfa7f2e005f9b162f9200677c14fbd0fff /emulator/opengl/host/include/libOpenglRender
parent347fec44f5ebd8e037a47f66256eb739ade9aa6c (diff)
downloadsdk-ab800d7b0188e840407a61fa931f678d2ef46de6.zip
sdk-ab800d7b0188e840407a61fa931f678d2ef46de6.tar.gz
sdk-ab800d7b0188e840407a61fa931f678d2ef46de6.tar.bz2
Allow frame callback to be enabled/disabled
Since per-frame readback is slow and clients don't need it on all the time, this change allows the callback to be registered after initialization, and allows it to be disabled later. Change-Id: Ic73d4515d302a0981ee0c80b9e6f9ba5c84b82ae
Diffstat (limited to 'emulator/opengl/host/include/libOpenglRender')
-rw-r--r--emulator/opengl/host/include/libOpenglRender/render_api.h69
1 files changed, 35 insertions, 34 deletions
diff --git a/emulator/opengl/host/include/libOpenglRender/render_api.h b/emulator/opengl/host/include/libOpenglRender/render_api.h
index ebb02eb..4fe54f4 100644
--- a/emulator/opengl/host/include/libOpenglRender/render_api.h
+++ b/emulator/opengl/host/include/libOpenglRender/render_api.h
@@ -41,38 +41,6 @@ extern "C" {
ret name args
#endif
-/* If a function with this signature is passed to initOpenGLRenderer(),
- * it will be called by the renderer just before each new frame is displayed,
- * providing a copy of the framebuffer contents.
- *
- * The callback will be called from one of the renderer's threads, so will
- * probably need synchronization on any data structures it modifies. The
- * pixels buffer may be overwritten as soon as the callback returns; if it needs
- * the pixels afterwards it must copy them.
- *
- * The pixels buffer is intentionally not const: the callback may modify the
- * data without copying to another buffer if it wants, e.g. in-place RGBA to RGB
- * conversion, or in-place y-inversion.
- *
- * Parameters are:
- * context The pointer optionally provided when the callback was
- * registered. The client can use this to pass whatever
- * information it wants to the callback.
- * width, height Dimensions of the image, in pixels. Rows are tightly packed;
- * there is no inter-row padding.
- * ydir Indicates row order: 1 means top-to-bottom order, -1 means
- * bottom-to-top order.
- * format, type Format and type GL enums, as used in glTexImage2D() or
- * glReadPixels(), describing the pixel format.
- * pixels The framebuffer image.
- *
- * In the first implementation, ydir is always -1 (bottom to top), format and
- * type are always GL_RGBA and GL_UNSIGNED_BYTE, and the width and height will
- * always be the same as the ones passed to initOpenGLRenderer().
- */
-typedef void (*OnPostFn)(void* context, int width, int height, int ydir,
- int format, int type, unsigned char* pixels);
-
/* initLibrary - initialize the library and tries to load the corresponding
* GLES translator libraries. This function must be called before anything
* else to ensure that everything works. If it returns an error, then
@@ -98,8 +66,7 @@ DECL(int, setStreamMode, (int mode));
* This function is *NOT* thread safe and should be called first
* to initialize the renderer after initLibrary().
*/
-DECL(int, initOpenGLRenderer, (int width, int height, int portNum,
- OnPostFn onPost, void* onPostContext));
+DECL(int, initOpenGLRenderer, (int width, int height, int portNum));
/* getHardwareStrings - describe the GPU hardware and driver.
* The underlying GL's vendor/renderer/version strings are returned to the
@@ -108,6 +75,40 @@ DECL(int, initOpenGLRenderer, (int width, int height, int portNum,
DECL(void, getHardwareStrings, (const char** vendor, const char** renderer,
const char** version));
+/* A per-frame callback can be registered with setPostCallback(); to remove it
+ * pass NULL for both parameters. While a callback is registered, the renderer
+ * will call it just before each new frame is displayed, providing a copy of
+ * the framebuffer contents.
+ *
+ * The callback will be called from one of the renderer's threads, so will
+ * probably need synchronization on any data structures it modifies. The
+ * pixels buffer may be overwritten as soon as the callback returns; if it
+ * needs the pixels afterwards it must copy them.
+ *
+ * The pixels buffer is intentionally not const: the callback may modify the
+ * data without copying to another buffer if it wants, e.g. in-place RGBA to
+ * RGB conversion, or in-place y-inversion.
+ *
+ * Parameters are:
+ * context The pointer optionally provided when the callback was
+ * registered. The client can use this to pass whatever
+ * information it wants to the callback.
+ * width, height Dimensions of the image, in pixels. Rows are tightly
+ * packed; there is no inter-row padding.
+ * ydir Indicates row order: 1 means top-to-bottom order, -1 means
+ * bottom-to-top order.
+ * format, type Format and type GL enums, as used in glTexImage2D() or
+ * glReadPixels(), describing the pixel format.
+ * pixels The framebuffer image.
+ *
+ * In the first implementation, ydir is always -1 (bottom to top), format and
+ * type are always GL_RGBA and GL_UNSIGNED_BYTE, and the width and height will
+ * always be the same as the ones passed to initOpenGLRenderer().
+ */
+typedef void (*OnPostFn)(void* context, int width, int height, int ydir,
+ int format, int type, unsigned char* pixels);
+DECL(void, setPostCallback, (OnPostFn onPost, void* onPostContext));
+
/* createOpenGLSubwindow -
* Create a native subwindow which is a child of 'window'
* to be used for framebuffer display.