from OpenGL.GL import * from utils.ColorMatrix import ColorMatrix def set_uniform(uniform_name, value, type, shader_program): uniform_location = glGetUniformLocation( shader_program, f"u_{uniform_name}") if type == '1f': glUniform1f(uniform_location, value) elif type == '2fv': glUniform2fv(uniform_location, 1, (GLfloat * len(value))(*value)) elif type == '4fv': glUniform4fv(uniform_location, 1, (GLfloat * len(value))(*value)) elif type == 'mat4': glUniformMatrix4fv(uniform_location, 1, GL_FALSE, (GLfloat * len(value))(*value)) def set_color_matrix_uniform(color_matrix, val_name, shader_program): t = color_matrix set_uniform( f"{val_name}Matrix", [t.a, t.b, t.c, t.d, t.f, t.g, t.h, t.i, t.k, t.l, t.m, t.n, t.p, t.q, t.r, t.s], 'mat4', shader_program ) set_uniform(f"{val_name}Matrix_vec", [ t.e, t.j, t.o, t.t], '4fv', shader_program) set_uniform(f"{val_name}Offset", color_matrix.get_offsets(), '4fv', shader_program) def set_options(exposure, saturation, contrast, brightness, gamma, shadows, highlights, whites, blacks, clarity, temperature, sharpness, shader_program, canvas_width, canvas_height): if not shader_program: print('Shader program not initialized') return set_uniform('gamma', gamma, '1f', shader_program) set_uniform('shadows', shadows, '1f', shader_program) set_uniform('highlights', highlights, '1f', shader_program) set_uniform('whites', whites, '1f', shader_program) set_uniform('blacks', blacks, '1f', shader_program) set_uniform('clarity', clarity, '1f', shader_program) set_uniform('temperature', temperature, '1f', shader_program) set_uniform('sharpness', sharpness, '1f', shader_program) color_matrix = ColorMatrix() color_matrix.multiply(ColorMatrix.create_exposure_matrix(exposure)) print(vars(color_matrix)) color_matrix.multiply(ColorMatrix.create_saturation_matrix(saturation + 1)) print(vars(color_matrix)) if contrast > 0: contrast = contrast * 2 color_matrix.multiply(ColorMatrix.create_contrast_matrix( contrast + 1)) print(vars(color_matrix)) color_matrix.multiply(ColorMatrix.create_brightness_matrix(brightness)) print(vars(color_matrix)) set_color_matrix_uniform(color_matrix, 'color', shader_program) clarity_matrix = ColorMatrix() clarity_matrix.multiply( ColorMatrix.create_saturation_matrix(-0.3 * clarity + 1)) clarity_matrix.multiply( ColorMatrix.create_contrast_matrix(0.1 * clarity + 1)) set_color_matrix_uniform(clarity_matrix, 'clarity', shader_program) print('pixelDimension', [ 1 / canvas_width, 1 / canvas_height]) set_uniform('pixelDimension', [ 1 / canvas_width, 1 / canvas_height], '2fv', shader_program)