X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fvframe3d.C;h=90d75d7b76f6473ec593c870b83b60c0276fd301;hb=83b70dd60863377cb281e6be5206304e10373e30;hp=52f096d7fa444385895067c2bce5a2bf82bf0949;hpb=3305343c3d9bfb889f6892e7821cc0e2d68669de;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/vframe3d.C b/cinelerra-5.1/guicast/vframe3d.C index 52f096d7..90d75d7b 100644 --- a/cinelerra-5.1/guicast/vframe3d.C +++ b/cinelerra-5.1/guicast/vframe3d.C @@ -76,15 +76,6 @@ int VFrame::get_texture_components() } - - - - - - - - - void VFrame::to_texture() { #ifdef HAVE_GL @@ -147,7 +138,11 @@ void VFrame::to_texture() void VFrame::create_pbuffer() { +#ifdef GLx4 int ww = (get_w()+3) & ~3, hh = (get_h()+3) & ~3; +#else + int ww = get_w(), hh = get_h(); +#endif if( pbuffer && (pbuffer->w != ww || pbuffer->h != hh || pbuffer->window_id != BC_WindowBase::get_synchronous()->current_window->get_id() ) ) { delete pbuffer; @@ -293,6 +288,10 @@ void VFrame::init_screen(int w, int h) glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, zero); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, zero); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 0); +#ifndef GLx4 + glPixelStorei(GL_PACK_ALIGNMENT,1); + glPixelStorei(GL_UNPACK_ALIGNMENT,1); +#endif #endif } @@ -398,13 +397,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=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 }