gpointer
gst_gl_display_thread_create_context (GstGLDisplay * display)
{
- GLenum err = 0;
+ GLenum err = GLEW_OK;
gst_gl_display_lock (display);
display->gl_window = gst_gl_window_new (display->external_gl_context);
glewGetErrorString (err));
#endif
} else {
+#ifndef OPENGL_ES2
//OpenGL > 1.2.0 and Glew > 1.4.0
- GString *opengl_version =
- g_string_truncate (g_string_new ((gchar *) glGetString (GL_VERSION)),
- 3);
+ GString *opengl_version = NULL;
gint opengl_version_major = 0;
gint opengl_version_minor = 0;
+#endif
- sscanf (opengl_version->str, "%d.%d", &opengl_version_major,
- &opengl_version_minor);
+ GLenum gl_err = GL_NO_ERROR;
+ if (glGetString (GL_VERSION))
+ GST_INFO ("GL_VERSION: %s", glGetString (GL_VERSION));
- GST_INFO ("GL_VERSION: %s", glGetString (GL_VERSION));
#ifndef OPENGL_ES2
GST_INFO ("GLEW_VERSION: %s", glewGetString (GLEW_VERSION));
#endif
else
GST_INFO ("Your driver does not support GLSL (OpenGL Shading Language)");
- GST_INFO ("GL_VENDOR: %s", glGetString (GL_VENDOR));
- GST_INFO ("GL_RENDERER: %s", glGetString (GL_RENDERER));
+ if (glGetString (GL_VENDOR))
+ GST_INFO ("GL_VENDOR: %s", glGetString (GL_VENDOR));
- g_string_free (opengl_version, TRUE);
+ if (glGetString (GL_RENDERER))
+ GST_INFO ("GL_RENDERER: %s", glGetString (GL_RENDERER));
+
+ gl_err = glGetError ();
+ if (gl_err != GL_NO_ERROR) {
+ gst_gl_display_set_error (display, "glGetString error: 0x%x", gl_err);
+ }
#ifndef OPENGL_ES2
- if ((opengl_version_major < 1) ||
- (GLEW_VERSION_MAJOR < 1) ||
- (opengl_version_major < 2 && opengl_version_major >= 1
- && opengl_version_minor < 2) || (GLEW_VERSION_MAJOR < 2
- && GLEW_VERSION_MAJOR >= 1 && GLEW_VERSION_MINOR < 4)) {
- //turn off the pipeline, the old drivers are not yet supported
- gst_gl_display_set_error (display,
- "Required OpenGL >= 1.2.0 and Glew >= 1.4.0");
+ if (glGetString (GL_VERSION) && gl_err == GL_NO_ERROR) {
+
+ opengl_version =
+ g_string_truncate (g_string_new ((gchar *) glGetString (GL_VERSION)),
+ 3);
+
+ sscanf (opengl_version->str, "%d.%d", &opengl_version_major,
+ &opengl_version_minor);
+
+ g_string_free (opengl_version, TRUE);
+
+ if ((opengl_version_major < 1) ||
+ (GLEW_VERSION_MAJOR < 1) ||
+ (opengl_version_major < 2 && opengl_version_major >= 1
+ && opengl_version_minor < 2) || (GLEW_VERSION_MAJOR < 2
+ && GLEW_VERSION_MAJOR >= 1 && GLEW_VERSION_MINOR < 4)) {
+ //turn off the pipeline, the old drivers are not yet supported
+ gst_gl_display_set_error (display,
+ "Required OpenGL >= 1.2.0 and Glew >= 1.4.0");
+ }
}
#else
if (!GL_ES_VERSION_2_0) {
}
#ifndef OPENGL_ES2
- glDisable (GL_TEXTURE_RECTANGLE_ARB);
-#else
glReadBuffer (GL_NONE);
#endif
+
+ glDisable (GL_TEXTURE_RECTANGLE_ARB);
}
{
GstGLShader *shader;
GstGLShaderPrivate *priv;
-/* GLint status = GL_FALSE; */
+ /* GLint status = GL_FALSE; */
+ /* GLenum err = 0; */
shader = GST_GL_SHADER (object);
priv = shader->priv;
/* delete program */
if (priv->program_handle) {
+ g_debug ("finalizing program shader %ud", priv->program_handle);
+
glDeleteObjectARB (priv->program_handle);
- glGetError ();
+ /* err = glGetError (); */
/* g_debug ("error: 0x%x", err); */
/* glGetObjectParameterivARB(priv->program_handle, GL_OBJECT_DELETE_STATUS_ARB, &status); */
/* g_debug ("program deletion status:%s", status == GL_TRUE ? "true" : "false" ); */
g_log_set_handler ("GstGLShader", G_LOG_LEVEL_DEBUG,
gst_gl_shader_log_handler, NULL);
+
+ g_debug ("shader initialized %ud", priv->program_handle);
}
GstGLShader *
return;
if (priv->vertex_handle) { // not needed but nvidia doesn't care to respect the spec
+ g_debug ("finalizing vertex shader %ud", priv->vertex_handle);
+
glDeleteObjectARB (priv->vertex_handle);
/* err = glGetError (); */
}
if (priv->fragment_handle) {
+ g_debug ("finalizing fragment shader %ud", priv->fragment_handle);
+
glDeleteObjectARB (priv->fragment_handle);
/* err = glGetError (); */
gboolean _gst_gl_window_debug = FALSE;
-void gst_gl_window_init_platform ()
+void
+gst_gl_window_init_platform ()
{
}
(gulong) priv->gl_display, (gulong) priv->gl_surface,
(gulong) priv->gl_display, EGLErrorString ());
+ g_debug ("about to create gl context\n");
+
priv->gl_context =
eglCreateContext (priv->gl_display, config,
(EGLContext) (guint) external_gl_context, context_attrib);
+
if (priv->gl_context != EGL_NO_CONTEXT)
g_debug ("gl context created: %ld\n", (gulong) priv->gl_context);
else
if (priv->running) {
#if SIZEOF_VOID_P == 8
GstGLWindowCB custom_cb =
- (GstGLWindowCB) (((event.xclient.data.
- l[0] & 0xffffffff) << 32) | (event.xclient.data.
- l[1] & 0xffffffff));
+ (GstGLWindowCB) (((event.xclient.
+ data.l[0] & 0xffffffff) << 32) | (event.xclient.
+ data.l[1] & 0xffffffff));
gpointer custom_data =
- (gpointer) (((event.xclient.data.
- l[2] & 0xffffffff) << 32) | (event.xclient.data.
- l[3] & 0xffffffff));
+ (gpointer) (((event.xclient.
+ data.l[2] & 0xffffffff) << 32) | (event.xclient.
+ data.l[3] & 0xffffffff));
#else
GstGLWindowCB custom_cb = (GstGLWindowCB) event.xclient.data.l[0];
gpointer custom_data = (gpointer) event.xclient.data.l[1];
&& event.xclient.message_type == wm_quit_loop) {
#if SIZEOF_VOID_P == 8
GstGLWindowCB destroy_cb =
- (GstGLWindowCB) (((event.xclient.data.
- l[0] & 0xffffffff) << 32) | (event.xclient.data.
- l[1] & 0xffffffff));
+ (GstGLWindowCB) (((event.xclient.
+ data.l[0] & 0xffffffff) << 32) | (event.xclient.
+ data.l[1] & 0xffffffff));
gpointer destroy_data =
- (gpointer) (((event.xclient.data.
- l[2] & 0xffffffff) << 32) | (event.xclient.data.
- l[3] & 0xffffffff));
+ (gpointer) (((event.xclient.
+ data.l[2] & 0xffffffff) << 32) | (event.xclient.
+ data.l[3] & 0xffffffff));
#else
GstGLWindowCB destroy_cb = (GstGLWindowCB) event.xclient.data.l[0];
gpointer destroy_data = (gpointer) event.xclient.data.l[1];
while (XCheckTypedEvent (priv->device, ClientMessage, &pending_event)) {
#if SIZEOF_VOID_P == 8
GstGLWindowCB custom_cb =
- (GstGLWindowCB) (((event.xclient.data.
- l[0] & 0xffffffff) << 32) | (event.xclient.data.
- l[1] & 0xffffffff));
+ (GstGLWindowCB) (((event.xclient.
+ data.l[0] & 0xffffffff) << 32) | (event.xclient.
+ data.l[1] & 0xffffffff));
gpointer custom_data =
- (gpointer) (((event.xclient.data.
- l[2] & 0xffffffff) << 32) | (event.xclient.data.
- l[3] & 0xffffffff));
+ (gpointer) (((event.xclient.
+ data.l[2] & 0xffffffff) << 32) | (event.xclient.
+ data.l[3] & 0xffffffff));
#else
GstGLWindowCB custom_cb = (GstGLWindowCB) event.xclient.data.l[0];
gpointer custom_data = (gpointer) event.xclient.data.l[1];