Ejemplo n.º 1
0
void
gst_3d_renderer_draw_stereo (Gst3DRenderer * self, Gst3DScene * scene)
{
  GstGLFuncs *gl = self->context->gl_vtable;

  _insert_gl_debug_marker (self->context, "gst_3d_renderer_draw_stereo");

  /* aquire current fbo id */
  GLint bound_fbo;
  gl->GetIntegerv (GL_DRAW_FRAMEBUFFER_BINDING, &bound_fbo);
  if (bound_fbo == 0)
    return;

  Gst3DCameraHmd *hmd_cam = GST_3D_CAMERA_HMD (scene->camera);

  /* left eye */
  _draw_eye (self, self->left_fbo, scene, &hmd_cam->left_vp_matrix);

  /* right eye */
  _draw_eye (self, self->right_fbo, scene, &hmd_cam->right_vp_matrix);

  gst_3d_scene_clear_state (scene);

  gst_3d_shader_bind (self->shader);
  gl->BindFramebuffer (GL_FRAMEBUFFER, bound_fbo);
  gl->Clear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  _draw_framebuffers_on_planes (self);
  gst_3d_scene_clear_state (scene);
}
Ejemplo n.º 2
0
gboolean
gst_3d_scene_init_hmd (Gst3DScene * self)
{
  if (GST_IS_3D_CAMERA_HMD (self->camera)) {
    Gst3DHmd *hmd = GST_3D_CAMERA_HMD (self->camera)->hmd;
    if (!hmd->device)
      return FALSE;
  }
  return TRUE;
}
Ejemplo n.º 3
0
void
gst_3d_scene_init_stereo_renderer (Gst3DScene * self, GstGLContext * context)
{
  self->renderer = gst_3d_renderer_new (context);
  if (GST_IS_3D_CAMERA_HMD (self->camera)) {
    Gst3DCameraHmd *hmd_cam = GST_3D_CAMERA_HMD (self->camera);
    Gst3DHmd *hmd = hmd_cam->hmd;
    gst_3d_renderer_stereo_init_from_hmd (self->renderer, hmd);
    gst_3d_renderer_init_stereo (self->renderer, self->camera);
  }
}
Ejemplo n.º 4
0
static gboolean
gst_vr_compositor_init_scene (GstGLFilter * filter)
{
  GstVRCompositor *self = GST_VR_COMPOSITOR (filter);
  GstGLContext *context = GST_GL_BASE_FILTER (filter)->context;

#ifdef HAVE_OPENHMD
  Gst3DHmd *hmd = GST_3D_CAMERA_HMD (self->scene->camera)->hmd;
  if (!hmd->device)
    return FALSE;
#endif

  gst_3d_scene_init_gl (self->scene, context);

  return TRUE;
}
Ejemplo n.º 5
0
void
gst_3d_renderer_init_stereo (Gst3DRenderer * self, Gst3DCamera * cam)
{
  GstGLFuncs *gl = self->context->gl_vtable;
  Gst3DCameraHmd *hmd_cam = GST_3D_CAMERA_HMD (cam);
  Gst3DHmd *hmd = hmd_cam->hmd;
  float aspect_ratio = hmd->left_aspect;
  self->render_plane = gst_3d_mesh_new_plane (self->context, aspect_ratio);
  self->shader = gst_3d_shader_new_vert_frag (self->context, "mvp_uv.vert",
      "texture_uv.frag");
  gst_3d_mesh_bind_shader (self->render_plane, self->shader);

  _create_fbo (gl, &self->left_fbo, &self->left_color_tex,
      self->eye_width, self->eye_height);
  _create_fbo (gl, &self->right_fbo, &self->right_color_tex,
      self->eye_width, self->eye_height);

  gst_3d_shader_bind (self->shader);
  gst_gl_shader_set_uniform_1i (self->shader->shader, "texture", 0);
}