prev/next label fix in viewer, inout highlight, modify folder layout, ffmpeg scan...
[goodguy/history.git] / cinelerra-5.1 / guicast / vframe3d.C
index 8d5f88e8c839fd137358ae9aa0fd3155d8c6d9db..aba006b8a11c43270ec1ab5ef53f16ae0b343105 100644 (file)
@@ -99,10 +99,6 @@ void VFrame::to_texture()
                return;
 
        case VFrame::SCREEN:
-               if((get_w() % 4) || (get_h() % 4)) {
-                       printf("VFrame::to_texture w=%d h=%d\n", get_w(), get_h());
-                       return;
-               }
                if(pbuffer) {
                        enable_opengl();
                        screen_to_texture();
@@ -151,30 +147,22 @@ void VFrame::to_texture()
 
 void VFrame::create_pbuffer()
 {
-       if(pbuffer &&
-               pbuffer->window_id != BC_WindowBase::get_synchronous()->current_window->get_id())
-       {
+       int ww = (get_w()+3) & ~3, hh = (get_h()+3) & ~3;
+       if( pbuffer && (pbuffer->w != ww || pbuffer->h != hh ||
+           pbuffer->window_id != BC_WindowBase::get_synchronous()->current_window->get_id() ) ) {
                delete pbuffer;
                pbuffer = 0;
        }
 
-       if((get_w() % 4) || (get_h() % 4))
-       {
-               printf("VFrame::create_pbuffer w=%d h=%d\n", get_w(), get_h());
-               return;
-       }
-
-       if(!pbuffer)
-       {
-               pbuffer = new BC_PBuffer(get_w(), get_h());
+       if( !pbuffer ) {
+               pbuffer = new BC_PBuffer(ww, hh);
        }
 }
 
 void VFrame::enable_opengl()
 {
        create_pbuffer();
-       if(pbuffer)
-       {
+       if( pbuffer ) {
                pbuffer->enable_opengl();
        }
 }
@@ -413,6 +401,7 @@ unsigned int VFrame::make_shader(const char **fragments, ...)
        }
 
 //printf("VFrame::make_shader\n%s\n", program);
+       delete [] program;
 #endif
        return result;
 }
@@ -426,10 +415,8 @@ void VFrame::dump_shader(int shader_id)
 void VFrame::clear_pbuffer()
 {
 #ifdef HAVE_GL
-       if(BC_CModels::is_yuv(get_color_model()))
-               glClearColor(0.0, 0.5, 0.5, 0.0);
-       else
-               glClearColor(0.0, 0.0, 0.0, 0.0);
+       float gbuv = BC_CModels::is_yuv(get_color_model()) ? 0.5 : 0;
+       glClearColor(0.0, gbuv, gbuv, 0.0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 #endif
 }