}
-
-
-
-
-
-
-
-
-
void VFrame::to_texture()
{
#ifdef HAVE_GL
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;
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
}
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<nb_segs; ++i )
void VFrame::clear_pbuffer()
{
#ifdef HAVE_GL
- float gbuv = BC_CModels::is_yuv(get_color_model()) ? 0.5 : 0;
- glClearColor(0.0, gbuv, gbuv, 0.0);
+ int rgb = clear_color>=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
}