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();
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();
}
}
}
//printf("VFrame::make_shader\n%s\n", program);
+ delete [] program;
#endif
return result;
}
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
}