@@ -24,20 +24,30 @@ namespace android {
2424namespace uirenderer {
2525
2626// /////////////////////////////////////////////////////////////////////////////
27- // Constructors/destructor
27+ // Base class GammaFontRenderer
2828// /////////////////////////////////////////////////////////////////////////////
2929
30- GammaFontRenderer::GammaFontRenderer () {
31- INIT_LOGD (" Creating gamma font renderer" );
30+ GammaFontRenderer* GammaFontRenderer::createRenderer () {
31+ // Choose the best renderer
32+ char property[PROPERTY_VALUE_MAX];
33+ if (property_get (PROPERTY_TEXT_GAMMA_SHADER, property, DEFAULT_TEXT_GAMMA_SHADER) > 0 ) {
34+ if (!strcasecmp (property, " true" )) {
35+ return new ShaderGammaFontRenderer ();
36+ }
37+ }
38+
39+ return new LookupGammaFontRenderer ();
40+ }
3241
42+ GammaFontRenderer::GammaFontRenderer () {
3343 // Get the renderer properties
3444 char property[PROPERTY_VALUE_MAX];
3545
3646 // Get the gamma
37- float gamma = DEFAULT_TEXT_GAMMA;
47+ mGamma = DEFAULT_TEXT_GAMMA;
3848 if (property_get (PROPERTY_TEXT_GAMMA, property, NULL ) > 0 ) {
3949 INIT_LOGD (" Setting text gamma to %s" , property);
40- gamma = atof (property);
50+ mGamma = atof (property);
4151 } else {
4252 INIT_LOGD (" Using default text gamma of %.2f" , DEFAULT_TEXT_GAMMA);
4353 }
@@ -61,10 +71,29 @@ GammaFontRenderer::GammaFontRenderer() {
6171 INIT_LOGD (" Using default white black gamma threshold of %d" ,
6272 DEFAULT_TEXT_WHITE_GAMMA_THRESHOLD);
6373 }
74+ }
75+
76+ GammaFontRenderer::~GammaFontRenderer () {
77+ }
78+
79+ // /////////////////////////////////////////////////////////////////////////////
80+ // Shader-based renderer
81+ // /////////////////////////////////////////////////////////////////////////////
82+
83+ ShaderGammaFontRenderer::ShaderGammaFontRenderer (): GammaFontRenderer() {
84+ INIT_LOGD (" Creating shader gamma font renderer" );
85+ }
86+
87+ // /////////////////////////////////////////////////////////////////////////////
88+ // Lookup-based renderer
89+ // /////////////////////////////////////////////////////////////////////////////
90+
91+ LookupGammaFontRenderer::LookupGammaFontRenderer (): GammaFontRenderer() {
92+ INIT_LOGD (" Creating lookup gamma font renderer" );
6493
6594 // Compute the gamma tables
66- const float blackGamma = gamma ;
67- const float whiteGamma = 1 .0f / gamma ;
95+ const float blackGamma = mGamma ;
96+ const float whiteGamma = 1 .0f / mGamma ;
6897
6998 for (uint32_t i = 0 ; i <= 255 ; i++) {
7099 mGammaTable [i] = i;
@@ -81,20 +110,20 @@ GammaFontRenderer::GammaFontRenderer() {
81110 memset (mRenderersUsageCount , 0 , sizeof (uint32_t ) * kGammaCount );
82111}
83112
84- GammaFontRenderer ::~GammaFontRenderer () {
113+ LookupGammaFontRenderer ::~LookupGammaFontRenderer () {
85114 for (int i = 0 ; i < kGammaCount ; i++) {
86115 delete mRenderers [i];
87116 }
88117}
89118
90- void GammaFontRenderer ::clear () {
119+ void LookupGammaFontRenderer ::clear () {
91120 for (int i = 0 ; i < kGammaCount ; i++) {
92121 delete mRenderers [i];
93122 mRenderers [i] = NULL ;
94123 }
95124}
96125
97- void GammaFontRenderer ::flush () {
126+ void LookupGammaFontRenderer ::flush () {
98127 int count = 0 ;
99128 int min = -1 ;
100129 uint32_t minCount = UINT_MAX;
@@ -122,7 +151,7 @@ void GammaFontRenderer::flush() {
122151 }
123152}
124153
125- FontRenderer* GammaFontRenderer ::getRenderer (Gamma gamma) {
154+ FontRenderer* LookupGammaFontRenderer ::getRenderer (Gamma gamma) {
126155 FontRenderer* renderer = mRenderers [gamma];
127156 if (!renderer) {
128157 renderer = new FontRenderer ();
@@ -133,7 +162,7 @@ FontRenderer* GammaFontRenderer::getRenderer(Gamma gamma) {
133162 return renderer;
134163}
135164
136- FontRenderer& GammaFontRenderer ::getFontRenderer (const SkPaint* paint) {
165+ FontRenderer& LookupGammaFontRenderer ::getFontRenderer (const SkPaint* paint) {
137166 if (paint->getShader () == NULL ) {
138167 uint32_t c = paint->getColor ();
139168 const int r = (c >> 16 ) & 0xFF ;
0 commit comments