Use RGBA16F layers when wide color gamut rendering is on
Layers created using View.setLayerType() or Canvas.saveLayer() need
to be RGBA16F/scRGB-nl when within a window that requested wide color
gamut rendering.
Bug: 29940137
Test: CtsUiRenderingTestCases, CtsGraphicsTestCases, hwui_unit_tests
Change-Id: I42fd6355448c92041491a7109e3ac8a153d38bf9
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index 55b74ed..7f742e6 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -88,7 +88,8 @@
* The image data is undefined after calling this.
*/
void resize(uint32_t width, uint32_t height, GLint internalFormat, GLint format) {
- upload(internalFormat, width, height, format, GL_UNSIGNED_BYTE, nullptr);
+ upload(internalFormat, width, height, format,
+ internalFormat == GL_RGBA16F ? GL_HALF_FLOAT : GL_UNSIGNED_BYTE, nullptr);
}
/**
@@ -155,7 +156,7 @@
* Returns true if this texture uses a linear encoding format.
*/
constexpr bool isLinear() const {
- return mInternalFormat == GL_RGBA16F;
+ return mIsLinear;
}
/**
@@ -219,6 +220,9 @@
GLenum mMinFilter = GL_NEAREST_MIPMAP_LINEAR;
GLenum mMagFilter = GL_LINEAR;
+ // Indicates whether the content of the texture is in linear space
+ bool mIsLinear = false;
+
Caches& mCaches;
std::unique_ptr<ColorSpaceConnector> mConnector;