diff options
author | 2016-12-14 16:34:55 -0800 | |
---|---|---|
committer | 2016-12-14 16:34:55 -0800 | |
commit | 91d6354cde90b6625d4af6a5d909d886bf602a49 (patch) | |
tree | cd3cad97d94528e7f19783f4cb4e5960fb414415 | |
parent | 0b2a66c72ea8f2ae252047e62d407c5c366dc1a9 (diff) |
HWUI: fix support RGB_565 for hardware bitmaps
Test: hwuimacro hwBitmap565
bug:30999911
Change-Id: Ie4128aba95a92041b7388c46d0b2109feaae302a
-rw-r--r-- | libs/hwui/hwui/Bitmap.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/tests/common/BitmapAllocationTestUtils.h | 4 | ||||
-rw-r--r-- | libs/hwui/tests/common/scenes/HwBitmap565.cpp | 49 |
3 files changed, 54 insertions, 1 deletions
diff --git a/libs/hwui/hwui/Bitmap.cpp b/libs/hwui/hwui/Bitmap.cpp index 64ef866631f3..2177af1773e5 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 6dadd3e364cf..4892179f0d48 100644 --- a/libs/hwui/tests/common/BitmapAllocationTestUtils.h +++ b/libs/hwui/tests/common/BitmapAllocationTestUtils.h @@ -39,7 +39,9 @@ public: static sk_sp<Bitmap> allocateHardwareBitmap(int width, int height, SkColorType colorType, std::function<void(SkBitmap& bitmap)> setup) { SkBitmap skBitmap; - sk_sp<Bitmap> heapBitmap(TestUtils::createBitmap(width, height, &skBitmap)); + SkImageInfo info = SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType); + skBitmap.setInfo(info); + sk_sp<Bitmap> 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 000000000000..18fea3d1cb81 --- /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<HwBitmap565> +}); + +class HwBitmap565 : public TestScene { +public: + sp<RenderNode> card; + void createContent(int width, int height, Canvas& canvas) override { + canvas.drawColor(Color::Grey_200, SkBlendMode::kSrcOver); + + sk_sp<Bitmap> 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 |