OSDN Git Service

add support for RGBX_8888 surfaces in SurfaceFlinger
authorMathias Agopian <mathias@google.com>
Tue, 15 Sep 2009 01:10:30 +0000 (18:10 -0700)
committerMathias Agopian <mathias@google.com>
Tue, 15 Sep 2009 01:10:30 +0000 (18:10 -0700)
libs/surfaceflinger/Buffer.cpp
libs/surfaceflinger/Layer.cpp
libs/surfaceflinger/LayerBase.cpp

index 4a7c55e..65650aa 100644 (file)
@@ -106,6 +106,9 @@ status_t Buffer::initSize(uint32_t w, uint32_t h, PixelFormat format,
         // the requested flags should be honored.
         usage = reqUsage | BufferAllocator::USAGE_HW_TEXTURE;
     }
+    
+    if (format == PIXEL_FORMAT_RGBX_8888)
+        format = PIXEL_FORMAT_RGBA_8888;
 
     err = allocator.alloc(w, h, format, usage, &handle, &stride);
     if (err == NO_ERROR) {
index 6275910..1e7f1e6 100644 (file)
@@ -176,6 +176,9 @@ void Layer::reloadTexture(const Region& dirty)
                     // this failed, for instance, because we don't support
                     // NPOT.
                     // FIXME: do something!
+                    LOGD("layer=%p, glEGLImageTargetTexture2DOES(%d) "
+                         "failed err=0x%04x",
+                         this, mTextures[index].image, error);
                     mFlags &= ~DisplayHardware::DIRECT_TEXTURE;
                 } else {
                     // Everything went okay!
index 1f22488..e08861d 100644 (file)
@@ -590,7 +590,8 @@ regular:
             glTexImage2D(GL_TEXTURE_2D, 0,
                     GL_RGBA, texture_w, texture_h, 0,
                     GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4, data);
-        } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888) {
+        } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 || 
+                   t.format == GGL_PIXEL_FORMAT_RGBX_8888) {
             glTexImage2D(GL_TEXTURE_2D, 0,
                     GL_RGBA, texture_w, texture_h, 0,
                     GL_RGBA, GL_UNSIGNED_BYTE, data);
@@ -620,7 +621,8 @@ regular:
                     0, bounds.top, t.width, bounds.height(),
                     GL_RGBA, GL_UNSIGNED_SHORT_4_4_4_4,
                     t.data + bounds.top*t.stride*2);
-        } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888) {
+        } else if (t.format == GGL_PIXEL_FORMAT_RGBA_8888 ||
+                   t.format == GGL_PIXEL_FORMAT_RGBX_8888) {
             glTexSubImage2D(GL_TEXTURE_2D, 0,
                     0, bounds.top, t.width, bounds.height(),
                     GL_RGBA, GL_UNSIGNED_BYTE,