frameworks/native
修订版 | 5c3824d4a0f2fd1ae4724d1deb9646224daecd6d (tree) |
---|---|
时间 | 2020-06-03 12:04:38 |
作者 | Chih-Wei Huang <cwhuang@linu...> |
Commiter | Chih-Wei Huang |
Fix red-blue swapped issue for software rendering
The software rendering have to use BGRA format.
@@ -44,6 +44,11 @@ extern "C" { | ||
44 | 44 | namespace android { |
45 | 45 | // ---------------------------------------------------------------------------- |
46 | 46 | |
47 | +ANDROID_API bool hasHardwareRenderer() | |
48 | +{ | |
49 | + char prop[PROPERTY_VALUE_MAX]; | |
50 | + return (property_get("ro.hardware.gralloc", prop, nullptr) && strcmp(prop, "default")); | |
51 | +} | |
47 | 52 | |
48 | 53 | /* |
49 | 54 | * EGL userspace drivers must be provided either: |
@@ -226,8 +231,7 @@ void* Loader::open(egl_connection_t* cnx) | ||
226 | 231 | setEmulatorGlesValue(); |
227 | 232 | |
228 | 233 | // Check if hardware gralloc is set explicitly |
229 | - char prop[PROPERTY_VALUE_MAX]; | |
230 | - if (property_get("ro.hardware.gralloc", prop, nullptr) && strcmp(prop, "default")) { | |
234 | + if (hasHardwareRenderer()) { | |
231 | 235 | dso = load_driver("GLES", cnx, EGL | GLESv1_CM | GLESv2); |
232 | 236 | } else { |
233 | 237 | dso = nullptr; |
@@ -665,8 +665,11 @@ void SurfaceFlinger::init() { | ||
665 | 665 | mVsyncModulator.setEventThread(mSFEventThread.get()); |
666 | 666 | |
667 | 667 | // Get a RenderEngine for the given display / config (can't fail) |
668 | + extern bool hasHardwareRenderer(); | |
668 | 669 | getBE().mRenderEngine = |
669 | - RE::impl::RenderEngine::create(HAL_PIXEL_FORMAT_RGBA_8888, | |
670 | + RE::impl::RenderEngine::create(hasHardwareRenderer() | |
671 | + ? HAL_PIXEL_FORMAT_RGBA_8888 | |
672 | + : HAL_PIXEL_FORMAT_BGRA_8888, | |
670 | 673 | hasWideColorDisplay |
671 | 674 | ? RE::RenderEngine::WIDE_COLOR_SUPPORT |
672 | 675 | : 0); |