# define MODULE_VARNAME "gles2"
set_shortname (N_("OpenGL ES2"))
set_description (N_("OpenGL for Embedded Systems 2 video output"))
- set_capability ("vout display", /*165*/0)
+ set_capability ("vout display", /*265*/0)
set_callbacks (Open, Close)
add_shortcut ("opengles2", "gles2")
add_module ("gles2", "opengl es2", NULL,
# define MODULE_VARNAME "gles"
set_shortname (N_("OpenGL ES"))
set_description (N_("OpenGL for Embedded Systems video output"))
- set_capability ("vout display", /*160*/0)
+ set_capability ("vout display", /*260*/0)
set_callbacks (Open, Close)
add_shortcut ("opengles", "gles")
add_module ("gles", "opengl es", NULL,
set_description (N_("OpenGL video output (experimental)"))
set_category (CAT_VIDEO)
set_subcategory (SUBCAT_VIDEO_VOUT)
- set_capability ("vout display", /*170*/0)
+ set_capability ("vout display", /*270*/0)
set_callbacks (Open, Close)
add_shortcut ("opengl", "gl")
add_module ("gl", "opengl", NULL,
struct vout_display_sys_t
{
vout_display_opengl_t *vgl;
-
- vout_window_t *window;
vlc_gl_t *gl;
picture_pool_t *pool;
};
static void PictureDisplay (vout_display_t *, picture_t *, subpicture_t *);
static int Control (vout_display_t *, int, va_list);
-static vout_window_t *MakeWindow (vout_display_t *vd)
-{
- vout_window_cfg_t wnd_cfg;
-
- memset (&wnd_cfg, 0, sizeof (wnd_cfg));
-
- /* Please keep this in sync with egl.c */
- /* <EGL/eglplatform.h> defines the list and order of platforms */
-#if defined(_WIN32) || defined(__VC32__) \
- && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)
- wnd_cfg.type = VOUT_WINDOW_TYPE_HWND;
-#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */
-# warning Symbian not supported.
-#elif defined(WL_EGL_PLATFORM)
-# error Wayland not supported.
-#elif defined(__GBM__)
-# error Glamor not supported.
-#elif defined(ANDROID)
-# error Android not supported.
-#elif defined(__unix__) /* X11 */
- wnd_cfg.type = VOUT_WINDOW_TYPE_XID;
-#else
-# error Platform not recognized.
-#endif
- wnd_cfg.x = var_InheritInteger (vd, "video-x");
- wnd_cfg.y = var_InheritInteger (vd, "video-y");
- wnd_cfg.width = vd->cfg->display.width;
- wnd_cfg.height = vd->cfg->display.height;
-
- vout_window_t *wnd = vout_display_NewWindow (vd, &wnd_cfg);
- if (wnd == NULL)
- msg_Err (vd, "parent window not available");
- return wnd;
-}
-
/**
* Allocates a surface and an OpenGL context for video output.
*/
sys->gl = NULL;
sys->pool = NULL;
- sys->window = MakeWindow (vd);
- if (sys->window == NULL)
+ vout_window_t *surface = vout_display_NewWindow (vd, VOUT_WINDOW_TYPE_INVALID);
+ if (surface == NULL)
+ {
+ msg_Err (vd, "parent window not available");
goto error;
+ }
- sys->gl = vlc_gl_Create (sys->window, API, "$" MODULE_VARNAME);
+ sys->gl = vlc_gl_Create (surface, API, "$" MODULE_VARNAME);
if (sys->gl == NULL)
goto error;
- if (vlc_gl_MakeCurrent (sys->gl))
- goto error;
+ vlc_gl_Resize (sys->gl, vd->cfg->display.width, vd->cfg->display.height);
/* Initialize video display */
const vlc_fourcc_t *spu_chromas;
+
+ if (vlc_gl_MakeCurrent (sys->gl))
+ goto error;
+
sys->vgl = vout_display_opengl_New (&vd->fmt, &spu_chromas, sys->gl);
- if (!sys->vgl)
+ vlc_gl_ReleaseCurrent (sys->gl);
+
+ if (sys->vgl == NULL)
goto error;
vd->sys = sys;
error:
if (sys->gl != NULL)
vlc_gl_Destroy (sys->gl);
- if (sys->window != NULL)
- vout_display_DeleteWindow (vd, sys->window);
+ if (surface != NULL)
+ vout_display_DeleteWindow (vd, surface);
free (sys);
return VLC_EGENERIC;
}
{
vout_display_t *vd = (vout_display_t *)obj;
vout_display_sys_t *sys = vd->sys;
+ vlc_gl_t *gl = sys->gl;
+ vout_window_t *surface = gl->surface;
+ vlc_gl_MakeCurrent (gl);
vout_display_opengl_Delete (sys->vgl);
- vlc_gl_Destroy (sys->gl);
- vout_display_DeleteWindow (vd, sys->window);
+ vlc_gl_ReleaseCurrent (gl);
+
+ vlc_gl_Destroy (gl);
+ vout_display_DeleteWindow (vd, surface);
free (sys);
}
vout_display_sys_t *sys = vd->sys;
if (!sys->pool)
+ {
+ vlc_gl_MakeCurrent (sys->gl);
sys->pool = vout_display_opengl_GetPool (sys->vgl, count);
+ vlc_gl_ReleaseCurrent (sys->gl);
+ }
return sys->pool;
}
{
vout_display_sys_t *sys = vd->sys;
+ vlc_gl_MakeCurrent (sys->gl);
vout_display_opengl_Prepare (sys->vgl, pic, subpicture);
+ vlc_gl_ReleaseCurrent (sys->gl);
}
static void PictureDisplay (vout_display_t *vd, picture_t *pic, subpicture_t *subpicture)
{
vout_display_sys_t *sys = vd->sys;
+ vlc_gl_MakeCurrent (sys->gl);
vout_display_opengl_Display (sys->vgl, &vd->source);
+ vlc_gl_ReleaseCurrent (sys->gl);
+
picture_Release (pic);
- (void)subpicture;
+ (void) subpicture;
}
static int Control (vout_display_t *vd, int query, va_list ap)
case VOUT_DISPLAY_RESET_PICTURES: // not needed
assert(0);
#endif
- case VOUT_DISPLAY_CHANGE_FULLSCREEN:
- {
- const vout_display_cfg_t *cfg =
- va_arg (ap, const vout_display_cfg_t *);
-
- return vout_window_SetFullScreen (sys->window, cfg->is_fullscreen);
- }
-
- case VOUT_DISPLAY_CHANGE_WINDOW_STATE:
- {
- unsigned state = va_arg (ap, unsigned);
-
- return vout_window_SetState (sys->window, state);
- }
case VOUT_DISPLAY_CHANGE_DISPLAY_SIZE:
case VOUT_DISPLAY_CHANGE_DISPLAY_FILLED:
case VOUT_DISPLAY_CHANGE_ZOOM:
{
- const vout_display_cfg_t *cfg = va_arg (ap, const vout_display_cfg_t *);
+ const vout_display_cfg_t *c = va_arg (ap, const vout_display_cfg_t *);
const video_format_t *src = &vd->source;
-
- if (query == VOUT_DISPLAY_CHANGE_DISPLAY_SIZE)
- {
- bool force = false;
-
- force = va_arg (ap, int);
- if (force
- && (cfg->display.width != vd->cfg->display.width
- || cfg->display.height != vd->cfg->display.height)
- && vout_window_SetSize (sys->window,
- cfg->display.width, cfg->display.height))
- return VLC_EGENERIC;
- }
-
vout_display_place_t place;
- vout_display_PlacePicture (&place, src, cfg, false);
- glViewport (0, 0, place.width, place.height);
+ vout_display_PlacePicture (&place, src, c, false);
+ vlc_gl_Resize (sys->gl, place.width, place.height);
+ vlc_gl_MakeCurrent (sys->gl);
+ glViewport (place.x, place.y, place.width, place.height);
+ vlc_gl_ReleaseCurrent (sys->gl);
return VLC_SUCCESS;
}
vout_display_place_t place;
vout_display_PlacePicture (&place, src, cfg, false);
- glViewport (0, 0, place.width, place.height);
+ vlc_gl_MakeCurrent (sys->gl);
+ glViewport (place.x, place.y, place.width, place.height);
+ vlc_gl_ReleaseCurrent (sys->gl);
return VLC_SUCCESS;
}
-
- case VOUT_DISPLAY_GET_OPENGL:
- {
- vlc_gl_t **pgl = va_arg (ap, vlc_gl_t **);
-
- *pgl = sys->gl;
- return VLC_SUCCESS;
- }
-
default:
msg_Err (vd, "Unknown request %d", query);
}