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); }
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; }
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); } }
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; }
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); }