Loading libs/hwui/Tonemapper.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <log/log.h> // libshaders only exists on Android devices #ifdef __ANDROID__ #include <renderthread/CanvasContext.h> #include <shaders/shaders.h> #endif Loading Loading @@ -53,8 +54,17 @@ static sk_sp<SkColorFilter> createLinearEffectColorFilter(const shaders::LinearE ColorFilterRuntimeEffectBuilder effectBuilder(std::move(runtimeEffect)); auto colorTransform = android::mat4(); const auto* context = renderthread::CanvasContext::getActiveContext(); if (context) { const auto ratio = context->targetSdrHdrRatio(); if (ratio > 1.0f) { colorTransform = android::mat4::scale(vec4(ratio, ratio, ratio, 1.f)); } } const auto uniforms = shaders::buildLinearEffectUniforms(linearEffect, android::mat4(), maxDisplayLuminance, shaders::buildLinearEffectUniforms(linearEffect, colorTransform, maxDisplayLuminance, currentDisplayLuminanceNits, maxLuminance); for (const auto& uniform : uniforms) { Loading tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.test.hwui; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorSpace; Loading Loading @@ -72,6 +73,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb private int[] mGradientEndColors = {0xFFFFFFFF, 0xFFFF0000, 0xFF00FF00, 0xFF0000FF}; private String[] mGradientColorNames = {"Grayscale", "Red", "Green", "Blue"}; private int mColorMode = ActivityInfo.COLOR_MODE_DEFAULT; private int[] mColorModes = {ActivityInfo.COLOR_MODE_DEFAULT, ActivityInfo.COLOR_MODE_HDR}; private String[] mColorModeNames = {"DEFAULT", "HDR"}; private final ExecutorService mBufferFenceExecutor = Executors.newFixedThreadPool(1); private final ExecutorService mBufferExecutor = Executors.newFixedThreadPool(1); Loading Loading @@ -139,6 +144,15 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb gradientColorSpinner .setOnItemSelectedListener(new GradientColorOnItemSelectedListener()); ArrayAdapter<String> colorModeAdapter = new ArrayAdapter<>( this, android.R.layout.simple_spinner_item, mColorModeNames); colorModeAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner colorModeSpinner = new Spinner(this); colorModeSpinner.setAdapter(colorModeAdapter); colorModeSpinner.setOnItemSelectedListener(new ColorModeOnItemSelectedListener()); mGradientBuffer = getGradientBuffer().get(); LinearLayout linearLayout = new LinearLayout(this); Loading Loading @@ -169,6 +183,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); spinnerLayout.addView(colorModeSpinner, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); linearLayout.addView(spinnerLayout, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); Loading @@ -187,6 +205,8 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb linearLayout.addView(mSurfaceView, new LinearLayout.LayoutParams(WIDTH, HEIGHT)); setContentView(linearLayout); getWindow().setColorMode(mColorMode); } catch (Exception e) { throw new RuntimeException(e); } Loading Loading @@ -312,4 +332,22 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb } } private final class ColorModeOnItemSelectedListener implements AdapterView.OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ColorBitmapActivity.this.mColorMode = ColorBitmapActivity.this.mColorModes[position]; ColorBitmapActivity.this.getMainExecutor() .execute(() -> { ColorBitmapActivity.this.getWindow().setColorMode(mColorMode); }); } @Override public void onNothingSelected(AdapterView<?> parent) { } } } Loading
libs/hwui/Tonemapper.cpp +11 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <log/log.h> // libshaders only exists on Android devices #ifdef __ANDROID__ #include <renderthread/CanvasContext.h> #include <shaders/shaders.h> #endif Loading Loading @@ -53,8 +54,17 @@ static sk_sp<SkColorFilter> createLinearEffectColorFilter(const shaders::LinearE ColorFilterRuntimeEffectBuilder effectBuilder(std::move(runtimeEffect)); auto colorTransform = android::mat4(); const auto* context = renderthread::CanvasContext::getActiveContext(); if (context) { const auto ratio = context->targetSdrHdrRatio(); if (ratio > 1.0f) { colorTransform = android::mat4::scale(vec4(ratio, ratio, ratio, 1.f)); } } const auto uniforms = shaders::buildLinearEffectUniforms(linearEffect, android::mat4(), maxDisplayLuminance, shaders::buildLinearEffectUniforms(linearEffect, colorTransform, maxDisplayLuminance, currentDisplayLuminanceNits, maxLuminance); for (const auto& uniform : uniforms) { Loading
tests/HwAccelerationTest/src/com/android/test/hwui/ColorBitmapActivity.java +38 −0 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.test.hwui; import android.app.Activity; import android.content.pm.ActivityInfo; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorSpace; Loading Loading @@ -72,6 +73,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb private int[] mGradientEndColors = {0xFFFFFFFF, 0xFFFF0000, 0xFF00FF00, 0xFF0000FF}; private String[] mGradientColorNames = {"Grayscale", "Red", "Green", "Blue"}; private int mColorMode = ActivityInfo.COLOR_MODE_DEFAULT; private int[] mColorModes = {ActivityInfo.COLOR_MODE_DEFAULT, ActivityInfo.COLOR_MODE_HDR}; private String[] mColorModeNames = {"DEFAULT", "HDR"}; private final ExecutorService mBufferFenceExecutor = Executors.newFixedThreadPool(1); private final ExecutorService mBufferExecutor = Executors.newFixedThreadPool(1); Loading Loading @@ -139,6 +144,15 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb gradientColorSpinner .setOnItemSelectedListener(new GradientColorOnItemSelectedListener()); ArrayAdapter<String> colorModeAdapter = new ArrayAdapter<>( this, android.R.layout.simple_spinner_item, mColorModeNames); colorModeAdapter .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner colorModeSpinner = new Spinner(this); colorModeSpinner.setAdapter(colorModeAdapter); colorModeSpinner.setOnItemSelectedListener(new ColorModeOnItemSelectedListener()); mGradientBuffer = getGradientBuffer().get(); LinearLayout linearLayout = new LinearLayout(this); Loading Loading @@ -169,6 +183,10 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); spinnerLayout.addView(colorModeSpinner, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); linearLayout.addView(spinnerLayout, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); Loading @@ -187,6 +205,8 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb linearLayout.addView(mSurfaceView, new LinearLayout.LayoutParams(WIDTH, HEIGHT)); setContentView(linearLayout); getWindow().setColorMode(mColorMode); } catch (Exception e) { throw new RuntimeException(e); } Loading Loading @@ -312,4 +332,22 @@ public class ColorBitmapActivity extends Activity implements SurfaceHolder.Callb } } private final class ColorModeOnItemSelectedListener implements AdapterView.OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { ColorBitmapActivity.this.mColorMode = ColorBitmapActivity.this.mColorModes[position]; ColorBitmapActivity.this.getMainExecutor() .execute(() -> { ColorBitmapActivity.this.getWindow().setColorMode(mColorMode); }); } @Override public void onNothingSelected(AdapterView<?> parent) { } } }