X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fvframe3d.C;h=9f09f638c9b2011df545777aba483f33ef5923a8;hb=0a0a29dd9e484b5622b46173d51bb6cefc0a5da4;hp=3ed62aca30548e2da45e096ed7649e7ffc6c8107;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/vframe3d.C b/cinelerra-5.1/guicast/vframe3d.C index 3ed62aca..9f09f638 100644 --- a/cinelerra-5.1/guicast/vframe3d.C +++ b/cinelerra-5.1/guicast/vframe3d.C @@ -29,9 +29,6 @@ #include "bcwindowbase.h" #include "vframe.h" -#if defined(HAVE_CONFIG_H) -#include "config.h" -#endif #ifdef HAVE_GL #include #include @@ -152,33 +149,6 @@ void VFrame::to_texture() #endif } -void VFrame::to_ram() -{ -#ifdef HAVE_GL - switch(opengl_state) - { -// Only pbuffer is supported since this is only called after the -// overlay operation onto the pbuffer. - case VFrame::SCREEN: - if(pbuffer) - { - enable_opengl(); -//printf("VFrame::to_ram %d %d\n", get_w(), get_h()); - glReadPixels(0, - 0, - get_w(), - get_h(), - GL_RGB, - GL_UNSIGNED_BYTE, - get_rows()[0]); - flip_vert(); - } - opengl_state = VFrame::RAM; - return; - } -#endif -} - void VFrame::create_pbuffer() { if(pbuffer && @@ -220,12 +190,9 @@ void VFrame::screen_to_texture(int x, int y, int w, int h) #ifdef HAVE_GL // Create texture BC_Texture::new_texture(&texture, - get_w(), - get_h(), - get_color_model()); + get_w(), get_h(), get_color_model()); - if(pbuffer) - { + if(pbuffer) { glEnable(GL_TEXTURE_2D); // Read canvas into texture, use back texture for DOUBLE_BUFFER @@ -247,49 +214,38 @@ void VFrame::screen_to_texture(int x, int y, int w, int h) #endif } -void VFrame::draw_texture(float in_x1, - float in_y1, - float in_x2, - float in_y2, - float out_x1, - float out_y1, - float out_x2, - float out_y2, - int flip_y) +void VFrame::screen_to_ram() { #ifdef HAVE_GL - glBegin(GL_QUADS); - glNormal3f(0, 0, 1.0); - - glTexCoord2f(in_x1 / get_texture_w(), in_y1 / get_texture_h()); - glVertex3f(out_x1, flip_y ? -out_y1 : -out_y2, 0); - - glTexCoord2f(in_x2 / get_texture_w(), in_y1 / get_texture_h()); - glVertex3f(out_x2, flip_y ? -out_y1 : -out_y2, 0); - - glTexCoord2f(in_x2 / get_texture_w(), in_y2 / get_texture_h()); - glVertex3f(out_x2, flip_y ? -out_y2 : -out_y1, 0); - - glTexCoord2f(in_x1 / get_texture_w(), in_y2 / get_texture_h()); - glVertex3f(out_x1, flip_y ? -out_y2 : -out_y1, 0); - - - glEnd(); + enable_opengl(); + glReadBuffer(GL_BACK); + int type = BC_CModels::is_float(color_model) ? GL_FLOAT : GL_UNSIGNED_BYTE; + int format = BC_CModels::has_alpha(color_model) ? GL_RGBA : GL_RGB; + glReadPixels(0, 0, get_w(), get_h(), format, type, get_rows()[0]); + opengl_state = VFrame::RAM; +#endif +} +void VFrame::draw_texture( + float in_x1, float in_y1, float in_x2, float in_y2, + float out_x1, float out_y1, float out_x2, float out_y2, + int flip_y) +{ +#ifdef HAVE_GL + in_x1 /= get_texture_w(); in_y1 /= get_texture_h(); + in_x2 /= get_texture_w(); in_y2 /= get_texture_h(); + float ot_y1 = flip_y ? -out_y1 : -out_y2; + float ot_y2 = flip_y ? -out_y2 : -out_y1; + texture->draw_texture( + in_x1,in_y1, in_x2,in_y2, + out_x1,ot_y1, out_x2, ot_y2); #endif } void VFrame::draw_texture(int flip_y) { - draw_texture(0, - 0, - get_w(), - get_h(), - 0, - 0, - get_w(), - get_h(), - flip_y); + draw_texture(0,0, get_w(),get_h(), + 0,0, get_w(),get_h(), flip_y); } @@ -374,8 +330,8 @@ static int print_error(char *source, unsigned int object, int is_program) glGetShaderInfoLog(object, BCTEXTLEN, &len, string); if(len > 0) printf("Playback3D::print_error:\n%s\n%s\n", source, string); if(len > 0) return 1; - return 0; #endif + return 0; }