diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index 64ef866631f35..2177af1773e5e 100644 --- a/libs/hwui/hwui/Bitmap.cpp +++ b/libs/hwui/hwui/Bitmap.cpp @@ -106,6 +106,8 @@ static PixelFormat internalFormatToPixelFormat(GLint internalFormat) { return PIXEL_FORMAT_RGBA_8888; case GL_RGBA: return PIXEL_FORMAT_RGBA_8888; + case GL_RGB: + return PIXEL_FORMAT_RGB_565; default: LOG_ALWAYS_FATAL("Unsupported bitmap colorType: %d", internalFormat); return PIXEL_FORMAT_UNKNOWN; diff --git a/libs/hwui/tests/common/BitmapAllocationTestUtils.h b/libs/hwui/tests/common/BitmapAllocationTestUtils.h index 6dadd3e364cfa..4892179f0d480 100644 --- a/libs/hwui/tests/common/BitmapAllocationTestUtils.h +++ b/libs/hwui/tests/common/BitmapAllocationTestUtils.h @@ -39,7 +39,9 @@ public: static sk_sp allocateHardwareBitmap(int width, int height, SkColorType colorType, std::function setup) { SkBitmap skBitmap; - sk_sp heapBitmap(TestUtils::createBitmap(width, height, &skBitmap)); + SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType); + skBitmap.setInfo(info); + sk_sp heapBitmap(Bitmap::allocateHeapBitmap(&skBitmap, nullptr)); setup(skBitmap); return Bitmap::allocateHardwareBitmap(skBitmap); } diff --git a/libs/hwui/tests/common/scenes/HwBitmap565.cpp b/libs/hwui/tests/common/scenes/HwBitmap565.cpp new file mode 100644 index 0000000000000..18fea3d1cb81d --- /dev/null +++ b/libs/hwui/tests/common/scenes/HwBitmap565.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "TestSceneBase.h" +#include "utils/Color.h" +#include "tests/common/BitmapAllocationTestUtils.h" + +class HwBitmap565; + +static TestScene::Registrar _HwBitmap565(TestScene::Info{ + "hwBitmap565", + "Draws composite shader with hardware bitmap", + TestScene::simpleCreateScene +}); + +class HwBitmap565 : public TestScene { +public: + sp card; + void createContent(int width, int height, Canvas& canvas) override { + canvas.drawColor(Color::Grey_200, SkBlendMode::kSrcOver); + + sk_sp hardwareBitmap = BitmapAllocationTestUtils::allocateHardwareBitmap(200, 200, + kRGB_565_SkColorType, [](SkBitmap& skBitmap) { + skBitmap.eraseColor(Color::White); + SkCanvas skCanvas(skBitmap); + SkPaint skPaint; + skPaint.setColor(Color::Red_500); + skCanvas.drawRect(SkRect::MakeWH(100, 100), skPaint); + skPaint.setColor(Color::Blue_500); + skCanvas.drawRect(SkRect::MakeXYWH(100, 100, 100, 100), skPaint); + }); + canvas.drawBitmap(*hardwareBitmap, 10.0f, 10.0f, nullptr); + } + + void doFrame(int frameNr) override { } +}; \ No newline at end of file