summaryrefslogtreecommitdiffstats
path: root/video/out/gl_video.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/gl_video.c')
-rw-r--r--video/out/gl_video.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/video/out/gl_video.c b/video/out/gl_video.c
index cc2656c763..58c3bdf761 100644
--- a/video/out/gl_video.c
+++ b/video/out/gl_video.c
@@ -156,7 +156,7 @@ struct gl_video {
GLuint dither_texture;
float dither_quantization;
- float dither_multiply;
+ float dither_center;
int dither_size;
uint32_t image_w, image_h;
@@ -522,8 +522,8 @@ static void update_uniforms(struct gl_video *p, GLuint program)
gl->Uniform1i(gl->GetUniformLocation(program, "dither"), TEXUNIT_DITHER);
gl->Uniform1f(gl->GetUniformLocation(program, "dither_quantization"),
p->dither_quantization);
- gl->Uniform1f(gl->GetUniformLocation(program, "dither_multiply"),
- p->dither_multiply);
+ gl->Uniform1f(gl->GetUniformLocation(program, "dither_center"),
+ p->dither_center);
float sparam1 = p->opts.scaler_params[0];
gl->Uniform1f(gl->GetUniformLocation(program, "filter_param1"),
@@ -953,6 +953,7 @@ static void init_dither(struct gl_video *p)
int tex_size;
void *tex_data;
+ GLint tex_iformat;
GLenum tex_type;
unsigned char temp[256];
@@ -968,6 +969,7 @@ static void init_dither(struct gl_video *p)
}
tex_size = size;
+ tex_iformat = GL_R16;
tex_type = GL_FLOAT;
tex_data = p->last_dither_matrix;
} else {
@@ -975,6 +977,7 @@ static void init_dither(struct gl_video *p)
mp_make_ordered_dither_matrix(temp, 8);
tex_size = 8;
+ tex_iformat = GL_RED;
tex_type = GL_UNSIGNED_BYTE;
tex_data = temp;
}
@@ -984,7 +987,7 @@ static void init_dither(struct gl_video *p)
// dither matrix. The precision of the source implicitly decides how many
// dither patterns can be visible.
p->dither_quantization = (1 << dst_depth) - 1;
- p->dither_multiply = p->dither_quantization + 1.0 / (tex_size * tex_size);
+ p->dither_center = 0.5 / (tex_size * tex_size);
p->dither_size = tex_size;
gl->ActiveTexture(GL_TEXTURE0 + TEXUNIT_DITHER);
@@ -992,7 +995,7 @@ static void init_dither(struct gl_video *p)
gl->BindTexture(GL_TEXTURE_2D, p->dither_texture);
gl->PixelStorei(GL_UNPACK_ALIGNMENT, 1);
gl->PixelStorei(GL_UNPACK_ROW_LENGTH, 0);
- gl->TexImage2D(GL_TEXTURE_2D, 0, GL_RED, tex_size, tex_size, 0, GL_RED,
+ gl->TexImage2D(GL_TEXTURE_2D, 0, tex_iformat, tex_size, tex_size, 0, GL_RED,
tex_type, tex_data);
gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
gl->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -1589,14 +1592,6 @@ static void check_gl_features(struct gl_video *p)
}
}
- if (!have_float_tex && p->opts.dither_depth >= 0) {
- // only fruit dithering uses float textures
- if (p->opts.dither_algo == 0) {
- p->opts.dither_depth = -1;
- disabled[n_disabled++] = "dithering (float tex.)";
- }
- }
-
if (!have_srgb && p->opts.srgb) {
p->opts.srgb = false;
disabled[n_disabled++] = "sRGB";