summaryrefslogtreecommitdiffstats
path: root/libs/surfaceflinger/LayerBitmap.cpp
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2009-05-04 14:17:04 -0700
committerMathias Agopian <mathias@google.com>2009-05-04 14:17:04 -0700
commitdff8e58d47ede6e748c0b02e128ca33b42a4f362 (patch)
tree716d70cda74aa625d6e67c4debc2eb7c6b81bfc9 /libs/surfaceflinger/LayerBitmap.cpp
parentfa6eda01a9f3df0102ce6a65302c8674cc9c7e50 (diff)
downloadframeworks_base-dff8e58d47ede6e748c0b02e128ca33b42a4f362.zip
frameworks_base-dff8e58d47ede6e748c0b02e128ca33b42a4f362.tar.gz
frameworks_base-dff8e58d47ede6e748c0b02e128ca33b42a4f362.tar.bz2
update surfaceflinger, libui and libagl to the new gralloc api
- Currently the lock/unlock path is naive and is done for each drawing operation (glDrawElements and glDrawArrays). this should be improved eventually. - factor all the lock/unlock code in SurfaceBuffer. - fixed "showupdate" so it works even when we don't have preserving eglSwapBuffers(). - improved the situation with the dirty-region and fixed a problem that caused GL apps to not update. - make use of LightRefBase() where needed, instead of duplicating its implementation - add LightRefBase::getStrongCount() - renamed EGLNativeWindowSurface.cpp to FramebufferNativeWindow.cpp - disabled copybits test, since it clashes with the new gralloc api - Camera/Video will be fixed later when we rework the overlay apis
Diffstat (limited to 'libs/surfaceflinger/LayerBitmap.cpp')
-rw-r--r--libs/surfaceflinger/LayerBitmap.cpp43
1 files changed, 14 insertions, 29 deletions
diff --git a/libs/surfaceflinger/LayerBitmap.cpp b/libs/surfaceflinger/LayerBitmap.cpp
index d633a2d..38d4bcf 100644
--- a/libs/surfaceflinger/LayerBitmap.cpp
+++ b/libs/surfaceflinger/LayerBitmap.cpp
@@ -52,10 +52,7 @@ Buffer::Buffer(uint32_t w, uint32_t h, PixelFormat format, uint32_t flags)
Buffer::~Buffer()
{
if (handle) {
- BufferAllocator& allocator = BufferAllocator::get();
- if (usage & BufferAllocator::USAGE_SW_READ_MASK) {
- allocator.unmap(handle);
- }
+ BufferAllocator& allocator(BufferAllocator::get());
allocator.free(handle);
}
}
@@ -107,9 +104,6 @@ status_t Buffer::initSize(uint32_t w, uint32_t h)
err = allocator.alloc(w, h, format, usage, &handle, &stride);
if (err == NO_ERROR) {
- if (usage & BufferAllocator::USAGE_SW_READ_MASK) {
- err = allocator.map(handle, &bits);
- }
if (err == NO_ERROR) {
width = w;
height = h;
@@ -120,31 +114,22 @@ status_t Buffer::initSize(uint32_t w, uint32_t h)
return err;
}
-status_t Buffer::getBitmapSurface(copybit_image_t* img) const
+status_t Buffer::lock(GGLSurface* sur, uint32_t usage)
{
- img->w = stride ?: width;
- img->h = mVStride ?: height;
- img->format = format;
-
- // FIXME: this should use a native_handle
- img->offset = 0;
- img->base = bits;
- img->fd = getHandle()->data[0];
-
- return NO_ERROR;
+ status_t res = SurfaceBuffer::lock(usage);
+ if (res == NO_ERROR && sur) {
+ sur->version = sizeof(GGLSurface);
+ sur->width = width;
+ sur->height = height;
+ sur->stride = stride;
+ sur->format = format;
+ sur->vstride = mVStride;
+ sur->data = static_cast<GGLubyte*>(bits);
+ }
+ return res;
}
-status_t Buffer::getBitmapSurface(GGLSurface* sur) const
-{
- sur->version = sizeof(GGLSurface);
- sur->width = width;
- sur->height = height;
- sur->stride = stride;
- sur->format = format;
- sur->vstride = mVStride;
- sur->data = static_cast<GGLubyte*>(bits);
- return NO_ERROR;
-}
+
// ===========================================================================
// LayerBitmap