mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-17 03:35:21 +00:00
gl/tests: don't use the default framebuffer
Create our own instead as the default framebuffer may require special fiddling (like having a visible window) to correctly display/be renderable. Fixes the remaining GL library tests on OS X
This commit is contained in:
parent
bb84f7357b
commit
1ddbd773f8
2 changed files with 61 additions and 11 deletions
|
@ -42,9 +42,9 @@ teardown (void)
|
||||||
gst_object_unref (display);
|
gst_object_unref (display);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstGLMemory *gl_tex;
|
static GstGLMemory *gl_tex, *gl_tex2;
|
||||||
static GLuint vbo, vbo_indices, vao;
|
static GLuint vbo, vbo_indices, vao;
|
||||||
static GstGLFramebuffer *fbo;
|
static GstGLFramebuffer *fbo, *fbo2;
|
||||||
static GstGLShader *shader;
|
static GstGLShader *shader;
|
||||||
static GLint shader_attr_position_loc;
|
static GLint shader_attr_position_loc;
|
||||||
static GLint shader_attr_texture_loc;
|
static GLint shader_attr_texture_loc;
|
||||||
|
@ -82,6 +82,9 @@ init (gpointer data)
|
||||||
gl_tex =
|
gl_tex =
|
||||||
(GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *)
|
(GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *)
|
||||||
allocator, (GstGLAllocationParams *) params);
|
allocator, (GstGLAllocationParams *) params);
|
||||||
|
gl_tex2 =
|
||||||
|
(GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *)
|
||||||
|
allocator, (GstGLAllocationParams *) params);
|
||||||
gst_object_unref (allocator);
|
gst_object_unref (allocator);
|
||||||
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
|
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
|
||||||
fail_if (gl_tex == NULL, "failed to create texture");
|
fail_if (gl_tex == NULL, "failed to create texture");
|
||||||
|
@ -106,6 +109,7 @@ deinit (gpointer data)
|
||||||
gst_object_unref (fbo);
|
gst_object_unref (fbo);
|
||||||
gst_object_unref (shader);
|
gst_object_unref (shader);
|
||||||
gst_memory_unref (GST_MEMORY_CAST (gl_tex));
|
gst_memory_unref (GST_MEMORY_CAST (gl_tex));
|
||||||
|
gst_memory_unref (GST_MEMORY_CAST (gl_tex2));
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -194,6 +198,10 @@ init_blit (gpointer data)
|
||||||
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
|
gl->BindBuffer (GL_ARRAY_BUFFER, 0);
|
||||||
gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
|
gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
}
|
}
|
||||||
|
/* has to be called in the thread that is going to use the framebuffer */
|
||||||
|
fbo2 = gst_gl_framebuffer_new_with_default_depth (context, 320, 240);
|
||||||
|
|
||||||
|
fail_if (fbo2 == NULL, "failed to create framebuffer object");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -211,13 +219,14 @@ deinit_blit (gpointer data)
|
||||||
if (vao)
|
if (vao)
|
||||||
gl->DeleteVertexArrays (1, &vao);
|
gl->DeleteVertexArrays (1, &vao);
|
||||||
vao = 0;
|
vao = 0;
|
||||||
|
gst_object_unref (fbo2);
|
||||||
|
fbo2 = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
draw_render (gpointer data)
|
blit_tex (gpointer data)
|
||||||
{
|
{
|
||||||
GstGLContext *context = data;
|
GstGLContext *context = data;
|
||||||
GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
|
|
||||||
const GstGLFuncs *gl = context->gl_vtable;
|
const GstGLFuncs *gl = context->gl_vtable;
|
||||||
|
|
||||||
gl->Clear (GL_COLOR_BUFFER_BIT);
|
gl->Clear (GL_COLOR_BUFFER_BIT);
|
||||||
|
@ -240,7 +249,14 @@ draw_render (gpointer data)
|
||||||
else
|
else
|
||||||
_unbind_buffer (context);
|
_unbind_buffer (context);
|
||||||
|
|
||||||
context_class->swap_buffers (context);
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
draw_render (gpointer data)
|
||||||
|
{
|
||||||
|
gst_gl_framebuffer_draw_to_texture (fbo2, gl_tex2,
|
||||||
|
(GstGLFramebufferFunc) blit_tex, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_START_TEST (test_share)
|
GST_START_TEST (test_share)
|
||||||
|
@ -379,7 +395,6 @@ GST_START_TEST (test_wrapped_context)
|
||||||
fail_if (error != NULL, "Error creating secondary context %s\n",
|
fail_if (error != NULL, "Error creating secondary context %s\n",
|
||||||
error ? error->message : "Unknown Error");
|
error ? error->message : "Unknown Error");
|
||||||
|
|
||||||
/* make the window visible */
|
|
||||||
gst_gl_window_set_preferred_size (window, 320, 240);
|
gst_gl_window_set_preferred_size (window, 320, 240);
|
||||||
gst_gl_window_draw (window);
|
gst_gl_window_draw (window);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ static GstGLShader *shader;
|
||||||
static GLint shader_attr_position_loc;
|
static GLint shader_attr_position_loc;
|
||||||
static GLint shader_attr_texture_loc;
|
static GLint shader_attr_texture_loc;
|
||||||
static guint vbo, vbo_indices, vao;
|
static guint vbo, vbo_indices, vao;
|
||||||
|
static GstGLFramebuffer *fbo;
|
||||||
|
static GstGLMemory *fbo_tex;
|
||||||
|
|
||||||
static const GLfloat vertices[] = {
|
static const GLfloat vertices[] = {
|
||||||
1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
|
1.0f, 1.0f, 0.0f, 1.0f, 0.0f,
|
||||||
|
@ -153,6 +155,25 @@ init (gpointer data)
|
||||||
shader_attr_texture_loc =
|
shader_attr_texture_loc =
|
||||||
gst_gl_shader_get_attribute_location (shader, "a_texcoord");
|
gst_gl_shader_get_attribute_location (shader, "a_texcoord");
|
||||||
|
|
||||||
|
fbo = gst_gl_framebuffer_new_with_default_depth (context, WIDTH, HEIGHT);
|
||||||
|
|
||||||
|
{
|
||||||
|
GstGLMemoryAllocator *allocator;
|
||||||
|
GstGLVideoAllocationParams *params;
|
||||||
|
GstVideoInfo v_info;
|
||||||
|
|
||||||
|
allocator = gst_gl_memory_allocator_get_default (context);
|
||||||
|
gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, WIDTH, HEIGHT);
|
||||||
|
params =
|
||||||
|
gst_gl_video_allocation_params_new (context, NULL, &v_info, 0, NULL,
|
||||||
|
GST_GL_TEXTURE_TARGET_2D, FORMAT);
|
||||||
|
fbo_tex =
|
||||||
|
(GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *)
|
||||||
|
allocator, (GstGLAllocationParams *) params);
|
||||||
|
gst_object_unref (allocator);
|
||||||
|
gst_gl_allocation_params_free ((GstGLAllocationParams *) params);
|
||||||
|
}
|
||||||
|
|
||||||
if (!vbo) {
|
if (!vbo) {
|
||||||
if (gl->GenVertexArrays) {
|
if (gl->GenVertexArrays) {
|
||||||
gl->GenVertexArrays (1, &vao);
|
gl->GenVertexArrays (1, &vao);
|
||||||
|
@ -194,13 +215,20 @@ deinit (gpointer data)
|
||||||
if (vao)
|
if (vao)
|
||||||
gl->DeleteVertexArrays (1, &vao);
|
gl->DeleteVertexArrays (1, &vao);
|
||||||
vao = 0;
|
vao = 0;
|
||||||
|
|
||||||
|
if (fbo)
|
||||||
|
gst_object_unref (fbo);
|
||||||
|
fbo = NULL;
|
||||||
|
|
||||||
|
if (fbo_tex)
|
||||||
|
gst_memory_unref (GST_MEMORY_CAST (fbo_tex));
|
||||||
|
fbo_tex = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
draw_render (gpointer data)
|
blit_tex (gpointer data)
|
||||||
{
|
{
|
||||||
GstGLContext *context = data;
|
GstGLContext *context = data;
|
||||||
GstGLContextClass *context_class = GST_GL_CONTEXT_GET_CLASS (context);
|
|
||||||
const GstGLFuncs *gl = context->gl_vtable;
|
const GstGLFuncs *gl = context->gl_vtable;
|
||||||
|
|
||||||
gl->Clear (GL_COLOR_BUFFER_BIT);
|
gl->Clear (GL_COLOR_BUFFER_BIT);
|
||||||
|
@ -223,7 +251,14 @@ draw_render (gpointer data)
|
||||||
else
|
else
|
||||||
_unbind_buffer (context);
|
_unbind_buffer (context);
|
||||||
|
|
||||||
context_class->swap_buffers (context);
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
draw_render (gpointer data)
|
||||||
|
{
|
||||||
|
gst_gl_framebuffer_draw_to_texture (fbo, fbo_tex,
|
||||||
|
(GstGLFramebufferFunc) blit_tex, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_START_TEST (test_upload_data)
|
GST_START_TEST (test_upload_data)
|
||||||
|
|
Loading…
Reference in a new issue