X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplayback3d.h;h=2139ba7ba7ec9e52e58469c6c90a295f74c16d67;hb=eecf057a9d6b8c8cffc7d0001bff89bc9cac7b05;hp=ccba7d8dd315fabd7bc7fed96ab989e1d4501ef6;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/playback3d.h b/cinelerra-5.1/cinelerra/playback3d.h index ccba7d8d..2139ba7b 100644 --- a/cinelerra-5.1/cinelerra/playback3d.h +++ b/cinelerra-5.1/cinelerra/playback3d.h @@ -23,6 +23,7 @@ #define PLAYBACK3D_H #include "arraylist.h" +#include "bccolors.h" #include "bcpixmap.inc" #include "bcsynchronous.h" #include "bcwindowbase.inc" @@ -39,21 +40,51 @@ +// use static presets YUV in bccolors.h +#define BC_GL_MATRIX(shader, mat) \ + glUniformMatrix3fv(glGetUniformLocation(shader, #mat), 1, 1, YUV::mat) +#define BC_GL_VECTOR(shader, vec) \ + glUniform3fv(glGetUniformLocation(shader, #vec), 1, YUV::vec) + +#define BC_GL_YMINF(shader) \ + glUniform1f(glGetUniformLocation(shader, "yminf"), YUV::yuv.get_yminf()) + +#define BC_GL_RGB_TO_YUV(shader) do { \ + BC_GL_MATRIX(shader, rgb_to_yuv_matrix); \ + BC_GL_YMINF(shader); \ +} while(0) + +#define BC_GL_RGB_TO_Y(shader) do { \ + BC_GL_VECTOR(shader, rgb_to_y_vector); \ + BC_GL_YMINF(shader); \ +} while(0) + +#define BC_GL_YUV_TO_RGB(shader) do { \ + BC_GL_MATRIX(shader, yuv_to_rgb_matrix); \ + BC_GL_YMINF(shader); \ +} while(0) + +#define BC_GL_COLORS(shader) do { \ + BC_GL_MATRIX(shader, yuv_to_rgb_matrix); \ + BC_GL_MATRIX(shader, rgb_to_yuv_matrix); \ + BC_GL_YMINF(shader); \ +} while(0) + + +#define bc_gl_yuv_to_rgb "uniform mat3 yuv_to_rgb_matrix;\n" +#define bc_gl_rgb_to_yuv "uniform mat3 rgb_to_yuv_matrix;\n" +#define bc_gl_rgb_to_y "uniform vec3 rgb_to_y_vector;\n" +#define bc_gl_yminf "uniform float yminf;\n" +#define bc_gl_colors bc_gl_yuv_to_rgb bc_gl_rgb_to_yuv bc_gl_yminf // Macros for useful fragment shaders #define YUV_TO_RGB_FRAG(PIXEL) \ - PIXEL ".gb -= vec2(0.5, 0.5);\n" \ - PIXEL ".rgb = mat3(\n" \ - " 1, 1, 1, \n" \ - " 0, -0.34414, 1.77200, \n" \ - " 1.40200, -0.71414, 0) * " PIXEL ".rgb;\n" + PIXEL ".rgb -= vec3(yminf, 0.5, 0.5);\n" \ + PIXEL ".rgb = yuv_to_rgb_matrix * " PIXEL ".rgb;\n" #define RGB_TO_YUV_FRAG(PIXEL) \ - PIXEL ".rgb = mat3(\n" \ - " 0.29900, -0.16874, 0.50000, \n" \ - " 0.58700, -0.33126, -0.41869, \n" \ - " 0.11400, 0.50000, -0.08131) * " PIXEL ".rgb;\n" \ - PIXEL ".gb += vec2(0.5, 0.5);\n" + PIXEL ".rgb = rgb_to_yuv_matrix * " PIXEL ".rgb;\n" \ + PIXEL ".rgb += vec3(yminf, 0.5, 0.5);\n" #define RGB_TO_HSV_FRAG(PIXEL) \ "{\n" \ @@ -163,8 +194,6 @@ "" PIXEL ".b = b;\n" \ "}\n" - - class Playback3DCommand : public BC_SynchronousCommand { public: