Change the dither texture's swizzling
This is a more elegant way to sample from a float alpha texture. Instead of sampling from the red channel in the fragment shader we can set the alpha channel swizzle to redirect it to the red channel. This lets us sample from the alpha channel in the fragment shader and get the correct value. Change-Id: I95bbf7a82964e1bf42c0fee1b782b6bdbbcef618
This commit is contained in:
@@ -38,6 +38,10 @@ void Dither::bindDitherTexture() {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
|
||||
if (useFloatTexture) {
|
||||
// We use a R16F texture, let's remap the alpha channel to the
|
||||
// red channel to avoid changing the shader sampling code on GL ES 3.0+
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_A, GL_RED);
|
||||
|
||||
float dither = 1.0f / (255.0f * DITHER_KERNEL_SIZE * DITHER_KERNEL_SIZE);
|
||||
const GLfloat pattern[] = {
|
||||
0 * dither, 8 * dither, 2 * dither, 10 * dither,
|
||||
|
||||
@@ -186,7 +186,7 @@ const char* gFS_Main_Dither[2] = {
|
||||
// ES 2.0
|
||||
"texture2D(ditherSampler, ditherTexCoords).a * " STR(DITHER_KERNEL_SIZE_INV_SQUARE),
|
||||
// ES 3.0
|
||||
"texture2D(ditherSampler, ditherTexCoords).r"
|
||||
"texture2D(ditherSampler, ditherTexCoords).a"
|
||||
};
|
||||
const char* gFS_Main_AddDitherToGradient =
|
||||
" gradientColor += %s;\n";
|
||||
|
||||
Reference in New Issue
Block a user