X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fvframe3d.C;h=42d91ba1af0b77d1a9243a3d1db105e02a84c6e8;hb=a1ec01f78c69ac89b70269884acc212a23e49622;hp=30c1b2bea23656a7873329b63c4e84c4841989db;hpb=7ead9f7382846e81c2f8efb25780014e5f8834c3;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/guicast/vframe3d.C b/cinelerra-5.1/guicast/vframe3d.C index 30c1b2be..42d91ba1 100644 --- a/cinelerra-5.1/guicast/vframe3d.C +++ b/cinelerra-5.1/guicast/vframe3d.C @@ -179,7 +179,6 @@ void VFrame::screen_to_texture(int x, int y, int w, int h) // Create texture BC_Texture::new_texture(&texture, get_w(), get_h(), get_color_model()); - if(pbuffer) { glEnable(GL_TEXTURE_2D); @@ -237,20 +236,15 @@ void VFrame::draw_texture(int flip_y) } -void VFrame::bind_texture(int texture_unit) +void VFrame::bind_texture(int texture_unit, int nearest) { // Bind the texture - if(texture) - { - texture->bind(texture_unit); + if(texture) { + texture->bind(texture_unit, nearest); } } - - - - void VFrame::init_screen(int w, int h) { #ifdef HAVE_GL @@ -266,7 +260,7 @@ void VFrame::init_screen(int w, int h) glMatrixMode(GL_MODELVIEW); glLoadIdentity(); // Shift down and right so 0,0 is the top left corner - glTranslatef(-(w-1)/2.f, (h-1)/2.f, 0.0); + glTranslatef(-w/2.f, h/2.f, 0.f); glTranslatef(0.0, 0.0, -(far + near) / 2); glDisable(GL_DEPTH_TEST); @@ -404,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=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 }