summaryrefslogtreecommitdiffstats
path: root/widget/android/AndroidGraphicBuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'widget/android/AndroidGraphicBuffer.h')
-rw-r--r--widget/android/AndroidGraphicBuffer.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/widget/android/AndroidGraphicBuffer.h b/widget/android/AndroidGraphicBuffer.h
new file mode 100644
index 000000000..269f8680a
--- /dev/null
+++ b/widget/android/AndroidGraphicBuffer.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef AndroidGraphicBuffer_h_
+#define AndroidGraphicBuffer_h_
+
+#include "gfxTypes.h"
+#include "nsRect.h"
+
+typedef void* EGLImageKHR;
+typedef void* EGLClientBuffer;
+
+namespace mozilla {
+
+/**
+ * This class allows access to Android's direct texturing mechanism. Locking
+ * the buffer gives you a pointer you can read/write to directly. It is fully
+ * threadsafe, but you probably really want to use the AndroidDirectTexture
+ * class which will handle double buffering.
+ *
+ * In order to use the buffer in OpenGL, just call Bind() and it will attach
+ * to whatever texture is bound to GL_TEXTURE_2D.
+ */
+class AndroidGraphicBuffer
+{
+public:
+ enum {
+ UsageSoftwareRead = 1,
+ UsageSoftwareWrite = 1 << 1,
+ UsageTexture = 1 << 2,
+ UsageTarget = 1 << 3,
+ Usage2D = 1 << 4
+ };
+
+ AndroidGraphicBuffer(uint32_t width, uint32_t height, uint32_t usage, gfxImageFormat format);
+ virtual ~AndroidGraphicBuffer();
+
+ int Lock(uint32_t usage, unsigned char **bits);
+ int Lock(uint32_t usage, const nsIntRect& rect, unsigned char **bits);
+ int Unlock();
+ bool Reallocate(uint32_t aWidth, uint32_t aHeight, gfxImageFormat aFormat);
+
+ uint32_t Width() { return mWidth; }
+ uint32_t Height() { return mHeight; }
+
+ bool Bind();
+
+ static bool IsBlacklisted();
+
+private:
+ uint32_t mWidth;
+ uint32_t mHeight;
+ uint32_t mUsage;
+ gfxImageFormat mFormat;
+
+ bool EnsureInitialized();
+ bool EnsureEGLImage();
+
+ void DestroyBuffer();
+ bool EnsureBufferCreated();
+
+ uint32_t GetAndroidUsage(uint32_t aUsage);
+ uint32_t GetAndroidFormat(gfxImageFormat aFormat);
+
+ void *mHandle;
+ void *mEGLImage;
+};
+
+} /* mozilla */
+#endif /* AndroidGraphicBuffer_h_ */