--- old/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c 2015-03-25 16:07:24.000000000 +0300 +++ new/src/java.desktop/share/native/common/java2d/opengl/OGLTextRenderer.c 2015-03-25 16:07:24.000000000 +0300 @@ -301,6 +301,8 @@ "uniform sampler2D dst_tex;" "uniform sampler3D invgamma_tex;" "uniform sampler3D gamma_tex;" + "uniform vec3 gamma;" + "uniform vec3 invgamma;" "" "void main(void)" "{" @@ -313,11 +315,11 @@ // load the RGB value from the corresponding destination pixel " vec3 dst_clr = vec3(texture2D(dst_tex, gl_TexCoord[1].st));" // gamma adjust the dest color using the invgamma LUT - " vec3 dst_adj = vec3(texture3D(invgamma_tex, dst_clr.stp));" + " vec3 dst_adj = pow(dst_clr.rgb, invgamma);" // linearly interpolate the three color values " vec3 result = mix(dst_adj, src_adj, glyph_clr);" // gamma re-adjust the resulting color (alpha is always set to 1.0) - " gl_FragColor = vec4(vec3(texture3D(gamma_tex, result.stp)), 1.0);" + " gl_FragColor = vec4(pow(result.rgb, gamma), 1.0);" "}"; /** @@ -422,9 +424,16 @@ int min = 0; int max = LUT_EDGE - 1; int x, y, z; + GLint loc; J2dTraceLn1(J2D_TRACE_INFO, "OGLTR_UpdateLCDTextContrast: contrast=%d", contrast); + + loc = j2d_glGetUniformLocationARB(lcdTextProgram, "gamma"); + j2d_glUniform3fARB(loc, g, g, g); + + loc = j2d_glGetUniformLocationARB(lcdTextProgram, "invgamma"); + j2d_glUniform3fARB(loc, ig, ig, ig); for (z = min; z <= max; z++) { double zval = ((double)z) / max; @@ -478,7 +487,7 @@ static jboolean OGLTR_UpdateLCDTextColor(jint contrast) { - double gamma = ((double)contrast) / 100.0; + double invgamma = ((double)contrast) / 100; GLfloat radj, gadj, badj; GLfloat clr[4]; GLint loc; @@ -499,9 +508,9 @@ j2d_glGetFloatv(GL_CURRENT_COLOR, clr); // gamma adjust the primary color - radj = (GLfloat)pow(clr[0], gamma); - gadj = (GLfloat)pow(clr[1], gamma); - badj = (GLfloat)pow(clr[2], gamma); + radj = (GLfloat)pow(clr[0], invgamma); + gadj = (GLfloat)pow(clr[1], invgamma); + badj = (GLfloat)pow(clr[2], invgamma); // update the "src_adj" parameter of the shader program with this value loc = j2d_glGetUniformLocationARB(lcdTextProgram, "src_adj");