upgrade vpx to 1.8.1, rm meson prereq and add dav1d Makefile, warn/gettid patch
[goodguy/cinelerra.git] / cinelerra-5.1 / guicast / vframe3d.C
index 52f096d7fa444385895067c2bce5a2bf82bf0949..42d91ba1af0b77d1a9243a3d1db105e02a84c6e8 100644 (file)
@@ -398,13 +398,16 @@ unsigned int VFrame::make_shader(const char **segments, ...)
        unsigned int program = 0;
 #ifdef HAVE_GL
 // Construct single source file out of arguments
-       int nb_segs = 1;
-       if( !segments ) {
+       int nb_segs = 0;
+       if( !segments ) {  // arg list
                va_list list;  va_start(list, segments);
                while( va_arg(list, char*) != 0 ) ++nb_segs;
                va_end(list);
        }
-       const char *segs[nb_segs];
+       else { // segment list
+               while( segments[nb_segs] ) ++nb_segs;
+       }
+       const char *segs[++nb_segs];
        if( !segments ) {
                va_list list;  va_start(list, segments);
                for( int i=0; i<nb_segs; ++i )
@@ -442,8 +445,14 @@ void VFrame::dump_shader(int shader_id)
 void VFrame::clear_pbuffer()
 {
 #ifdef HAVE_GL
-       float gbuv = BC_CModels::is_yuv(get_color_model()) ? 0.5 : 0;
-       glClearColor(0.0, gbuv, gbuv, 0.0);
+       int rgb = clear_color>=0 ? clear_color : 0;
+       int a = clear_color>=0 ? clear_alpha : 0;
+       int r = (rgb>>16) & 0xff;
+       int g = (rgb>> 8) & 0xff;
+       int b = (rgb>> 0) & 0xff;
+       if( BC_CModels::is_yuv(get_color_model()) )
+               YUV::yuv.rgb_to_yuv_8(r, g, b);
+       glClearColor(r/255.f, g/255.f, b/255.f, a/255.f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 #endif
 }