1 /* GStreamer
2  * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #ifdef HAVE_CONFIG_H
21 #  include "config.h"
22 #endif
23 
24 #include <gst/check/gstcheck.h>
25 
26 #include <gst/gl/gl.h>
27 #include <gst/gl/gstglfuncs.h>
28 
29 #include <stdio.h>
30 
31 static GstGLDisplay *display;
32 static GstGLContext *context;
33 
34 static void
setup(void)35 setup (void)
36 {
37   GError *error = NULL;
38 
39   display = gst_gl_display_new ();
40   context = gst_gl_context_new (display);
41 
42   gst_gl_context_create (context, NULL, &error);
43 
44   fail_if (error != NULL, "Error creating context: %s\n",
45       error ? error->message : "Unknown Error");
46 }
47 
48 static void
teardown(void)49 teardown (void)
50 {
51   gst_object_unref (display);
52   gst_object_unref (context);
53 }
54 
GST_START_TEST(test_default_vertex)55 GST_START_TEST (test_default_vertex)
56 {
57   GstGLSLStage *stage;
58   GError *error = NULL;
59 
60   stage = gst_glsl_stage_new_default_vertex (context);
61   fail_unless (stage != NULL);
62   fail_unless (GL_VERTEX_SHADER == gst_glsl_stage_get_shader_type (stage));
63 
64   fail_unless (gst_glsl_stage_compile (stage, &error));
65 
66   gst_object_unref (stage);
67 }
68 
69 GST_END_TEST;
70 
71 static void
create_frag_shader(GstGLContext * context,GstGLSLStage ** stage)72 create_frag_shader (GstGLContext * context, GstGLSLStage ** stage)
73 {
74   *stage = gst_glsl_stage_new_default_fragment (context);
75 }
76 
GST_START_TEST(test_default_fragment)77 GST_START_TEST (test_default_fragment)
78 {
79   GstGLSLStage *stage;
80   GError *error = NULL;
81 
82   gst_gl_context_thread_add (context,
83       (GstGLContextThreadFunc) create_frag_shader, &stage);
84 
85   fail_unless (stage != NULL);
86   fail_unless (GL_FRAGMENT_SHADER == gst_glsl_stage_get_shader_type (stage));
87 
88   fail_unless (gst_glsl_stage_compile (stage, &error));
89 
90   gst_object_unref (stage);
91 }
92 
93 GST_END_TEST;
94 
95 static Suite *
gst_gl_upload_suite(void)96 gst_gl_upload_suite (void)
97 {
98   Suite *s = suite_create ("GstGLSL");
99   TCase *tc_chain = tcase_create ("glsl");
100 
101   suite_add_tcase (s, tc_chain);
102   tcase_add_checked_fixture (tc_chain, setup, teardown);
103   tcase_add_test (tc_chain, test_default_vertex);
104   tcase_add_test (tc_chain, test_default_fragment);
105 
106   return s;
107 }
108 
109 GST_CHECK_MAIN (gst_gl_upload);
110