#include "canvas.h"
#include "clip.h"
#include "condition.h"
+#include "edl.h"
#include "maskautos.h"
#include "maskauto.h"
#include "mutex.h"
+#include "mwindow.h"
#include "overlayframe.inc"
#include "overlayframe.h"
#include "playback3d.h"
#include "pluginclient.h"
#include "pluginvclient.h"
+#include "edlsession.h"
#include "transportque.inc"
#include "vframe.h"
" gl_FragColor = rgba;\n"
"}\n";
-static const char *rgba_to_rgb_flatten =
- "void main() {\n"
- " gl_FragColor.rgb *= gl_FragColor.a;\n"
- " gl_FragColor.a = 1.0;\n"
- "}\n";
+//static const char *rgba_to_rgb_flatten =
+// "void main() {\n"
+// " gl_FragColor.rgb *= gl_FragColor.a;\n"
+// " gl_FragColor.a = 1.0;\n"
+// "}\n";
#define GL_STD_BLEND(FN) \
static const char *blend_##FN##_frag = \
canvas_w = window->get_w();
canvas_h = window->get_h();
VFrame::init_screen(canvas_w, canvas_h);
+ int color_model = command->frame->get_color_model();
+ int is_yuv = BC_CModels::is_yuv(color_model);
if(!command->is_cleared)
{
// If we get here, the virtual console was not used.
- init_frame(command);
+ init_frame(command, 0);
}
// Texture
command->frame->bind_texture(0);
// Convert colormodel
- unsigned int shader = !BC_CModels::is_yuv(command->frame->get_color_model()) ? 0 :
- VFrame::make_shader(0, yuv_to_rgb_frag, 0);
+ unsigned int shader = is_yuv ? VFrame::make_shader(0, yuv_to_rgb_frag, 0) : 0;
if( shader > 0 ) {
glUseProgram(shader);
// Set texture unit of the texture
BC_GL_YUV_TO_RGB(shader);
}
- if(BC_CModels::components(command->frame->get_color_model()) == 4)
+ if(BC_CModels::components(color_model) == 4)
{
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
-void Playback3D::init_frame(Playback3DCommand *command)
+void Playback3D::init_frame(Playback3DCommand *command, int is_yuv)
{
#ifdef HAVE_GL
- canvas_w = command->canvas->get_canvas()->get_w();
- canvas_h = command->canvas->get_canvas()->get_h();
-
- glClearColor(0.0, 0.0, 0.0, 0.0);
+ float gbuv = is_yuv ? 0.5 : 0.0;
+ glClearColor(0.0, gbuv, gbuv, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#endif
}
command->canvas->get_canvas()->lock_window("Playback3D::clear_output_sync");
// If we get here, the virtual console is being used.
command->canvas->get_canvas()->enable_opengl();
+ int is_yuv = 0;
// Using pbuffer for refresh frame.
if(command->frame)
{
command->frame->enable_opengl();
+ int color_model = command->canvas->mwindow->edl->session->color_model;
+ is_yuv = BC_CModels::is_yuv(color_model);
}
-
- init_frame(command);
+ init_frame(command, is_yuv);
command->canvas->get_canvas()->unlock_window();
}
command->canvas->unlock_canvas();