summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author John Reck <jreck@google.com> 2024-05-10 16:49:26 -0400
committer John Reck <jreck@google.com> 2024-05-10 16:49:26 -0400
commitef89fa3e126e4097914f190dafd7930e8f0eaedb (patch)
tree6724d09454e85bb8b95c00a2605366634b34f999
parent73a196df8cf2ba339566b24ee4a94dd5c15e0031 (diff)
Have all ColorFilters work in sRGB
Test: demo app in bug Fixes: 289571232 Change-Id: I38cf82903cbb15a53c48240eb001be40454e7234
-rw-r--r--libs/hwui/ColorFilter.h29
-rw-r--r--libs/hwui/SkiaWrapper.h56
2 files changed, 27 insertions, 58 deletions
diff --git a/libs/hwui/ColorFilter.h b/libs/hwui/ColorFilter.h
index 1a5b938d6eed..31c9db7ca4fb 100644
--- a/libs/hwui/ColorFilter.h
+++ b/libs/hwui/ColorFilter.h
@@ -23,17 +23,42 @@
#include "GraphicsJNI.h"
#include "SkColorFilter.h"
-#include "SkiaWrapper.h"
namespace android {
namespace uirenderer {
-class ColorFilter : public SkiaWrapper<SkColorFilter> {
+class ColorFilter : public VirtualLightRefBase {
public:
static ColorFilter* fromJava(jlong handle) { return reinterpret_cast<ColorFilter*>(handle); }
+ sk_sp<SkColorFilter> getInstance() {
+ if (mInstance != nullptr && shouldDiscardInstance()) {
+ mInstance = nullptr;
+ }
+
+ if (mInstance == nullptr) {
+ mInstance = createInstance();
+ if (mInstance) {
+ mInstance = mInstance->makeWithWorkingColorSpace(SkColorSpace::MakeSRGB());
+ }
+ mGenerationId++;
+ }
+ return mInstance;
+ }
+
+ virtual bool shouldDiscardInstance() const { return false; }
+
+ void discardInstance() { mInstance = nullptr; }
+
+ [[nodiscard]] int32_t getGenerationId() const { return mGenerationId; }
+
protected:
ColorFilter() = default;
+ virtual sk_sp<SkColorFilter> createInstance() = 0;
+
+private:
+ sk_sp<SkColorFilter> mInstance = nullptr;
+ int32_t mGenerationId = 0;
};
class BlendModeColorFilter : public ColorFilter {
diff --git a/libs/hwui/SkiaWrapper.h b/libs/hwui/SkiaWrapper.h
deleted file mode 100644
index bd0e35aadbb4..000000000000
--- a/libs/hwui/SkiaWrapper.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2023 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.
- */
-
-#ifndef SKIA_WRAPPER_H_
-#define SKIA_WRAPPER_H_
-
-#include <SkRefCnt.h>
-#include <utils/RefBase.h>
-
-namespace android::uirenderer {
-
-template <typename T>
-class SkiaWrapper : public VirtualLightRefBase {
-public:
- sk_sp<T> getInstance() {
- if (mInstance != nullptr && shouldDiscardInstance()) {
- mInstance = nullptr;
- }
-
- if (mInstance == nullptr) {
- mInstance = createInstance();
- mGenerationId++;
- }
- return mInstance;
- }
-
- virtual bool shouldDiscardInstance() const { return false; }
-
- void discardInstance() { mInstance = nullptr; }
-
- [[nodiscard]] int32_t getGenerationId() const { return mGenerationId; }
-
-protected:
- virtual sk_sp<T> createInstance() = 0;
-
-private:
- sk_sp<T> mInstance = nullptr;
- int32_t mGenerationId = 0;
-};
-
-} // namespace android::uirenderer
-
-#endif // SKIA_WRAPPER_H_